# 04 — 独立修改并审计店铺业务员归属

**What to build:** 超级管理员和平台账号编辑有权管理的店铺时，可以设置、清空或更换业务员；字段缺失则保持现状。代理可以继续更新其有权店铺的其他资料，但请求一旦出现业务员字段即被拒绝。每次实际归属变化只影响目标店铺，并留下可靠、脱敏的前后审计事实。

**Blocked by:**

- 01 — 建立店铺业务员归属持久化基线
- `.scratch/tech-global-audit/issues/01-audit-event-write-loop.md` — 01 — 交付不可变 Audit Event 写入闭环

**Status:** 代码完成、验证延期

**架构通道:** 主通道为简单写 Application，辅助通道为统一审计 Port/Adapter。

**完整业务边界:** 本票迁移并收口店铺资料更新这一完整用例中的业务员归属变更。明确不迁移店铺删除、启停或其他无关 CRUD，不向父级、下级、孙级或同级传播变更，不承担公共审计基础设施建设。

- [x] 更新命令真实区分字段缺失、显式 `null`、零值和正整数；字段缺失保持原归属，`null` 清空，正 ID 校验后替换，零值按非法参数处理。
- [x] 超级管理员和平台账号只有在通过目标店铺既有资源权限检查后才能修改归属；企业、越权平台和资源不存在使用统一安全错误语义。
- [x] 代理更新其他资料且字段缺失时保留原归属，请求一旦出现该字段即返回统一禁止访问错误。
- [x] 设置正 ID 时在写事务内重新校验其仍为启用、未删除的普通平台账号，候选在提交前失效时不得更新店铺。
- [ ] 实际值未变化时不生成业务员变更成功审计；设置、清空和更换记录稳定动作、前后 ID、账号名摘要和可用状态。（Audit Event 按本 Change 冻结转任务 6.5）
- [ ] 店铺变化与关键成功审计同事务提交，审计失败时业务修改回滚；拒绝和失败按公共审计策略记录且不泄露底层错误。（Audit Event 按本 Change 冻结转任务 6.5）
- [ ] 测试覆盖四类操作者、字段四态、并发候选失效、无变化更新、父子不级联、审计失败回滚和中文错误契约。（按本 Change 测试环境豁免转任务 6.1）
