3.2 KiB
3.2 KiB
CEO 本人报销财务兜底设计
1. Boundary
本任务复用现有审批规则和工作流快照机制,不新增角色、数据表、迁移或公开端点。finance_mgr 保持兼容;本公司的新默认和生产规则改为 finance。
2. Cross-layer Contract
审批规则配置
ownerSelfFallbackRole: finance | finance_mgr | null
-> API 白名单校验
-> ApprovalRule 持久化
-> 报销提交加载规则
-> CEO 本人且 manager 无法解析时使用 fallback
-> 移除本人 ceo 节点 + 角色去重
-> 校验 active 非本人角色持有人
-> 冻结 workflow_steps_snapshot
创建 API、省略字段时的默认值和前端新建表单默认值统一为 finance。旧规则返回 finance_mgr 时前端仍可展示、编辑和保存,避免破坏兼容数据。
3. Target Rule Matrix
| 金额档 | 普通员工规则 | CEO 本人快照 |
|---|---|---|
| 小额 | manager -> finance |
finance |
| 中额 | manager -> finance |
finance |
| 大额 | manager -> ceo -> finance |
finance |
CEO 本人快照只由现有标准步骤完成:manager 缺失时插入 finance fallback;随后相同 finance 节点去重,申请人自身 ceo 节点移除。无需添加按金额或人员姓名硬编码的特殊分支。
4. Validation And Failure Behavior
- fallback 不在
finance|finance_mgr:400 VALID_001。 - CEO 同时持有 fallback:
409 VALID_001 / owner_self_fallback_self_role。 - 无 active 非本人 fallback 持有人:
409 VALID_001 / owner_self_fallback_role_unavailable。 - 非 CEO:不触发 owner-self fallback,保留正常规则快照。
- 生产规则数量、金额区间或当前角色结构漂移:回填事务停止,零写入。
5. Production Rollout
- 部署代码与前端,使 runtime 能读写
financefallback;seed:config对既有审批规则只保留不覆盖,避免部署提前改写生产规则。 - 核对公网构建号和 runtime smoke。
- 生产只读冻结 3 条规则、active
finance持有人、CEO 身份、角色/binding/历史快照计数。 - 单事务更新 3 条启用规则:中/大额
finance_mgr节点改为finance,全部 fallback 改为finance;逐条写脱敏审计。 - 只读解析三档 CEO 快照和普通员工快照,不创建真实报销。
6. Rollback
- 代码兼容
finance_mgr,生产规则可在精确冻结原值后原子恢复。 - 回滚规则只影响回滚后新提交单据;既有
workflow_steps_snapshot保持不变。 - 任一生产检查失败时先回滚规则,不改员工角色或历史单据。
6.1 Seed Safety
- 空库首次初始化时创建三条新默认规则。
- 只要审批规则表已有任意记录,
seed:config保留全部既有规则,不删除、不覆盖、不补写;生产规则只允许走获批的独立原子事务。 - 部署日志只记录创建/保留计数,不输出规则 ID、人员或业务内容。
7. Trade-off
不采用“给现有财务追加 finance_mgr”方案,因为该角色同时包含主数据、预算、集成、AI、资产和薪酬等更宽权限,超出“审批 CEO 本人报销”的最小职责。允许 finance 作为兜底能复用已有 expense.approve,权限面更小。