文件
hyb-oa/.trellis/tasks/09-01-reimbursement-form-shared-component-migration/implement.md
T

7.4 KiB
原始文件 Blame 文件历史

Implementation Plan:B-2b 统一报销工作台迁移

Before Development

  • 用户批准最新 prd.md、design.md、implement.md。
  • 切换当前 Trellis task 到 B-2b 并运行 task.py start;实施前加载 trellis-before-dev。
  • 读取 frontend、approval workflow、reimbursement/OCR、security/privacy、code reuse 与 route manifest 规约。
  • 冻结现有 PC/移动三模式、权限/状态、路由/返回和打印页回归矩阵。
  • 记录 B-2a 当前 DOM/test-id、公共 projection、IndexedDB 投影与可回滚提交基线。

Implementation Order

  1. 先在 scripts/qa/check-ui-design-rules.mjs 建立 error 级结构门禁:PC/移动布局壳禁止 query/mutation/API/role/status/mode 请求分支;通用审批页最终禁止报销业务渲染;旧分支允许清单仅覆盖分派器,并补 self-test。
  2. 抽取统一报销头、异常模型、快照/实时差异和三模式共享展示 projection 纯函数;补正常/异常/缺失边界测试。
  3. 建立无业务状态的 PC/移动布局壳,共享模型、区块顺序、ReimbursementItemEvidenceList 与 capability 合同;PC 实现右栏 sticky,移动实现卡片 + 底部安全区,不复用同一 DOM 或引入 isMobile 业务分支。
  4. 在 PC/移动 task route 建立唯一 task detail 查询和授权后实体分派;把同一 query result/refetch 入口移交渲染器,报销进入 approval adapter,非报销继续通用详情;避免重复 task 查询和通用页闪现。
  5. 建立 approval adapter:消费已移交的 task detail,另取实时报销 detail,迁移 allowedActions、快照、task 刷新策略、fail-closed、退回引用、材料查看与 IndexedDB/离线合同。
  6. 删除 WorkflowTaskDetailPage 与 MobileApprovalsPage 的报销业务内容、检查、右栏摘要和休眠兜底;立即跑非报销审批回归。
  7. 建立 readonly adapter,把获准只读报销详情、材料查看和处理进度接入同一工作台,不请求参与人 precheck,不注入 mutation。
  8. 建立 edit adapter,迁移表头/明细/票据/附件维护、票据抽屉、未归属恢复、提交前检查和 B2 阻断后再次提交;所有能力通过 capability 注入。
  9. 删除 PC/移动旧明细表格、旧报销材料分组和被替代 helper/test fixture;确保最终候选无双实现或 feature flag 兜底。
  10. 落实七条信息收敛:紧凑头、唯一事由、正常项隐藏、异常就近、差异条件显示、右栏去重、动作解释按需;补可访问性和锚点/focus 回归。
  11. 回归 /reimbursements/:id/print,证明打印页未被工作台拆分误伤且没有获得交互 mutation。
  12. 更新与新合同冲突的父任务、frontend/approval/reimbursement spec 或产品事实源;不顺带处理无关治理债。

Verification Matrix

Structural

  • check-ui-design-rules.mjs --strict 对 PC/移动壳中的 useQuery|useMutation|api/|roleCodes|hasPermission|workflow status|reimbursement status|mode === 命中报 error(仅显式视觉 allowlist 可例外),并由 self-test 证明规则有效。
  • task route 每次详情加载只发一份授权 task detail 查询;approval adapter 复用该结果和 refetch 入口,不产生同 key 重复请求。
  • 三适配器 capability 快照准确:edit 有维护/提交、approval 有查看/引用/决策、readonly 只有查看。
  • 通用 PC/移动审批详情不再导入报销证据组件或包含报销摘要/检查文案;唯一 reimbursement 判断位于授权分派层允许清单。
  • 旧明细表/材料布局与休眠测试 fixture 删除,没有双实现 flag。

