# 03 — 发布审批场景与首个模板版本

**What to build:** 超级管理员可以按稳定场景查看退款和线下充值审批配置，读取企微模板并通过可视化字段映射发布首个不可变模板版本；发布前由后端重新核对模板、控件类型和必填映射，业务代码不再依赖易变的模板 ID 或控件 ID。

**Blocked by:**

- 01 — 交付企微连接状态与安全 Adapter 闭环
- `.scratch/tech-public-foundation/issues/01-public-migration-ownership-and-gates.md` — 01 — 建立公共迁移所有权与检查门禁
- `.scratch/tech-global-audit/issues/01-audit-event-write-loop.md` — 01 — 交付不可变 Audit Event 写入闭环

**Status:** ready-for-agent

**架构通道:** 复杂写，采用 Application + Domain + Repository/WeCom Adapter；场景与版本列表为辅助 Query。

**完整业务边界:** 本票收口稳定场景、不可变模板版本、模板读取、字段映射校验和首次发布。明确不实现运行中安全换版，不创建业务审批实例，不接入退款或充值创建。

- [ ] 初始化稳定场景 `refund_approval` 与 `offline_recharge_approval`，场景状态固定为 `0=已暂停、1=启用、2=暂停中`，模板版本状态固定为 `0=已停用、1=启用、2=失效`。
- [ ] 模板版本保存递增版本号、企微模板标识、名称、控件映射、模板快照、指纹、验证结果和发布快照；历史版本不可修改，每个场景至多一个启用版本。
- [ ] 模板读取接口只接受稳定场景和企微模板标识，向前端返回可映射控件事实；前端不能把控件名称、类型或原始映射 JSON 作为可信发布依据。
- [ ] 发布前重新从企微读取模板，验证可访问性、控件存在、类型匹配及全部必填业务字段映射；退款和线下充值字段集合符合 PRD，金额字段只用于展示。
- [ ] 首次发布在单一事务内写不可变版本、设置当前版本并启用场景；失败时不留下半发布版本或错误的当前版本引用。
- [ ] 模板读取、验证和发布写 Integration Log/Audit Event；真实 PostgreSQL 与可编程 Adapter 测试覆盖唯一约束、映射缺失、类型错误、指纹和事务回滚；新增 Handler 同步路由、RouteSpec 和两个 OpenAPI 文档生成器。
