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:
@@ -260,11 +260,17 @@ cases/<case_id>/
|
||||
|
||||
返回 matched / unmatched_invoices / unmatched_payments / review_required。
|
||||
未匹配与一对多凑额项必须复核,不要盲信贪心结果。
|
||||
|
||||
等额发票被贪心配错时,用 manual_groups 人工改组(会重写 match_result.json / CSV / invoice_groups.json):
|
||||
每项 {"payment": 支付截图文件名或卡号, "invoices": [发票号或文件名, ...], "note": "为什么这样配"}。
|
||||
**一组必须全部唯一命中才应用**,否则整组不生效并回在 manual_gaps 里;应用过的在 manual_applied,
|
||||
对应记录的 remark 会变成 manual。别在半套命中的情况下改账。
|
||||
|
||||
| 参数 | 类型 | 必填 | 默认 | 说明 |
|
||||
|------|------|------|------|------|
|
||||
| `case_id` | string | 是 | — | — |
|
||||
| `tolerance` | number/null | 否 | null | — |
|
||||
| `manual_groups` | array/null | 否 | null | — |
|
||||
|
||||
### `mcp__arb__info_skeleton`
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ last_reviewed: 2026-10-19
|
||||
| 3 | 渲染页面与文本层 | `case_render_pages` → `case_read_text` 或直接读 PNG |
|
||||
| 4 | 逐张抽取落盘;核对后局部修正 | `case_save_extraction` / `case_patch_extraction` |
|
||||
| 5 | 金额匹配,**逐条处理 `review_required`** | `match_payments` |
|
||||
| 5b | 等额发票配错时人工改组(整组唯一命中才生效,没生效的原因在 `manual_gaps`) | `match_payments(manual_groups=...)` |
|
||||
| 6 | 取骨架 → 填值 → 落盘校验(试算用 `validate_info` 不落盘) | `info_skeleton` → `save_info` |
|
||||
| 7 | 普通发票生成申购单(`exclude` 剔除不参与申购的物品) | `doc_requisition` |
|
||||
| 8 | 随时复查态势;要重跑就清派生产物 | `case_status` / `case_reset` |
|
||||
@@ -101,6 +102,8 @@ last_reviewed: 2026-10-19
|
||||
|
||||
**什么时候算完成**:`validate_info` 报告 `valid: true` 且无业务约束违反。缺料就向用户要材料;
|
||||
Agent 不许自己宣布「可以提交了」。
|
||||
- 每步填报后工具会回读页面做**落库后自检**:数据行数与表尾合计跟 info 比对,差值写进 warnings,
|
||||
返回里的 self_check 是原始读数。看到「自检不一致」先看图再决定重填,别当没看见。
|
||||
|
||||
### 产物位置
|
||||
|
||||
|
||||
Reference in New Issue
Block a user