# 测试用例：M9 审批与流程引擎

| 项 | 值 |
|---|---|
| 对应 FSD | [M9-审批与流程引擎-FSD](M9-审批与流程引擎-FSD.md) |
| 对应 PRD | [requirements/M9](../requirements/M9-审批与流程引擎.md) |

> 用例按 **正常 / 边界 / 异常** 分类；ARR 档位、金额阈值、加急冷却等数值以业务确认值为准（标"待业务"处）。

## 一、覆盖范围
统一 Request 入口、审批链编排（串行/并行/条件分支）、待办/加急/通知、Automations 自动化引擎、ARR 驱动核定、缺席委托（Out-of-Office）。

## 二、测试用例

### 2.1 统一 Request（FR-APR-01）

**正常**

| 编号 | 场景 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| TC-N-001 | 统一入口发起 | type 已配链 | 业务页"发起审批"→填 payload→提交 | 建 Request(pending)；绑定链；进首节点；写审计 | P0 |
| TC-N-002 | 全场景走统一入口 | Sponsored/立项/超支/签署/续约/关闭各一 | 分别发起 | 均经统一 Request；旁路发起数=0 | P0 |
| TC-N-003 | 撤回未终态单 | 自己的 pending 单 | 撤回 | 状态=withdrawn；写审计 | P1 |

**异常**

| 编号 | 场景 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| TC-E-001 | 旁路发起 | 绕过统一入口 | 直接触发业务动作 | 阻断+"须经审批"+记审计 | P0 |
| TC-E-002 | type 无绑定链 | 未配 ApprovalChain | 提交 | 阻断建单+告警 Admin | P0 |
| TC-E-003 | 重复提交同对象 | 已有进行中单 | 再次发起 | 阻断，跳已有单 | P1 |
| TC-E-004 | 撤回已终态单 | approved 单 | 撤回 | 拒绝"已结束不可撤回" | P1 |

### 2.2 审批链编排（FR-APR-02）

**正常**

| 编号 | 场景 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| TC-N-011 | 串行链逐节点 | 3 节点串行 | 逐节点批准 | 按 seq 流转；末节点过=approved | P0 |
| TC-N-012 | 并行或签 | 同 seq 多人或签 | 任一人批准 | 该节点即过 | P1 |
| TC-N-013 | 并行全签 | 同 seq 多人全签 | 全部批准 | 全通过才过；缺一仍等待 | P1 |

**边界**

| 编号 | 场景 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| TC-B-011 | 金额=阈值 | amount==阈值 | 提交 | 按配置边界口径路由（含/不含，待业务） | P1 |
| TC-B-012 | 并行或签已过再操作 | 或签已通过 | 另一人再批 | 幂等忽略 | P1 |

**异常**

| 编号 | 场景 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| TC-N-014 | 条件命中路由 VP | amount>阈值 | 提交 | 激活 VP 节点；路由正确率=100% | P0 |
| TC-N-015 | 条件不命中 | amount≤阈值 | 提交 | 不激活 VP；走常规链 | P0 |
| TC-E-011 | 任一节点驳回 | 串行链中间节点 | 驳回 | 整单=rejected；写意见留痕 | P0 |
| TC-E-012 | condition 不可解析 | 表达式错误 | 激活该节点 | 阻断+告警 Admin | P1 |
| TC-E-013 | 节点审批人为空 | 解析后无人 | 流转到该节点 | 挂起+告警/兜底 | P1 |
| TC-E-014 | 分支阈值未配置 | 无阈值 | 提交 | 降级默认链+告警 | P1 |

### 2.3 待办 / 加急 / 通知（FR-APR-03）

| 编号 | 场景 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| TC-N-021 | 待办生成与处理 | 节点激活 | 审批人打开待办→批准 | 待办出现→处理后关闭；结果通知申请人 | P0 |
| TC-N-022 | 加急逐级升级 | 单据待处理 | 应用内→短信→电话 | 按渠道逐级触达；记加急日志 | P1 |
| TC-E-021 | 触达失败 | 飞书超时 | 发通知/加急 | 重试+告警可重放（NFR-06） | P0 |
| TC-E-022 | 加急过频 | 冷却期内 | 再次加急 | 冷却拦截"过于频繁"（阈值待业务） | P1 |
| TC-E-023 | 待办已处理再操作 | 已批准 | 再点批准 | 幂等忽略 | P1 |

