文件
hyb-oa/.trellis/tasks/08-29-reimbursement-expense-policy-invoice-guard/implement.md
T
wangsli faf1a0cff9
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
规划报销费用门禁生产部署(08-30-reimbursement-expense-policy-invoice-guard-deploy)
2026-08-30 00:38:46 +08:00

5.0 KiB

实施清单:报销费用口径与票据明细门禁

1. 规划门禁

  • 固定 B1+B2 同包开发、分级启用;B2 默认关闭。
  • 选择 assets “事前批准依据”字段方案,不在本轮关联 PurchaseRequest。
  • 用户批准以 2,000 元/条明细作为办公用品/办公电子设备选类提示阈值,并明确不等同于会计固定资产标准。
  • 财务负责人为会计科目映射回填责任角色;应在 B1 生产启用前提供,目标日期 2026-09-05。届时仍无正式科目表则保持 null,不得由开发猜测。
  • PRD、design、implement 经用户审查并明确批准实施。

2. Schema 与主数据

  • 新增 ExpenseType.requires_invoice 和 ReimbursementItem.asset_prior_approval_basis migration,验证既有数据默认值。
  • 逐条实现改名、停用和新建类型;同步 seed、API DTO、管理页和历史兼容测试。
  • 为费用类型补员工可读 description;将 2,000 元/条明细阈值和多件同类分开记载要求写入办公用品/办公电子设备提示。

3. B1 表单与服务端合同

  • PC/移动端展示材料要求和 assets 事前批准依据字段。
  • 服务端按权威费用类型校验 assets 字段,覆盖新增、编辑、类型切换后的清理和提交复核。
  • 基于服务端权威费用类型与金额生成 2,000 元办公用品非阻断提示,PC 员工端、移动端和财务审核视图保持一致。
  • 两项补助保持无票但需要说明/算式的现有业务合同;flag 开关两种状态均覆盖纯补助无票基线。

4. B2 双闸和关联

  • 新增 env config、feature key、DB 初始记录和诊断/审计测试,默认 hard-off/force-off。
  • flag 开启时要求发票显式选择明细并关闭自动新建;关闭时保持兼容路径。
  • 提交事务按明细聚合有效票面金额,仅对 requires_invoice=true 执行缺票/超额门禁。
  • 错误返回可定位到明细并使用员工可理解文案;财务保留差异和风险核验信息。

5. 验证与上线

  • 执行 PRD Test Plan 和 Trellis quality gate,做权限/状态/历史草稿/flag 回退专项复核。
  • B1 部署与真实单据处置顺序已调整:先部署 B1、隔离验证并启用 B2,再由真实财务统一退回 BX-20260828-0014/0016/0017/0018,避免员工在无系统指引时重复返工。
  • 已只读核对生产存量:除审批中的 4 张单据外,没有 draft/rejected assets 明细会被 B1 新校验拦住;不得批量伪造事前批准依据。
  • 首次部署只启用 B1;B2 保持关闭,完成 owner 基线和无票补助验证。
  • B2 开启必须单独获得生产配置批准;先专用账号/部门灰度,再按证据决定全局。
  • 关闭 B2 后复核旧提交路径恢复且关联数据未被删除或解绑。

6. 交接 B3

  • 汇总真实关联、差额和错误分布的脱敏结论,作为 B3 一页式信息结构输入。
  • 明确交接财务行内费用标准提示、票据—明细对应关系和差额解释,不在 B1 中提前重做审批页面。

7. 本地实施与验证记录(2026-08-29)

  • 业务实现提交:6e999d5。
  • Schema、B1、B2 代码均已实现;B2 env hard gate 和 DB 初值仍为关闭,未执行任何生产配置写入。
  • prisma validate、prisma generate、generated client 检查通过;只读 prisma migrate status 正确识别待应用 migration 20260829120000_reimbursement_expense_policy_invoice_guard。本地回归库未获 migration 写入批准,因此未执行 migrate deploy;existing-data/default/backfill 由静态 migration 合同测试覆盖。
  • 后端聚焦回归 59/59 通过;使用固定 BIFF8 Python 依赖的全量 Vitest 为 183/183 files、1329/1329 tests 通过。系统 Python 直接运行会产生既有的 3 个付款指令环境型失败,不属于本次 diff。
  • 前端 typecheck、production build 通过;r102 普通报销回归 6/6,r111 B1/B2/PC/移动/企业微信回归 3/3 通过。
  • Trellis task validate、governance、process contract、docs registry audit 和 git diff --check 通过;docs audit 保留既有的 22 个未注册文件 warning,exit 0。
  • 权限、migration、feature flag、历史兼容和 seed 科目保护已完成三轮只读专项复核,最终 PASS。复核发现并推动修复:pending OCR 关联丢失、flag-off 纯无票补助服务端门禁、PC 无票补助主操作投影。
  • 未部署 B1、未应用生产 migration、未开启 B2、未做真实数据写入;本 task 保持 in_progress,上线与 B3 交接项不得提前勾选。
  • 生产只读审计把业务处置范围扩大为 4 张审批中单据:0014 为 5 个发票日期压成 1 条明细且 B2 无法自动拦截;0016/0017/0018 存在未关联票据,0017 另有票面差额。最终顺序改为先部署 B1、隔离验证并全局启用 B2,再由真实财务统一退回,日期粒度继续依赖明确退回说明与人工复核。部署与灰度合同见子任务 08-30-reimbursement-expense-policy-invoice-guard-deploy。