收敛小团队报销审批规则(07-27-yang-jun-reimbursement-readiness)

这个提交包含在:
2026-07-27 21:32:47 +08:00
父节点 4147a6960f
当前提交 99a6c20981
共修改 4 个文件,包含 13 行新增和 4 行删除
@@ -143,4 +143,7 @@
- 当前 active 费用标准为 0、杨俊部门适用预算池为 0;真实金额不会触发费用标准或预算阻断。active 法体为 0、杨俊未绑定法体,但现有报销提交和付款批次候选不以法体为硬门禁。
- 金额审批规则不是同一条:`[0,500)` 为 `manager → finance`,`[500,5000)` 为 `manager → finance_mgr`,`[5000,+∞)` 为 `manager → ceo → finance_mgr`。
- 当前 active 角色持有人:`finance=1`、`ceo=1`、`finance_mgr=0`。因此低于 500 元可路由到马建勇后再到王芝玲;达到 500 元的单据会生成无人可处理的 `finance_mgr` 角色待办。修复应调整审批规则到既有最小角色,不给王芝玲扩为权限过宽的 `finance_mgr`。
- 用户确认当前公司人数少且由马建勇统一负责,不需要金额分级。生产规则收敛为唯一 `[0,+∞)` 规则:`department_manager → finance`;删除另外两档,不保留 CEO 重复节点。
- 后续只有出现第二名实际审批主管,或有人基于真实职责承担 `finance_mgr`,并且业务证明需要金额升级时才重开分级设计。大额关注使用风险标记或通知,不通过同一自然人重复审批实现。
- 生产变更复用 `PATCH /api/approval-rules/:id`:先把低档规则扩为 `[0,+∞)`,再停用中、高两档,避免出现无人可匹配的短暂金额空窗;每步保留 `APPROVAL_RULE_UPDATED` 审计,失败则通过同一接口补偿恢复原三档。
- 最终审批只把报销置为 `approved`,不会自动创建付款批次或付款记录;付款批次仍由王芝玲主动创建并由马建勇复核。
@@ -64,8 +64,8 @@
## 6. 用户真实验收
- [ ] 在杨俊提交前修正金额审批规则:`[500,5000)` 的末级由 `finance_mgr` 改为 `finance`,`[5000,+∞)` 保留 `ceo` 且末级由 `finance_mgr` 改为 `finance`;不得通过给王芝玲增加 `finance_mgr` 绕过。
- [ ] 规则写入前后只读核对三档金额边界(499.99 / 500 / 5000)及 active 角色持有人,确认每个角色节点都至少有一名实际处理人。
- [x] 在杨俊提交前通过现有审批规则管理接口把三档规则收敛为唯一 `[0,+∞)` 规则,审批链固定为 `department_manager → finance`;不扩角色、不保留 CEO 重复节点。
- [x] 规则写入前后只读核对 499.99 / 500 / 5000 三个金额,确认解析结果完全相同且 active `finance` 有唯一实际处理人。
- [ ] 请杨俊本人从企业微信进入 OA,确认身份解析成功并能看到报销入口。
- [ ] 杨俊使用真实业务数据创建报销,至少添加一条费用明细并上传/绑定状态有效的真实票据后提交。
- [ ] 确认马建勇能看到该真实审批待办并按业务事实处理。
@@ -96,3 +96,5 @@
- OCR off 结论:空发票业务字段可以绑定并提交,主管退回成功;真实使用暂由财务查看 PDF 原件并人工核对。文件 SHA-256 查重仍有效,发票号查重暂不可用。
- 真实首跑复核:三名参与人 active 且企微绑定唯一,但企微首登均未发生;费用标准 0、适用预算池 0、active 法体 0,法体不阻断当前报销。历史 mock 票据仅 1 张且为测试账号上传,非测试员工为 0。
- 审批规则 finding:`[0,500)` 可由马建勇和唯一 finance 王芝玲处理;`[500,5000)` 与 `[5000,+∞)` 均以 `finance_mgr` 收尾,但 active `finance_mgr=0`,达到 500 元会形成无人处理待办。未修正规则前不得笼统通知杨俊可提交。
- 审批规则收口:写入前报销 reviewing/工作流 pending/待办 pending 均为 0;备份 watchdog 与 ARM dead-man 均为 success。正式接口更新 3 次、审计新增 3,生产仅剩 1 条 `[0,+∞)` active 规则。
- 金额边界验证:实际工作流构造函数对 499.99、500、5000 均输出 `department_manager → finance`;直属主管解析到马建勇,active finance 唯一且由王芝玲承担。写后仍无报销、实例或待办新增,公网 ready 正常、构建标识未变化。
@@ -35,6 +35,7 @@
- 真实报销提交前至少需要一条费用明细和一张已绑定、状态有效的票据;这由员工在真实业务中提供,不用合成数据代替。
- 最近部署后必须重装自动备份三项 service/timer 和日常巡检 timer,使 unit BUILD_SHA 与活动 server 一致;重装后手工触发一次真实自动异机备份,确认源端成功且 ARM 恢复点新鲜,再允许写入杨俊账号或主管关系。
- 第一笔真实业务由员工本人正常发起,目标链路为“员工提交 → 真实主管审批 → 财务处理”;付款批次仍遵守既有 maker-checker。
- 当前小团队取消报销金额分层,所有金额统一按“直属主管 → finance”审批;不得保留无人持有的 `finance_mgr` 节点,也不得因马建勇同时是主管和 CEO 而让同一人重复审批。
## Scope
@@ -58,6 +59,7 @@
- [x] 不持久化通讯录筛选文件,不导入杨俊及两个测试成员之外的其他成员,不产生测试付款。
- [x] 生产已显式关闭 mock OCR;`off` 路径已用测试账号复验,空发票元数据仍可绑定、提交、主管退回和清理,真实使用暂由财务查看 PDF 原件并人工核对。
- [x] 本轮没有调用企微成员写接口;企微成员资料未被 OA 反向修改。
- [x] 生产审批规则已收敛为唯一全金额规则,499.99、500、5000 三个边界均解析为 `department_manager → finance`,且没有 CEO 重复节点或 `finance_mgr` 空节点。
## Out of Scope
+4 -2
查看文件
@@ -153,8 +153,10 @@
- `manage` 不是 `approve` 的别名,也不等于"可任意改历史数据"
### R-2 报销/费用金额分层审批
- 需按金额分层,但通过**审批规则配置**实现(工作流步骤条件),不通过拆 `manager/ceo` 权限组实现
- 权限层面两个角色都保留 `expense.approve`,具体金额阈值在工作流定义里配置
- 当前 5–10 人单管理员团队不按金额分层;所有员工报销统一使用 `直属主管(department_manager) → finance`。金额差异不增加重复审批节点,也不引用无人持有的 `finance_mgr`。
- 马建勇同时是杨俊直属主管和唯一 CEO;再追加 CEO 节点只会让同一自然人对同一单据连续审批两次,不形成新的控制。
- 真正的职责分离保留在付款环节:`finance` 创建付款批次,`ceo` 复核,继续执行 maker-checker。
- 只有出现第二名实际承担审批职责的主管,或有人基于真实职责正式承担 `finance_mgr`,并且业务证明需要金额升级时,才重新评估金额分层。仅需提示大额时优先用风险标记或通知,不用重复审批节点代替。
### R-3 资产转移权限
- `asset.transfer` 只给 `administration / 资产管理员`