Files
mcp-server-demo/docs/erp/数据表与种子数据说明.md

240 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MCP for ERP — 数据表结构与种子数据说明文档
> 数据库:PostgreSQL 15+,库 `smart_quotation_auto`(与 CRM 服务共库不同表)
> 建表/种子脚本:`sql/init.sql`(v3,幂等可重跑);执行入口:`cd src && python3 seed.py`
> 版本:v1.0(2026-08-09)
---
## 1 概览
| # | 表名 | 用途 | 主键 | 种子行数 |
|---|------|------|------|----------|
| 1 | `material_master` | 物料主数据(体积/密度/吨位/后处理) | material_code | 16 |
| 2 | `material_grade_mapping` | 五标准体系牌号对照 | id(SERIAL) | 13 |
| 3 | `die_casting_params` | 压铸参数(吨位→固化节拍/费率/模穴) | tonnage | 9 |
| 4 | `machining_cycle` | 机加工固化工装节拍 | id(SERIAL) | 26 |
| 5 | `post_process_rate` | 后处理费率(¥/kg) | id(SERIAL) | 10 |
| 6 | `material_price_history` | 月度材料价格留痕 | id(SERIAL) | 260(13 牌号×20 月) |
| 7 | `machining_rate` | 材质族机加工费率 | grade_group | 4 |
**表关系**:`material_master.material_grade` →(经 match_material_grade 模糊对照)→ `material_grade_mapping`(internal_code/grade_group)→ `material_price_history`(按 internal_code 取最新月价)、`machining_rate`(按 grade_group 取费率);`material_master.die_casting_ton` → `die_casting_params.tonnage`;机加工工时查 `machining_cycle`(operation_type+spec);后处理查 `post_process_rate`(process_type = material_master.surface_treatment)。
---
## 2 表结构详解
### 2.1 material_master — 物料主数据
| 列 | 类型 | 约束/默认 | 说明 |
|----|------|-----------|------|
| `material_code` | VARCHAR(50) | PRIMARY KEY | 物料编码,如 `VHB-AT-001` |
| `part_name` | VARCHAR(200) | NOT NULL | 零件名称 |
| `part_category` | VARCHAR(50) | NOT NULL | 零件类别(种子全为「阀体外壳」) |
| `material_grade` | VARCHAR(50) | NOT NULL | 客户材质牌号(对照表输入) |
| `density` | DECIMAL(6,3) | NOT NULL DEFAULT 2.700 | 密度 g/cm³ |
| `volume_cc` | DECIMAL(10,2) | NOT NULL | 零件体积 cm³(**算铝水重量的依据**) |
| `net_weight_kg` | DECIMAL(8,3) | NOT NULL | 净重 kg(**算后处理成本的依据**) |
| `die_casting_ton` | INTEGER | NOT NULL | 压铸机吨位(关联 die_casting_params) |
| `surface_treatment` | VARCHAR(50) | — | 表面处理(关联 post_process_rate) |
| `unit` | VARCHAR(10) | DEFAULT '件' | 计量单位 |
| `created_at` | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 建档时间 |
### 2.2 material_grade_mapping — 材质牌号对照表
| 列 | 类型 | 约束/默认 | 说明 |
|----|------|-----------|------|
| `id` | SERIAL | PRIMARY KEY | 自增主键 |
| `grade_group` | VARCHAR(50) | NOT NULL | 材质族:铝合金/铸铝/铸铁/球墨铸铁(决定机加工费率) |
| `gb_code` | VARCHAR(80) | — | GB 牌号 |
| `astm_code` | VARCHAR(80) | — | ASTM 牌号 |
| `jis_code` | VARCHAR(80) | — | JIS 牌号 |
| `en_code` | VARCHAR(80) | — | EN 牌号 |
| `iso_code` | VARCHAR(80) | — | ISO 牌号 |
| `internal_code` | VARCHAR(50) | NOT NULL,UNIQUE(uq_grade_mapping) | 内部等效牌号 |
| `density` | DECIMAL(6,3) | NOT NULL | 密度 g/cm³ |
| `price_per_kg` | DECIMAL(10,2) | NOT NULL | 铝锭/材料参考价 ¥/kg(兜底价) |
> 对照匹配对六列码值做大小写不敏感 LIKE 模糊匹配;带热处理后缀(如 A356-T6)自动剥后缀重试。
### 2.3 die_casting_params — 压铸参数表
| 列 | 类型 | 约束/默认 | 说明 |
|----|------|-----------|------|
| `tonnage` | INTEGER | PRIMARY KEY | 压铸机吨位 |
| `shot_weight_kg` | DECIMAL(8,3) | NOT NULL | 射出重量 kg(参考值) |
| `cycle_time_sec` | DECIMAL(8,2) | NOT NULL | 模次节拍 秒/模(**吨位固化**) |
| `machine_rate` | DECIMAL(10,2) | NOT NULL | 机台费率 ¥/小时 |
| `mold_cavities` | INTEGER | DEFAULT 1 | 模穴数(压铸成本按穴分摊) |
### 2.4 machining_cycle — 机加工节拍表(固化工装节拍)
| 列 | 类型 | 约束/默认 | 说明 |
|----|------|-----------|------|
| `id` | SERIAL | PRIMARY KEY | 自增主键 |
| `operation_type` | VARCHAR(30) | NOT NULL | drill 钻孔 / tap 攻丝 / ream 铰孔 / mill 铣面 |
| `spec` | VARCHAR(50) | NOT NULL | 规格:Φ6、M6×1.0、Φ8H7、face;UNIQUE(operation_type, spec) |
| `cycle_time_sec` | DECIMAL(8,2) | NOT NULL | 单件固化节拍(秒) |
| `tool_rate` | DECIMAL(8,4) | DEFAULT 0 | 单件刀具成本 ¥ |
| `notes` | VARCHAR(200) | — | 备注(通孔/盲孔等) |
### 2.5 post_process_rate — 后处理费率表
| 列 | 类型 | 约束/默认 | 说明 |
|----|------|-----------|------|
| `id` | SERIAL | PRIMARY KEY | 自增主键 |
| `process_type` | VARCHAR(50) | NOT NULL,UNIQUE(uq_post_process) | 工艺名(与物料 surface_treatment 对应) |
| `unit` | VARCHAR(10) | DEFAULT 'kg' | 计价单位 |
| `rate` | DECIMAL(10,2) | NOT NULL | 费率 ¥/kg |
| `currency` | VARCHAR(10) | DEFAULT 'CNY' | 币种 |
### 2.6 material_price_history — 材料价格历史表
| 列 | 类型 | 约束/默认 | 说明 |
|----|------|-----------|------|
| `id` | SERIAL | PRIMARY KEY | 自增主键 |
| `internal_code` | VARCHAR(50) | NOT NULL | 内部牌号;UNIQUE(internal_code, price_date) |
| `price_date` | DATE | NOT NULL | 价格月份(每月 1 日) |
| `price_per_kg` | DECIMAL(10,2) | NOT NULL | 当月参考价 ¥/kg |
| `source` | VARCHAR(100) | DEFAULT '市场参考价' | 数据来源留痕 |
> 核价取法:`ORDER BY price_date DESC LIMIT 1`(最新月),并在返回中带 `price_basis_month` 留痕。
### 2.7 machining_rate — 机加工费率表
| 列 | 类型 | 约束/默认 | 说明 |
|----|------|-----------|------|
| `grade_group` | VARCHAR(50) | PRIMARY KEY | 材质族 |
| `rate_per_hour` | DECIMAL(10,2) | NOT NULL | 费率 ¥/小时 |
| `notes` | VARCHAR(200) | — | 备注 |
---
## 3 种子数据详解
### 3.1 material_master — 16 种阀体外壳
覆盖设计:铝合金 12 / 灰铸铁 2(HT250、HT300)/ 球墨铸铁 1(QT500-7)/ 铸铝 1(ZL101);吨位 160~1000T 全谱系;体积 96.3~1037 cm³。
| 物料编码 | 零件名称 | 牌号 | 密度 | 体积cm³ | 净重kg | 吨位 | 后处理 |
|----------|----------|------|------|---------|--------|------|--------|
| VHB-AT-001 | 变速箱阀体外壳 | ADC12 | 2.700 | 444.44 | 1.200 | 400 | 阳极氧化 |
| VHB-BK-002 | 制动阀体壳 | HT250 | 7.200 | 388.89 | 2.800 | 630 | 电泳涂装 |
| VHB-SP-003 | 转向器阀体壳 | A356-T6 | 2.650 | 296.30 | 0.785 | 280 | 钝化 |
| VHB-EG-004 | 发动机油路阀体壳 | EN AC-4600 | 2.700 | 555.56 | 1.500 | 400 | 阳极氧化 |
| VHB-CL-005 | 离合器控制阀体壳 | ADC10 | 2.700 | 480.00 | 1.300 | 400 | 阳极氧化 |
| VHB-TR-006 | 变速箱液压控制阀体 | AlSi9Cu3 | 2.700 | 620.00 | 1.670 | 630 | 电泳涂装 |
| VHB-EB-007 | 电子制动阀体壳 | AlSi10MnMg | 2.650 | 350.00 | 0.930 | 400 | 钝化 |
| VHB-QT-008 | 悬架阻尼阀体壳 | QT500-7 | 7.100 | 520.00 | 3.690 | 630 | 喷涂 |
| VHB-MN-009 | 微型泵阀体壳 | ADC12 | 2.700 | 96.30 | 0.260 | 160 | 钝化 |
| VHB-LG-010 | 大型主阀体壳 | ADC12 | 2.700 | 1037.00 | 2.800 | 800 | 电泳涂装 |
| VHB-TC-011 | 涡轮增压控制阀体壳 | ADC12 | 2.700 | 320.00 | 0.860 | 350 | 钝化 |
| VHB-EG-012 | EGR阀体壳 | ADC10 | 2.700 | 265.00 | 0.720 | 280 | 钝化 |
| VHB-WP-013 | 水泵阀体壳 | AlSi12 | 2.650 | 380.00 | 1.010 | 400 | 阳极氧化 |
| VHB-TM-014 | 热管理阀体壳(新能源) | AlSi10MnMg | 2.650 | 505.00 | 1.340 | 500 | 钝化 |
| VHB-OP-015 | 机油泵阀体壳 | ZL101 | 2.650 | 210.00 | 0.560 | 200 | 钝化 |
| VHB-HD-016 | 重卡制动阀体壳 | HT300 | 7.250 | 850.00 | 6.160 | 1000 | 达克罗 |
### 3.2 material_grade_mapping — 13 条牌号对照
覆盖设计:铝合金 7 / 铸铝 1 / 铸铁 3 / 球墨铸铁 2;每条六码齐全(GB/ASTM/JIS/EN/ISO/内部码)。
| 材质族 | GB | ASTM | JIS | EN | ISO | 内部码 | 密度 | 参考价¥/kg |
|--------|----|------|-----|----|----|--------|------|-----------|
| 铝合金 | ZAlSi10Cu(ADC12) | A380 | ADC12 | EN AC-4600 | AlSi9Cu3 | AL-ADC12 | 2.700 | 18.50 |
| 铝合金 | ZAlSi7Mg(A356) | A356 | AC4C-T6 | EN AC-4210 | AlSi7Mg | AL-A356 | 2.650 | 20.00 |
| 铝合金 | ZAlSi9Cu(AlSi9Cu) | B443 | AC4B | EN AC-4600 | AlSi9Cu | AL-4600 | 2.700 | 18.00 |
| 铸铝 | ZL101 | 356.0 | AC4C | EN AC-4200 | AlSi7 | AL-ZL101 | 2.650 | 19.00 |
| 铸铁 | HT250 | G2500 | FC250 | EN-GJL-250 | GJL-250 | IR-HT250 | 7.200 | 6.50 |
| 球墨铸铁 | QT500-7 | D5007 | FCD500 | EN-GJS-500 | GJS-500 | IR-QT500 | 7.100 | 7.20 |
| 铝合金 | ZAlSi8Cu(ADC10) | A384 | ADC10 | EN AC-4650 | AlSi8Cu | AL-ADC10 | 2.700 | 18.20 |
| 铝合金 | ZAlSi10MnMg | — | — | AlSi10MnMg | AlSi10MnMg | AL-S10MM | 2.650 | 22.00 |
| 铝合金 | ZAlSi12 | 413.0 | AC3A | EN AC-4420 | AlSi12 | AL-S12 | 2.650 | 17.80 |
| 铸铁 | HT200 | G3000 | FC200 | EN-GJL-200 | GJL-200 | IR-HT200 | 7.200 | 6.00 |
| 铸铁 | HT300 | G3500 | FC300 | EN-GJL-300 | GJL-300 | IR-HT300 | 7.250 | 6.80 |
| 球墨铸铁 | QT450-10 | D4510 | FCD450 | EN-GJS-450 | GJS-450 | IR-QT450 | 7.100 | 7.00 |
| 球墨铸铁 | QT600-3 | D6003 | FCD600 | EN-GJS-600 | GJS-600 | IR-QT600 | 7.100 | 7.50 |
> 脚本含修正语句:`IR-QT%` 组别归位「球墨铸铁」(历史数据曾误归「铸铁」)。
### 3.3 die_casting_params — 9 档吨位
| 吨位 | 射出重量kg | 节拍秒/模 | 机台费率¥/h | 模穴数 |
|------|-----------|-----------|-------------|--------|
| 160 | 0.50 | 15.00 | 120.00 | **2**(一模两腔) |
| 200 | 0.80 | 18.00 | 140.00 | **2** |
| 280 | 1.20 | 22.00 | 180.00 | 1 |
| 350 | 1.80 | 26.00 | 220.00 | 1 |
| 400 | 2.50 | 30.00 | 260.00 | 1 |
| 500 | 3.20 | 36.00 | 320.00 | 1 |
| 630 | 4.00 | 42.00 | 380.00 | 1 |
| 800 | 6.50 | 55.00 | 520.00 | 1 |
| 1000 | 8.50 | 65.00 | 650.00 | 1 |
> **故意不含 1250T**:用于回退测试(未命中吨位场景)。
### 3.4 machining_cycle — 26 条固化节拍
| 工序 | 规格谱系 | 条数 | 节拍范围(秒) | 刀具费范围(¥) |
|------|----------|------|--------------|----------------|
| drill 钻孔 | Φ3 / Φ4 / Φ5 / Φ6 / Φ8 / Φ10 / Φ12 / Φ14 / Φ16 / Φ20 / Φ24 | 11 | 2.00~12.00 | 0.10~0.60 |
| tap 攻丝 | M4×0.7 / M5×0.8 / M6×1.0 / M8×1.25 / M10×1.5 / M12×1.75 / M14×2.0 / M16×2.0 | 8 | 3.00~9.00 | 0.15~0.45 |
| ream 铰孔 | Φ6H7 / Φ8H7 / Φ10H7 / Φ12H7 / Φ16H7 / Φ20H7 | 6 | 5.00~12.00 | 0.45~1.10 |
| mill 铣面 | face(单面) | 1 | 12.00 | 0.80 |
> **故意不含 Φ25 钻孔 / M18 攻丝**:用于回退测试(未知规格静默跳过场景)。
### 3.5 post_process_rate — 10 种后处理
| 工艺 | 费率¥/kg | 工艺 | 费率¥/kg |
|------|----------|------|----------|
| 喷砂 | 1.50 | 粉末喷涂 | 3.00 |
| 钝化 | 2.00 | 磷化 | 1.80 |
| 阳极氧化 | 5.00 | 达克罗 | 4.00 |
| 电泳涂装 | 3.50 | 硬质阳极氧化 | 8.00 |
| 喷涂 | 2.50 | 化学镀镍 | 9.00 |
> **故意不含「镀铬」**:用于回退测试(未命中后处理场景,成本计 0)。
### 3.6 material_price_history — 260 行月度价格(2025-01 ~ 2026-08)
生成规则(脚本内 CTE 批量生成,非手工录入):
- 13 个内部牌号 × 20 个月 = 260 行,`source='市场参考价'`。
- 每月价格 = 对照表参考价 × 月份系数;铝系用 `al_factor`(0.92~1.02 波动),铁系(铸铁/球墨铸铁)用 `ir_factor`(0.95~1.01 波动)。
- **最新月(2026-08)系数 = 1.00**,即与对照表 `price_per_kg` 完全一致——保证核价结果与静态对照表口径可对账(如 AL-ADC12 当月价 18.50)。
### 3.7 machining_rate — 4 条材质族费率
| 材质族 | 费率¥/h | 备注 |
|--------|---------|------|
| 铝合金 | 60.00 | 常规机加工费率 |
| 铸铝 | 60.00 | 同铝合金 |
| 铸铁 | 75.00 | 刀具损耗高,费率上浮 |
| 球墨铸铁 | 80.00 | 强度高,费率最高 |
---
## 4 幂等性与重跑机制
`init.sql` 整体可重复执行,无副作用(NF-3):
1. **建表**:`CREATE TABLE IF NOT EXISTS`。
2. **历史去重**:对 SERIAL 表先按业务键删除重复行(保留最小 id)。
3. **补唯一约束**:`DO $$ ... ADD CONSTRAINT ... EXCEPTION WHEN duplicate_table` 幂等加约束(uq_machining_cycle / uq_grade_mapping / uq_post_process)。
4. **种子写入**:全部 `ON CONFLICT (...) DO NOTHING`。
5. **月度价格**:`UNIQUE(internal_code, price_date)` + `ON CONFLICT DO NOTHING`,重跑不翻倍。
---
## 5 数据维护约定
| 场景 | 操作 | 约束 |
|------|------|------|
| 月度铝价更新 | `material_price_history` 追加新月行 | 核价自动取最新月并留痕 `price_basis_month` |
| 新增机加工规格 | `machining_cycle` 增行 | 不改旧行(历史报价可复算) |
| 新增吨位 | `die_casting_params` 增行 | 同上 |
| 新增物料 | `material_master` 增行 | material_grade 须能命中对照表,否则走回退 |
> ERP 侧全部为只读基础数据:无 MCP 写工具,数据变更仅通过 SQL/脚本进行。