ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes F1,OCR定向任务与调度提速,"上传或重新识别后立即投递单张OCR任务,周期tick只作为兜底;修正pg-boss OCR singleton导致的慢触发风险。","1) 上传后无需等待长周期tick即可处理;2) 定向任务可按invoiceId处理;3) 周期扫描仍保留兜底;4) 不把OCR同步塞进上传HTTP请求。","业务流程:票据中心上传真实/模拟发票->后台OCR立即处理->票据状态变化;步骤:后端单测覆盖入队、定向处理、周期兜底;本地mock OCR上传后状态在预期时间内变化。","node|prisma|pg-boss",TODO,TODO,TODO,"server/src/routes/invoicePool.js|server/src/jobs/pgBossJobs.js|server/src/jobs/ocrJob.js|server/tests","[]","不改腾讯密钥;如定向任务异常,可回退周期tick。" F2,OCR完成事件与前端自动刷新,"OCR完成后发布票据更新事件,前端事件优先刷新票据详情、列表、PC报销详情和移动报销详情;SSE失败时回退自适应轮询。","1) 票据中心无需手动刷新;2) PC/移动报销详情无需手动刷新;3) 企业微信WebView下SSE失败不阻断;4) 事件只触发refetch,不直接渲染敏感payload。","业务流程:上传发票->OCR完成->页面自动变化;步骤:Playwright模拟SSE成功、SSE断开、轮询兜底。","react|playwright|sse",TODO,TODO,TODO,"server/src|client/src/hooks|client/src/pages|client/tests/e2e","[""F1""]","先用SSE,WebSocket暂不引入;保留轮询兜底。" F3,OCR状态文案与重复票据体验,"把重复票据从识别失败中拆出,展示已识别字段和下一步动作。","1) 重复票显示“已识别但重复”,不再泛化为OCR失败;2) 展示发票号码、销售方、金额、日期;3) 普通用户不见原始码值;4) 财务仍可走判重例外。","业务流程:重复发票上传->识别字段展示->重复原因明确;步骤:真实PDF重复样本和mock重复样本Playwright断言。","react|playwright",TODO,TODO,TODO,"client/src/pages|client/src/lib/invoiceOcr.ts|client/tests/e2e","[""F1"",""F2""]","不放宽判重规则,只修正用户解释和下一步动作。" F4,PC报销详情慢OCR自动添加,"PC报销详情取消60秒后要求用户刷新,改为持续自动刷新并在available后自动添加。","1) 65秒慢OCR完成后PC报销详情自动绑定发票;2) 移动端体验保持一致;3) 超长等待展示“系统仍在自动刷新”;4) 用户可继续操作其他区域。","业务流程:PC报销草稿->上传发票->慢OCR->自动添加;步骤:mock OCR延迟65秒Playwright。","playwright|react",TODO,TODO,TODO,"client/src/pages/ReimbursementDetailPage.tsx|client/src/pages/MobileReimbursementDetailPage.tsx|client/tests/e2e","[""F2""]","解决“识别中没变化、没有反馈”的核心体验。" F5,公网真实OCR与pending卡住扫描,"把真实PDF OCR smoke和pending OCR卡住扫描变成发布后固定证据。","1) 公网真实OCR输出耗时、终态、字段、重复原因;2) 可列出超过2/5/10分钟pending票据;3) 报告不泄露票据图片和密钥。","业务流程:发布后OCR健康检查;步骤:node scripts/qa/check-pending-ocr.mjs;PLAYWRIGHT_OCR_LIVE_FILE= E2E_BASE_URL=https://oa.hyinda.com npx playwright test live-invoice-ocr.spec.ts。","node|playwright|curl",TODO,TODO,TODO,"scripts/qa|client/tests/e2e/manual|docs/trialrun-runbook.md","[""F1"",""F2"",""F3""]","真实企业微信登录由人工已验,不作为本项阻塞。" F6,项目级异步UX审计,"扫描并审计类似OCR的异步流程:验真、支付批次、ERP同步、导入、审批、离线队列、附件上传。","形成异步UX问题清单:是否有进度、是否自动更新、是否有终态、失败原因、重试入口、用户下一步;高风险项进入后续Issue。","业务流程:全项目异步体验审计;步骤:读取路由、页面、任务脚本和E2E;输出docs/trialrun/async-ux-audit.csv。","manual|node|playwright",TODO,TODO,TODO,"docs/trialrun/async-ux-audit.csv|client/src|server/src/jobs|scripts/qa","[]","只审计和规划,不顺手改业务代码。" F7,异步体验规则固化,"把OCR和项目级异步体验规则固化到产品规则、报销票据规则、试运行runbook和项目skill。","1) 文档明确异步任务体验契约;2) OCR/验真/支付/ERP/导入统一规则;3) hyb-oa-delivery skill加入检查项;4) 后续交付必须引用这些规则。","业务流程:交付规范治理;步骤:更新docs/reimbursement-invoice-rules.md、docs/product-design-rules.md、docs/trialrun-runbook.md、docs/agent-development-practices.md、.agents/skills/hyb-oa-delivery/SKILL.md并验证skill。","docs|manual",TODO,TODO,TODO,"docs/reimbursement-invoice-rules.md|docs/product-design-rules.md|docs/trialrun-runbook.md|docs/agent-development-practices.md|.agents/skills/hyb-oa-delivery/SKILL.md","[""F6""]","规则包括:事件优先、轮询兜底、终态反馈、失败原因、下一步动作、码值隐藏、部署后真实证据。" F8,回归部署与公网复核,"完成F1-F7后执行完整回归、提交、部署和公网复核。","project-wide gate通过;部署成功;/ready正常;公网OCR smoke有结果;Issue状态回填DONE;明确可去企业微信/公网测试。","业务流程:交付闭环;步骤:prisma validate、client typecheck/build、project-wide release gate、deploy/trialrun/deploy.sh、/ready、wecom config、public bundle scan、live OCR。","bash|npm|curl|playwright|git",TODO,TODO,TODO,"issues|client|server|scripts|docs|deploy","[""F1"",""F2"",""F3"",""F4"",""F5"",""F6"",""F7""]","面向用户可测改动必须部署后再通知测试。"