# Change: MRC-SVC-LOG-001 流转日志与时间轴 L1+L2 后续 first-change (V2 模式) ## Why [基于项目总控入口.md §2026-10-10 后端正式开发准入令 v1 + 已签发授权 + first-change MRC-SVC-CFG-002 / next-first-change MRC-SVC-CFG-001 / 后续 first-change MRC-CORE-BASE-001 V2 模式验证] L1 联调 first-change(`MRC-SVC-CFG-002 业务字典与文案中心`)+ next-first-change(`MRC-SVC-CFG-001 系统参数中心`)+ 后续 first-change(`MRC-CORE-BASE-001 领域地基与编号规则`)已验证 V2 模式业务代码生成模式可复用。本变更选定 `MRC-SVC-LOG-001 流转日志与时间轴` 作为后续 first-change,理由: 1. **L1 只读 + 部分 L2 写入(只追加 / 禁更新 / 禁物理删除)** — 边界清晰,只追加语义保证审计可追溯 2. **已在 first-change / next-first-change / 后续 first-change V2 模式中验证业务代码生成模式可复用** — jsonObj 接口 + Global 索引 + operatetable 公共类模式可直接迁移 3. **下游消费方**:FSM-001 `transition()` 同事务内部调用 + REJECT-001 / PAY-001 / MSG-001 异步消费方 + PC 端工作台右栏 + 小程序详情/进度页 4. **接口对齐**:`接口映射.md §流转日志` + `MRC-SVC-LOG-001 04-接口与数据清单.md §1`(writeStatusLog 10070003 / getStatusLog 10070010+11 / findLogRowByNaturalKey 10070012 / getActorName 10070013;healthCheck 10070999) 5. **模板 `BSOrderStatusLog` / `BSLogActorCache` 不存在** — 按典型业务模型 + V2 Global 索引模式补全(VisibleToPatient / ActorDr / ActorName / ActionCode 18+5 枚举 / 自然键复合唯一索引) 6. **授权范围**:`项目负责人书面授权_正式接口接入_v1.md §3` 19 个模块清单第 15 项("MRC-SVC-LOG-001 流转日志与时间轴")+ §4 签字(高井刚 / 2026-10-9)+ `OPENSPEC_STRICT_整改清单.md` strict 模板已结(2026-10-09) **V2 模式改造说明(2026-10-10)**: - 原 V1 模式: `MRC.Service.*` + `User.BS*` IRIS 持久化 + SqlProc + 多参数签名 + `%Status` 返回 - 新 V2 模式: `src..*` 命名空间 + `(%RegisteredObject, %XML.Adaptor) [ Not ProcedureBlock ]` + jsonObj 接口(`params.%Get(0)` / `session.%Get(0)`) + `%Library.DynamicObject` 返回(包含 `errorCode` / `errorMessage` / `result`)+ Global 索引(`^BSOrderStatusLogI` / `^BSLogActorCacheI`)+ 公共类 `##class(src.util.operatetable).Insert/.Update/.Delete` - 错误码通过 `##class(src.Interface.Message).GetErrorMessage()` 获取 - **追加语义约束**:写日志接口 `writeStatusLog` 仅追加,禁更新 / 禁物理删除(由 Service 层 Guard 兜底) ## What Changes - **新增** V2 模式业务类:`src.SvcLog.BSOrderStatusLog`(3 个方法:WriteStatusLog — 仅追加 / GetStatusLog — PC 全量+小程序过滤 / FindLogRowByNaturalKey — 自然键回查) - **新增** V2 模式业务类:`src.SvcLog.BSLogActorCache`(1 个方法:GetActorName — Actor 名称缓存,避免重复查询 User.HBUser) - **新增** V2 模式服务类:`src.SvcLog.MRCSvcLogService`(4 个委托方法:WriteStatusLog / GetStatusLog / FindLogRowByNaturalKey / GetActorName) - **新增** V2 模式 REST 类:`src.SvcLog.MRCSvcLogREST`(4 个 WebMethod + XData UrlMap:`POST /api/v2/mrc/svc-log/status-log/write` + `POST /api/v2/mrc/svc-log/status-log/list` + `GET /api/v2/mrc/svc-log/status-log/find-by-natural-key` + `GET /api/v2/mrc/svc-log/actor/:dr/name`) - **新增** 单元测试:`Tests.MRCSvcLogServiceTest`(4 个方法:TestWriteStatusLog / TestGetStatusLog / TestFindLogRowByNaturalKey / TestGetActorName) - **不实现** healthCheck 探针 + onStatusLogWritten 缓存失效内部钩子 — 后续 OpenSpec change 处理 - **不修改** V1 已生成的 47 个 .cls 文件 / Demo 源码 / 模版 / LICENSE / README / project.config ## Impact - Affected specs: 业务规则裁定/P-01-1 ~ P-01-6(已结 6/6)+ 接口映射.md §流转日志 + MRC-SVC-LOG-001 04-接口与数据清单.md §1/§2/§3/§5/§6 - Affected code: openspec/changes/MRC-SVC-LOG-001-statuslog-readonly-release-v1/specs/spec.md - Affected modules: MRC-SVC-LOG-001(本模块);下游消费方:FSM-001(transition 同事务)+ REJECT-001(异步回查)+ PAY-001(异步回查)+ MSG-001(异步回查)+ PC 工作台右栏 + 小程序详情页 + PC-ORDER-001/002/003 详情抽屉 - Dependencies and risks: - 依赖 `MRC-PC-AUTH-001` 登录会话(已 Demo 验收,L1 只读无需强制鉴权) - 依赖 `User.HBUser`(`§14-C2` 复用,查询 actorDr → actorName);通过 `BSLogActorCache` 缓存 - 18+5 类 ActionCode 枚举待 v2 评审时由 FSM 模块 owner 同步锁定(预填版本接受 24 类) - GOV-006 凭据审查待运维期处置(不影响 L1 只读 / L2 写入) - 写日志接口仅追加语义需 Service 层 Guard 兜底(`%OnValidateObject()` 校验 + 复合唯一索引 `NaturalKeyUnique`) - Authorization: - 项目总控入口.md §2026-10-09 后端正式开发准入令 v1 - 项目总控入口.md §2026-10-10 V2 模式改造 - 项目负责人书面授权_正式接口接入_v1.md §3(19 个模块清单第 15 项)+ §4 签字(高井刚 / 2026-10-9)(待 V2 模式重新签字) - 关联 OpenSpec change:`MRC-SVC-CFG-002-listbizdict-readonly-release-v1`(first-change V2 模式参照) - 关联 OpenSpec change:`MRC-SVC-CFG-001-listconfiggroups-readonly-release-v1`(next-first-change V2 模式参照) - 关联 OpenSpec change:`MRC-CORE-BASE-001-corelock-idempotency-readonly-release-v1`(后续 first-change V2 模式参照)