1. AGENTS.md 更新 - water-docs: 新增 specs/ 与 docs/design/ 生命周期规则章节 - water-backend: 更新协作引用(建设期/建成后、evidence 模块化) 2. specs/ 重复合并 - 006-reminder-event-design 合并入 003-rev006-reminder-event-design - 001-rev004-accounting 删除冗余 data-model.md + contracts/ - 002-rev005-invoice-flow 删除冗余 data-model.md + contracts/ 3. evidence 按模块归档 - 35 个 REV-004 文件归入 evidence/rev004-accounting/ - 7 个通用 bugfix 文件归入 evidence/bugfix/ 和 bugfix/frontend/ - 新建 rev005-invoice/、rev006-reminder/、rev007-statistics/ 目录 4. guides/ 清理 - 14 个 REV004_*.md 移入 evidence/rev004-accounting/ 5. 遗留文件处理 - docs/research/ 归档到 Archive/06_Migration_Plans/ - backend-check detached worktrees 清理 6. 交叉引用修复 - 006-reminder-event-design → 003-rev006-reminder-event-design - docs/guides/REV004_ → docs/evidence/rev004-accounting/REV004_ 7. DB 设计文档修正(01_Database_Design.md) - biz_invoice 明确为开票配置表,非发票记录表 - 新增 biz_invoice_record 为发票申请/结果主表 - 新增 biz_charge_invoice_rel 账单-发票关联说明 - REV-005 承接口径表名全部修正 8. 发票审计证据 - 新增 evidence/rev005-invoice/2026-06-16-invoice-document-audit.md
6.2 KiB
REV-005 发票业务流 — 文档审计报告
审计日期: 2026-06-16
审计范围: water-docs/specs/002-rev005-invoice-flow/ + docs/design/ 主文档 + water-backend 代码(worktree backend-rev005)
审计目标: 评估发票相关文档的完整性、一致性和可追溯性
1. 审计总览
| 维度 | 结论 |
|---|---|
| 规格完整性 | ✅ 完备 |
| 正式设计一致性 | ⚠️ 轻微偏差(状态定义 6 vs 4 态) |
| 接口契约覆盖 | ✅ 完备 |
| 数据模型覆盖 | ✅ 完备(正式版在 DB 设计中,specs 草稿已删除) |
| 代码实现对应 | ✅ 59/65 任务完成,6 项为验证任务 |
| 前端设计覆盖 | ✅ 有独立前端设计文档(866 行) |
| 验证证据 | ❌ 8 项验证任务未完成 |
2. 文档地图
specs/002-rev005-invoice-flow/
├── spec.md ✅ 有
├── plan.md ✅ 有
├── tasks.md ✅ 有(65 项,59 完成)
├── research.md ✅ 有
├── quickstart.md ✅ 有
├── verification.md ⚠️ 有,但 8 个验证任务未完成
└── frontend-finance-design.md ✅ 有(2026-05-12 新增)
docs/design/ (正式主文档)
├── 02_Detailed_Design/12_REV_Detailed.md ✅ REV-005 章节完整
├── 03_Technical_Design/01_Database_Design.md ✅ biz_invoice 表覆盖
└── 03_Technical_Design/03_Interface_Design.md ✅ IF-REV-008/009 定义完整
docs/evidence/rev005-invoice/ 📭 空(尚无证据入库)
3. 发现
3.1 状态定义差异(中风险)
问题:12_REV_Detailed.md 定义了 6 个发票状态(SUBMITTED、PENDING、SUCCESS、FAIL、INVALID、RED_INK),但 InvoiceController 代码中实现了 invalidate 和 red-ink 两个独立端点,而 InvoiceDO 中的 invoiceStatus 字段是否支持这 6 态尚未在代码层确认。
影响:作废/红冲是二期补齐的功能,需确认 biz_invoice 表的 invoice_status 枚举已包含 INVALID 和 RED_INK,否则运行时会抛异常。
建议:检查 InvoiceStatusEnum(如存在)或 biz_invoice 的 DDL 确认枚举覆盖。
3.2 验证证据缺失(低风险)
specs/002-rev005-invoice-flow/verification.md 中 8 个验证任务未完成:
| 编号 | 内容 | 阻塞点 |
|---|---|---|
| T022 | 重复申请、部分开票拒绝的样本 | 需联调环境 |
| T033 | SYS-008 不可用、超时等异常样本 | 需联调环境 |
| T044 | 回写/查询/下载/推送成功率统计 | 需联调环境 |
| T055 | 作废/红冲运行态日志样本 | 需联调环境 |
| T060-T063 | SC-001~SC-004 性能指标采样 | 需测试环境 |
影响:不影响功能实现,但会影响验收签字。
建议:在提测前集中补齐,可安排在联调阶段同步采集。
3.3 接口路径不一致(低风险)
| 定义位置 | 路径 |
|---|---|
specs/002/contracts/if-rev-008.md(已删除) |
/api/invoice/apply(假设) |
03_Interface_Design.md |
/business/invoice/apply |
InvoiceController.java |
/business/invoice/apply(@RequestMapping("/business/invoice") + @PostMapping("/apply")) |
正式接口设计和代码实现路径一致(/business/invoice/apply)。specs 里的旧契约已删除,不存在冲突。✅ 无问题。
3.4 前端设计文档状态(观察项)
frontend-finance-design.md 是 2026-05-12 新增的,晚于主设计文档(2026-03-19)。它是独立于后端设计文档的前端实现补充,目前状态为"作为前端实现输入"。
影响:water-frontend 尚未同步确认是否已按照此文档实现。
建议:下一步在 water-frontend 的 AGENTS.md 或对应 spec 中确认前端实现进度。
3.5 数据模型一致性(已解决)
此前 specs/002/ 存在独立的 data-model.md 和 contracts/ 目录,与正式设计文档有内容重叠。本次审计已删除冗余草稿,数据模型以 01_Database_Design.md 为准,接口以 03_Interface_Design.md 为准。
4. FR 覆盖矩阵
| FR | 描述 | 设计文档 | 代码 | 状态 |
|---|---|---|---|---|
| FR-001 | 后台发票申请接口 | ✅ | ✅ POST /apply |
已实现 |
| FR-002 | 校验账单状态 | ✅ | ✅ InvoiceServiceImpl |
已实现 |
| FR-003 | 校验客户开票信息 | ✅ | ✅ | 已实现 |
| FR-004 | 校验开票限额 | ⚠️ 设计中提及但未详细展开 | ❓ 待确认 | 部分 |
| FR-005 | 生成发票申请记录 | ✅ | ✅ biz_invoice_record |
已实现 |
| FR-006 | 调用 SYS-008 | ✅ | ✅ InvoicePlatformClient |
已实现 |
| FR-007 | 定时查询兜底 | ✅ | ✅ InvoiceCompensateJob |
已实现 |
| FR-008 | 更新发票状态 | ✅ | ✅ | 已实现 |
| FR-009 | 发票-账单关联 | ✅ | ✅ biz_charge_invoice_rel |
已实现 |
| FR-010 | 客户侧查询/下载/推送 | ✅ | ✅ 3 个端点 | 已实现 |
| FR-011 | 操作日志 | ✅ | ⚠️ 部分方法有日志 | 部分 |
| FR-012 | 作废入口 | ✅ | ✅ POST /invalidate |
已实现 |
| FR-013 | 红冲入口 | ✅ | ✅ POST /red-ink |
已实现 |
| FR-014 | 终态保护与结果回写 | ✅ | ✅ | 已实现 |
关键发现:FR-004(开票限额)在设计文档中提及但未明确限额来源(配置表?固定值?),代码层待确认。FR-011(操作日志)在关键动作上有日志,但完整度待验证。
5. 建议优先级
| 优先级 | 建议 |
|---|---|
| P0 | 确认 biz_invoice 的 invoiceStatus 枚举是否包含 INVALID 和 RED_INK,避免作废/红冲端点运行时报错 |
| P1 | 明确开票限额校验逻辑(FR-004):从配置表读取还是硬编码,限额是单笔还是累计 |
| P1 | 联调阶段集中采集 T022/T033/T044/T055/T060-T063 的验证样本 |
| P2 | 确认 water-frontend 对 frontend-finance-design.md 的实现进度 |
审计结论:REV-005 发票业务流的文档体系基本完备,设计文档、接口契约、数据模型和代码实现高度对齐。主要风险点是作废/红冲状态枚举的代码层覆盖确认,以及 8 项验证样本的补充。