Behavior

  • PC/移动 edit:draft/rejected 新增/编辑/删除明细、PDF 发票上传/选择、关联/解绑、未归属恢复、附件维护、提交预检、B2 阻断、修复后再次提交。
  • PC/移动 readonly:参与人 reviewing 与非参与人获准查看;无维护、无审批能力;材料权限/审计不变。
  • PC/移动 approval:pending/已处理、快照 ready/missing/invalid、detail failure、材料单项 failure、退回引用、approve/return/reject/transfer 和联网 fail-closed。
  • 非报销 workflow:请假、补卡、采购、差旅通用详情和移动离线草稿保持基线。
  • 路由:列表进入、通知深链、刷新、后退、移动分流、无权 403/不泄露、无返回循环。
  • 信息:正常 fixture 无“0 条”检查/常驻动作解释;异常 fixture 每项都有对象、原因、影响、下一步和可聚焦锚点;只有快照/实时不一致时出现差异。

Commands

  • 相关前端单元/组件/Playwright;cd client && npm run typecheck && npm run build。
  • node scripts/qa/check-ui-design-rules.mjs --strict 与 --self-test。
  • route manifest/candidate gate、相关后端 B2/workflow/detail/material tests、cd server && npm run prisma:validate。
  • python3 ./.trellis/scripts/task.py validate 09-01-reimbursement-form-shared-component-migration。
  • node scripts/qa/check-process-contract.mjs --baseline --json、node scripts/qa/check-trellis-governance.mjs、敏感内容检查、docs registry(如需)、git diff --check。
  • 因涉及 workflow 分派、权限/状态和报销动作,实施后执行只读 review;inline 模式由主会话完成,不派发 implement/check 子代理。

验证说明:移动离线专项的默认 iPhone 设备配置会选择本机未安装的 WebKit;本轮按既有口径改用 Chromium + iPhone 视口执行,3/3 通过。该结果验证 IndexedDB、离线分流和 fail-closed 合同,不替代 Safari/WebView 渲染验收。

Commit and Deployment Boundary

  • 代码检查通过后按中文 task 引用提交;task 元数据回填独立提交,不 amend。
  • 未经明确授权不 push、不部署、不写生产数据。
  • 部署候选无 migration/schema/flag/seed;使用既有生产入口与独立回滚基线。
  • 公网用合成三模式任务验证,不碰 0016/0017/0018 或其他真人单据。
  • 部署与真人反馈完成前,B-2b 和父任务都不得归档。

Post-deployment KISS Closeout

  1. 把当前嵌套 ReimbursementItemEvidenceList 拆为共享行 projection、PC 明细表、移动明细卡和独立票据/附件区;不改壳、适配器查询或后端合同。
  2. PC 审批/只读明细行清零常驻动作;编辑态收敛为单一编辑入口,删除进入编辑流程或二次确认。
  3. 文件名/文件行成为唯一查看入口,删除重复“查看原件/查看附件”;保留区块级“查看完整材料”及异常票据就地恢复。
  4. 将明细/票据引用能力移入退回编辑区,异常对象优先,全部对象按需展开;关闭或切换动作时保持现有意见状态合同。
  5. 更新 PC/移动三模式与 B2 测试:正常行零动作、材料分组、单一查看入口、退回渐进披露、问题锚点、未归属恢复、键盘/触控/横屏。
  6. 复跑 typecheck/build、UI strict/self-test、相关 Playwright、B2/workflow 后端回归、治理与部署门;重新提交、push、部署均须分别批准。

Rollback Points

  • 适配器接线或非报销回归失败:停止在本地,不删除旧分支,修正后重新验证。
  • 最终旧分支删除后检查失败:回到本任务候选前提交,不引入运行时双轨 flag。
  • 公网验收失败:回滚到 B-2a 生产基线,保留数据库与业务数据不变。