文件
hyb-oa/issues/2026-05-08_09-04-19-r111-domestic-invoice-reimbursement-guard.csv

8.2 KiB

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