--- status: accepted --- # ADR-0008 工单生命周期收敛为七态 日期:2026-09-04(状态编码 2026-09-05 调整为从 1 开始) 取代(部分):[ADR-0004 跨系统统一工单生命周期](0004-cross-system-unified-work-order-lifecycle.md) 中“驳回、延期日志语义”及隐含的九态口径。 领域共识全文:[docs/domain/work-order-lifecycle.md](../domain/work-order-lifecycle.md) ## 背景(Context) 统一工单此前在代码与文档中使用九态:`1 待派单 / 2 待接单 / 3 已接单 / 4 处理中 / 5 待验收 / 6 已结案 / 7 已驳回 / 8 延期审核 / 9 已延期`,并存在两处与实际业务闭环不符的问题: 1. **“驳回”被建成独立终态,且只允许在待派单/待接单驳回**;但真实业务里,管理员是在“待验收”阶段对处置结果不满意,需要把工单**退回“处理中”让同一责任人继续整改**,而不是终止工单。旧实现缺失“待验收→处理中”这条回退边。 2. **“取消”没有独立终态**:旧 `cancel` 与 `reject` 都写入状态 7,数据上无法区分“取消”和“驳回”;同时“延期审核/已延期”使状态机膨胀,而当前交付流程并不包含延期环节。 前端 `CONTEXT.md`、UE 驾驶舱 `CONTEXT.md` 与 issue#10、供应商需求文档又分别写成“含已驳回的阶段”“完整保留九态”,三套口径互相不一致。 ## 决策(Decision) 以新的**七态模型**作为跨三仓(后端、前端、UE)唯一领域权威,状态编码从 1 开始: - 状态:`1 待派单 / 2 待接单 / 3 已接单 / 4 处理中 / 5 待验收 / 6 已结案 / 7 已取消`,终态仅“已结案 / 已取消”。 - **驳回是动作不是状态**:验收驳回 = `待验收(5) → 处理中(4)`,必须带驳回原因,交同一责任人继续处置。 - **取消进入独立终态“已取消(7)”**:任意中间态(1–5)可由管理员取消,已结案不可取消;取消后需要继续处置的,另建新工单派给新责任人。 - **删除延期**:移除“延期审核/已延期”两态及主流程中的申请/审核延期环节。 - 巡检、维修等工单允许创建即下派,直接进入“待接单(2)”。 - 继续使用数据库状态机与事务服务,不引入工作流引擎;附件仍按 ADR-0006 分阶段存储。 ## 编码与迁移 - 领域文档以**状态名**为权威,目标编码为 1–7;现网 `work_order.order_status` 仍是旧 1–9。目标编码从 1 开始后,前六态(1–6)与现网旧编码**同值**,仅第 7 态语义不同。 - **本次只确立领域共识与文档,不重排数据库、不改后端代码**;代码改造与存量数据编码迁移另开任务,按生命周期文档第 8 节对照表执行。 - 迁移任务内容包括:把旧 7(“已驳回”/取消混用)重定义为独立“已取消(7)”、实现 5→4 验收驳回回退、下线延期状态(旧 8/9)/字段语义、统一工单操作日志类型,并同步前端与 UE 的状态字典;前六态编码与现网一致,无需整体重排。 ## 后果(Consequences) - 三仓对工单状态的表述统一为七态,消除“已驳回是状态还是动作”“是否保留九态/延期”的长期分歧。 - UE 驾驶舱按七态**只读展示**工单当前状态与状态时间线,不提供任何处置写入口;原 issue#10“保留九态”按本决策改为七态。 - 在后端迁移完成前存在“文档目标编码 1–7 / 现网编码 1–9(前六态同值,第 7 态语义不同)”的临时双轨期,所有接口、测试与 UI 以状态名和对照表换算,不得再新增依赖“已驳回终态/延期”的功能。 - ADR-0004 中“跨系统共用统一工单、以设备类型树确定系统归属、数据库状态机、兼容旧入口”等仍然有效;仅其“驳回、延期日志语义”被本 ADR 取代。