文件
hyb-oa/docs/invoice-pool-refactor-plan.md
T

61 行
2.8 KiB
Markdown
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# invoicePool 路由拆分方案(P9A1)
**文档状态**:一次性重构方案归档,不是当前待办。
**当前用途**:追溯 `invoicePool` 路由拆分的边界、兼容策略和回滚思路。
**不得误读**:本文不代表当前新需求;报销、发票、OCR、附件规则以 [报销、发票与附件规则](./reimbursement-invoice-rules.md) 和当前 PRD 为准。
## 1. 背景
- 现状:`server/src/routes/invoicePool.js` 超过 2700 行,上传、列表、详情、验真、归档、解绑、OCR 重试等职责集中在单文件。
- 风险:
- 验真链路迭代时容易与票据主流程互相影响。
- `select` 片段与响应映射逻辑重复,字段漂移不易发现。
- 新人接手定位成本高,回归面过大。
## 2. 目标与非目标
- 目标:
- 不改变现有 API 路径、权限码、响应结构。
- 将验真端点独立到子模块,主文件保留入口职责。
- 抽取 shared `select`/`mapper`,降低重复与字段遗漏风险。
- 非目标:
- 不新增业务功能。
- 不调整数据库模型与外部接口契约。
## 3. 拆分边界冻结
### 3.1 保留在 `invoicePool.js` 的能力
- 票据列表、上传、详情、编辑、归档、解绑、OCR 重试、判重例外、签名 URL 与文件读取。
- 入口职责:对外仍由 `server/src/routes/invoicePool.js` 注册全部 `/api/invoice-pool/*` 路径。
### 3.2 独立模块
- `server/src/routes/invoicePool/verification.js`
- `POST /invoice-pool/:id/verify`
- `GET /invoice-pool/:id/verification`
- `POST /invoice-pool/:id/verification/retry`
### 3.3 shared 模块
- `server/src/routes/invoicePool/shared/selects.js`
- 统一 `verification_records` 子查询。
- 提供列表/详情 `select` builder。
- `server/src/routes/invoicePool/shared/mappers.js`
- `mapVerificationRecord`
- `mapInvoiceSummary`
- `normalizeInvoiceResponse`
- `server/src/routes/invoicePool/shared/schemas.js`
- 验真列表查询参数解析。
- `server/src/routes/invoicePool/shared/helpers.js`
- 验真任务触发(`pg-boss`/inline 兼容)。
## 4. 迁移顺序
1. 新增 shared 模块与 `verification.js`,逻辑先保持等价迁移。
2. `invoicePool.js` 改为组合注册(调用 `verification.js`),删除内联验真端点。
3. 将列表与详情相关查询切换到 shared `select` builder。
4. 执行静态检查与验真回归脚本,确认无接口行为变化。
## 5. 兼容性与回滚
- 兼容性:
- 路由路径、权限码、返回字段保持不变。
- 错误码(`VALID_001`/`PERM_001`/`SYS_404`)保持原语义。
- 回滚策略:
- 保留 `invoicePool.js` 入口文件与原有注册顺序。
- 如发现回归,可将 `verification.js` 调用回切为原文件内联实现(无 schema 变更,无数据回滚)。