aps-agent/docs/product/implementation-spec.md

889 lines
41 KiB
Markdown
Raw 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.

# 功能落地规格
> 本文把 [features.md](./features.md) 的每个功能点拆成可开发、可验收的落地规格。
> 状态仍以 `features.md` 为准;本文只定义“怎么落地”和“怎么验收”。
---
## 0. 使用方式
每个功能落地前必须先补齐以下信息:
| 项 | 说明 |
| --- | --- |
| 用户目标 | 计划员、主管、主数据维护员或集成管理员要完成什么工作 |
| 最小切片 | 第一个可上线版本必须包含什么;超出部分单列后续 |
| 权力等级 | P0 只读、P1 草稿/沙盒、P2 主干写入、P3 外部副作用 |
| 数据对象 | 读写哪些世界状态、知识资产、前端项目数据或外部系统对象 |
| API / 动作 | 页面点击和对话口令必须走同一动作路径 |
| UI 入口 | 从哪个面板进入、有哪些状态、空态、错误态 |
| 验收标准 | 可用业务语言复现的通过条件 |
| 测试要求 | 至少一条黄金测试、构建检查或 E2E 路径 |
| 文档同步 | 改 `features.md` / `journeys.md` / `harness.md` / `algorithm/*` / `CHANGELOG.md` |
通用完成定义:
1. 任何主干写入必须能在审计链看到 who/when/action/power/target/result。
2. 任何 P2/P3 动作必须先出确认卡,不能在页面里绕过 `/api/actions/confirm`。
3. 页面点击、命令面板和对话口令不能各走一套业务逻辑。
4. 报告、KPI、风险提示里的数字只能来自冻结快照或世界状态字段。
5. 已落地功能必须能被 `pytest tests/golden -q`、`npm run build` 或明确 E2E 路径验证。
---
## 1. 功能编号总表
| 编号 | 功能点 | 当前状态 | 目标里程碑 |
| --- | --- | --- | --- |
| MD-01 | 工厂/车间/产线/工位/设备资源树 | 已落地首切片 | M4 |
| MD-02 | 物料 / BOM / 工艺路线 | 已落地首切片 | M4 |
| MD-03 | 班次 / 日历 / 维保 | 已落地首切片 | M4 |
| MD-04 | Excel/CSV 导入管线 | ✅ 首切片 | M4 |
| OR-01 | 销售订单 / 明细管理 | 已落地首切片 | M4 |
| OR-02 | 优先级与权重配置 | ✅ 客户等级权重 | M4 |
| OR-03 | 订单池 / 审核 / 变更 | 已完成首切片 | M4 |
| OR-04 | 紧急插单专用流 | ✅ 快评+采用首切片 | M4 |
| SC-01 | RULE 规则引擎 | 已落地 | M1 |
| SC-02 | 策略模板 | 已落地 | M1 |
| SC-03 | CP / GA / HYBRID 真求解 | ✅ CP+HYBRID;GA 代跑 | M5 |
| SC-04 | 约束注册表 + 配置中心 | ✅ 首切片 | M4 |
| SC-05 | 多方案沙盒对比 | 已落地 | M2 |
| SC-06 | 主控参数 / 敏感性分析 | ✅ 首切片 | M5 |
| EX-01 | 草稿版本 + 发布 | 已落地 | M1 |
| EX-02 | 甘特 / 负荷 / 交期看板 | 已落地 | M1 |
| EX-03 | 冲突解决工作流 | ✅ 柔性冲突中心 + 一键修复 | M4 |
| EX-04 | 工单拖拽调程 | ✅ 柔性+固定甘特拖拽+P2 | M4 |
| EX-05 | MES 下发 / 报工 | ✅ Mock 下发+报工 | M4 |
| EX-09 | 报工回流与进度追踪 | ✅ 首切片 | M4 |
| AG-01 | 意图两级管线 | 已落地 | M1 |
| AG-02 | 门禁 P0-P2 | 已落地 | M1/M2 |
| AG-03 | 审计哈希链 | 已落地 | M2 |
| AG-04 | 知识检索 / RAG | 半落地 | M3/M5 |
| AG-05 | 报告生成 | 已落地 | M3 |
| AG-06 | 偏好缺省策略 | 已落地 | M3 |
| AG-07 | 主动引导 / 多模态 | ✅ 引导首切片(多模态 🔜) | M4/M6 |
| AG-08 | 项目 / 会话服务端化 | ✅ 首切片 | M4 |
| AG-09 | 检查点与时间线 | 已落地 | M2 |
| MD-05 | ERP/MES 双向集成 | ✅ Mock 入站/出站 | M4/M5 |
| MD-06 | 换型矩阵主数据 | ✅ 首切片 | M5 |
| MD-07 | 二级约束资源(工装/人员) | ✅ 模具+班组首切片 | M5 |
| SC-10 | 工装/模具约束 | ✅ 寿命/适配/锁定 | M5 |
| SC-11 | 人员技能/班组约束 | ✅ 人力并发+teamCode | M5 |
| EX-06 | 资源利用率分析视图 | ✅ 柔性设备/班组 | M1/M5 |
| OR-05 | 预测/长周期订单 | ✅ 首切片 | M5 |
| OR-06 | 订单钉扎溯源(pegging) | ✅ 固定+柔性双链 | M5 |
| SC-12 | 滚动时域排产 | ✅ realtime/short/mid/long | M5 |
| OR-07 | 订单分解 MRP(采购/委外建议) | 已落地首切片 | M4 |
| PL-01 | 时间分桶计划 | ✅ 首切片 | M5 |
| PL-02 | 有限/无限产能粗评估 | ✅ 首切片 | M5 |
| PL-03 | 可行性分析 | ✅ 首切片 | M5 |
| PL-04 | 库存投影 | ✅ 首切片 | M5 |
| PL-05 | 产能平衡/削峰 | ✅ 首切片 | M5 |
| PL-06 | 产供方向决策 | ✅ 首切片 | M6 |
| SC-07 | 顺序相关换型优化 | ✅ 首切片 | M5 |
| SC-08 | 批次/战役合并 | ✅ 首切片 | M5 |
| SC-09 | 物料齐套约束 | 半落地 | M1/M4 |
| EX-07 | 方案对比表 | ✅ 逐项 diff 矩阵 | M4 |
| EX-08 | KPI 仪表盘 | ✅ 独立视口 | M4 |
| EX-09 | 报工回流与进度追踪 | ✅ 首切片 | M4 |
| IND-01 | SMT 电子特化排产 | 未做 | M6 |
| IND-02 | 行业规则包(SOP→约束) | ✅ 首切片 | M5 |
| MD-08 | 设备虚拟档案(能力/移动/位置/工装适配) | 已落地首切片 | M5 |
| MD-09 | 工序能力产能池 | 已落地首切片 | M5 |
| SC-12 | 滚动时域排产 | ✅ realtime/short/mid/long | M5 |
| SC-13 | 正排/倒排/瓶颈锚模式 | 已落地首切片 | M5 |
| SC-14 | 虚拟产线组装 | 已落地首切片 | M5/M6 |
| PL-07 | 瓶颈产能评估 | 已落地首切片 | M5 |
| PL-08 | 交期承诺模拟 | 半落地 | M5 |
| EX-10 | 产能池仪表盘 | ✅ PoolCapacityView | M5 |
| DY-01 | 分级重排 L1–L4 | ✅ L1 换机 / L2–L4 P2 确认 | M5 |
| IND-03 | 柔性布局行业包 | ✅ 工作台验收剧本 | M5/M6 |
> 上表 MD-05 起含对标西门子 Opcenter APS 与 [demand-kangni-wuhu.md](./demand-kangni-wuhu.md) 真实需求新登记项;落地规格卡随各自里程碑开工时补齐。
---
## 2. 主数据功能
### MD-01 工厂/车间/产线/工位/设备资源树
用户目标:主数据维护员能维护可排产资源,计划员能在甘特和负荷里看到同一套资源骨架。
当前落地(M4 首切片):侧栏「主数据」→ 资源页签。树形展示工厂/车间/产线/工位/设备(`GET /api/master`,P0);产线可编辑名称/日产能/效率并停启用(`master.line.upsert`,P2 经 `POST /api/master/stage` 出确认卡)。停用产线由引擎 `find_product_lines` ACTIVE 过滤排除出新排产;黄金测试 `test_master_data.py::test_inactive_line_excluded_from_scheduling`。工位/设备编辑为后续切片。
最小切片:
| 项 | 规格 |
| --- | --- |
| 数据对象 | `factories`、`workshops`、`lines`、`workstations`、`equipment` |
| UI | 主数据管理页,左侧树形层级,右侧表单;支持新增、编辑、停用、查看引用 |
| API / 动作 | 规划 `master.resource.upsert`、`master.resource.disable`;主干写入按 P2 |
| 规则 | 被排产版本引用的资源不允许物理删除,只能停用;停用后不参与新排产 |
| 验收 | 停用一条产线后,新试排不会再把工单排到该产线;旧版本仍能查看历史名称 |
| 测试 | 种子资源加载测试;停用资源后 `RuleEngine` 不选该资源的黄金测试 |
后续切片:资源能力日历、设备 OEE、替代资源推荐。
### MD-02 物料 / BOM / 工艺路线
用户目标:维护产品结构和工艺步骤,让齐套检查、拆工单和工序顺序可解释。
当前落地(M4 增强切片):物料与BOM页签。物料可编辑库存/在途/安全库存/采购前置期(`master.material.upsert`,P2),变更直接联动下一次试排的齐套检查(`test_master_data.py::test_material_stock_zero_increases_shortage`)。选中成品后可编辑 **BOM 明细用量/关键料**(`master.bom.upsert`,P2,联动采购建议 `test_mrp.py::test_bom_quantity_edit_changes_purchase_quantity`)与 **工艺步骤准备/单件时间、外协标记**(`master.routing.upsert`,P2,外协标记联动委外建议)。BOM/路线版本发布、增删行为后续切片。
最小切片:
| 项 | 规格 |
| --- | --- |
| 数据对象 | `materials`、`boms`、`bomItems`、`routings`、`routingSteps`、`workstationOperations` |
| UI | 产品页含“物料/BOM/工艺路线”页签;步骤表支持拖动排序但保存前显示 diff |
| API / 动作 | 规划 `master.material.upsert`、`master.bom.release`、`master.routing.release`;发布类动作为 P2 |
| 规则 | BOM/工艺路线必须版本化;只有 ACTIVE + default 版本参与排产 |
| 验收 | 修改 BOM 用量并发布后,下一次试排的缺料数量随之变化 |
| 测试 | BOM 缺料数可复算;工艺步骤顺序不颠倒 |
后续切片:替代物料、外协工序、工艺版本生效日期。
### MD-03 班次 / 日历 / 维保
用户目标:维护可生产时间和不可用窗口,让占槽结果落在真实工作时间。
当前落地(M4 首切片):日历与维保页签。班次/产线工作日只读概览;维保窗口可新增/取消(`master.maintenance.upsert`,P2)。新增窗口在下一版排产产生 `EQUIPMENT` 冲突,取消后冲突消失(引擎已忽略 CANCELLED 维保;`test_master_data.py::test_maintenance_window_roundtrip_equipment_conflict`)。周模板批量复制为后续切片。
最小切片:
| 项 | 规格 |
| --- | --- |
| 数据对象 | `shifts`、`shiftCalendar`、`maintenance` |
| UI | 日历视图按产线展示班次、休息、加班、维保;支持批量复制周模板 |
| API / 动作 | 规划 `calendar.upsert`、`maintenance.upsert`;影响新排产为 P2 |
| 规则 | 修改已发布版本覆盖区间时必须提示影响范围;维保与工单冲突可被扫描 |
| 验收 | 添加某设备维保窗口后,新版本出现 `EQUIPMENT` 冲突或自动避开 |
| 测试 | 工单开始日有班次;维保重叠冲突归属本版本 |
后续切片:人员班组约束、节假日模板、加班审批流。
### MD-04 Excel/CSV 导入管线
用户目标:业务方能把订单、物料、BOM、工艺、班次从表格导入,先校验再入库。
当前落地(M4 首切片):
| 项 | 规格 |
| --- | --- |
| 输入 | `.xlsx` / `.csv`;订单/物料/BOM/路线/设备/模具/工序/区域 |
| UI | 主数据与订单面板「导入」:上传 → preview → P2 确认 |
| API / 动作 | `POST /api/import/preview`;`import.commit` P2 |
| 校验 | 必填、枚举、外键、重复编码、数量非负、日期格式 |
| 验收 | 错误行不能入库;通过行确认后落主干并进审计 |
| 测试 | 导入预览/提交黄金路径(见 import 相关测试) |
后续切片:字段映射 UI、导入任务历史、回滚导入批次、真实 ERP 增量。
### MD-05 ERP/MES 双向集成(SAP Mock 首切片)
用户目标:从外部 ERP 拉生产订单与库存进入柔性池,并把开完工回写外部系统(幂等)。
当前落地(M5 首切片 · Mock):
| 项 | 规格 |
| --- | --- |
| 适配器 | `server/integrations/sap_stub.py` 进程内镜像 `sap_mirror.json`;无真实 RFC/OData |
| 入站 | `sap.sync.inbound` P2:新 `flexOrders`(`externalAufnr`)+ `flexMaterials` 库存补丁 + `sapLinks` |
| 出站 | `sap.sync.outbound` P2:最新柔性版本工单 FINISH 回写;幂等键 `versionId:woId:finish` |
| 状态 | `sap.status` P0;API `/api/sap/status`、`inbound|outbound` preview/stage |
| UI | 柔性工作台「SAP 集成」;口令「同步SAP」「回写SAP」「SAP状态」 |
| 验收 | 入站新建可识别订单;二次入站跳过;出站重复调用不增回执 |
| 测试 | `tests/golden/test_sap_sync.py` |
后续切片:真实 SAP RFC/OData、齐套/BOM 同步、虚拟产线工时回传财务、失败重试队列。
### MD-06 换型矩阵主数据
用户目标:维护产品族×产品族换型时间,使同线相邻订单跨族时准备时间可配置。
当前落地(M5 首切片):
| 项 | 规格 |
| --- | --- |
| 数据 | 物料 `productFamily`;表 `changeoverMatrix`(fromFamily/toFamily/setupMinutes) |
| 缺省 | 同族 0;无条目跨族 30 分 |
| 引擎 | RuleEngine:同线上一单族≠本单族时,首道工序叠加矩阵分钟;C10 可关 |
| UI | 主数据 → 工艺模型 → 换型;物料可编产品族 |
| API / 动作 | `changeover.query` P0;`master.changeover.upsert` P2;含于 `GET /api/master` |
| 口令 | 「查看换型矩阵」「设置换型 CTRL-STD 到 CTRL-HF 45分」 |
| 验收 | 种子 STD↔HF 有显式分钟;关 C10 后版本 `totalChangeoverMin=0` |
| 测试 | `tests/golden/test_changeover.py` |
后续切片:SC-08 战役合并、柔性轨模具换型与族矩阵联运、换型全局最优(TSP/OR)。
---
## 3. 订单功能
### OR-01 销售订单 / 明细管理
用户目标:计划员能维护待排订单,并明确哪些订单参与本次排产。
当前落地(M4 首切片):
| 项 | 规格 |
| --- | --- |
| 数据对象 | `salesOrders`、首个 `items` 明细 |
| UI | 左侧轨道「订单」面板;订单列表 + 编辑区;支持新建、编辑、取消、完成 |
| API / 动作 | `GET /api/orders` P0;`POST /api/orders/stage` 暂存确认卡;`order.upsert/cancel/complete` P2 |
| 安全 | 页面不直接写主干;批准后统一走 `/api/actions/confirm`,写前自动 Checkpoint,写入审计链 |
| 规则 | `CANCELLED` / `COMPLETED` 不参与后续新排产;历史版本不被回写 |
| 验收 | 取消订单后再试排,版本 `orderCount` 减少且无对应 PO/WO |
| 测试 | `tests/golden/test_order_management.py`;前端 `npm run build` |
后续切片:
| 项 | 规格 |
| --- | --- |
| 多明细 | 支持同一销售订单多产品明细、行级取消/完成 |
| 批量操作 | 批量改交期、客户等级、优先级,提交前显示 diff |
| 附件与合同 | 客户合同交期、附件、备注模板 |
| 验收 | 批量变更批准后只影响新版本;旧版本可追溯原订单快照 |
仍未做:客户信用/合同交期、订单附件、批量变更。
### OR-07 订单分解 MRP(采购/委外建议)
用户目标:上传/确认订单后,系统按 BOM 与工艺路线自动分解出自制、采购、委外三类需求,对标西门子订单驱动分解。
当前落地(M4 首切片):
| 项 | 规格 |
| --- | --- |
| 数据对象 | 读 `salesOrders/bomItems/routingSteps/materials`;写 `purchaseOrders` / `outsourceOrders` 两张 **DRAFT 建议表** |
| 分解规则 | 自制=成品本体(由排产引擎生成 PO/WO);采购=BOM 净需求(毛需求−库存−在途>0),建议下单日=交期−采购前置期−1 天缓冲;委外=`isExternal` 工艺步骤逐步生成 |
| API / 动作 | `GET /api/mrp` P0;`POST /api/mrp/decompose` → `order.decompose` P1;**`mrp.release` P2** 草稿→RELEASED |
| 双入口 | 订单面板「分解建议/分解此单/确认下达」;对话「分解订单」「下达采购建议」 |
| 幂等 | 同一订单重复分解替换其旧 DRAFT 建议,不堆积 |
| 验收 | 库存调零后分解出采购建议且下单日按前置期倒排;外协步骤出委外建议;下达后状态 RELEASED |
| 测试 | `tests/golden/test_mrp.py` |
后续切片:跨订单库存分配、多层 BOM 级联展开、引擎跳过外协工序的占槽语义、对接 ERP 采购模块(P3)。
### OR-02 优先级与权重配置
用户目标:主管能定义不同客户等级、交期、插单等因素的排序权重。
当前落地(M4 首切片):
| 项 | 规格 |
| --- | --- |
| 数据对象 | `scheduleParams.customerLevelWeights` + `weights` + `planningHorizonDays` |
| 引擎 | RuleEngine 综合/均衡策略以 `-levelWeight` 为第一排序键;交期优先仍以交期为主 |
| UI | 设置 → 排产参数:等级/目标权重滑杆、展望期、恢复默认;P2 确认卡 |
| API / 动作 | `params.query` P0;`params.update` P2;`GET /api/params`、`POST /api/params/stage` |
| 规则 | 权重变更只影响新版本,不回写历史版本;写前自动建档 |
| 验收 | 提高 VIP 权重后,VIP 订单在综合策略下更早开工 |
| 测试 | `tests/golden/test_params.py` |
后续切片:按项目/客户保存参数模板、A/B 对照推荐。
### OR-03 订单池 / 审核 / 变更
用户目标:订单进入排产前先过业务审核,变更要可追溯。
最小切片:
| 项 | 规格 |
| --- | --- |
| 状态 | DRAFT、SUBMITTED、APPROVED、REJECTED、CHANGED、CANCELLED、COMPLETED(CONFIRMED≡APPROVED) |
| UI | 订单池泳道:全部/待审/已批/变更/草稿;提交审核、批准/驳回、批量批准待审 |
| API / 动作 | `order.submit` P1;`order.approve`/`order.reject` P2;`GET /api/orders` 含 `pool`;`POST /api/orders/submit` |
| 规则 | 仅 APPROVED/CONFIRMED 进正式排产;`includeUnapproved` 试排可含草稿;编辑已批内容 → CHANGED |
| 验收 | 未批准订单默认不进入 `schedule.run`;审批进审计链 |
| 测试 | `tests/golden/test_order_pool.py` |
后续切片:审批角色、变更影响评估、订单锁定。
### OR-04 紧急插单专用流
用户目标:计划员输入插单后,系统先评估影响,再决定局部修复还是全量重排。
最小切片:
| 项 | 规格 |
| --- | --- |
| 输入 | 新订单或已存在订单标记 `isRush=true` |
| UI | 订单面板「插单快评」向导:录入/选单、影响快评、确认采用 |
| API / 动作 | `rush.evaluate` P1(沙盒);`rush.apply` P2;`POST /api/rush/evaluate`、`/api/rush/stage` |
| 规则 | 快评给出受影响订单数、延迟变化、冲突变化;采用前自动建档;写急单+DRAFT 版本 |
| 验收 | 快评不污染主干;采用后可回滚到采用前检查点 |
| 测试 | `tests/golden/test_rush.py` |
后续切片:LNS 局部修复、插单审批、对外承诺函。
### OR-05 预测 / 长周期订单
用户目标:把预测/长周期需求与确定销售订单分开维护;正式排产默认不含预测,试排可纳入;成熟后可转正。
当前落地(M5 首切片):
| 项 | 规格 |
| --- | --- |
| 模型 | `forecastOrders`:DRAFT/ACTIVE/CONSUMED/CANCELLED;bucket=DAY/WEEK/MONTH;置信度 |
| UI | 订单面板「预测」视图:列表、新建周预测、转正、删除 |
| API / 动作 | `forecast.query` P0;`forecast.upsert`/`delete`/`convert` P2;`GET /api/forecast`、`POST /api/forecast/stage` |
| 规则 | 默认不进 `schedule.run`;`includeForecast` 试排纳入 ACTIVE(伪 SO,排在确定单之后);转正 → APPROVED 销售单 + CONSUMED |
| 口令 | 「查看预测」「新建预测」「预测纳入试排」「预测转正 FCxxx」 |
| 验收 | 缺表旧世界自愈;默认试排订单数不含预测;含预测试排 PO 号前缀 FC |
| 测试 | `tests/golden/test_forecast.py` |
后续切片:预测消耗冲减、置信度加权产能细化。
### PL-01 时间分桶计划
用户目标:在计划层用日/周/月(可混合)看清中长期需求与粗能力对照,先于详细排产定位缺口。
当前落地(M5 首切片):
| 项 | 规格 |
| --- | --- |
| 分桶 | `DAY` / `WEEK` / `MONTH` / `HYBRID`(近7日→约4周→其余按月) |
| 需求 | APPROVED 销售订单交期落入桶;可选 ACTIVE 预测(加权=数量×置信度) |
| 能力 | ACTIVE 产线 `capacityPerDay×efficiency` × 桶内工作日 |
| UI | 视口「分桶计划」:模式切换、含预测开关、负荷条与 OVER/WARN/OK |
| API / 动作 | `plan.buckets` P0;`GET /api/plan/buckets` |
| 口令 | 「时间分桶」「分桶计划」「混合分桶」「周计划表」 |
| 验收 | 混合骨架含日/周/月;关预测后 forecastQty=0;对话切 `viewport.mode=plan` |
| 测试 | `tests/golden/test_planning.py` |
后续切片:产品族维度、与削峰联运。
### PL-02 有限 / 无限产能粗评估
用户目标:在计划层先用无限产能看「需要多少能力」,再用有限产能看「哪里超载」,形成 RCCP 双模式对照。
当前落地(M5 首切片):
| 项 | 规格 |
| --- | --- |
| 有限 FINITE | 能力=日产能×工作日;负荷/缺口/OVER·WARN;默认模式 |
| 无限 INFINITE | 不卡能力;给出 `requiredDaily` / 峰值所需日产;附 `finite*` 参照 |
| 对照 | `plan.rccp`:有限超载桶数 + 无限峰值日产 + 日产能缺口 |
| UI | 分桶视口「有限/无限」切换;无限下列改「所需日产 / 有限参照负荷」 |
| API / 动作 | `capacityMode` 查询参;`GET /api/plan/rccp`;`plan.rccp` P0 |
| 口令 | 「有限产能粗评」「无限产能粗评」「粗能力对比」「RCCP」 |
| 验收 | 无限模式 overCount=0 且 capacity=null;对照两侧加权需求相等 |
| 测试 | `tests/golden/test_planning.py`(infinite / rccp) |
后续切片:按产线/能力池拆粗能力(产线维度 RCCP)。
### PL-03 可行性分析
用户目标:在详细排产前判断「整盘需求能否按期」,并定位缺口桶与风险订单。
当前落地(M5 首切片):
| 项 | 规格 |
| --- | --- |
| 规则 | 按交期排序;累计加权需求 vs 起点→交期累计粗能力(日产能×工作日) |
| 状态 | 订单:`FEASIBLE` / `AT_RISK`(≥85%) / `INFEASIBLE`(slack 为负) / `LATE`;组合结论同口径 |
| 缺口 | 有限分桶 OVER 列表;风险单附重叠超载桶 |
| UI | 分桶视口「可行性」页:结论 + 缺口桶 + 订单 slack 表 |
| API / 动作 | `plan.feasibility` P0;`GET /api/plan/feasibility` |
| 口令 | 「可行性分析」「能否按期」「交期可行性」 |
| 验收 | 不含预测行数更少;累计需求单调;对话切分桶视口 |
| 测试 | `tests/golden/test_planning.py`(feasibility) |
后续切片:物料齐套并入可行性、与详细排程准时率对账、单订单 what-if。
### PL-04 库存投影
用户目标:按时间看清成品/原料可用库存走势,提前发现断料与跌破安全库存。
当前落地(M5 首切片):
| 项 | 规格 |
| --- | --- |
| 期初 | `stock`;`inTransit` 计入起点日到货 |
| 需求 | 成品按交期扣减;原料按 BOM 毛需求(订单+可选预测)扣减 |
| 到货 | 采购建议 `suggestedOrderDate + leadTime`(或 `requiredDate`) |
| 粒度 | `DAY` / `WEEK`;告警 `STOCKOUT` / `BELOW_SAFETY` / `OK` |
| UI | 分桶视口「库存投影」:物料列表 + 时段曲线 |
| API / 动作 | `plan.inventory` P0;`GET /api/plan/inventory` |
| 口令 | 「库存投影」「库存投影 CTRL-A」「原料库存投影」「按周库存投影」 |
| 验收 | 成品过滤 3 条;压低库存触发告警;不含预测需求不增 |
| 测试 | `tests/golden/test_inventory.py` |
后续切片:跨订单库存分配、计划产出入库、安全库存补货建议联动 MRP。
### PL-05 产能平衡 / 削峰
用户目标:在计划层把超载时段的需求挪到空档,降低峰值负荷(不直接改交期)。
当前落地(M5 首切片):
| 项 | 规格 |
| --- | --- |
| 输入 | 有限产能分桶(默认 WEEK);目标负荷默认 85% |
| 算法 | 超载多余量优先 PULL_AHEAD 到前空档,其次 PUSH_BACK 到后空档 |
| 输出 | 挪动建议列表 + 桶前后负荷/状态对照 + 峰值/方差改善 |
| UI | 分桶视口「削峰」页 |
| API / 动作 | `plan.leveling` P0;`GET /api/plan/leveling` |
| 口令 | 「削峰」「产能平衡」「负荷削峰」「计划层均衡」 |
| 验收 | 压低产能后必有挪动且峰值不升;高产能时空建议 |
| 测试 | `tests/golden/test_planning.py`(leveling) |
后续切片:一键应用改交期(P2)、与排产层 CAPACITY_BALANCE 联运、按产线维度削峰。
### PL-06 产供方向决策
用户目标:削峰仍不够时,给出加班 / 扩线 / 外协的结构化产供建议(相对成本排序)。
当前落地(M6 首切片):
| 项 | 规格 |
| --- | --- |
| 输入 | 先跑 PL-05 削峰;默认 WEEK;目标负荷 85% |
| 算法 | 残留超载桶按 加班(+25%能力)→扩线/替代(+40%+闲置线线索)→外协 覆盖缺口 |
| 输出 | `verdict`∈BALANCED/LEVELING_ENOUGH/NEED_SUPPLY;options+gaps+mix |
| UI | 分桶视口「产供」页 |
| API / 动作 | `plan.supply` P0;`GET /api/plan/supply` |
| 口令 | 「产供决策」「加班建议」「扩线建议」「外协建议」「产能决策」 |
| 验收 | 极低压产能→NEED_SUPPLY 且有选项;高产能→BALANCED |
| 测试 | `tests/golden/test_planning.py`(supply) |
后续切片:财务真实成本、一键生成加班/外协工单、与 MRP 外协建议联运。
---
## 4. 排产引擎功能
### SC-01 RULE 规则引擎
用户目标:在无优化器和无 LLM 的情况下,也能稳定产出可解释排程。
当前落地:
| 项 | 规格 |
| --- | --- |
| 输入 | `world` + `EngineParams` |
| 输出 | DRAFT `scheduleVersion`、PO、WO、conflicts、KPI |
| 验收 | 7 个种子订单生成 7 个 PO、30 个 WO;工位无重叠,工艺顺序不颠倒 |
| 测试 | `tests/golden/test_rule_engine.py` |
后续只允许做兼容增强:新增冲突类型、资源选择规则或统计口径时同步 `docs/algorithm/scheduling-v1.md`。
### SC-02 策略模板
用户目标:用业务语言切换排产偏好,例如交期优先、产能均衡、先进先出。
当前落地:
| 策略 | 当前实现 | 验收 |
| --- | --- | --- |
| DELIVERY_FIRST | 交期升序 + 优先级 | 最早交期订单最早开工 |
| FIFO | 下单日期升序 | 先下单先排 |
| CAPACITY_BALANCE | 优先级排序 + 选占用少的线 | 负荷更均衡 |
| CHANGEOVER_MIN | 换型矩阵贪心最近邻 + 同族选线 | 累计换型 ≤ FIFO(同线多族) |
| COST_FIRST | 同 CHANGEOVER_MIN(换型分钟代理成本) | 非财务成本最优 |
| COMPREHENSIVE | 优先级 + 交期 | 默认综合 |
后续切片:策略配置页、真实财务成本目标、战役合并(SC-08)。
### SC-07 顺序相关换型优化
用户目标:在详细排产时主动减少跨产品族换型次数与累计准备时间。
当前落地(M5 首切片):
| 项 | 规格 |
| --- | --- |
| 策略 | `CHANGEOVER_MIN`(`COST_FIRST` 同序) |
| 排序 | 贪心最近邻:种子=交期最早;下一单选相对上族换型最小者 |
| 选线 | 优先同族已开线 → 空线 → 跨族线 |
| 对比 | `scenario.compare` 增加「换型最小化」卡,KPI 含 `totalChangeoverMin` |
| 口令 | 「换型最小化试排」「减少换型试排」「换型优先试排」 |
| 验收 | 同线多族时累计换型 ≤ FIFO |
| 测试 | `tests/golden/test_changeover.py`(SC-07) |
后续切片:窗内 2-opt 改良、与交期权重的帕累托。
### SC-08 批次 / 战役合并
用户目标:把交期接近的同产品订单合成一场战役,一次准备、累计数量、保留原单钉扎。
当前落地(M5 首切片):
| 项 | 规格 |
| --- | --- |
| 规则 | 同 `productId`;交期跨度 ≤ 7 天;插单/预测不并入 |
| 策略 | `CAMPAIGN`:先合并再换型最小化排序 + 同族选线 |
| 输出 | 少 PO;PO 带 `campaignSourceOrderNos` / `isCampaign` |
| 预览 | `campaign.preview` P0 |
| 对比 | 方案卡增加「战役合并」,KPI 含 `poSaved` |
| 口令 | 「战役合并预览」「战役合并试排」「批次合并试排」 |
| 验收 | 种子 CTRL-A 两单合并;CAMPAIGN 的 poCount < 7 且 orderCount=7 |
| 测试 | `tests/golden/test_campaign.py` |
后续切片:可配窗口/最大批量、同族(非同品)战役、拆批回退。
### SC-03 CP / GA / HYBRID 真求解
用户目标:在复杂约束下获得更优解,并能说明求解质量。
当前落地(M5 · CP + HYBRID):
| 项 | 规格 |
| --- | --- |
| CP | OR-Tools:产线分配 + 同线 NoOverlap + 加权延期;工序班次占槽 |
| HYBRID | RULE 策略序/选线 → CP-SAT `AddHint` 热启动改良 → 班次占槽 |
| API | `engineType=CP\|HYBRID`;`timeLimitSeconds`;`solveStatus|solveTimeSec|optimalityGap` |
| UI | 排产参数默认引擎;回复展示管线/状态/耗时/gap |
| 口令 | 「用CP试排」「混合引擎试排」「HYBRID试排」 |
| 规则 | 缺 ortools:CP→`ENGINE_UNAVAILABLE`;HYBRID→`DEGRADED_RULE` 诚实降级 |
| GA | 仍 RULE 代跑并注明 |
| 验收 | CP/HYBRID 延期 ≤ RULE;`solverMeta.warmStart=RULE`(HYBRID);工位无双占 |
| 测试 | `tests/golden/test_cp_engine.py` |
后续切片:工序级 Interval 全模型、LNS、GA 参数模板。
### SC-04 约束注册表 + 配置中心
用户目标:主管能配置哪些约束是硬约束、软约束、权重多少。
当前落地(M4 首切片):
| 项 | 规格 |
| --- | --- |
| 数据对象 | `ConstraintDef` 目录 + `constraintProfile` 覆盖;版本快照 `constraintProfile` |
| 引擎 | RuleEngine/PoolEngine 读启停与齐套软硬;维保/产能/班组/模具/滚动窗可关 |
| UI | 设置 → 约束配置(分组开关 + 硬/软);P2 确认卡 |
| API / 动作 | `constraint.profile.query` P0;`constraint.profile.save` P2;`GET /api/constraints`、`POST /api/constraints/stage` |
| 规则 | 硬约束违反阻止发布;软约束(默认齐套)只报风险;关闭齐套则不产出缺料冲突 |
| 验收 | 关闭物料齐套后缺料不报冲突;齐套硬约束时发布被门禁拦截 |
| 测试 | `tests/golden/test_constraints.py` |
后续切片:约束模板市场、按客户/产品族套用约束。
### IND-02 行业规则包(SOP→约束)
用户目标:把知识库里的 SOP 编译成可落地的约束/换型策略,而不是只「能查不能用」。
当前落地(M5 首切片):
| 项 | 规格 |
| --- | --- |
| 编译 | 确定性模板:换线 SOP→C10+跨族默认分钟+16:00 宵禁;齐套 SOP→C6;插单 SOP→流程提示 |
| 标记 | 新增可配约束 `C13_sop`;应用后写入 `rulePacks` + `changeoverPolicy` |
| 引擎 | 跨族缺省分钟读 `changeoverPolicy`;C13 开启时换型晚于宵禁报 `SOP_CHANGEOVER_CURFEW` |
| API | `sop.compile` P0;`sop.apply` P2;`GET /api/sop/compilable|compile`;`POST /api/sop/stage` |
| UI | 设置→约束配置「SOP→约束规则包」;口令「编译换线SOP」「应用换线SOP」 |
| 验收 | 应用后跨族默认 60 分;C13 启用;出处挂在 C13.params |
| 测试 | `tests/golden/test_sop_rules.py` |
后续切片:更多 SOP 模板、LLM 辅助槽位抽取、按工厂/产品族绑定规则包。
### SC-05 多方案沙盒对比
用户目标:先看几种排法的 KPI 和风险,再选择一个方案落地。
当前落地:
| 项 | 规格 |
| --- | --- |
| 动作 | `scenario.compare` P1 |
| 隔离 | 深拷贝沙盒,主干世界逐字节不变 |
| 输出 | `scenario-cards`,含 KPI、相对基准差异、风险摘要 |
| 采用 | `scenario.apply` 重跑选中策略并写 DRAFT |
| 测试 | `test_scenario_compare_does_not_mutate_world` |
后续切片:自定义策略集合、方案命名、方案归档、帕累托前沿。
### SC-06 主控参数 / 敏感性分析
用户目标:调整关键参数时能看到 KPI 对参数变化的敏感程度。
当前落地(M5 首切片):
| 项 | 规格 |
| --- | --- |
| 参数扰动 | 展望期、VIP 权重、交期缓冲比、冻结窗口、产线效率系数 |
| 算法 | 沙盒 one-at-a-time;Tornado 按 \|Δ延期\| 摆幅排序 |
| 引擎挂钩 | `EngineParams.deliveryBufferRatio` / `freezeWindowHours`(显式传入才生效) |
| UI | 设置→排产参数「敏感性分析」;对话报告块可预览/下载 |
| API / 动作 | `scenario.sensitivity` P1;`GET /api/scenario/sensitivity` |
| 口令 | 「敏感性分析」「Tornado」「参数扰动」 |
| 验收 | 沙盒不污染主干;缓冲更紧延期不降;摆幅降序 |
| 测试 | `tests/golden/test_sensitivity.py` |
后续切片:蒙特卡洛鲁棒性、超时秒数(CP)、参数推荐。
### SC-04 约束注册表 + 配置中心
用户目标:主管能配置哪些约束是硬约束、软约束、权重多少。
最小切片:
| 项 | 规格 |
| --- | --- |
| 数据对象 | `ConstraintDef`、`ConstraintProfile`、版本快照中的约束配置 |
| UI | 设置 → 约束配置,按产能、物料、设备、人员、换线分组 |
| API / 动作 | 规划 `constraint.profile.save` P2 |
| 规则 | 硬约束违反则版本不可发布;软约束违反进入冲突/评分 |
| 验收 | 关闭物料齐套软约束后,缺料不阻断排产但报告风险 |
| 测试 | 约束开关影响冲突输出;发布前硬约束门禁 |
后续切片:约束模板市场、按客户/产品族套用约束。
---
## 5. 结果与执行功能
### EX-01 草稿版本 + 发布
用户目标:试排结果先作为草稿,确认后才成为执行基准。
当前落地:
| 项 | 规格 |
| --- | --- |
| 状态 | DRAFT、PUBLISHED、ARCHIVED |
| 动作 | `schedule.run` P1;`schedule.publish` P2 |
| 安全 | 发布前自动 Checkpoint;批准/驳回写审计 |
| 验收 | 发布后版本状态为 PUBLISHED,PO 状态推进为 CONFIRMED |
| 测试 | 门禁与审计链黄金测试 |
后续切片:版本归档、版本比较、发布回执。
### EX-02 甘特 / 负荷 / 交期看板
用户目标:用不同视角确认排产结果。
当前落地:
| 视图 | 数据源 | 验收 |
| --- | --- | --- |
| 甘特 | `/api/world/gantt` | 展示最新版本 WO,支持过滤、聚焦、高亮 |
| 负荷 | `/api/world/load` | 产线 x 日期负荷率 |
| 交期 | `/api/world/due` | 每个订单承诺完成和风险等级 |
后续切片:时间缩放真实影响甘特粒度、导出图片、视图配置保存。
### EX-03 冲突解决工作流
用户目标:对容量、缺料、设备等冲突生成可执行建议,并一键应用安全修复。
最小切片:
| 项 | 规格 |
| --- | --- |
| 冲突类型 | NO_LINE、NO_WORKSTATION、MATERIAL_SHORTAGE、DELAY、CAPACITY、EQUIPMENT |
| UI | 冲突中心:按严重度、资源、版本筛选;每条有建议和影响预览 |
| API / 动作 | 规划 `conflict.suggest` P0、`conflict.applyFix` P2 |
| 规则 | 应用修复前必须沙盒预览 diff;P2 批准后生成新版本 |
| 验收 | 对容量冲突选择“分流产线”后,新版本该冲突减少或解释失败原因 |
| 测试 | 修复前后冲突数可比;失败不改主干 |
后续切片:自动修复策略库、批量冲突处理。
### EX-04 工单拖拽调程
用户目标:计划员在甘特上手动调整工单,并立即看到约束校验结果。
最小切片:
| 项 | 规格 |
| --- | --- |
| UI | 甘特工单可拖动开始时间/工位/产线,拖动中显示合法/非法 |
| API / 动作 | 规划 `schedule.adjust.preview` P1、`schedule.adjust.commit` P2 |
| 规则 | 预览只写沙盒;提交生成新 DRAFT 版本,不直接改历史版本 |
| 验收 | 拖到设备维保窗口时提示非法;拖到空闲工位后可提交新版本 |
| 测试 | 预览不污染主干;提交后工艺顺序仍合法 |
后续切片:多选拖拽、冻结窗口、撤销/重做。
### EX-05 MES 下发 / 报工
用户目标:发布后的版本能安全下发到外部执行系统,并接收进度回传。
当前落地(Mock 首切片):
| 项 | 规格 |
| --- | --- |
| 适配器 | `server/integrations/mes_stub.py` 进程内镜像;无真实车间接口 |
| 下发 | `mes.dispatch` P3:柔性最新版本 / 固定已发布版本;幂等键 `track:versionId:woId` |
| 报工 | `mes.report` P1:进度% / 完工;回写 APS 工单;同订单工序全完 → 柔性订单 COMPLETED |
| UI | 柔性工作台「MES 执行」;口令「下发MES」「模拟报工」「MES状态」 |
| API | `/api/mes/status`、`dispatch/preview|stage`、`execution`、`report` |
| 验收 | 下发记录外部单号;重复下发不增外部工单;报工更新进度 |
| 测试 | `tests/golden/test_mes.py` |
后续切片:真实 MES MCP、失败重试队列、固定轨报工 UI、WMS 齐套。
---
## 6. 对话与治理功能
### AG-01 意图两级管线
用户目标:计划员能用自然语言驱动排产,同时系统可解释自己理解了什么。
当前落地:
| 项 | 规格 |
| --- | --- |
| 一级 | 正则快路,离线可用 |
| 二级 | LLM JSON,失败降级 unknown |
| 输出 | `IntentResult`,前端可展开查看 |
| 验收 | 关键口令能稳定解析;LLM 不可用时核心口令仍可用 |
后续切片:同义词词库管理、槽位澄清、多轮补参。
### AG-02 门禁 P0-P2
用户目标:危险操作必须让人确认,且确认路径唯一。
当前落地:
| 项 | 规格 |
| --- | --- |
| 矩阵 | `_POWER_MAP` + `docs/architecture/harness.md` |
| P2 通道 | `stage_confirmation` → `/api/actions/confirm` |
| UI | 聊天确认卡 + 设置/门禁待审批 |
| 验收 | P2 不能走 `guard()` 直通;确认令牌一次性 |
后续切片:P3 外部副作用审批、多角色权限、审批委托。
### AG-03 审计哈希链
用户目标:关键动作可追溯,历史事件被篡改能被检出。
当前落地:
| 项 | 规格 |
| --- | --- |
| 数据 | `auditEvents`,prevHash + hash |
| UI | 设置 → 审计链 |
| 验收 | 正常链校验通过;改历史事件字段后断链 |
| 已知修复 | 2026-07-16 已补 `at` + `ts` 双字段,避免治理页时间列空白 |
后续切片:WORM 存储、审计导出、外部锚定。
### AG-04 知识检索 / RAG
用户目标:问制度、SOP、策略原理时,回答必须带出处。
当前落地:
| 项 | 规格 |
| --- | --- |
| 检索 | bigram + 标签/标题加权 |
| 资产 | SOP、algorithm、case、process、report |
| 验收 | 命中带 assetId/title/version;未命中不编造 |
M5 切片:
| 项 | 规格 |
| --- | --- |
| 向量 | chunk、embedding、召回、重排 |
| UI | 知识资产管理页,支持上传、审批、版本对比 |
| API / 动作 | 规划 `knowledge.asset.upsert` P2、`knowledge.search` P0 |
| 测试 | 同问题召回稳定;未审批资产不参与对外回答 |
### AG-05 报告生成
用户目标:从排产版本生成可复现日报和版本对比报告。
当前落地:
| 项 | 规格 |
| --- | --- |
| 类型 | daily、version-diff |
| 规则 | 数字来自冻结快照;模板化生成;入知识库 |
| UI | 聊天报告块预览/下载 |
| 验收 | 报告数字与快照字段一致 |
后续切片:报告模板管理、对外承诺函 P2、Word/PDF 导出。
### AG-06 偏好缺省策略
用户目标:用户不点名策略时,系统用历史使用偏好选择默认策略,并说明原因。
当前落地:
| 项 | 规格 |
| --- | --- |
| 信号 | 试排 1 分,采用 2 分 |
| 输出 | 默认策略 + 得分说明 |
| 验收 | 采用权重大于试排;无样本回退 COMPREHENSIVE |
后续切片:按用户/项目隔离偏好、偏好重置、偏好解释面板。
### AG-07 主动引导 / 多模态
用户目标:系统能在发现风险或空状态时主动建议下一步。
当前落地(M4 首切片):
| 项 | 规格 |
| --- | --- |
| 主动引导 | `build_guidance`:无版本→试排;冲突高→查看冲突/对比;知识未命中→知识库/样例 SOP |
| API / 动作 | `guidance.next` P0;`GET /api/guidance`;口令「下一步建议」 |
| UI | 欢迎页按状态换 starter;对话 `guidance` 块可点击口令;甘特空态文案 |
| 触发 | 发布无版本、知识未命中、试排冲突≥3 自动附建议块 |
| 多模态 | M6 以后考虑截图/表格问答,不进入 M4 必做 |
| 验收 | 无版本、冲突高、知识未命中三种状态都有下一步建议 |
| 测试 | `tests/golden/test_guidance.py` |
后续切片:命令面板动态推荐、按项目偏好排序建议。
### AG-08 项目 / 会话服务端化
用户目标:项目、会话、文件资产不只存在浏览器本地,能跨设备和多人协作。
最小切片:
| 项 | 规格 |
| --- | --- |
| 数据对象 | Project、Session、Message、ProjectFile;`worldKey=default` 绑定共享 WorldStore |
| 存储 | `server/data/projects.json`;前端启动 `bootstrapWorkspace` 拉取/迁移 |
| UI | 现有项目面板交互不变;数据源优先 Gateway,失败回退 localStorage |
| API / 动作 | `GET/PUT /api/workspace`;`project.create`/`project.delete`/`session.create` P1;`message.replace`/`message.append` P1 |
| 规则 | 删除项目不触碰世界;本地仓可一次性迁移到服务端 |
| 验收 | 刷新后仍见项目/会话/历史消息;删项目后销售订单数不变 |
| 测试 | `tests/golden/test_workspace.py` |
后续切片:团队权限、多租户、会话树成对快照。
### AG-09 检查点与时间线
用户目标:计划员能在关键操作前后保存状态,并在出错时回到可信版本。
当前落地:
| 项 | 规格 |
| --- | --- |
| 数据 | `server/data/checkpoints.json`,包含快照元信息和完整 `world` |
| 动作 | `checkpoint.create` P1;`checkpoint.rollback` P2 |
| UI | 时间线导轨展示检查点与版本;点击检查点合成回滚口令 |
| 安全 | 回滚执行前自动再建档,保证回滚本身可撤销 |
| 验收 | 建档后破坏世界,再回滚能逐字段恢复;超过容量淘汰最旧 |
| 测试 | `test_checkpoint_roundtrip`、`test_checkpoint_capacity_eviction` |
后续切片:服务端会话树持久化后,把对话上下文与世界快照做真正成对恢复。
---
## 7. 推荐落地顺序
| 顺序 | 功能 | 原因 |
| --- | --- | --- |
| 1 | AG-03 审计字段契约修复 | 已完成;继续扩展 WORM/导出 |
| 2 | OR-01 销售订单管理 | 首切片已完成;继续订单审核/批量/附件 |
| 3 | MD-01/02 主数据维护 | 支撑真实客户数据替换种子 |
| 4 | SC-04 约束配置中心 | 把“内嵌规则”产品化 |
| 5 | EX-03 冲突解决工作流 | 从“能看冲突”走向“能处理冲突” |
| 6 | EX-04 拖拽调程 | 提升计划员手工干预能力 |
| 7 | MD-04 导入管线 | 降低真实试点接入成本 |
| 8 | AG-08 项目/会话服务端化 | 支撑多人和长期使用 |
| 9 | OR-04 插单专用流 | 高频业务场景,但依赖订单/冲突/版本能力 |
| 10 | SC-03 真求解器 | 算法价值高,依赖约束模型稳定 |
维护要求:任一功能从“未做/半落地”推进为“已落地”时,必须同轮更新 [features.md](./features.md)、必要的业务旅程、门禁矩阵和 [../CHANGELOG.md](../CHANGELOG.md)。