5.2 KiB
第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、浏览器、主数据维护和排产差异验收由主控合流后执行。本片测试通过不代表整轮完成。