Files
邹进 6298a9061f fix: 第1批 M8、M13、M14 审批提交失败终态与退款关闭类终态定位
- 审批核心在实例进入提交失败的同一事务内写 submission_failed 决策投递与终态事件,消费入口单独放行
- 核销(4)、退款(7)、扫码注册(3)、资料资格(4)、线下充值(7)、佣金提现(5)新增“审批提交失败”终态并释放预占/冻结
- 三处恢复入口不再重放提交失败;退款关闭类终态按审批尝试定位退款单(M13)
- 核销列表与详情批量返回审批提交状态;筛选、字段说明、状态名称、退款导出加入新状态
- 迁移 000239 放宽五张业务表状态约束与决策投递取值约束(测试库已执行 up/down/up)
- OpenSpec Change fix-approval-submission-failure-terminal:18/26,测试部署后端到端验证与存量补数据待完成
2026-10-12 00:03:46 +09:00

2.4 KiB
Raw Blame History

ADDED Requirements

Requirement: 审批提交失败通知业务模块

审批实例因企微明确拒绝提交或审批表单无法构造(如缺必填控件映射)而变为“提交失败”(7)时,系统 SHALL 在同一事务内经既有终态决策通道发出决策 submission_failed:MUST 同时写入标准决策 Outbox 事件与决策投递记录(与其他终态决策相同,缺投递记录时业务消费者不会处理);事件标识 MUST 沿用既有格式 approval:{审批实例标识}:submission_failed,重复写入不产生第二个事件。决策事件结构不新增字段,失败原因由业务模块从该实例的企微审批上下文读取并脱敏后保存。决策消费入口 MUST 接受 submission_failed;渠道回调与轮询的审批状态推进 MUST NOT 因此接受该决策值。提交结果未知(8)MUST NOT 发出该决策,仍由既有恢复机制确认。所有已注册的审批业务类型(核销、退款、扫码注册代理、线下充值、佣金提现、提现资料资格)MUST 显式处理该决策,MUST NOT 将其按驳回处理;各业务处理前 MUST 确认审批实例仍为提交失败,否则幂等结束。

Scenario: 企微明确拒绝提交

  • WHEN 某业务单的审批实例提交企微被明确拒绝
  • THEN 审批实例变为提交失败,同一事务写入一条 submission_failed 决策事件,对应业务模块随后将业务单置为“审批提交失败”

Scenario: 审批表单构造失败

  • WHEN 某审批实例因缺少必填控件映射无法构造表单
  • THEN 系统按提交失败处理并发出 submission_failed 决策

Scenario: 提交结果未知不发决策

  • WHEN 审批实例提交结果未知
  • THEN 系统不发出 submission_failed 决策,业务单保持审批中

Scenario: 业务模块确实收到决策

  • WHEN 审批实例变为提交失败并写入决策事件
  • THEN 该事件存在对应的决策投递记录,业务消费者能认领并处理,业务单状态发生变化,而不是被当作已处理直接结束

Scenario: 渠道回调不能推进到提交失败

  • WHEN 企微回调或轮询带来的决策值为 submission_failed
  • THEN 审批状态推进按不受支持的决策拒绝,审批实例状态不变

Scenario: 决策重复投递

  • WHEN 同一 submission_failed 决策被重复投递
  • THEN 业务单状态、释放的占用与审计均只生效一次