## ADDED Requirements ### Requirement: 退款资产后处理尝试记录 系统 SHALL 在每次执行退款资产后处理时写一条尝试记录,只新增,不修改、不删除。 - 记录内容:退款单、处理步骤(套餐失效、接续激活、停机评估或停机)、资产类型与资产 ID、ICCID、尝试序号、触发方式(Outbox 投递、补偿扫描、人工重试)、结果、错误码、错误信息(截断)、关联的停复机记录、耗时、记录时间。 - 尝试记录 SHALL 按月分区。 - 尝试记录写入失败 MUST 只记录告警,不影响后处理结果。 #### Scenario: 一次尝试失败 - **WHEN** 退款资产后处理在套餐失效步骤失败 - **THEN** 系统写一条尝试记录,步骤为套餐失效,结果为失败,并带错误码与错误信息 #### Scenario: 一次尝试成功 - **WHEN** 退款资产后处理全部步骤成功 - **THEN** 系统写一条结果为成功的尝试记录 ### Requirement: 退款资产后处理重试上限 系统 SHALL 在退款单上维护资产后处理的当前状态、已尝试次数、最后错误与下次重试时间。 - 后处理失败时,系统 SHALL 按指数退避计算下次重试时间,间隔最长 1 小时。 - 已尝试次数达到 10 次仍未成功时,系统 MUST 把状态置为"需人工处理",并停止自动重试。 - Outbox 投递与补偿扫描 MUST 按上述状态与下次重试时间判断是否执行:未到下次重试时间的不执行,"需人工处理"的不执行。 - 后台人工重试 SHALL 允许重新执行"需人工处理"的退款单,并记为人工重试触发;执行前已尝试次数不清零。 - 重复执行 MUST 保持既有幂等:不重复失效套餐,不重复处理资产。 #### Scenario: 退避重试 - **GIVEN** 一张退款单的资产后处理第 3 次失败 - **WHEN** 补偿扫描在下次重试时间之前运行 - **THEN** 系统不执行该退款单的后处理 #### Scenario: 达到上限转人工 - **GIVEN** 一张退款单的资产后处理已失败 9 次 - **WHEN** 第 10 次仍失败 - **THEN** 退款单状态为需人工处理,Outbox 与补偿扫描不再执行它,审计写一条结论为失败的事件 #### Scenario: 人工重试成功 - **GIVEN** 一张需人工处理的退款单 - **WHEN** 运营在后台发起人工重试并成功 - **THEN** 退款单状态为已完成,尝试记录新增一条触发方式为人工重试、结果为成功的记录