文件
hyb-oa/.trellis/tasks/07-28-ceo-finance-fallback/prd.md
T

5.6 KiB
原始文件 Blame 文件历史

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,没有 active finance_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。