@@ -0,0 +1,12 @@
ID , Title , Description , Acceptance , Test_Method , Tools , Dev_Status , Review1_Status , Regression_Status , Files , Dependencies , Notes
A1 , " 现有发票数据与重复风险审计 " , " 只读审计当前发票池重复记录,按 file_sha256、invoice_code+invoice_number、owner、status、linked_reimbursement_id 输出影响范围。 " , " 1) 生成重复发票统计;2) 区分未用、已绑定、已归档、识别失败、跨人重复;3) 不修改数据库。 " , " 命令:只读 SQL 或 Node 脚本统计 invoice_pool;业务流程:确认当前重复发票是否会影响新报销单添加。 " , " postgres:query|psql|node " , DONE , DONE , DONE , " scripts|artifacts|server/src " , " [] " , " 已执行 node src/scripts/audit-invoice-pool-duplicates.js;生产数据不自动删除。 "
A2 , " 国内报销双端能力契约 " , " 冻结 PC 与手机端报销功能一致规则,明确发票、附件、明细、删除、提交、风险提示在两端都必须具备,并参考 www.hyinda.com 的品牌视觉。 " , " 1) 文档列出 PC/移动同能力清单;2) 文案禁用发票池、绑定整单、ERP 同步等不适合普通用户的表达;3) 后续实现按此验收;4) 页面色彩和控件气质参考公司主页。 " , " 人工阅读 docs/product-design-rules.md;业务流程:同一报销草稿在 PC 和企业微信内可完成同样业务动作,视觉上符合海音达品牌。 " , " manual " , DONE , DONE , DONE , " docs/product-design-rules.md|issues " , " [] " , " 已补 Hyinda 官网视觉基线;官网视觉抓取证据在 output/playwright/r111-hyinda-design。 "
A3 , " 公司级发票上传查重准入 " , " 上传阶段按公司级 file_sha256 查重,重复文件不再产生新的可用发票,已使用发票直接返回不可添加原因。 " , " 1) 同一公司内相同文件不会新增重复 available 发票;2) 已绑定或已报销文件再次上传显示已报销不可用;3) PC/手机响应一致。 " , " 后端测试:重复上传同一 PDF、上传已绑定发票、跨用户上传同一文件;业务流程:员工不能通过重复上传绕开发票规则。 " , " node|prisma|supertest " , DONE , DONE , DONE , " server/src/routes/invoicePool.js|server/src/routes/invoicePool|server/tests " , " [ "" A1 "" , "" A2 "" ] " , " 已补单测;强 DB 约束等清理旧数据后再考虑。 "
A4 , " OCR完成后发票号码查重 " , " OCR 识别出发票代码、号码或数电票号码后进行公司级查重,重复、已报销、他人已用发票进入不可添加状态。 " , " 1) OCR 后重复票不会进入可添加列表;2) 他人已报销发票不可添加;3) 状态原因可被前端展示。 " , " 后端测试:模拟 OCR 返回重复发票号码;业务流程:OCR 完成后页面自动显示重复或已报销原因。 " , " node|prisma|tencentcloud-sdk-nodejs " , DONE , DONE , DONE , " server/src/jobs/ocrJob.js|server/src/services/ocr|server/src/routes/invoicePool " , " [ "" A3 "" ] " , " 管理员例外处理保留审计字段,但普通流程不开放。 "
A5 , " 添加发票后端强约束与自动明细 " , " 统一 PC/移动添加发票接口,服务端校验本人、状态、重复、已报销、明细归属,并支持自动生成或匹配报销明细。 " , " 1) available 且未使用发票才能添加;2) linkedItemId 必须属于当前报销单;3) 无明细时自动生成明细;4) 绕过前端也不能绑定非法发票。 " , " 后端回归:合法添加、已报销票、他人票、重复票、非法 linkedItemId、自动生成明细;业务流程:添加发票即形成可提交明细。 " , " node|prisma|regression " , DONE , DONE , DONE , " server/src/routes/invoicePool*.js|server/src/routes/reimbursements.js|server/scripts " , " [ "" A4 "" ] " , " 已用 invoicePool.travel-bind.test 覆盖自动明细和非法 linkedItemId。 "
A6 , " 统一发票状态查询与自动刷新 " , " 新增或完善批量发票状态查询,PC 和手机上传后都能看到识别中、可添加、已添加、重复、已报销不可用、识别失败。 " , " 1) 上传后不再只刷新可绑定列表;2) OCR 终态自动刷新;3) 失败或重复原因明确;4) 刷新按钮有明显反馈。 " , " Playwright: mock pending、success、ocr_failed、duplicate、used;业务流程:企业微信上传后状态自动变化,不再长时间误显示上传中。 " , " typescript|playwright " , DONE , DONE , DONE , " client/src/api/invoicePool.ts|client/src/pages/ReimbursementDetailPage.tsx|client/src/pages/MobileReimbursementDetailPage.tsx " , " [ "" A5 "" ] " , " 已新增 /api/invoice-pool/status 批量接口并补 Playwright。 "
A7 , " PC端发票流程一致改造 " , " PC 报销详情同步采用国内轻表达,支持上传、状态、重复提示、自动明细、移除发票,不暴露绑定整单等内部概念。 " , " 1) PC 可完成与手机一致的发票能力;2) 添加发票弹窗简洁;3) 已添加发票可读、可移除;4) 已报销和重复状态不可误操作。 " , " Playwright PC:创建草稿、上传发票、查看状态、添加到明细、移除、重复票阻断;视觉截图检查文案和按钮一致性。 " , " typescript|playwright " , DONE , DONE , DONE , " client/src/pages/ReimbursementDetailPage.tsx|client/src/pages/invoice-pool|client/tests/e2e " , " [ "" A6 "" ] " , " PC 截图证据在 output/playwright/r111-invoice-reimbursement。 "
A8 , " 手机企业微信发票流程一致改造 " , " 手机端去掉绑定整单和搜索式添加,改为添加发票、查看本次上传状态、自动生成明细、可用发票选择。 " , " 1) 企业微信内不出现绑定整单;2) 添加发票不会默认弹键盘搜索;3) 底部操作区紧凑;4) 上传后终态自动展示。 " , " Playwright mobile/wecom UA:上传、状态轮询、重复票、失败票、自动明细、视觉截图。 " , " typescript|playwright " , DONE , DONE , DONE , " client/src/pages/MobileReimbursementDetailPage.tsx|client/tests/e2e " , " [ "" A6 "" ] " , " 移动端截图证据在 output/playwright/r111-invoice-reimbursement。 "
A9 , " 报销附件材料轻量能力 " , " 新增报销附件材料能力,用于支付截图、合同、订单、说明等非发票材料;PC 和手机都可上传、查看、草稿删除。 " , " 1) 支持多附件上传;2) 附件不参与发票 OCR 和发票查重;3) 草稿可删除;4) 提交后审批人可查看;5) PC/手机能力一致。 " , " 后端测试:上传、列表、下载、删除权限;Playwright:PC 和手机上传附件、提交后审批详情可见。 " , " node|prisma|typescript|playwright " , DONE , DONE , DONE , " server/prisma/schema.prisma|server/src/routes/reimbursements.js|client/src/pages/ReimbursementDetailPage.tsx|client/src/pages/MobileReimbursementDetailPage.tsx " , " [ "" A2 "" , "" A5 "" ] " , " 新增迁移 20260508091500_reimbursement_attachments;回滚为删除附件表及 Employee/ReimbursementForm 关系字段。 "
A10 , " 风险与同步信息架构降级 " , " 把报销详情的风险与同步改为预算与审核提示,普通用户默认隐藏 ERP 同步;ERP 集成入口仅在配置开启且有权限时显示。 " , " 1) 报销详情不再对普通用户显示 ERP 同步;2) 风险项改成审核提示;3) 系统设置中的 ERP 入口默认隐藏或降级为外部系统集成;4) 后端集成能力保留。 " , " Playwright PC/移动:普通用户、管理员、integration.manage 权限分别访问报销详情和系统入口;业务流程:无 ERP 公司不看到重型同步概念。 " , " typescript|playwright " , DONE , DONE , DONE , " client/src/pages/ReimbursementDetailPage.tsx|client/src/pages/ErpIntegrationPage.tsx|client/src/router|client/src/components/navigation " , " [ "" A2 "" ] " , " 不删除后端 IntegrationOutbox;普通用户默认隐藏重型同步概念。 "
A11 , " R111自动化视觉回归与中文分批提交 " , " 执行后端回归、前端 typecheck/build、PC/移动/企业微信 UA Playwright、视觉截图,并按中文分批提交。 " , " 1) Issue CSV 校验通过;2) server 回归通过;3) client typecheck/build 通过;4) PC 和移动视觉截图通过;5) 中文 commit 引用 R111/Ax。 " , " 命令:validate Issue CSV、server regression-all、client typecheck/build、Playwright PC/mobile/wecom、视觉截图;业务流程:发票、附件、重复票、已报销票、提交审批完整回归。 " , " python|npm|playwright|git " , DONE , DONE , TODO , " issues|server|client|scripts|artifacts " , " [ "" A3 "" , "" A4 "" , "" A5 "" , "" A7 "" , "" A8 "" , "" A9 "" , "" A10 "" ] " , " Issue CSV 校验、单测、typecheck/build、Playwright 已通过;regression-all 阻塞于本地数据库迁移历史分叉和 employees.avatar_path 缺失,需单独处理后重跑;不提交历史脏 artifacts。 "