### 2.4 Automations 自动化引擎（FR-APR-04）

| 编号 | 场景 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| TC-N-031 | 触发→动作成功 | 规则启用、条件命中 | 触发事件（如状态变更） | 依序执行 actions；成功率=100%；记 exec_log | P0 |
| TC-N-032 | 到期前提醒 | 到期前 N 天规则 | 到点 | 按规则发提醒 | P1 |
| TC-N-033 | Automation 生成 Request | 事件触发 | 触发 | 自动发起对应 Request | P1 |
| TC-E-031 | 条件不命中不执行 | 条件不满足 | 触发事件 | 不执行任何动作；误触发数=0 | P0 |
| TC-E-032 | 动作执行失败 | 下游不可用 | 触发 | 重试+告警；记 exec_log | P0 |
| TC-E-033 | 规则循环触发 | A 触发 B、B 触发 A | 触发 | 环检测中断+告警 | P1 |
| TC-E-034 | condition 不可解析 | 表达式错误 | 触发 | 停用规则+告警 Admin | P1 |

### 2.5 ARR 驱动核定（FR-APR-05）

| 编号 | 场景 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| TC-N-041 | 常规核定生成额度 | 申请值≤档位上限 | 填 ARR+申请值→核定通过 | 常规链核定；生成虚拟 Contract/Quota（08b） | P0 |
| TC-B-041 | 申请值=档位上限 | ==上限 | 提交 | 常规核定通过（不触发特批） | P1 |
| TC-E-041 | 超上限触发特批 | 申请值>档位上限 | 提交 | "超上限需特批"；追加特批节点；特批率=100% | P0 |
| TC-N-042 | 特批通过生成额度 | 特批节点批准 | 核决 | 核定通过 100% 生成虚拟 Contract/Quota | P0 |
| TC-E-042 | 档位表未配置 | 无档位表 | 核定 | 阻断核定+告警 Admin | P0 |
| TC-E-043 | ARR 缺失/非法 | arr_input 空 | 提交 | 阻断"请填写有效 ARR" | P1 |
| TC-E-044 | 核定通过生成合同失败 | M1 写失败 | 核定后 | 重试+告警；不置为已完成 | P0 |

### 2.6 缺席委托（FR-APR-06）

| 编号 | 场景 | 前置条件 | 操作步骤 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| TC-N-051 | 期内自动转派 | 已设委托、生效中 | 向缺席人派待办/审批 | 收件人解析为代理人；自动转派率=100%；标"代 X 处理" | P0 |
| TC-N-052 | 到期自动回退 | 委托到期 | 到 end 时刻 | 收件人回退为缺席人本人；记"到期回退" | P0 |
| TC-N-053 | 委托与代办留痕 | 代理人处理 | 代理人批准 | 记实际操作人+被代理人；审计齐全率=100% | P0 |
| TC-B-051 | scope 限定类型 | scope=仅审批 | 派其它类型待办 | 仅 scope 内转派，其余不转 | P1 |
| TC-N-054 | 到期时待办已处理 | 代理人已处理部分 | 回退 | 已处理保留结果，仅回退未决 | P1 |
| TC-E-051 | 代理人=本人 | — | 设委托 | 阻断"不能是本人" | P1 |
| TC-E-052 | 委托成环 | A→B、B→A 同期 | 设委托 | 阻断"不可成环" | P1 |
| TC-E-053 | 代理人自身缺席 | 代理人也缺席 | 设委托 | 阻断/提示另选（不链式转派） | P1 |

## 三、覆盖率目标
- 关键路径 100%（统一入口发起 / 条件路由 / ARR 核定生成额度 / 自动转派回退）。
- 异常路径 ≥ 90%（所有 TC-E-*）。
- 硬约束 100% 有对应用例覆盖：旁路发起=0、条件路由正确=100%、超上限特批=100%、核定 100% 生成虚拟 Contract/Quota、Automations 触发成功=100% 且误触发=0、缺席期自动转派+到期回退+留痕=100%。
