文件
hyb-oa/.trellis/tasks/08-30-reimbursement-assets-prior-approval-correction/implement.md
T

3.2 KiB

实施清单:取消报销资产事前批准强制

1. 规划与候选边界

  • PRD、design、implement 经用户审查并明确批准实施。
  • 确认当前生产仍运行 0f9f403,0017 尚未退回;0016 可由真实财务并行推进,不把真人单据用于本轮 smoke。

2. 服务端纠偏

  • 删除明细创建、编辑和提交三处 assets 批准依据强制错误。
  • 同步修复被原校验遮蔽的两处空值解引用:create 使用 body.assetPriorApprovalBasis?.trim() || null,patch 使用 targetApprovalBasis?.trim() || null。
  • 规范创建/编辑字段语义:create omitted/空白落 null;patch 现值为 null 且 omitted 保持 null、有值且 omitted 保留、显式空清除、切换非 assets 清除。
  • 保留 Prisma 列、请求 schema、详情响应和 API 兼容字段,不新增 migration。

3. PC 与移动端纠偏

  • PC editor 移除输入、状态、初始值、保存 payload 和 disabled 条件;详情表格移除展示。
  • 移动端移除 ItemFormState 字段、新建/编辑映射、保存 payload、输入、disabled 条件和卡片展示。
  • 四处 2,000 元提示统一删除“并填写事前批准依据”,保留原触发函数和提示级语义。

4. 主数据、文档与规约

  • 更新三个启用 assets seed description 为资产登记导向,确认 update/create 分支均落地且不写 account code。
  • 更新 docs/产品口径.md 和 reimbursement spec,删除不存在的强制审批制度与错误矩阵。
  • 在 reimbursement spec 记录:取消必填校验时必须检查下游依赖的非空/类型/状态假设,并覆盖真实空值路径,不能只删除前置校验。
  • 不修改既有 migration;migration 单测继续验证 nullable 与无破坏性操作。

5. 测试

  • 后端路由测试覆盖 assets 无依据可提交,以及创建 omitted→null、patch null+omitted→null、patch 有值+omitted→保留、显式清空、切换非 assets 清空;全部不得出现 500,B2 门禁不回退。
  • seed 测试断言三个 description 不含批准措辞且包含资产登记信息。
  • r111 E2E 覆盖 PC/移动无输入、无展示、可保存和四处新提示;明确关联与免票合同继续通过。
  • 运行 cd server && npm run prisma:validate 和聚焦 Vitest。
  • 运行 cd client && npm run typecheck && npm run build 及聚焦 Playwright。
  • 运行 Trellis governance、process contract、docs registry、敏感信息检查和 git diff --check。

6. 复核、提交与部署门禁

  • 实施后执行只读专项 review,重点核权限/提交门禁未误删、API 兼容和 seed 文案一致性。
  • 用户审查通过后,以中文 commit 引用 task 名,push 与部署分别取得授权。
  • 无 migration 部署仍显式记录 pre/post pending=none、init/seed 退出码 0、三条 description、B2 global on、/ready 和 bundle marker。
  • 公网合成 assets 草稿 PC/移动验证通过并清理后,才由真实财务按已批准理由退回 0017。

7. 回滚

  • 应用或 seed 验收失败时停止 0017,回滚应用到 0f9f403;不回滚数据库列、不清历史值、不改 B2 关联数据。