docs: 完成治理文档与执行合同收口(A1-A2,R1-R2,S1-S2,P9A1-P9D1)

这个提交包含在:
2026-02-10 11:29:20 +08:00
父节点 4e5a7793fe
当前提交 3813d1955e
共修改 9 个文件,包含 273 行新增和 17 行删除
@@ -0,0 +1,3 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
A1,新增实现状态矩阵文档,新增 docs/feature-matrix.md,汇总 P5 v3 的 45 项功能(F1-F42 + F19b/F19c/F19d),包含规格章节、完成CSV、完成日期、状态与回归覆盖信息,文档存在且可渲染;矩阵覆盖45项且ID唯一;字段包含 ID/Title/Spec_Section/Planned_CSV/Done_CSV/Done_Date/Status/Regression_Coverage/Notes,manual: 对照 issues/2026-02-09_13-39-02-p5-blueprint-v3.csv 逐项核对ID与标题;检查矩阵总数=45,manual,DONE,DONE,DONE,docs/feature-matrix.md,[],none
A2,架构文档新增矩阵链接,在 docs/architecture.md 增加实现状态矩阵链接,明确 CSV 为执行合同、矩阵为全局读图,architecture 文档包含指向 docs/feature-matrix.md 的可点击链接;原有架构内容不被破坏,manual: 打开 docs/architecture.md 检查链接可见;复核 docs/feature-matrix.md 可访问,manual,DONE,DONE,DONE,docs/architecture.md,"[""A1""]",none
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 A1 新增实现状态矩阵文档 新增 docs/feature-matrix.md,汇总 P5 v3 的 45 项功能(F1-F42 + F19b/F19c/F19d),包含规格章节、完成CSV、完成日期、状态与回归覆盖信息 文档存在且可渲染;矩阵覆盖45项且ID唯一;字段包含 ID/Title/Spec_Section/Planned_CSV/Done_CSV/Done_Date/Status/Regression_Coverage/Notes manual: 对照 issues/2026-02-09_13-39-02-p5-blueprint-v3.csv 逐项核对ID与标题;检查矩阵总数=45 manual DONE DONE DONE docs/feature-matrix.md [] none
3 A2 架构文档新增矩阵链接 在 docs/architecture.md 增加实现状态矩阵链接,明确 CSV 为执行合同、矩阵为全局读图 architecture 文档包含指向 docs/feature-matrix.md 的可点击链接;原有架构内容不被破坏 manual: 打开 docs/architecture.md 检查链接可见;复核 docs/feature-matrix.md 可访问 manual DONE DONE DONE docs/architecture.md ["A1"] none
@@ -0,0 +1,21 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
R1,历史TODO清账映射(A/C -> E/F),对 2026-02-07-p2-kickoff.csv 与 2026-02-08_14-20-25-p2-ci-and-tests.csv 的 TODO 项逐条映射到 implemented/superseded/still-open 并给出证据路径,历史 TODO 100% 有去向且可追溯到具体 CSV/代码路径,manual: 人工逐条对照旧 CSV 与最新 feature-matrix/blueprint-v3 并复核映射表,manual,DONE,DONE,DONE,docs/todo-reconciliation.md | issues/2026-02-07-p2-kickoff.csv | issues/2026-02-08_14-20-25-p2-ci-and-tests.csv,[],none
R2,规格与计划文档状态同步,修正 requirements-specification 与 implementation_plan 中与当前实现冲突的状态描述并补充引用 feature-matrix 的口径说明,两份文档状态与 feature-matrix 与 p5-blueprint-v3 一致且不改变业务语义,manual: 对照 docs/feature-matrix.md 与 issues/2026-02-09_13-39-02-p5-blueprint-v3.csv 复核文档状态项,manual,DONE,DONE,DONE,docs/requirements-specification.md | docs/implementation_plan.md,"[""R1""]",none
R3,状态一致性自动校验与CI接入,新增脚本校验 feature-matrix 与蓝图 CSV 的 ID/状态一致性并接入最小门禁,PR 执行 check-minimal 时可阻断矩阵漂移且输出可定位差异,cd /home/shunli/Projects/hyb-oa && ./scripts/check-minimal.sh,manual,DONE,DONE,DONE,scripts/validate-feature-matrix.py | scripts/check-minimal.sh | .github/workflows/ci-minimal.yml,"[""R2""]",none
V1,验真域模型与Provider抽象,新增 invoice_verification_records 模型与 provider 抽象(mock 与 tax 占位)且不破坏 OCR 流程,支持记录验真请求结果错误耗时请求人并可追溯到票据,cd server && npm run prisma:validate && node --check src/routes/invoicePool.js,manual,DONE,DONE,DONE,server/prisma/schema.prisma | server/src/services/verification/* | server/src/config.js,"[""R3""]",默认 INVOICE_VERIFICATION_ENABLED=false;provider 优先 mock
V2,验真API与异步任务(pg-boss),新增 verify/query/retry API 与 pg-boss 任务编排并写入审计日志,状态流转 pending->passed/failed/error 正确且重试频控可配置并可审计,manual: 启用 mock provider 后触发 verify 与 retry 并查询审计日志,manual,DONE,DONE,DONE,server/src/routes/invoicePool.js | server/src/jobs/pgBossJobs.js | server/src/jobs/jobSystem.js | server/src/routes/audit.js,"[""V1""]",none
V3,票据中心验真前端闭环,在 InvoicePoolPage 增加验真状态展示手动触发失败原因与权限控制,角色可见性正确状态与后端一致错误码文案可操作,cd client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,client/src/pages/InvoicePoolPage.tsx | client/src/api/invoicePool.ts | client/src/api/errorMessages.ts,"[""V2""]",none
V4,验真回归脚本与总回归接入,新增 regression-verification.sh 并通过环境变量接入 regression-all.sh,mock 模式可稳定跑通验真闭环且失败输出可定位,cd server && ./scripts/regression-verification.sh && RUN_VERIFICATION_REGRESSION=1 ./scripts/regression-all.sh,manual,DONE,DONE,DONE,server/scripts/regression-verification.sh | server/scripts/regression-all.sh | server/README.md,"[""V2"",""V3""]",none
D1,看板聚合API,新增费用总览趋势分类TopN审批效率聚合接口并支持时间与部门过滤,接口支持 dateFrom/dateTo/departmentId 且权限隔离正确,manual: 调用 dashboard API 校验过滤条件与权限边界,manual,DONE,DONE,DONE,server/src/routes/dashboard.js | server/src/app.js | server/src/constants/permissions.js,"[""R3""]",none
D2,前端Dashboard强化,在 DashboardPage 接入真实指标卡趋势图分类分布并支持 drill-down,角色可见性正确空态与错误态完整且性能可接受,cd client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,client/src/pages/DashboardPage.tsx | client/src/api/dashboard.ts,"[""D1""]",none
D3,看板导出联动,为看板统计增加 CSV/XLSX 导出并写审计,导出字段与页面过滤一致且审计可检索,manual: 调用 dashboard 导出并核对字段与审计动作,manual,DONE,DONE,DONE,server/src/routes/exports.js | client/src/pages/DashboardPage.tsx | client/src/api/exports.ts,"[""D1""]",复用现有 export 能力避免重复造轮子
B1,预算池与台账模型,新增 budget_pools 与 budget_ledger_entries 模型含周期与预警阈值,支持 allocated/used/remaining 周期统计与审计字段,cd server && npm run prisma:validate,manual,DONE,DONE,DONE,server/prisma/schema.prisma | server/prisma/migrations/*,"[""R3""]",迁移仅 ADD TABLE/COLUMN/INDEX
B2,预算API与提交流程拦截,新增预算 CRUD 查询与 submit 校验并支持 warn/block 模式开关,超阈值行为符合 BUDGET_CONTROL_MODE 且审计完整,manual: 分别在 warn/block 下提交报销验证行为与审计,manual,DONE,DONE,DONE,server/src/routes/budgets.js | server/src/routes/reimbursements.js | server/src/config.js,"[""B1""]",默认 BUDGET_CONTROL_MODE=warn
B3,预算前端运营页,新增预算管理页面与提交前预算提示条,finance/manager 可运营员工可见必要告警且不影响既有提交流程,cd client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,client/src/pages/BudgetsPage.tsx | client/src/api/budgets.ts | client/src/pages/ReimbursementDetailPage.tsx,"[""B2""]",none
B4,预算回归脚本,新增 regression-budget.sh 覆盖 warn/block 两模式并可接入总回归,脚本可重复执行稳定且失败可定位,cd server && ./scripts/regression-budget.sh,manual,DONE,DONE,DONE,server/scripts/regression-budget.sh | server/scripts/regression-all.sh | server/README.md,"[""B2"",""B3""]",none
I1,集成框架(Outbox+Adapter),建立统一出站事件与适配器重试死信框架并提供审计,事件出站重试死信可观测且业务层不直接耦合第三方,manual: 触发一条出站事件并验证重试与审计,manual,DONE,DONE,DONE,server/prisma/schema.prisma | server/src/services/integrations/* | server/src/jobs/pgBossJobs.js,"[""R3""]",优先复用 pg-boss 不引入新队列
I2,ERP最小集成(paid同步),实现 paid 报销同步 ERP 的最小适配器支持手动重推与幂等,paid 单据可同步失败可重试且可关闭回滚,manual: mock ERP 下触发同步与重推并验证幂等,manual,DONE,DONE,DONE,server/src/routes/integrations.js | server/src/services/integrations/erp/* | server/src/routes/reimbursements.js,"[""I1""]",默认 ERP_SYNC_ENABLED=false
I3,差旅单导入与报销关联,提供差旅订单导入接口与报销关联字段实现最小闭环,导入可幂等可关联可审计且失败不影响核心报销流,manual: 导入同一订单两次验证幂等并关联报销,manual,DONE,DONE,DONE,server/src/routes/travelOrders.js | server/src/services/integrations/travel/* | server/prisma/schema.prisma,"[""I1""]",默认 TRAVEL_SYNC_ENABLED=false
I4,通知渠道扩展(企微/钉钉),扩展通知 adapter 支持企微/钉钉模板发送并可开关,submit/approve/pay 可多渠道发送且失败不阻塞主流程,manual: mock channel 下触发三类事件验证发送与降级,manual,DONE,DONE,DONE,server/src/services/notifications/* | server/src/config.js | server/src/routes/notifications.js,"[""I1""]",默认 IM_NOTIFIER_ENABLED=false
S1,企业卡/虚拟卡管控预研,输出企业卡能力边界数据模型草案预算联动方案与ROI评估,形成 ADR 与 PoC 结论并给出做/不做建议,manual: 评审 ADR 文档与 PoC 记录,manual,DONE,DONE,DONE,docs/adr/adr-enterprise-card-control.md,"[""I1""]",none
S2,移动端路线决策预研,完成 PWA vs RN vs 小程序在离线拍照与上传可靠性方面的 PoC 对比,输出推荐路线成本风险与回滚路径 ADR,manual: 评审 ADR 文档与 PoC 对比表,manual,DONE,DONE,DONE,docs/adr/adr-mobile-strategy.md,"[""R3""]",none
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 R1 历史TODO清账映射(A/C -> E/F) 对 2026-02-07-p2-kickoff.csv 与 2026-02-08_14-20-25-p2-ci-and-tests.csv 的 TODO 项逐条映射到 implemented/superseded/still-open 并给出证据路径 历史 TODO 100% 有去向且可追溯到具体 CSV/代码路径 manual: 人工逐条对照旧 CSV 与最新 feature-matrix/blueprint-v3 并复核映射表 manual DONE DONE DONE docs/todo-reconciliation.md | issues/2026-02-07-p2-kickoff.csv | issues/2026-02-08_14-20-25-p2-ci-and-tests.csv [] none
3 R2 规格与计划文档状态同步 修正 requirements-specification 与 implementation_plan 中与当前实现冲突的状态描述并补充引用 feature-matrix 的口径说明 两份文档状态与 feature-matrix 与 p5-blueprint-v3 一致且不改变业务语义 manual: 对照 docs/feature-matrix.md 与 issues/2026-02-09_13-39-02-p5-blueprint-v3.csv 复核文档状态项 manual DONE DONE DONE docs/requirements-specification.md | docs/implementation_plan.md ["R1"] none
4 R3 状态一致性自动校验与CI接入 新增脚本校验 feature-matrix 与蓝图 CSV 的 ID/状态一致性并接入最小门禁 PR 执行 check-minimal 时可阻断矩阵漂移且输出可定位差异 cd /home/shunli/Projects/hyb-oa && ./scripts/check-minimal.sh manual DONE DONE DONE scripts/validate-feature-matrix.py | scripts/check-minimal.sh | .github/workflows/ci-minimal.yml ["R2"] none
5 V1 验真域模型与Provider抽象 新增 invoice_verification_records 模型与 provider 抽象(mock 与 tax 占位)且不破坏 OCR 流程 支持记录验真请求结果错误耗时请求人并可追溯到票据 cd server && npm run prisma:validate && node --check src/routes/invoicePool.js manual DONE DONE DONE server/prisma/schema.prisma | server/src/services/verification/* | server/src/config.js ["R3"] 默认 INVOICE_VERIFICATION_ENABLED=false;provider 优先 mock
6 V2 验真API与异步任务(pg-boss) 新增 verify/query/retry API 与 pg-boss 任务编排并写入审计日志 状态流转 pending->passed/failed/error 正确且重试频控可配置并可审计 manual: 启用 mock provider 后触发 verify 与 retry 并查询审计日志 manual DONE DONE DONE server/src/routes/invoicePool.js | server/src/jobs/pgBossJobs.js | server/src/jobs/jobSystem.js | server/src/routes/audit.js ["V1"] none
7 V3 票据中心验真前端闭环 在 InvoicePoolPage 增加验真状态展示手动触发失败原因与权限控制 角色可见性正确状态与后端一致错误码文案可操作 cd client && npm run typecheck && npm run build manual DONE DONE DONE client/src/pages/InvoicePoolPage.tsx | client/src/api/invoicePool.ts | client/src/api/errorMessages.ts ["V2"] none
8 V4 验真回归脚本与总回归接入 新增 regression-verification.sh 并通过环境变量接入 regression-all.sh mock 模式可稳定跑通验真闭环且失败输出可定位 cd server && ./scripts/regression-verification.sh && RUN_VERIFICATION_REGRESSION=1 ./scripts/regression-all.sh manual DONE DONE DONE server/scripts/regression-verification.sh | server/scripts/regression-all.sh | server/README.md ["V2","V3"] none
9 D1 看板聚合API 新增费用总览趋势分类TopN审批效率聚合接口并支持时间与部门过滤 接口支持 dateFrom/dateTo/departmentId 且权限隔离正确 manual: 调用 dashboard API 校验过滤条件与权限边界 manual DONE DONE DONE server/src/routes/dashboard.js | server/src/app.js | server/src/constants/permissions.js ["R3"] none
10 D2 前端Dashboard强化 在 DashboardPage 接入真实指标卡趋势图分类分布并支持 drill-down 角色可见性正确空态与错误态完整且性能可接受 cd client && npm run typecheck && npm run build manual DONE DONE DONE client/src/pages/DashboardPage.tsx | client/src/api/dashboard.ts ["D1"] none
11 D3 看板导出联动 为看板统计增加 CSV/XLSX 导出并写审计 导出字段与页面过滤一致且审计可检索 manual: 调用 dashboard 导出并核对字段与审计动作 manual DONE DONE DONE server/src/routes/exports.js | client/src/pages/DashboardPage.tsx | client/src/api/exports.ts ["D1"] 复用现有 export 能力避免重复造轮子
12 B1 预算池与台账模型 新增 budget_pools 与 budget_ledger_entries 模型含周期与预警阈值 支持 allocated/used/remaining 周期统计与审计字段 cd server && npm run prisma:validate manual DONE DONE DONE server/prisma/schema.prisma | server/prisma/migrations/* ["R3"] 迁移仅 ADD TABLE/COLUMN/INDEX
13 B2 预算API与提交流程拦截 新增预算 CRUD 查询与 submit 校验并支持 warn/block 模式开关 超阈值行为符合 BUDGET_CONTROL_MODE 且审计完整 manual: 分别在 warn/block 下提交报销验证行为与审计 manual DONE DONE DONE server/src/routes/budgets.js | server/src/routes/reimbursements.js | server/src/config.js ["B1"] 默认 BUDGET_CONTROL_MODE=warn
14 B3 预算前端运营页 新增预算管理页面与提交前预算提示条 finance/manager 可运营员工可见必要告警且不影响既有提交流程 cd client && npm run typecheck && npm run build manual DONE DONE DONE client/src/pages/BudgetsPage.tsx | client/src/api/budgets.ts | client/src/pages/ReimbursementDetailPage.tsx ["B2"] none
15 B4 预算回归脚本 新增 regression-budget.sh 覆盖 warn/block 两模式并可接入总回归 脚本可重复执行稳定且失败可定位 cd server && ./scripts/regression-budget.sh manual DONE DONE DONE server/scripts/regression-budget.sh | server/scripts/regression-all.sh | server/README.md ["B2","B3"] none
16 I1 集成框架(Outbox+Adapter) 建立统一出站事件与适配器重试死信框架并提供审计 事件出站重试死信可观测且业务层不直接耦合第三方 manual: 触发一条出站事件并验证重试与审计 manual DONE DONE DONE server/prisma/schema.prisma | server/src/services/integrations/* | server/src/jobs/pgBossJobs.js ["R3"] 优先复用 pg-boss 不引入新队列
17 I2 ERP最小集成(paid同步) 实现 paid 报销同步 ERP 的最小适配器支持手动重推与幂等 paid 单据可同步失败可重试且可关闭回滚 manual: mock ERP 下触发同步与重推并验证幂等 manual DONE DONE DONE server/src/routes/integrations.js | server/src/services/integrations/erp/* | server/src/routes/reimbursements.js ["I1"] 默认 ERP_SYNC_ENABLED=false
18 I3 差旅单导入与报销关联 提供差旅订单导入接口与报销关联字段实现最小闭环 导入可幂等可关联可审计且失败不影响核心报销流 manual: 导入同一订单两次验证幂等并关联报销 manual DONE DONE DONE server/src/routes/travelOrders.js | server/src/services/integrations/travel/* | server/prisma/schema.prisma ["I1"] 默认 TRAVEL_SYNC_ENABLED=false
19 I4 通知渠道扩展(企微/钉钉) 扩展通知 adapter 支持企微/钉钉模板发送并可开关 submit/approve/pay 可多渠道发送且失败不阻塞主流程 manual: mock channel 下触发三类事件验证发送与降级 manual DONE DONE DONE server/src/services/notifications/* | server/src/config.js | server/src/routes/notifications.js ["I1"] 默认 IM_NOTIFIER_ENABLED=false
20 S1 企业卡/虚拟卡管控预研 输出企业卡能力边界数据模型草案预算联动方案与ROI评估 形成 ADR 与 PoC 结论并给出做/不做建议 manual: 评审 ADR 文档与 PoC 记录 manual DONE DONE DONE docs/adr/adr-enterprise-card-control.md ["I1"] none
21 S2 移动端路线决策预研 完成 PWA vs RN vs 小程序在离线拍照与上传可靠性方面的 PoC 对比 输出推荐路线成本风险与回滚路径 ADR manual: 评审 ADR 文档与 PoC 对比表 manual DONE DONE DONE docs/adr/adr-mobile-strategy.md ["R3"] none
@@ -0,0 +1,9 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P9A1,invoicePool拆分方案设计与边界冻结,为超大路由文件建立拆分方案:按上传/查询/验真/运维动作分组并定义共享select与mapper边界,输出拆分清单和迁移顺序,形成可执行拆分清单且不改变现有API契约与权限模型,manual: 架构评审拆分方案并逐项确认API/权限/返回结构不变,manual,DONE,DONE,DONE,server/src/routes/invoicePool.js | server/src/routes/invoicePool/*.js | server/src/routes/invoicePool/shared/*.js,[],回滚策略=保留原入口文件并逐步转发
P9A2,invoicePool验真路由独立化实施,将验真相关端点与事务逻辑从invoicePool主文件拆分至独立模块并保持注册路径不变,POST/GET/RETRY三个验真端点行为与错误码保持一致且主文件显著瘦身,cd server && node --check src/routes/invoicePool.js && node --check src/routes/invoicePool/verification.js && ./scripts/regression-verification.sh,manual,DONE,DONE,DONE,server/src/routes/invoicePool.js | server/src/routes/invoicePool/verification.js | server/src/routes/invoicePool/shared/selects.js,"[""P9A1""]",不改API路径=/api/invoice-pool/:id/verification*
P9A3,invoicePool共享select与响应映射收敛,提炼重复select片段与normalize逻辑到shared模块避免遗漏verification_records并降低维护成本,所有走normalizeInvoiceResponse的查询都包含必要字段且无行为回归,cd server && node --check src/routes/invoicePool.js && ./scripts/regression-workflow-actions.sh && ./scripts/regression-verification.sh,manual,DONE,DONE,DONE,server/src/routes/invoicePool.js | server/src/routes/invoicePool/shared/selects.js | server/src/routes/invoicePool/shared/mappers.js,"[""P9A2""]",不做功能增强仅做结构收敛
P9B1,Dashboard趋势改为SQL聚合,将趋势统计由内存聚合改为数据库聚合(date_trunc/group by)并保留现有过滤与权限约束,趋势接口在大数据量下性能提升且返回结构保持兼容,manual: 对比改造前后同时间窗结果一致并在样本数据下验证响应时间,manual,DONE,DONE,DONE,server/src/routes/dashboard.js | server/prisma/schema.prisma | server/prisma/migrations/*,[],若采用queryRaw需参数化防SQL注入
P9B2,Dashboard聚合性能回归脚本补强,为趋势与分类聚合新增性能/正确性检查步骤并接入可选回归开关,在mock数据下可重复验证聚合一致性且失败输出可定位,manual: ./scripts/regression-dashboard.sh 增加一致性断言与可选性能指标输出,manual,DONE,DONE,DONE,server/scripts/regression-dashboard.sh | server/scripts/regression-all.sh,"[""P9B1""]",保持RUN_DASHBOARD_REGRESSION默认0
P9C1,feature-matrix纳入P6-P8能力,在矩阵中追加R1-S2对应条目并明确事实源为p6-p8 master CSV与回归覆盖映射,矩阵可一眼看到P5+P6-P8全量能力并与CSV状态一致,manual: 逐条核对issues/2026-02-09_23-30-00-p6-p8-remaining-work-master.csv 与 docs/feature-matrix.md,manual,DONE,DONE,DONE,docs/feature-matrix.md | issues/2026-02-09_23-30-00-p6-p8-remaining-work-master.csv,[],快照日期与范围说明需更新
P9C2,矩阵一致性校验脚本扩展,扩展validate-feature-matrix脚本支持P5+P6-P8双事实源校验并在check-minimal维持门禁,CI可阻断矩阵与执行合同漂移且错误信息可定位到ID级别,cd /home/shunli/Projects/hyb-oa && ./scripts/check-minimal.sh,manual,DONE,DONE,DONE,scripts/validate-feature-matrix.py | scripts/check-minimal.sh | .github/workflows/ci-minimal.yml,"[""P9C1""]",保持历史CSV只读不改快照
P9D1,P9整体验收与回归基线,汇总执行P9后最小门禁和关键回归并更新README中的前置条件说明,最小门禁通过且文档明确回归所需环境开关,cd /home/shunli/Projects/hyb-oa && ./scripts/check-minimal.sh;按需执行RUN_DASHBOARD_REGRESSION=1与RUN_VERIFICATION_REGRESSION=1,manual,DONE,DONE,DONE,server/README.md | scripts/check-minimal.sh | server/scripts/regression-all.sh,"[""P9A3"",""P9B2"",""P9C2""]",不在本Issue内新增业务功能
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P9A1 invoicePool拆分方案设计与边界冻结 为超大路由文件建立拆分方案:按上传/查询/验真/运维动作分组并定义共享select与mapper边界,输出拆分清单和迁移顺序 形成可执行拆分清单且不改变现有API契约与权限模型 manual: 架构评审拆分方案并逐项确认API/权限/返回结构不变 manual DONE DONE DONE server/src/routes/invoicePool.js | server/src/routes/invoicePool/*.js | server/src/routes/invoicePool/shared/*.js [] 回滚策略=保留原入口文件并逐步转发
3 P9A2 invoicePool验真路由独立化实施 将验真相关端点与事务逻辑从invoicePool主文件拆分至独立模块并保持注册路径不变 POST/GET/RETRY三个验真端点行为与错误码保持一致且主文件显著瘦身 cd server && node --check src/routes/invoicePool.js && node --check src/routes/invoicePool/verification.js && ./scripts/regression-verification.sh manual DONE DONE DONE server/src/routes/invoicePool.js | server/src/routes/invoicePool/verification.js | server/src/routes/invoicePool/shared/selects.js ["P9A1"] 不改API路径=/api/invoice-pool/:id/verification*
4 P9A3 invoicePool共享select与响应映射收敛 提炼重复select片段与normalize逻辑到shared模块避免遗漏verification_records并降低维护成本 所有走normalizeInvoiceResponse的查询都包含必要字段且无行为回归 cd server && node --check src/routes/invoicePool.js && ./scripts/regression-workflow-actions.sh && ./scripts/regression-verification.sh manual DONE DONE DONE server/src/routes/invoicePool.js | server/src/routes/invoicePool/shared/selects.js | server/src/routes/invoicePool/shared/mappers.js ["P9A2"] 不做功能增强仅做结构收敛
5 P9B1 Dashboard趋势改为SQL聚合 将趋势统计由内存聚合改为数据库聚合(date_trunc/group by)并保留现有过滤与权限约束 趋势接口在大数据量下性能提升且返回结构保持兼容 manual: 对比改造前后同时间窗结果一致并在样本数据下验证响应时间 manual DONE DONE DONE server/src/routes/dashboard.js | server/prisma/schema.prisma | server/prisma/migrations/* [] 若采用queryRaw需参数化防SQL注入
6 P9B2 Dashboard聚合性能回归脚本补强 为趋势与分类聚合新增性能/正确性检查步骤并接入可选回归开关 在mock数据下可重复验证聚合一致性且失败输出可定位 manual: ./scripts/regression-dashboard.sh 增加一致性断言与可选性能指标输出 manual DONE DONE DONE server/scripts/regression-dashboard.sh | server/scripts/regression-all.sh ["P9B1"] 保持RUN_DASHBOARD_REGRESSION默认0
7 P9C1 feature-matrix纳入P6-P8能力 在矩阵中追加R1-S2对应条目并明确事实源为p6-p8 master CSV与回归覆盖映射 矩阵可一眼看到P5+P6-P8全量能力并与CSV状态一致 manual: 逐条核对issues/2026-02-09_23-30-00-p6-p8-remaining-work-master.csv 与 docs/feature-matrix.md manual DONE DONE DONE docs/feature-matrix.md | issues/2026-02-09_23-30-00-p6-p8-remaining-work-master.csv [] 快照日期与范围说明需更新
8 P9C2 矩阵一致性校验脚本扩展 扩展validate-feature-matrix脚本支持P5+P6-P8双事实源校验并在check-minimal维持门禁 CI可阻断矩阵与执行合同漂移且错误信息可定位到ID级别 cd /home/shunli/Projects/hyb-oa && ./scripts/check-minimal.sh manual DONE DONE DONE scripts/validate-feature-matrix.py | scripts/check-minimal.sh | .github/workflows/ci-minimal.yml ["P9C1"] 保持历史CSV只读不改快照
9 P9D1 P9整体验收与回归基线 汇总执行P9后最小门禁和关键回归并更新README中的前置条件说明 最小门禁通过且文档明确回归所需环境开关 cd /home/shunli/Projects/hyb-oa && ./scripts/check-minimal.sh;按需执行RUN_DASHBOARD_REGRESSION=1与RUN_VERIFICATION_REGRESSION=1 manual DONE DONE DONE server/README.md | scripts/check-minimal.sh | server/scripts/regression-all.sh ["P9A3","P9B2","P9C2"] 不在本Issue内新增业务功能