# 06 — crm-dict/CONTEXT.md 与 ADR-0015 补记 **Type:** task (AFK) **Status:** resolved (20260907) **Blocked by:** 03 ## Question 按票 03 的拍板结论更新领域文档(纯文档,不动代码): 1. `crm-dict/CONTEXT.md` 补「二级字典项」领域语言(对齐票 09 已实现的 parentId 两级树 + 原型 a7-5-1 §6 使用规则:独立编码行、两级联动、业务存所选行编码)。 2. `crm-dict/CONTEXT.md`「被引用」条目修正:现行「被引用 ⇒ 分组与字典值不可修改」是原型 a7-4-1 旧口径;a7-5-1 已放宽为字典键值始终可改(被引用只锁字典分组)。以票 03 拍板口径为准。 3. `docs/adr/0015` 若与拍板结论冲突(默认项停用规则、编码唯一范围、权限口径),补一节「202609 原型对齐修订」记录口径变化,不重写历史。 验收:CONTEXT.md 语言与拍板结论零冲突;ADR 补记可追溯。 ## Answer(2026-09-07) ### crm-dict/CONTEXT.md 词条修订(7 处,逐条对照票 03 拍板) 1. **导语**:「两级平铺结构」→「两级结构(分组 → 字典项),字典项之间可再挂一级/二级父子(parentId 两级树)」,与拍板 10 / 票 09 落地模型对齐。 2. **新增「二级字典项」词条**:parentId 指向同分组一级项、两级封顶;每个二级项为独立字典行(独立编码);业务页面两级联动、业务数据保存所选行的字典编码;停用一级项二级连带不可选、删有存活子项的一级项被拦;管理端维持 parentId 模型(拍板 10)。措辞融合票 09 拍板与 a7-5-1 §6(R-I13)。 3. **「字典项」**:「全局唯一」→「组内唯一」(拍板 7:编码唯一范围维持组内);补 `parentId=null` 即一级项的指路。 4. **「被引用」(拍板 4/6)**:由「其分组与字典值不可修改」改为锁两件事——**删除**(强制删除除外)与**换分组**(拦截「该字典已被引用,不可修改」);字典名称与**字典键值**被引用后仍可改(业务只存编码,键值属展示/取值层),原「被引用 ⇒ 值只读」口径注明废止。 5. **「默认项」(拍板 2)**:补禁停规则——`/status` 端点与编辑保存两条停用路径均拦截(63013「该字典为分组默认项,请先取消默认或指定其他默认项」),替代旧「停用即取消默认」;分组停用默认休眠、启用自动恢复语义注明不变。 6. **「字典值」(拍板 3)**:改**必填**(空白直接拒绝、不再归一 null;存量空值行编辑时需补值),删「空值不参与唯一校验」旧口径;注明原型页称「字典键值」。 7. **「字典编码」(拍板 3 微调)**:注明前端按原型标必填星号、后端保留 `dict_`+UUID 自动生成兵底(与本就写明的自动生成条款无冲突,仅显式化)。 票 07 已更新的「引用计数」「名称回显」两词条逐字保留,未动。 ### docs/adr/0015 补修订节 文末追加「## 修订(2026-09-07,dict-alignment effort)」(仿 ADR-0024 体例,append-only、不重写历史,diff 13 增 0 删),8 条: 1. 默认项禁停(63013)替代停用自动取消默认(推翻 Default Item / Status Semantics 两处旧述); 2. 字典键值必填(存量空值行补值;唯一索引形态不变); 3. 键值被引用后可改(US-25 值只读废止); 4. 未被引用可换分组(推翻「任何时候都不可换分组」收窄;目标组启用 + 编码/键值双重唯一重校验 + 计数行随迁同事务;有存活子项的父项禁换); 5. 分组编辑弹窗可改状态(saveOrUpdate 解锁 status;禁停拦截覆盖两条路); 6. ref_count 全量接线三业务模块(applyFieldChange 缝 + 导入聚合 batchApply); 7. 零改动确认(字典编码组内唯一、分组编码全局唯一、`dict:*` 权限点体系维持); 8. 追记票 09 parent_id 两级树——标题「锁定两级平铺 / 不加 parent_id」按此修订理解,拍板 10 维持模型。 验收自查:CONTEXT.md 语言与 12 项拍板逐条对照零冲突;ADR 补记每条注明被修订的原节,可追溯。map.md 未动(主会话统一回写)。写盘均 UTF-8 无 BOM、LF。