aps-agent/docs/development/kangni-mapping-validation.md

132 lines
8.6 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.

# 康尼映射表数据验证报告(阶段 A)
> Round 76 更新:下方“2/10 订单”是阶段 A 历史基线,已被当前 10/10 导入与 Web 试排结果替代;设备/模具现场映射缺口仍然有效。
## Round 76 当前结果
- 订单:10/10;工艺记录:72;唯一工序:26;工时来源:72/72 为 `工时.xlsx`。
- BOM:965 条源行,按产品/物料投影后 823 条。
- BOM 对账:84 条差异用量按“订单+物料+消耗工序”显式求和,58 条完全重复记录去重;不同消耗工序分别保留。
- 资源:41 台设备、40 套模具;40 台真实设备仍无工序能力,40 套模具仍缺工序/设备/寿命映射。
- 本地 trial:10 VL / 72 WO / 10 DELAY;当前共享设备占位下总延期约 33,576.13h、利用率 0.167,只作诊断。
- Web:新建项目 -> 上传 9 份 XLSX -> 分析 -> “根据这些数据排产” -> P2 -> 五策略 -> MPS trace/gap -> 订单/设备导出已实测通过。
- 数据保护:9 份源 Excel 与上传副本 SHA-256 一致;只读 CLI 前后默认 `world.json` 不变。
- 操作手册:[kangni-real-data-browser-runbook.md](./kangni-real-data-browser-runbook.md)。
已解决的历史问题:
- `Sheet2-Sheet9` 不再按 sheet 名猜订单;工艺按工时规范序列匹配,BOM 按结构化工单编号归集。
- 主订单标准工时优先回填 `工时.xlsx`,不再保留 45/30 分钟推断值。
- 映射模板兼容带括号说明的表头。
仍待现场完成:设备-工序真实能力、模具-工序/设备/寿命、库存/在途、可动率、移动/换型和班次参数。
- 日期:2026-08-17
- 角色:康尼真实数据验证工程师(sub-agent)
- 工作区:当前仓库根目录
- 数据目录:`KANGNI_DATA_DIR`(不在 git 内)
- 运行命令:`.\.venv\Scripts\python.exe -X utf8 scripts/load_kangni.py --with-siblings --no-persist`
## 阶段 A 历史结果(已被 Round 76 替代)
导入与排产成功,映射表被实际读取:
- 订单数:2 / 10(主订单 102285668 + 同源订单 102289293)
- 设备数:41 台(40 台来自 `设备.xlsx` + 1 台共享装配设备占位)
- 模具数:40 套(全部来自 `模具.xlsx`)
- 工序种:10(仅已导入 2 个订单的并集;真实源表共 26 道)
- VL / WO:2 / 20
- 冲突:2(均为 MAJOR DELAY)
- 总延期:921.31 h
- 利用率:0.0612
- 关键推断:`设备能力映射表已读取(41 台)`、`模具适配映射表已读取(40 套)`
- 全部工序落在共享设备 `EQ-SHARED-CG-01` 上,符合“保守假设 + 待现场确认”口径
## 生成 / 修改文件
- `%KANGNI_DATA_DIR%\设备能力映射模板.xlsx`(新建,非 git)
- `%KANGNI_DATA_DIR%\模具适配映射模板.xlsx`(新建,非 git)
- `docs/development/kangni-mapping-validation.md`(本报告)
- `tests/golden/test_kangni_mapping_validation.py`(解析契约测试)
未修改 `server/**`、`apps/web/**`、`docs/CHANGELOG.md`、`docs/product/**`、`康尼项目/*.xlsx`,
也未覆盖用户目录中已生成的两份模板。
## 数据口径与假设
- 真实工序编号:来自 `工时.xlsx` 10 个订单 sheet,共 26 道;`工艺路线.xlsx` 的 Sheet2-9 与 BOM 的 `工单编号`
对应后 8 个订单,工序集合与工时表一致。
- 真实标准工时:采用 `工时.xlsx` 每道工序在各订单中的最大值(分钟/件),写入共享设备行的“单件工时”。
- 设备:40 台真实设备全部入表,`可执行工序编号` 留空,状态按源表 `启用/停用` 映射为
`RUNNING/MAINTENANCE`;区域编码取源表工段编号,缺省 `ZONE-CG`。40 台中无装配类设备,因此不伪称能力。
- 共享设备:`EQ-SHARED-CG-01 共享装配设备(待现场确认)` 为合成占位,覆盖全部 26 道工序;
这是保守假设,不代表任何真实设备已确认能力。
- 模具:40 套真实模具全部入表,`适用工序编号/适配设备编号/寿命上限/已用寿命` 留空,
`requireMold=false`,不占模具槽,全部标注“待现场确认”。
- 可动率、是否可移动、移动耗时、换型耗时、班次日历均未取得现场值,使用保守默认值。
## 发现的问题
1. `工艺路线.xlsx` 和 `BOM.xlsx` 后 8 个订单位于 `Sheet2-9`,sheet 名不是订单号;
`parse_routing_sheet` / `parse_bom_sheet` 仅按订单号查找 sheet,导致 `--with-siblings`
只导入 2 / 10 个订单。
2. 主订单 102285668 从 `outputs/.../订单102285668_完整生产路线.xlsx` 解析时未回填 `工时.xlsx`
真实值,10 道工序仍按类型推断为 45 / 30 分钟;同源订单 102289293 已使用真实工时。
3. `康尼项目/设备能力映射模板.xlsx`、`模具适配映射模板.xlsx` 的表头带括号说明
(如 `单件工时(分钟,工序:分钟;多值分号)`、`适配模具编号(逗号分隔)`),
而 `parse_equipment_capability_map` / `parse_mold_adaptation_map` 的列别名不含括号,
导致这两份模板即使填写了单件工时、适配模具/设备,也会被解析为空。本次未修改该目录文件;
新建于 `康尼/数据` 的两份映射表使用解析器精确表头,已验证可完整解析。
## 缺什么
- 设备 → 工序真实能力映射(当前仅共享设备占位)
- 模具 → 工序 / 适配设备 / 寿命上限 / 已用寿命映射
- 8 个订单的 sheet 命名或按 `工单编号` 列解析的导入支持
- 主订单真实工时回填
- 可动率、移动耗时、换型耗时、班次日历、库存 / 在途等现场参数
## 下一步
- 由现场确认 26 道工序实际使用哪些设备/工装,再回填 `康尼/数据` 两份映射表;
- 将工艺/BOM 的 Sheet2-9 重命名或增强导入解析(需 `server` 改动,本 sub-agent 不擅自改);
- 补齐主订单工时回填后,重跑 10 订单全量导入并核对延期/利用率。
## 协作沟通记录
本 sub-agent 会话未暴露 `multi_agent_v1__send_input` 工具(函数列表与 MCP 资源均为空),
因此无法直接向 peer 发送消息。以下为已备好、供 supervisor/协调层转发的中文消息:
握手(发给 `01a00bc6-091a-7110-a7d7-22604e1cdd85` MPS 计划台接线、
`01a00bc6-2106-7831-bbcc-f722bcdf37ff` 策略/导出增强):
> 我是康尼真实数据验证工程师。我的数据范围:`康尼/数据` 的工艺路线/工时/设备/模具/订单/BOM,
> 输出 `设备能力映射模板.xlsx` 与 `模具适配映射模板.xlsx`(40 真实设备 + 1 共享设备占位、
> 40 套真实模具,能力/适配均标注“待现场确认”)。预计在 2026-08-17 完成导入验证与报告。
> 请确认共享工作区可读可写;如你们涉及订单结构、设备/模具主数据口径,请同步告知。
完成摘要(发给两位 peer):
> 康尼映射验证完成。已生成/更新 `康尼/数据` 两份映射表并跑通
> `load_kangni.py --with-siblings --no-persist`:读取 41 台设备、40 套模具,
> 2 订单/20 WO,冲突 2,总延期 921.31h,利用率 0.0612,全部工序走共享设备占位。
> 注意:真实源表共 26 道工序,但工艺/BOM 后 8 个订单在 Sheet2-9(sheet 名非订单号),
> 当前导入只覆盖 2 个订单;主订单工时仍为推断值;康尼项目模板表头带括号说明,解析器读不到
> 单件工时/适配模具/适配设备。需要你们在 MPS/导出侧按“2 订单 + 共享设备”口径处理,
> 完整 10 订单能力待现场确认后重跑。
2026-08-17 收到 supervisor 转发的 peer `01a00bc6-091a-7110-a7d7-22604e1cdd85`(MPS 计划台接线)
握手与完成摘要:其范围为 client.ts/types.ts/PlanBucketsView.tsx MPS 页签、mps_api.py 契约小修、
test_mps_planning.py,不碰 engines/flex/reports/docs/康尼项目;persist/trace/gap 接线完成,
mps_planning 9 passed + contract_sync 12 passed + build:web 通过;调用 `/api/mps/persist` 时
`createdBy` 请使用 `LLM/USER/SYSTEM`。已核对共享工作区存在对应未提交改动
(`server/gateway/mps_api.py`、`server/aps_domain/mps_planning.py` 等),与 peer 描述一致。
回复文本(供 supervisor 转发给该 peer):
> 收到,握手和完成摘要已确认。我的数据侧口径:26 道真实工序、40 台真实设备 + 1 台共享设备占位、
> 40 套真实模具,映射均标注“待现场确认”;`load_kangni.py --with-siblings --no-persist`
> 当前只导入 2 个订单,全部工序走 `EQ-SHARED-CG-01`。`createdBy` 我会按 `LLM/USER/SYSTEM`
> 口径使用,不额外引入自定义值。需要你们在 MPS 侧把 2 订单共享设备结果视为保守占位,
> 完整 10 订单待 Sheet2-9/工时回填问题解决后重跑。