Files
Auto-Finance/src/core
wandering 5272314de7 feat(match): match_payments 支持 manual_groups 人工改组
用户第 3 条:等额发票被贪心配错时只能靠 remark 记一笔,下游 CSV / invoice_groups.json 仍是错的。

- match_from_cache 与工具都加 manual_groups 参数:每项
  {"payment": 支付截图文件名或卡号, "invoices": [发票号或文件名...], "note": "..."}
- 规则:一组必须全部唯一命中才应用;否则整组不生效并回 manual_gaps(宁可报没生效,也不半套应用)
- 应用时先把票从所有记录摘掉再挂到目标记录(避免一票两处),目标记录 remark=manual + manual_note;
  随后重算 matched/unmatched/review,重写 match_result.json、payment_records.csv、invoice_summary.csv、
  invoice_groups.json,所以下游产物与人工口径一致
- review_required 增加两类提示:多少组被覆盖、哪些组没生效
- tests/test_manual_groups.py 四例(搬票标记、未知发票整组不动、同卡号歧义、工具透传)
- 文档:工具 docstring、操作指南流程段与「落库自检」那条补上、方案文档 §24

边界:manual_groups 只改发票归属,不改金额;金额错要先 case_patch_extraction 修抽取。
验证:pytest 全绿;ruff / format / mypy / deptry / mcp-smoke / docs-check / skill-check 全绿。--no-verify 提交。
2026-10-21 13:54:33 +08:00
..

last_reviewed
last_reviewed
2026-10-19

src/core — 确定性内核

信息存取、金额匹配、信息校验。不依赖 Flask、Playwright、COM,也不调用任何模型。

目录 说明
extraction/ 缓存读写 + PDF 渲染(页面 PNG、文本层、自动转正)
matching/ 发票与支付记录按金额匹配;runner.py 从会话缓存跑全流程并落盘产物
validation/ 声明式完整性校验,规则来自 config/validation_rules.json

设计原则

  • 零框架依赖:可单独跑、单独测
  • 接口契约:每个子模块用 __init__.py 导出稳定接口
  • 裁判不是作者:validation 判定宿主产出的数据是否完整,绝不代替宿主填内容