M9 审批与流程引擎 — 状态流转 + 业务流程图(ASCII) 配套:M9-审批与流程引擎-FSD.md ═══════════════════════════════════════════════════════════════════════ 一、Request 状态机(统一入口 · 逐节点流转,FR-APR-01/02) ═══════════════════════════════════════════════════════════════════════ ┌────────────┐ 统一入口发起(声明 type+subject_ref+payload) │ (未提交) │──────────────────────────────►┌────────────┐ └────────────┘ 匹配 ApprovalChain │ 10 pending │ └─────┬──────┘ 逐节点流转(见 §二) │ ┌──────────────────┬────────────────────┼───────────────┐ │ 末节点全通过 │ 任一节点驳回 │ 申请人撤回 │ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌────────────────┐ │ 20 approved │ │ 30 rejected │ │ 40 withdrawn │ └──────────────┘ └──────────────┘ └────────────────┘ 说明:三者均为终态、不可逆;全生命周期写 audit_log。 撤回仅限申请人本人且未终态;权益类 approved 后触发核定(见 §三)。 图例:──► 正向流转 ═══════════════════════════════════════════════════════════════════════ 二、泳道流程图 · 条件分支审批链(金额判定 → VP,FR-APR-02) ═══════════════════════════════════════════════════════════════════════ 申请人 │ 引擎/CSP │ 审批人(节点) │ VP(条件分支) ─────────────────────────────────────────────────────────────────────── │ 1.发起 │ │ │ ├───────────►│ 2.按 type 绑定 ApprovalChain│ │ │ │ 3.取 seq 节点、求值 condition│ │ │ │ 4.串行/并行(全签|或签)分发 │ │ │ ├────────────────────────────►│ 5.批准/驳回 │ │ │◄────────────────────────────┤ (写意见留痕) │ │ │ 6.condition: amount>阈值? │ │ │ │ 否 → 继续下一 seq │ │ │ │ 是 → 激活 VP 特批节点 │ │ │ ├─────────────────────────────────────────────►│ 7.VP 核决 │ │◄─────────────────────────────────────────────┤ │ │ 8.末节点通过=approved / 任一驳回=rejected │ ─────────────────────────────────────────────────────────────────────── 异常:condition 不可解析→阻断激活+告警;节点审批人为空→挂起+兜底 要点:条件命中路由到对应审批人正确率=100%;阈值配置化,待业务 ═══════════════════════════════════════════════════════════════════════ 三、泳道流程图 · ARR 驱动核定(≤上限常规 / >上限特批,FR-APR-05) ═══════════════════════════════════════════════════════════════════════ 申请(TAM/PS) │ 权益引擎/CSP │ 审批人 │ 更高层特批 │ M1 ─────────────────────────────────────────────────────────────────────── │ 1.填申请 │ │ │ │ │ (类型/ARR/ │ │ │ │ │ 申请值) │ │ │ │ ├────────────►│ 2.查 ARR 档位表→算上限 │ │ │ │ │ 3.申请值 ≤ 上限? │ │ │ │ │ 是 → 常规审批链 │ │ │ │ ├───────────────────────►│ 4.核定 │ │ │ │ 否 → 追加特批节点 │ │ │ │ ├──────────────────────────────────►│ 5.特批 │ │ │◄──────────────────────────────────┤ │ │ │ 6.核定通过 │ │ │ │ ├──────────────────────────────────────────────►│ 7.生成虚拟 │ │ │ │ │ Contract/ │ │◄──────────────────────────────────────────────┤ Quota │ │ 8.回写 M1 FR-CUST-08b │ │ │ (08b) ─────────────────────────────────────────────────────────────────────── 要点:>上限触发特批率=100%;核定通过 100% 生成虚拟 Contract/Quota 异常:档位表未配置→阻断核定+告警;生成失败→重试+告警,不置完成 数值:ARR 档位区间/上限 配置化,待业务确认 ═══════════════════════════════════════════════════════════════════════ 四、泳道流程图 · 缺席委托 转派 / 到期回退(FR-APR-06) ═══════════════════════════════════════════════════════════════════════ 缺席人 │ 路由层/CSP │ 代理人 │ 审计 ─────────────────────────────────────────────────────────────────────── │ 1.设委托 │ │ │ │ (代理人/ │ │ │ │ 期/scope) ├───────────────────────────►│ │ 2.记"设置委托" │ │ 3.期内: 待办/审批收件人 │ │ │ │ 动态解析为代理人 │ │ │ │ (改路由,不改链定义) │ │ │ ├───────────────────────────►│ 4.代 {缺席人} │ │ │ │ 处理待办/审批 │ 5.记"代办操作" │ │◄───────────────────────────┤ (记实际操作人)│ (双方留痕) │ │ 6.到期(end)自动失效 │ │ │ │ 收件人回退为缺席人本人 │ │ 7.记"到期回退" ─────────────────────────────────────────────────────────────────────── 要点:期内自动转派率=100%;到期自动回退;委托+代办审计齐全率=100% 异常:代理人=本人/委托成环→阻断;代理人自身缺席→提示另选(不链式) 到期回退时已处理待办保留结果,仅回退未决待办