文件
hyb-oa/.trellis/tasks/09-02-reimbursement-readonly-content-consistency/implement.md
T

4.7 KiB
原始文件 Blame 文件历史

Implementation Plan:报销只读内容一致性与审批上下文收敛

Entry Gate

  • 用户已批准“先改进、后由 AC11 验收”的最新规划摘要,并运行 task.py start。
  • 实施前加载 trellis-before-dev,读取 frontend、reimbursement、workflow、privacy 和 UI QA 规约。

Implementation Order

  1. 在共享工作台模型增加 ReimbursementAmountSummary,以服务端 totalAmount 作为唯一展示总额;用严格十进制分值解析生成仅用于完整性判断的状态。
  2. 扩展共享费用明细组件:PC 添加语义 tfoot,移动添加等价汇总行;edit/readonly/approval 均由同一模型注入。
  3. 把 mismatch/金额不可解析转为各自准确、可定位的 blocking issue,并接入审批 readiness 二次拦截;不提供手工改总额入口,不改变服务端合同。
  4. PC approval 将完整历史从主列移到右栏动作卡之后,动作卡保持独立 sticky;移动历史位置不变。
  5. 明确正文/上下文负向结构证据:三模式正文不得各自汇总金额;打印元数据不得进入工作台;审批上下文不得进入 edit/readonly 正文一致性断言。
  6. 更新 docs/产品设计规则.md 的历史布局规则:短审批流程可在 PC 右栏动作之后展示完整历史且主列不重复,移动仍在正文末尾;保留长流程使用主列的通用边界。
  7. 更新相关 PC/移动三模式、打印、权限、B2、离线和非报销回归;不修改真人单据。

Verification

  • 纯函数:权威总额透传;0、小数、千位、非法金额、正常一致、mismatch、unavailable;使用整数分比较,无浮点误差。
  • 组件:PC tfoot 的 colspan 随 edit 操作列正确;移动汇总语义等价;三模式显示值一致;正常状态无额外说明。
  • 审批:mismatch 四动作 fail-closed;右栏动作在 6 条历史和长意见下保持可达;主列 timeline 为 0;历史只出现一次。
  • 处理语义:普通详情仍有 ProcessingProgress 与唯一付款批次入口;审批 timeline 不出现未来阶段;同一已发生事件的动作、人员、时间、结果一致。
  • 回归:edit 能维护、readonly 无维护、approval 无报销维护、B2 未归属恢复、打印合计/审批记录/二维码/打印元数据、移动离线白名单和非报销审批。
  • cd client && npm run typecheck && npm run build。
  • node scripts/qa/check-ui-design-rules.mjs --strict 与 --self-test。
  • 相关 Playwright:1280px、375px、横屏、三模式、长历史、完整性故障、打印回归。
  • python3 ./.trellis/scripts/task.py validate 09-02-reimbursement-readonly-content-consistency。
  • node scripts/qa/check-process-contract.mjs --baseline --json、node scripts/qa/check-trellis-governance.mjs、敏感内容检查、docs registry、git diff --check。

Review and Delivery Boundary

  • 涉及 workflow 决策 readiness,实施后执行只读 review;inline 模式不派发 implement/check 子代理。
  • 无 schema、migration、flag、seed 或生产数据写入。
  • commit、push、部署分别等待明确批准;部署后仅用公网真实 bundle + 合成 API 和生产只读事实验收。
  • 本子任务部署不替代父任务 AC11 真人反馈;AC11 未完成时父任务继续保持开放。

Rollback

  • 模型或 fail-closed 回归失败:停止在本地,恢复到本任务前候选,不引入 feature flag 双轨。
  • PC 历史布局影响动作可达:保留移动行为,PC 回到主列 timeline,再复核右栏结构。
  • 公网验收失败:回滚应用候选,不处理业务数据。

Local Verification Evidence

  • npm run build:PASS(包含 typecheck 与 Vite production build)。
  • workflow-action-confirm-ui.spec.ts:7/7 PASS,覆盖正常负向断言、两类完整性故障四动作 fail-closed、PC 六条长历史和移动 375px/横屏安全区。
  • r102-reimbursement-main-flow.spec.ts:6/6 PASS;r111-invoice-reimbursement-guard.spec.ts:8/8 PASS。
  • 共享模型/结构合同:13/13 PASS;移动报销离线缓存专项以 Chromium iPhone 视口 1/1 PASS。WebKit 浏览器二进制未安装,因此原 WebKit 命令为环境 PAUSED,不改测试口径。
  • UI strict/self-test、task validate、process contract、Trellis governance、敏感内容、docs registry(保留既有 22 个未登记文件 warning)和 git diff --check 均通过。
  • bash scripts/check-minimal.sh 的本轮相关检查通过;全量后端为 1364/1368,4 条失败均不在本任务改动面:3 条因当前 Python 缺少固定 BIFF8 依赖,1 条是 HEAD 已存在的通用审批页结构断言漂移。本任务不修改 server、付款导出或通用审批页。