5.6 KiB
5.6 KiB
CEO 本人报销财务兜底修正
Goal
让 majianyong(ceo) 本人提交任一金额档报销时,在禁止自审的前提下只进入 active 非本人 finance 审批;wangshunli 的系统管理员身份不进入业务审批链,也不通过给现有财务附加 finance_mgr 扩权来绕过问题。
Scope
- 报销审批工作流的负责人本人 fallback 白名单、快照解析和失败关闭行为。
- 审批规则 API、前端配置页与三档默认种子规则的
finance默认值和finance_mgr兼容。 - 部署同步根目录与 PostgreSQL、附件和环境文件的安全隔离合同。
- 经部署与公网验证后,对生产恰好 3 条启用报销规则进行一次原子回填和脱敏审计。
Background
- 用户确认
majianyong是公司 CEO、无直属主管;wangshunli仅承担系统开发和系统管理。 - 生产有 3 条启用报销金额规则,均使用
owner_self_fallback_role=finance_mgr,中/大额规则还包含finance_mgr节点。 - 生产有 1 名 active 且已绑定企微的
finance,没有 activefinance_mgr;当前 CEO 本人报销会以owner_self_fallback_role_unavailable失败关闭。 - 代码、审批规则 API、前端配置页和种子默认值目前只把
finance_mgr作为负责人本人兜底角色。 - 现有工作流已具备 CEO 自审节点移除、重复角色去重、active 非本人持有人检查和历史审批快照冻结能力。
Requirements
finance和兼容保留的finance_mgr均可作为ownerSelfFallbackRole;新建规则默认使用finance。- 小团队默认金额规则调整为:小额
manager -> finance、中额manager -> finance、大额manager -> ceo -> finance,三档ownerSelfFallbackRole均为finance。 - CEO 本人申请在三档规则下均生成唯一
finance节点:替换无法解析的manager、移除本人ceo、去除重复finance。 finance兜底必须存在 active 非本人持有人;CEO 若同时持有finance或无可用持有人,继续失败关闭。- 普通员工的工作流仍按规则顺序生成,不引入 CEO 本人专属的全局跳步;历史
workflow_steps_snapshot不回写。 - 审批规则 API 和前端配置页同时支持
finance/finance_mgr,默认与推荐值显示为finance;不开放admin、system_admin、hr或其他角色作为负责人本人兜底。 - 部署后以原子事务将生产 3 条启用规则从现状修正为上述三档结构并写脱敏审计;写入前必须重新确认规则数量、金额区间、角色结构、active 财务持有人和 CEO 身份,任一漂移即停止。
- 生产回填不改员工角色、直属主管、既有报销审批快照、密码、企微 binding 或企微通讯录。
- 公网验证只创建一条由 CEO 本人发起的低风险测试报销时,必须再次取得真实业务写入批准;本任务默认只做规则只读解析/smoke,不自动创建真实报销。
Acceptance Criteria
- 后端工作流单元测试证明 CEO 本人小/中/大额快照均只有一个
finance节点。 - 无 active 非本人
finance、CEO 同时持有finance、不支持的兜底角色均失败关闭且不创建半截工作流。 - 普通员工规则快照保持
manager -> finance或manager -> ceo -> finance,无自审放宽。 - 审批规则 API 接受
finance和兼容的finance_mgr,拒绝非白名单角色;新建默认值为finance。 - 前端类型、创建/编辑选项和推荐文案支持
finance,默认选择finance,typecheck/build 通过。 - 种子默认三档规则与目标链一致,相关回归测试通过。
- 只读 review 确认权限、自审、状态机、历史快照和生产回填边界无扩大。
- 部署后公网
/ready构建号匹配,runtime smoke 和关联认证/工作流检查通过。 - 生产恰好 3 条启用规则按目标结构回填并留下脱敏审计;active 账号、角色、binding 和历史审批快照计数无意外变化。
- 当前事实源、管理员手册和任务结论不再宣称
finance_mgr是本公司推荐兜底。
Test Plan
- 后端语法、Prisma validate,以及 workflow、审批规则 API、报销提交和默认种子规则聚焦测试。
- 前端 typecheck/build 与审批规则配置页聚焦 Playwright。
- 部署环境静态合同、隔离备份恢复演练、流程合同、文档审计、Trellis task/governance 和敏感内容扫描。
- 部署后核对
/ready构建号、migration、runtime/external-deps smoke 和公网 bundle。 - 生产回填前后只读冻结规则、角色、binding、历史快照和审计计数;只读解析 CEO 三档与普通员工链,不创建真实报销。
Out of Scope
- 不删除
finance_mgr角色或改变其现有权限。 - 不给现有财务人员新增
finance_mgr、manager或其他角色。 - 不改变普通报销金额阈值,不重构通用工作流引擎,不修改历史审批快照。
- 不让
admin/system_admin获得业务审批权,不允许任何申请人自审。 - 不执行真实付款、企微写入或未经再次批准的真实 CEO 报销提交。
Technical Notes
- 后端白名单与快照:
server/src/utils/workflow.js。 - 审批规则 API:
server/src/routes/approvalRules.js。 - 默认规则:
server/src/scripts/seed-config.js。 - 前端类型和页面:
client/src/api/approvalRules.ts、client/src/pages/ApprovalRulesPage.tsx。 - 聚焦测试:
server/tests/unit/utils/workflow.test.js、server/tests/unit/routes/approvalRules.permissions.test.js、server/tests/unit/routes/reimbursements.expense-standards.test.js。