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 提交。
This commit is contained in:
@@ -727,3 +727,19 @@ capture 只出现在 camera 段、脚本里不许再出现 `setAttribute`、两
|
||||
|
||||
还没做的:自检的选择器只在 FakePage 上验证过,**真实页面待联机确认**(尤其是 payment/subsidy 两步的表头关键词),
|
||||
与第 4 条(乘车日期选择器)一起,等下一次联机填报时一并确认。
|
||||
|
||||
## 24. 人工改组入口 manual_groups(2026-10-21,用户第 3 条)
|
||||
|
||||
用户指出:match_payments 缺人工改组入口,等额票配错只能靠 remark 记一笔,下游 CSV / invoice_groups.json 仍是错的。
|
||||
|
||||
- `match_from_cache(..., manual_groups=...)` 与工具参数同名透传;每项
|
||||
`{"payment": 支付截图文件名或卡号, "invoices": [发票号或文件名...], "note": "..."}`
|
||||
- 规则:**一组必须全部唯一命中才应用**(payment 唯一 + 每张发票唯一);否则整组不生效,原因进 `manual_gaps`。
|
||||
宁可报「没生效」也不半套应用——半套会把账改得更乱,而且用户没法从 CSV 看出来
|
||||
- 应用时先把这些发票从所有记录里摘掉再挂到目标记录,避免一张票出现在两条记录里;
|
||||
目标记录 remark=manual、附 manual_note,随后重算 matched/unmatched/review,重写 match_result.json、
|
||||
payment_records.csv、invoice_summary.csv、invoice_groups.json
|
||||
- review_required 会加两条提示:多少组被人工覆盖、哪些组没生效
|
||||
- 单测 4 例:搬票并标记、未知发票整组不动、同卡号歧义报错、工具层参数透传
|
||||
|
||||
边界:manual_groups 只改「发票 ↔ 支付」的归属,不改金额;金额本身错了要先回去修抽取(case_patch_extraction)。
|
||||
|
||||
Reference in New Issue
Block a user