4.9 KiB
4.9 KiB
| 1 | ID | Title | Description | Acceptance | Test_Method | Tools | Dev_Status | Review1_Status | Regression_Status | Files | Dependencies | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | A1 | R92 执行合同冻结 | 把移动端不可操作和发票上传/OCR 卡住问题收敛为本轮修复范围,不扩展到新业务模块。 | Issue CSV 字段完整并通过校验。 | 命令:`python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-05_21-08-47-r92-mobile-invoice-usability.csv`。业务:确认本轮只处理手机可用性、发票上传/OCR 闭环和自动化回归。 | manual | DONE | DONE | DONE | issues/2026-05-05_21-08-47-r92-mobile-invoice-usability.csv | [] | 2026-05-05:CSV 已创建并通过校验;回滚路径:删除本轮 CSV;不影响业务代码。 |
| 3 | A2 | 修复 OCR provider 与二进制写库问题 | OCR 作业使用当前配置 provider,mock OCR 不把 PDF 二进制原文写入 JSON,避免上传后长期 pending 或失败。 | PDF/图片上传后 OCR job 可把 mock 结果稳定写库;ocr_provider 与运行配置一致;失败能进入明确 ocr_failed。 | 命令:`cd server && npm run prisma:validate && npm test -- tests/unit/jobs/ocrJob.test.js tests/unit/routes/invoicePool.upload.test.js`。业务:上传现有发票 PDF 后状态从 pending_ocr 进入 available 或明确失败。 | official-sdk|node | DONE | DONE | DONE | server/prisma/schema.prisma|server/prisma/migrations/20260505211000_r92_ocr_provider_mock/migration.sql|server/src/jobs/ocrJob.js|server/src/services/ocr/mock.js|server/src/routes/invoicePool.js|server/tests/unit/jobs/ocrJob.test.js|server/tests/unit/routes/invoicePool.upload.test.js | ["A1"] | 2026-05-05:`prisma validate` 通过,OCR/upload 单测 5 passed;涉及 OCR 任务状态和 Prisma enum 增量迁移;回滚路径:代码恢复后不再写 mock,PostgreSQL enum 新增值保留但不影响旧逻辑;必要时从发布前备份恢复数据库。 |
| 4 | A3 | 发票上传状态闭环与失败反馈 | 上传后列表/详情主动刷新 pending_ocr 状态,ocr_failed 明确提示原因并提供重试或人工修正入口。 | 用户不会长期只看到上传中或 OCR 处理中;失败原因可见;重试入口可达。 | 命令:`cd client && npm run typecheck && npm run build`;Playwright 手机视口验证上传后 pending/available/ocr_failed 文案与按钮可见。 | playwright|typescript | DONE | DONE | DONE | client/src/pages/InvoicePoolPage.tsx|client/src/pages/invoice-pool/InvoiceDetailPanel.tsx|client/src/pages/invoice-pool/InvoiceListCard.tsx|client/src/lib/invoiceOcr.ts | ["A2"] | 2026-05-05:typecheck/build 通过,R92 Playwright 手机回归 3 passed;回滚路径:恢复前端轮询和提示改动。 |
| 5 | A4 | 支持批量上传发票 | 手机上传、票据池上传、报销详情上传支持一次选择多张,按文件展示逐项进度和失败项。 | 用户可一次选择多张图片/PDF;成功/失败逐项反馈;失败不阻塞其他文件。 | 命令:`cd client && npm run typecheck && npm run build`;Playwright 验证多文件选择后逐项上传状态。 | playwright|typescript | DONE | DONE | DONE | client/src/api/invoicePool.ts|client/src/pages/MobileCapturePage.tsx|client/src/pages/invoice-pool/InvoiceUploadCard.tsx|client/src/pages/InvoicePoolPage.tsx|client/src/pages/ReimbursementDetailPage.tsx | ["A3"] | 2026-05-05:票据中心和手机上传页批量上传 Playwright 通过;优先顺序上传,避免并发压垮 OCR;回滚路径:恢复单文件上传逻辑。 |
| 6 | A5 | 手机报销列表改为卡片式可操作 | 小屏下报销列表不再使用横向表格,草稿/驳回单直接显示继续编辑按钮。 | 390px 手机视口下无横向不可达操作;草稿可直接进入详情继续编辑;列表文字不截断关键操作。 | 命令:`cd client && npm run typecheck && npm run build`;Playwright 打开 `/reimbursements?status=draft&scope=own` 验证 continue/edit 控件在 viewport 内。 | playwright|typescript | DONE | DONE | DONE | client/src/pages/ReimbursementsPage.tsx|client/src/components/patterns/ListWorkspace.tsx | ["A1"] | 2026-05-05:R92 Playwright 验证 390px 手机视口下继续编辑入口在 viewport 内;回滚路径:恢复桌面表格渲染。 |
| 7 | A6 | 移动端 Playwright 回归与中文提交 | 用手机视口覆盖报销草稿、票据上传、OCR 状态、票据池详情等路径,修复通过后分批中文提交。 | Playwright 产物保存在 output/playwright;本地构建和后端相关测试通过;commit message 中文并引用 R92 Issue ID。 | 命令:`cd client && npm run test:e2e -- tests/e2e/r92-mobile-invoice-usability.spec.ts --workers=1 --reporter=list`;补充 CLI 截图审查;`git status --short`。 | playwright|git|manual | DONE | DONE | DONE | client/tests/e2e|output/playwright|N/A | ["A2","A3","A4","A5"] | 2026-05-05:R92 Playwright 手机回归 3 passed;typecheck/build 和后端窄回归通过;输出产物未纳入 git。 |