feat: 完成P10生产硬化与矩阵收口(P10E1-P10G1)

这个提交包含在:
2026-02-10 11:25:18 +08:00
父节点 1b6e801b12
当前提交 bec21e1b38
共修改 15 个文件,包含 1718 行新增和 793 行删除
+79
查看文件
@@ -442,3 +442,82 @@ npm run job:ocr-once
### 8.2 磁盘空间不足(ENOSPC)
- 在受控环境中制造磁盘满条件后重试上传。
- 预期:错误路径可观测(日志中能定位到 I/O 错误),不要求纳入日常 CI 冒烟。
---
## 9. P6-P10 增量能力(验真 / 看板 / 预算 / 集成 / 生产硬化)
### 9.1 特性开关(默认值)
- `INVOICE_VERIFICATION_ENABLED=false`
- `VERIFICATION_PROVIDER=mock`
- `BUDGET_CONTROL_MODE=warn`
- `ERP_SYNC_ENABLED=false`
- `ERP_SYNC_PROVIDER=mock`
- `ERP_SYNC_ENDPOINT=`
- `ERP_SYNC_TIMEOUT_MS=5000`
- `ERP_SYNC_AUTH_TOKEN=`
- `TRAVEL_SYNC_ENABLED=false`
- `IM_NOTIFIER_ENABLED=false`
建议:先在测试组织灰度开启,再逐步扩大范围。
### 9.2 新增 API 摘要
- 发票验真:
- `POST /api/invoice-pool/:id/verify`
- `GET /api/invoice-pool/:id/verification`
- `POST /api/invoice-pool/:id/verification/retry`
- 看板聚合:
- `GET /api/dashboard/expense-overview`
- `GET /api/dashboard/trends`
- `GET /api/dashboard/top-categories`
- `GET /api/dashboard/approval-efficiency`
- 预算管理:
- `GET /api/budgets`
- `POST /api/budgets`
- `PATCH /api/budgets/:id`
- `POST /api/budgets/:id/archive`
- 外部集成:
- `POST /api/integrations/erp/sync/:reimbursementId`
- `POST /api/travel/orders/import`
- `GET /api/notifications/channels`
- `POST /api/notifications/channels/test`
### 9.3 新增回归脚本
```bash
cd /home/shunli/Projects/hyb-oa/server
./scripts/regression-verification.sh
./scripts/regression-dashboard.sh
./scripts/regression-budget.sh
./scripts/regression-integrations.sh
```
可通过总回归开关启用:
```bash
cd /home/shunli/Projects/hyb-oa/server
RUN_VERIFICATION_REGRESSION=1 \
RUN_DASHBOARD_REGRESSION=1 \
RUN_BUDGET_REGRESSION=1 \
RUN_INTEGRATIONS_REGRESSION=1 \
./scripts/regression-all.sh
```
### 9.4 单次任务脚本(调试)
```bash
cd /home/shunli/Projects/hyb-oa/server
VERIFICATION_RECORD_ID=<uuid> npm run job:verification-once
npm run job:integration-outbox-once
```
### 9.5 回滚建议
1. 先关闭特性开关(验真/ERP/差旅/IM)。
2. 再停止相关任务调度(verification / integration outbox)。
3. 不回滚审计与历史台账数据,保持可追溯。
### 9.6 P9/P10 维护性与硬化说明
- 票据路由拆分:验真端点已拆到 `src/routes/invoicePool/verification.js`,读路径端点已拆到 `src/routes/invoicePool/read.js`,主入口仍为 `src/routes/invoicePool.js`,API 路径不变。
- Shared 抽象:`src/routes/invoicePool/shared/{selects,mappers,schemas,helpers}.js` 统一验真映射与票据查询 `select`,避免字段漂移。
- 看板聚合:`/api/dashboard/trends` 与 `/api/dashboard/top-categories` 已改为数据库聚合(groupBy),降低大数据量下内存聚合开销。
- 看板回归:`./scripts/regression-dashboard.sh` 新增重复请求一致性断言;可通过 `DASHBOARD_PERF_CHECK=1` 打印趋势接口耗时探针。
- ERP硬化回归:`./scripts/regression-integrations.sh` 内嵌最小 Node Mock ERP 服务,覆盖 success / 4xx(dead_letter) / 5xx(retry) / timeout(retry)。
- 矩阵门禁:`scripts/validate-feature-matrix.py` 默认校验 P5 + P6-P8 + P9 + P10 四事实源;`./scripts/check-minimal.sh` 会自动执行该校验。