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