aps-agent/docs/round-87-w1-report.md

41 lines
5.2 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.

# 第87轮 W1:完整工作簿导入
## 完成范围
新增 `server/importers/ruiyang_aps.py` 结构化适配器,现有 `preview_file` 按工作表组合识别,文件名和路径不参与识别。16张表按各自业务用途读取,不再将人员、在制、班次、来源、计划参数误当物料或无关数据跳过。原表里的历史运行说明只保存为数据,没有执行。
单一验证输入为用户指定的 `湖南锐扬APS精简演示数据.xlsx`。测试只读取原文件,篡改场景只改内存副本;测试前后 SHA-256 均为 `c0598c422567a35029d32504d2020780bf6b0417e0887a9749fc86584a5aa687`。
实际导入结果为45个产品/物料、15台设备、42条BOM、15道工艺、5张正式订单、1张待评估沙盒插单。库存与在途只更新库存字段,保留原档案PCS单位和规格;14条在途共420,日期2026-08-07;12条关键料和18条有损耗的用料关系完整保留。26名人员、5条在制、2班次及1条设备维护、14条工厂层级资料、8条客户供应商资料均进入结构化对象。
计划起点由原表数据日期加首个启用班次得到 `2026-08-04T08:00:00`,21天计划周期与24小时冻结窗口保留。来源记录明确标为试排、未确认;工时保留演示来源,并未升级成实测工时。SO-006同时出现在订单和插单场景时只生成一个沙盒订单,不写入正式订单池。
## 关键接口与数据合同
- `preview_ruiyang_workbook(filename, raw) -> dict | None`:非此结构返回None;识别后缺表、缺关键列、负数量、重复编码、关联错误或插单冲突均失败关闭,不回退通用导入。返回profile/source/entityCounts/sheetSummary及完整16个batches。
- `apply_ruiyang_batches(world, batches) -> dict`:只接受同一源文件的完整16批,构造候选世界、同步兼容投影后才替换原world;异常不部分写入。由 `apply_import_commit` 自动分流调用。
- 同一profile/sha256二次导入返回 `unchanged: true, total: 0`,不覆盖计划员后续维护。不用每次生成方案重新导入源表。
- `analyze_work_dir` 的files保留profile/source/entityCounts/sheetSummary/canCommit/canSchedule;batches保留sourceProfile/sourceSha256/contractSheets/canCommit。物料覆盖度计45个对象;订单计5张正式订单,库存42条单列。
- `canCommit`表示结构可安全采用;`canSchedule`表示仍需业务核对。指定原表可导入但不能宣称业务数据已全部就绪。
新增持久化对象:`flexFactoryResources`、`flexPersonnel`、`flexWip`、`flexMaintenance`、`flexSandboxOrders`、`flexPartners`、`flexScenarios`、`intakeSources`、`planningContext`。既有flexMaterials/flexEquipment/flexRoutings/flexBom/flexCalendar/flexTeams/flexOperations/flexZones复用。
每行保存sourceProfile、sourceRef(sha256/sheet/excelRow)、sourceValues;库存另外保存inventorySourceRef,避免覆盖档案来源。`planningContext.sourceProfile/sourceSha256`与`intakeSources`可供主控识别已采用的文件版本。`intakeSources`同时保留数据说明、两套计划参数、原表自检记录;原表自检只标记source_reported_only,不当作程序验收。
与W2协作:专用apply调用既有 `sql_pack.sync_flex_to_classic_master` 钩子,W2将其委托稳定映射helper。最终经典对象的稳定ID、界面维护和持久化须在合流树验收。与W3协作:WIP按名称唯一关联产品工序;RUNNING的原表时间提供expectedEnd,DONE提供actualEnd,均保留列来源;不编造actualStart或前序完成事实。人员以独立工号为权威,派生班组保留personCodes避免重复计数。
## 验证和影响
执行 `python -m pytest tests/golden/test_ruiyang_aps_intake.py tests/golden/test_importers.py tests/golden/test_folder_pack.py -q`:**32 passed**,无跳过。新增14项结果涵盖真实文件业务数量、来源、在途日期、关键料/损耗、正式/沙盒分离、人员/在制/维护/参数、同文件幂等与维护保护、7类畸形输入失败关闭、完整批次冻结与目录统计。测试持久化由tests/conftest隔离。
修改前GitNexus使用同基线round绝对路径:preview_file为HIGH(17个受影响、5直接调用)、apply_import_commit为HIGH(20/5)、analyze_work_dir为CRITICAL(15/5,涉及兜底、Agent API和Mesh)。已在动手前告知主控;现有入口仅加profile分流与元数据透传,并跑通通用导入与目录回归。本worktree已独立索引;提交前执行detect_changes核对范围。索引自动生成的AGENTS/CLAUDE/skills统计不进入提交。
## 未掩盖的源数据问题
- 人员表没有喷涂PAINT技能,不能按“无班组限制”自动硬排。
- WIP-004引用A00247,但设备表没有此设备,不能自动改成名称相近的设备。
- 执行中任务仍缺明确实际开工及前序完成记录;这里只保留原表事实和时间含义,W3负责实际约束校验。
- 工时、订单、客户、库存含原表声明的演示补充,因此仅用于带来源的历史试排。
W1不改工作流、UI、算法或用户项目数据;全链路HTTP、浏览器、主数据维护和排产差异验收由主控合流后执行。本片测试通过不代表整轮完成。