把发票明细与回款/付款记录按号码或客户+金额匹配,分出已付清/部分付/未付与多付
invoice-payment-matchSKILL.md 为准。> **本地运行,零网络、免 API Key、数据不出电脑。**
> 四项诚实承诺:① 算不出就说算不出,绝不编造数字;② 高危动作强制人工确认;③ 幂等断点,绝不重复副作用;④ 全程留痕可审计。
# 发票票款匹配
对账最容易翻车的地方不是金额算错,而是**钱付了但挂在两张票上**,或者**钱付了但找不到票**。前者是"部分付",后者是大问题。
匹配顺序:
1. **按号码精确匹配**(发票号 / 单据号完全一致)
2. 号码缺失时,退化到**「客户 + 金额」完全相等**匹配
3. 一张票有多笔小额回款时,按金额从大到小依次吃满,零头留给下一张票
匹配结果分三档:
| 状态 | 判定 |
|---|---|
| 已付清 | 未匹配额 ≤ 容差(默认 0.01) |
| 部分付 | 已匹配 > 0 但不够 |
| 未付 | 一分钱都没匹配上 |
**有回款找不到发票的,全部单列**——可能是多付、预收,也可能是票号没登记进系统。这类必须先查,不能当差异抹平。
## 输出四件套
| 文件 | 内容 |
|---|---|
| `pm_主表.csv` | 发票号码 / 客户 / 发票金额 / 匹配状态 / 已匹配 / 未匹配 / 最近回款日 |
| `pm_异常表.csv` | 发票金额为空或非数字的行 + 有回款无对应发票的行 |
| `pm_校验表.csv` | 匹配顺序、三档笔数、多付笔数与金额、人工复核声明 |
| `fin-log.jsonl` | 处理日志(追加) |
## 环境准备
```bash
PY="<python 3.8+ 路径>" # 纯标准库
"$PY" <skill目录>/scripts/pay_match.py 发票明细.xlsx 回款记录.xlsx
```
## 用法
```bash
pay_match.py 发票明细.xlsx 回款记录.xlsx --execute
pay_match.py 应收台账.xlsx 银行收款流水.xlsx --tol 0.5
```
真实输出:
```
方案:发票 7 笔 / 回款 6 笔 | 容差 0.01
--- 匹配结果 ---
已付清 3 笔
部分付 0 笔
未付 3 笔
有回款无对应发票:3 笔
AR006 己公司 50,000.00
AR009 壬公司 15,000.00
(无票号) 癸公司 30,000.00
回款合计 413,000.00 / 发票合计 523,000.00
```
注意 `AR006` 那笔:发票金额是空的,所以这 5 万块**没人认领**,直接进"有回款无对应发票"。这种情况先补发票金额,别急着当预收。
## 参数说明
| 参数 | 默认 | 说明 |
|---|---|---|
| `--tol` | 0.01 | 金额容差。分币抹平时可调大,但会掩盖真实差异 |
| `--execute` | 关 | 默认只预览不落盘 |
## 列名识别
发票表需要:
- 号码:`发票号码 / 发票号 / 单号 / 单据号 / 票据号 / 流水号`
- 客户:`客户 / 购货方 / 往来单位 / 对方单位 / 付款方 / 单位名称`
- 金额:`发票金额 / 价税合计 / 金额 / 含税金额 / 应收金额`
回款表必须有金额列,可选:
- 号码:`发票号码 / 发票号 / 对应单号 / 单据号 / 银行流水号 / 凭证号`
- 客户:`客户 / 购货方 / 往来单位 / 对方单位 / 付款方 / 单位名称`
- 日期:`收款日期 / 付款日期 / 到账日期 / 回款日期 / 交易日期`
**号码和客户都没有就报【算不出】**——没有任何锚点就没法匹配,硬配只会错配。
## 安全与边界(拒绝权)
- **源文件零改动**:输出进 `_out/`
- **不给"看起来差不多"的匹配**:只做号码精确和「客户+金额」完全相等,不做事后模糊配对
- **多付不自动冲销**:标记出来给人查,工具不写凭证
- **金额不守恒就停**:输入 = 主表 + 异常
## 人工复核(必读)
- 「部分付」往往意味着回款错挂到别的票上了,要逐笔追
- 「有回款无对应发票」务必先查是不是预收/多付,不要直接挂预收科目
- 容差调大前想清楚:容差越大,掩盖的差异越多
## 相邻路线转交
| 用户要做的事 | 转交给 |
|---|---|
| 银行账和账面账对不上 | `bank-recon` |
| 到期未收的款 | `bill-due-remind` |
| 发票本身有没有问题 | `invoice-rule-check` |
| 现金流够不够 | `cashflow-forecast` |
## 可直接复制的说法
```text
把这批发票和回款记录对一遍。
先按发票号配,号码缺失的按客户加金额配。
配不上的回款单独列出来——多付、预收还是票号没录,必须先查清楚。
```
## 做完怎么算完成
- [ ] 三档状态已逐笔核对
- [ ] "有回款无对应发票"的已逐笔查明
- [ ] "部分付"的已确认回款没挂错票
- [ ] 容差设置合理,没有掩盖差异
---
本 Skill 采用 BUSL-1.1 许可(源码可见,可自由使用)。
版权所有 © 2026 律令科技(深圳)有限公司(@lexord-technology)。
本技能由律令科技(深圳)有限公司开发,**财友云(caiyouyun.cn)**发布与展示。
允许个人及企业内部免费使用、复制、修改,包括内部生产环境。多银行 CSV/Excel 流水归一化成统一字段与方向标记
流水与账面按金额+日期窗口匹配,输出已勾对/单边与余额调节表
超标/缺票/重复/连号/跨期校验 + 汇总表
按应收应付账期 + 历史收支推演未来 N 周缺口与预警
应收票据/应付账款到期日历,可触发本地通知
识别重复申请/重复发票/缺合同/缺发票/审批未完成并冻结,合格项按到期日+优先级+资金约束排期
按发票号码+代码+金额+日期组合查重,拦住重复报销与重复入账
进销项发票台账,按月/客户/税率汇总,导出 CSV
从业务单据表按科目映射批量生成凭证草稿,借贷平衡预检
40+ 指标(偿债/营运/盈利/成长)+ 多期趋势与同业占位
增值税/附加/个税/印花税/所得税预缴,附公式与政策依据
金额大写、含税不含税互算、价税分离、尾差分摊、百分比反算
SKILL.md 为准。