文件
hyb-oa/issues/2026-05-09_20-57-19-mvp-mainline-dev-kickoff.csv

11 KiB

1IDTitleDescriptionAcceptanceTest_MethodToolsDev_StatusReview1_StatusRegression_StatusFilesDependenciesNotes
2A1MVP主线代码差距盘点对照当前 PRD 和 7 份模块规约,盘点 workflow、reimbursements、invoicePool、wecomAuth、leave、purchaseRequests、contractsRegistry、projects 等现有实现、页面、回归脚本和缺口;本 Issue 不改业务代码。1) 形成可复用实现、待修缺口和不重复造轮子的清单;2) 明确 A2-A8 的实际改动边界;3) 确认首轮默认不新增公共 API、不新增数据库表;4) 若发现必须新增接口、字段或迁移,拆独立后续 Issue。流程级验证:按 PRD 的审批、报销、企业微信入口、请假、采购、合同、项目七条主线逐项映射到现有 server/client/tests 文件;命令:rg 检索关键路由、页面和测试;命令:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-09_20-57-19-mvp-mainline-dev-kickoff.csv。ripgrep|manual|python3DONEDONEDONEserver/src/routes/*|client/src/pages/*|client/src/api/*|client/tests/e2e/*|docs/*.md[]A1 已完成只读差距盘点,不改业务代码;盘点文档:docs/MVP主线代码差距盘点.md;如后续发现需迁移或新增 API,必须另拆 Issue 并写回滚策略。
3A2统一审批中心入口与状态收口收口 PC /workflow/tasks、移动 /mobile/approvals、业务详情页审批历史和通知 deeplink 的一致性,确保正式审批动作回到 OA 完成。1) 待办、已办、业务详情页状态一致;2) 审批动作通过、驳回、退回、撤回、转审仍写入 OA 工作流历史;3) 企业微信消息只 deeplink 回 OA,不出现企业微信原生审批入口;4) 并发或已处理任务有明确提示。流程级验证:提交一条报销或请假审批 -> PC 待办处理 -> 移动待办同步消失或进入已办 -> 业务详情审批历史一致;命令:cd server && ./scripts/regression-workflow-actions.sh;命令:cd client && npm run test:e2e -- workflow-quick-approve.spec.ts mobile-approvals-offline.spec.ts。bash|npm|playwright|manualDONEDONEDONEserver/src/routes/workflow.js|server/src/utils/workflow.js|client/src/pages/WorkflowTasksPage.tsx|client/src/pages/MobileApprovalsPage.tsx|client/src/pages/WorkflowTaskDetailPage.tsx["A1"]A2 开发、审查和回归已完成;A2.1 修正详情页 pending 文案;本地 DB 漂移已通过 hyb_oa_regression 隔离库解阻;workflow 后端回归、PC 快捷审批 E2E、移动审批 E2E、client typecheck/build 均通过。
4A3报销发票OCR主链路收口收口上传、OCR 状态、查重、绑定明细、提交审批、付款标记和导出中的体验或状态缺口,优先复用现有 reimbursement 与 invoicePool 实现。1) 员工能完成报销主流程:上传发票/附件 -> OCR/查重 -> 绑定明细 -> 提交审批;2) 财务能处理重复、付款标记和导出;3) 普通用户页面不出现内部状态码、发票池、绑定整单等不应见文案;4) OCR 失败、重复、附件缺失有业务提示。流程级验证:创建报销草稿 -> 上传票据 -> OCR 进入终态 -> 绑定明细 -> 提交审批 -> 审批通过 -> 财务付款/导出;命令:cd server && ./scripts/regression-dedup.sh && ./scripts/regression-ocr.sh;命令:cd client && npm run test:e2e -- r102-reimbursement-main-flow.spec.ts invoice-ocr-flow.spec.ts。bash|npm|playwright|manualDONEDONEDONEserver/src/routes/reimbursements.js|server/src/routes/invoicePool.js|server/src/routes/invoicePool/*|client/src/pages/ReimbursementDetailPage.tsx|client/src/pages/InvoicePoolPage.tsx|client/src/pages/reimbursement-detail/*|client/src/pages/invoice-pool/*["A1","A2"]A3 已完成:前端收口报销/票据/OCR文案、隐藏内部码值和 UUID 兜底、财务导出不再面向报销页显示 ERP 术语;未新增 API、未新增迁移、未改变 OCR provider 或状态机。验证通过:prisma validate、node --check reimbursements/invoicePool、regression-dedup、regression-ocr、client typecheck/build、E2E 报销主流程+invoice-ocr-flow,视觉截图 output/playwright/a3-reimbursement-ocr。
5A4企业微信入口绑定通知回OA收口企业微信 config、登录/绑定、移动落点、通知 deeplink 和脱敏消息,企业微信只作为入口、身份、通知和打卡原始采集边界。1) 企业微信手机入口默认进入 /mobile;2) 已绑定用户直达,未绑定可回退账号密码;3) 停用员工不得从企业微信进入业务系统;4) 通知内容脱敏且 deeplink 回 OA;5) 通知失败不阻断主业务。流程级验证:模拟企业微信 UA 访问入口 -> 已绑定进入移动工作台 -> 未绑定回退账号密码 -> 通知 deeplink 打开 OA 审批页;命令:cd client && npm run test:e2e -- wecom-entry.spec.ts wecom-first-bind.spec.ts r124-mobile-entry-matrix.spec.ts;后端补 node --check src/routes/wecomAuth.js。npm|playwright|node|manualDONEDONEDONEserver/src/routes/wecomAuth.js|server/src/services/notifications/*|client/src/lib/wecomEntry.ts|client/src/lib/runtimeContext.ts|client/src/lib/notificationLinks.ts["A1","A2"]A4 已完成:企业微信入口测试默认 /mobile;通知 deeplink 限定为 OA 相对路径并补回归;未接企业微信原生审批、飞书或打卡同步;真实企业微信凭据/真机 live smoke 留到 A8,缺配置时 SKIP。
6A5请假补卡外出加班审批与考勤口径优先收口现有请假审批、团队状态、日历展示和考勤解释边界;首轮不做企业微信打卡 API 同步,不重造定位、人脸、Wi-Fi 或排班。1) 请假审批状态正确;2) 已批准请假影响团队状态或日历展示;3) 补卡、外出、加班若现有实现不足,先记录缺口或做最小入口收口;4) 文案不引导员工去企业微信原生审批。流程级验证:员工提交请假 -> 主管/HR 在 OA 审批 -> 团队状态或日历体现结果 -> 驳回/撤回后状态正确;命令:cd client && npm run test:e2e -- leave-flow.spec.ts leave-team-calendar.spec.ts;命令:cd server && node --check src/routes/leave.js。npm|playwright|node|manualDONEDONEDONEserver/src/routes/leave.js|server/src/services/leave.js|client/src/pages/LeaveRequestPage.tsx|client/src/pages/MobileLeavePage.tsx|client/src/pages/TeamPresencePage.tsx["A1","A2"]A5 已完成:未接企业微信打卡同步,未新增定位、人脸、Wi-Fi 或排班;E2E 修正为适配 A2 后的业务摘要/已处理状态展示,并使用远期动态日期避免历史回归数据冲突;通过 node --check、client typecheck/build、leave-flow、leave-team-calendar 和视觉截图 output/playwright/a5-leave-attendance。
7A6P1采购合同项目最小可用收口只做现有 P1 能力的最小可用检查和缺口修复,不扩展预算、支付、ERP、AI、复杂招采或重型项目管理。1) 采购/费用可申请并进入 OA 审批;2) 合同台账可登记、查询、记录编号、负责人和归档位置;3) 项目能关联关键事项并展示摘要;4) P2 能力不作为普通员工主路径。流程级验证:创建采购申请 -> OA 审批 -> 项目页查看关联;登记合同台账 -> 查询合同摘要;项目页查看任务/里程碑/风险/业务关联;命令:cd server && ./scripts/regression-procurement.sh;命令:cd client && npm run test:e2e -- procurement-flow.spec.ts project-workbench.spec.ts;合同台账执行人工或补 E2E。bash|npm|playwright|manualDONEDONEDONEserver/src/routes/purchaseRequests.js|server/src/routes/contractsRegistry.js|server/src/routes/projects.js|client/src/pages/PurchaseRequestsPage.tsx|client/src/pages/ContractsRegistryPage.tsx|client/src/pages/ProjectsPage.tsx|client/src/pages/ProjectDetailPage.tsx["A1","A2"]A6 已完成:采购 E2E 修正为按审批任务 deeplink/href 定位,不依赖 UUID 主展示;项目 E2E 在 PROJECT_* 本地开关启用后通过;合同台账以 routes/contractsRegistry 与 exports/contractsRegistry 单测覆盖登记、查询、续约和导出。验证通过:regression-procurement、client typecheck/build、procurement-flow、project-workbench、contractsRegistry 单测;未扩展预算/ERP/AI/复杂招采/重型项目管理。
8A7权限导航与备用模块护栏按当前 MVP 路线整理普通员工、财务、主管、管理员的导航和权限可见性,避免备用模块干扰主线。1) 普通员工不见预算、AP、ERP、AI、完整差旅等首批不开放主路径;2) 审批、报销、请假、企业微信移动入口清晰可达;3) 财务、主管、管理员入口与权限边界符合 PRD;4) 服务端权限仍是最终授权依据。流程级验证:分别用员工、主管、财务、管理员账号登录 -> 检查导航、入口和关键页面可访问性 -> 普通员工不可访问备用模块主路径;命令:cd client && npm run typecheck && npm run build;命令:cd client && npm run test:e2e -- settings-governance.spec.ts login-portal-ux.spec.ts。npm|playwright|manualDONEDONEDONEclient/src/layouts/AppShellLayout.tsx|client/src/features/mobile/navigation.ts|client/src/auth/permissions.ts|server/src/routes/systemWorkspace.js|server/src/scripts/seed-config.js["A1","A2"]A7 已完成:收紧服务端导航和前端兜底导航,普通员工不再通过导航看到完整差旅、票据中心、合同台账、预算/AP/ERP/仪表盘等备用主路径;采购仍保留为 P1 可用入口。验证通过:node --check workspaceSettings、workspaceSettings.navigation 单测、client typecheck/build、settings-governance、login-portal-ux、r110-mobile-pc-routing。
9A8回归门禁与试运行证据收口汇总 A2-A7 的自动化、手工和 SKIP 条件,形成首轮开发完成门禁和是否进入部署试运行的判断依据。1) server/client 本地检查通过;2) 关键业务流回归结果可追溯;3) 公网、企业微信真机、真实 OCR 缺配置时明确 SKIP;4) 可判断是否进入部署和公网试运行;5) Issue CSV 状态按验证结果回填。流程级验证:执行统一审批、报销/OCR、企业微信入口、请假、采购/合同/项目和权限导航的组合回归;命令:cd server && ./scripts/regression-all.sh;命令:cd client && npm run build;命令:bash scripts/qa/run-web-gates.sh smoke-local;命令:node scripts/qa/check-live-smoke-env.mjs。bash|npm|node|manualDONEDONEDONEserver/scripts/*|scripts/qa/*|client/tests/e2e/*|docs/trialrun-runbook.md|issues/2026-05-09_20-57-19-mvp-mainline-dev-kickoff.csv["A2","A3","A4","A5","A6","A7"]A8 已完成本地门禁:prisma validate、regression-all、client typecheck/build、run-web-gates smoke-local 均通过;regression-all 需以本地 mock OCR + IM_NOTIFIER_ENABLED=true 启动服务。check-live-smoke-env 显示 publicReady=true、wecom=ready,但 liveSmokeReady=false、liveOcrReady=false,缺 LIVE_SMOKE_* 账号和真实 OCR 文件,公网/企微真机/真实 OCR 验证记为 SKIP;本轮未部署。