Files
junhong_cmp_fiber/.scratch/ur37-wecom-approval-foundation/issues/04-approval-creation-prerequisite-and-transaction-port.md
2026-07-22 16:58:26 +09:00

23 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 04 — 提供审批创建前置检查与事务接入契约
**What to build:** 退款和线下充值创建用例可以通过稳定公共接缝确认场景、当前模板和实际企微发起身份可用,并在自己的业务事务中原子创建唯一审批实例及提交 Outbox任一前置失败时不会留下业务单、审批实例或待补提事件。
**Blocked by:**
- 02 — 完成平台账号本人扫码绑定闭环
- 03 — 发布审批场景与首个模板版本
- `.scratch/tech-public-foundation/issues/02-transactional-public-outbox-write.md` — 02 — 在业务事务中可靠写入公共 Outbox
**Status:** ready-for-agent
**架构通道:** 主通道为复杂写 Application + Domain辅助通道为 Application Port/Adapter。
**完整业务边界:** 本票收口审批创建前置判定、真实业务提交人和企微发起身份快照、唯一审批实例以及事务内提交事件。明确不创建退款单或充值单,不定义其金额和活跃业务规则,不调用远程企微。
- [ ] 前置检查按稳定场景读取当前启用模板,并拒绝暂停中、已暂停、模板缺失或模板失效;失败发生在调用方写入任何业务事实前。
- [ ] 平台和超级管理员使用本人启用且成员可用的绑定;代理仅可在允许代理发起的退款场景使用部署配置固定成员,线下充值不允许代理发起。
- [ ] 审批实例冻结业务类型、业务 ID/编号、场景、模板版本与映射、业务快照、真实提交人账号/名称/角色/店铺快照、企微发起身份及 `self_binding/agent_proxy` 来源。
- [ ] `(biz_type,biz_id)` 唯一,非空 `sp_no` 全局唯一;状态初始为 `0=提交中`,不使用审批轮次,不建立数据库外键或 GORM 关联标签。
- [ ] 调用方可使用同一 GORM 事务创建业务事实、审批实例和结构化 `WeComApprovalSubmissionRequested` Outbox任一步失败整体回滚事务中不调用 Redis、Asynq、对象存储或企微。
- [ ] 公共状态常量、中文状态名及公开 DTO 描述保持唯一来源;集成测试以代表性测试业务事实验证前置失败零落库、事务回滚、并发唯一性和成功只产生一组审批事实。