# M9 审批与流程引擎 — 逻辑设计文档（LDD · How）

| 项 | 值 |
|---|---|
| 模块 | M9 审批与流程引擎 |
| 类型 | 逻辑设计文档（LDD） |
| 对应需求 | [requirements/M9](../requirements/M9-审批与流程引擎.md) |
| 上级 | [需求分析总纲](../需求分析总纲.md) |

> 本文档描述**实现方式（How）**：数据结构、审批链配置结构、Automations 机制、ARR 权益引擎计算口径、飞书审批联动。"做什么/为什么/验收"见对应需求文档。本模块多为候选需求，部分实现细节待设计阶段进一步细化。

## 1. 数据模型
```
Request(type, subject, applicant, payload, arr_input?, status, current_node)
Request 1──* ApprovalNode(seq, mode, approvers[], condition?, result, comment, ts)
ApprovalChain(request_type) ──▶ [ApprovalNode 模板...]        （链定义，可配）
Request ──▶ Outcome ─(核定)─▶ Contract/Quota(virtual)         （M1 FR-CUST-08b）
Automation(trigger, condition, actions[])                      （引擎，供各模块复用）
Delegation(user_id, delegate_id, start, end, scope)            （缺席委托，FR-APR-06）
```
**Request 字段**：`id, type(complimentary/立项/超支/状态跳转/交付签署/续约/项目关闭…), subject_ref, applicant, payload(json), arr_input, status(pending/approved/rejected/withdrawn), current_node, audit_log[]`。
**ApprovalNode 字段**：`seq, mode(serial/parallel), approvers[], condition(表达式), result, comment, decided_by, decided_at`。

## 2. 审批链配置结构（FR-APR-02 的 How）
- 每个 `request_type` 绑定一条可配 `ApprovalChain`，由若干节点组成。
- 节点支持三种编排：**串行**（seq 递增）、**并行**（同 seq 多 approver，可配全签/或签）、**条件分支**（node.condition 命中则激活，如 `amount > $X → VP 节点`）。
- 阈值、审批人、分支表达式均为配置项，不 hard-code；各场景具体链定义待业务确认（见需求遗留）。

## 3. Automations 触发→动作机制（FR-APR-04 的 How）
- 引擎模型：`触发(trigger) → 条件(condition) → 动作(actions[])`，供各模块声明式复用。
- **触发**示例：状态变更、字段变更、到期前 N 天、定时、事件（合同生效、告警）。
- **动作**示例：指派责任人、创建任务、发送通知/加急、状态流转、生成 Request。
- 与审批解耦：审批结果可作为触发源，Automation 也可发起 Request。

## 3b. 缺席委托机制（FR-APR-06 的 How）
- 用户设 `Delegation(delegate, start, end, scope)`；期内其待办/审批的收件人**动态解析为代理人**（路由层改写，不改链定义），到期自动失效回退。
- `scope` 可限定类型/模块（默认全部）；委托与代办操作全程写审计。被 M6（负责人/Secondary 休假 coverage）等复用。

## 4. ARR 权益引擎计算口径（FR-APR-05 的 How）
- 申请时录入 `arr_input`；引擎按 **ARR 档位表** 查出该档位的**允许上限**（如最大 Sponsored 天数）。
- 核定逻辑：`申请值 ≤ 档位上限` → 可按常规审批链核定；`申请值 > 档位上限` → 触发**更高层特批**节点。
- 核定通过后由引擎生成对应**（虚拟）Contract/Quota**（回写 M1 FR-CUST-08b）。
- ARR 档位表结构（数值配置化，具体数值待业务确认）：

| 档位 | ARR 区间 | Sponsored 上限（天） | 其它权益上限 |
|---|---|---|---|
| Tier-A | 待定 | 待定 | 待定 |
| Tier-B | 待定 | 待定 | 待定 |
| Tier-C | 待定 | 待定 | 待定 |

## 5. 集成点
- **各模块复用**：M6（立项/变更 CR/超支）、M8（交付签署）、M1（Sponsored/续约 → 生成虚拟 Contract/Quota）。
- **飞书审批联动**：待办/加急（应用内/短信/电话）/结果通知经飞书触达；与飞书原生审批的联动边界待确认。
- **通知/提醒**：复用 M10 的通知/SLA 触达通道。
