This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 核销申请原审批可受控恢复
|
||||
系统 SHALL 提供 `POST /api/admin/employee-collection-applications/{id}/recover-approval`,允许原申请员工、超级管理员和平台用户恢复仍处于审批中的核销申请。恢复对象 MUST 固定为该申请的最新审批尝试与最新审批实例,并校验审批实例业务类型为 `employee_collection_approval`、业务标识等于最新尝试标识且尝试关联的审批实例一致;请求不得接受调用方传入审批实例或新材料。恢复 MUST 复用原审批实例及同一稳定提交事实,不得修改申请材料、账单分摊或审批快照,不得释放账单预占,不得新增审批尝试、审批实例或第二张企业微信审批单。管理员代为恢复时,企业微信发起人 MUST 保持原申请人,且系统 MUST 记录实际操作者。
|
||||
|
||||
恢复资格 MUST 由服务端根据申请状态、最新审批实例和提交事实判定。明确提交失败且可确认企业微信未受理时,系统 SHALL 恢复同一提交事实;提交结果未知时,系统 MUST 优先确认原提交结果,在无法证明未受理前不得再次提交创建审批;已取得企业微信审批单号但本地状态未确认时,系统 MUST 查询并同步原审批单。仍在正常重试或企业微信已处于审批中的请求 SHALL 幂等返回当前恢复状态,不得重复投递;申请或审批已经进入终态时 MUST 拒绝恢复。
|
||||
|
||||
核销申请列表与详情 SHALL 返回服务端判定的可恢复标记、审批提交状态及名称、安全失败摘要和最近恢复时间;列表投影 MUST 批量完成,查询次数不得随当页申请数量线性增长。恢复操作及结果 MUST 写入审计,但不得记录支付凭证、完整外部交易流水号、完整企业微信响应或内部事件键。代理、企业账号及其他无权账号的操作与申请不存在 MUST 不可区分。
|
||||
|
||||
#### Scenario: 明确提交失败后恢复原审批
|
||||
- **GIVEN** 核销申请仍处于审批中,最新审批实例的提交明确失败,且系统可确认企业微信未受理
|
||||
- **WHEN** 原申请员工或有权管理员请求恢复审批
|
||||
- **THEN** 系统恢复同一稳定提交事实,保持原审批实例、申请材料、账单分摊和预占金额不变,且不创建第二张企业微信审批单
|
||||
|
||||
#### Scenario: 提交结果未知时禁止直接重提
|
||||
- **GIVEN** 核销申请仍处于审批中,最新审批实例的提交结果未知
|
||||
- **WHEN** 授权账号请求恢复审批
|
||||
- **THEN** 系统进入原提交结果确认流程,在无法证明企业微信未受理前不再次调用创建审批,并返回正在确认的恢复状态
|
||||
|
||||
#### Scenario: 已取得企微审批单号时查询同步
|
||||
- **GIVEN** 最新审批实例已有企业微信审批单号,但本地提交或审批状态尚未确认
|
||||
- **WHEN** 授权账号请求恢复审批
|
||||
- **THEN** 系统查询并同步该原审批单,不恢复创建提交且不生成新的审批实例
|
||||
|
||||
#### Scenario: 重复或并发恢复保持幂等
|
||||
- **WHEN** 员工与管理员重复或并发恢复同一核销申请
|
||||
- **THEN** 系统至多一次改变原提交事实的恢复状态,其余请求返回相同的正在恢复或已确认状态,审批实例数、审批尝试数和账单预占金额均不增加
|
||||
|
||||
#### Scenario: 正常重试中的申请再次恢复
|
||||
- **GIVEN** 原审批提交事件仍处于等待重试或处理中
|
||||
- **WHEN** 授权账号再次请求恢复
|
||||
- **THEN** 系统不重复投递,返回正在恢复及当前提交状态
|
||||
|
||||
#### Scenario: 审批终态不可恢复
|
||||
- **WHEN** 核销申请或其最新企业微信审批已经进入通过、驳回、撤销或关闭终态后请求恢复
|
||||
- **THEN** 系统返回状态冲突,不改变申请、账单、审批实例或提交事实
|
||||
|
||||
#### Scenario: 申请人与管理员权限边界
|
||||
- **WHEN** 原申请员工、超级管理员或平台用户请求恢复,或代理、企业账号及其他无权账号请求恢复
|
||||
- **THEN** 系统允许前三类账号恢复并在管理员代操作时保持原申请人为企业微信发起人;对无权账号以与申请不存在不可区分的结果拒绝
|
||||
|
||||
#### Scenario: 配置修复后再次恢复
|
||||
- **GIVEN** 原审批因申请人企业微信身份、审批场景或模板映射不可用而恢复失败,且申请仍满足恢复条件
|
||||
- **WHEN** 维护者修复配置后授权账号再次请求恢复
|
||||
- **THEN** 系统继续恢复同一原审批事实,不要求重建申请或释放账单预占
|
||||
Reference in New Issue
Block a user