报销单×银行流水对账:漏付、重复付款、无单打款一次揪出

2026-10-07 · 喵窝资源铺

上一篇管「算得对不对」(加班表×工资表),这篇管「付没付对」:报销单批了一堆,银行流水里到底每单都付了吗?金额对吗?有没有财务手滑把一单付了两次?有没有根本没挂单的支出混在流水里?人眼对 200 笔流水,保准漏。这版脚本从流水附言里提取报销单号,逐单核对。代码实跑验证,真实输出贴在下面。

输出长什么样

测试数据:报销单 7 张、流水 8 笔支出,故意埋了 6 处陷阱——王强那单付了 590(单面 640);刘洋的单压根没付;陈静一单付了两次;周敏的单户名写的是「周敏(代领:吴九)」;流水里还混了一笔 99999 的「往来款」没挂任何单。跑完:

对账完成: 报销单 7 张 + 无单支出 1 笔, 异常 5 条
  ! BX20241003 金额不符: 单面640.00 实付590.00 差-50.00
  ! BX20241005 流水未找到付款(漏付?)
  ! BX20241006 疑似重复付款: 匹配到2笔支出共960.00
  ! BX20241008 收款人不一致: 单面[周敏] 流水[周敏(代领:吴九)]
  ! — 流水有支出但匹配不到报销单(无单打款?) 附言:往来款

逐项验收:差额 −50 正是埋的少付;漏付点到了;重复付款连合计 960 都算出来了;代领那种「人不对但钱对」的也标出来了;无单打款单独成行。对照组 BX20241001/1002/1007 零误报——其中 BX20241001 附言是「报销款 BX20241001-差旅费」带前后缀、BX20241002 单号两边夹着全角空格、BX20241007 户名写成「 赵磊 」带空格,全都正常匹配。边界:空流水跑不炸,7 张单全部报漏付(这语义是对的——没流水等于没付);幂等:连跑两次,输出的表格内容逐格一致(文件字节级 md5 会因 xlsx 内嵌时间戳不同,要比内容不能比字节,见坑 3)。

五类问题怎么判

问题判定
金额不符附言提取到单号,实付 ≠ 单面(差额直接打出来)
漏付报销单在流水里一笔都匹配不到
重复付款同一单号匹配到 ≥2 笔支出
无单打款流水的支出匹配不到任何报销单
收款人不一致流水户名(去空格归一后)≠ 单面收款人——代领或账户填错

核心思路一句话:先把流水「翻译」成「单号 → 付款列表」,再逐单核对。翻译这一步是全脚本成败的关键——财务打款附言五花八门(「报销款 XXX-差旅」「付 XXX 材料款」),所以单号提取用「先在附言里搜已知单号集合」而不是凭空猜格式:把报销单号列先收进集合,附言里用正则抓出疑似号再去集合里查,抓不到的进「无单」池兜底。

用法

先 pip install openpyxl。报销单列:报销单号 / 日期 / 报销人 / 收款人 / 金额;流水列:交易日期 / 对方户名 / 收入 / 支出 / 附言。运行:

python bank_recon.py 报销单.xlsx 银行流水.xlsx 对账结果.xlsx

输出 xlsx 一张「对账结果」表:单号/报销人/收款人/单面金额/匹配笔数/流水实付合计/结论,异常行结论写人话,直接拿去问财务。

三个真坑(都是这轮实跑撞上的)

坑 1:附言抄错一位的单号,不会报「金额不符」,会报「无单打款+漏付」成对出现

第一版测试数据里我故意把一笔附言写成 BX2024106(少抄一个 0)。预期它报「重复付款」,实际输出是两行:这笔报「无单打款」,正确那笔单号正常匹配只匹配到 1 笔。也就是说单号抄错一位在报表里长得完全不像金额问题,而是「一单漏付 + 一笔来路不明的支出」。人工看到这个组合要多想一层:先核对「无单打款」那笔的户名和金额,跟「漏付」名单对一对,很可能就是同一笔抄错了号。纯靠单号匹配解决不了这个,报告中要把「无单打款」的户名+金额打全,就是给人肉二次匹配留线索。

坑 2:兜底匹配要「宁缺毋滥」,匹上了也要标注

对附言没写单号的流水,按「户名+金额完全相等」兜底匹配能救回一部分,但这只是疑似——同名同金额的两笔费用很常见。所以兜底匹配成功的行必须带上「附言无单号,按户名+金额兜底匹配(需人工确认)」字样,且一笔流水只允许被兜底消费一次(否则两笔同金额会都挂到同一单上,重复付款判定直接失真)。

坑 3:xlsx 幂等比较要比单元格内容,不能比文件 md5

加班对账那篇我们用 md5 验幂等,这次同一份数据跑两遍 md5 就是不一致——openpyxl 写 xlsx 时嵌了当前时间戳进文件元数据。内容其实一个字没变。所以这版改用逐格比较(把两个文件各读成二维列表再 ==),这才是语义上的幂等。给所有要做「重跑验证」的 xlsx 脚本提个醒:md5 只对纯文本输出可靠。

相关阅读

钱账线上一篇:加班表×工资表工时对账;需要先从一堆报销单里归集科目的看报销单自动归集;收入侧镜像「合同回款×流水催收」见合同回款计划×银行流水对账;发票/订单号提取查重防重复报销见发票号批量提取查重。

不想自己跑?把报销单和流水导出发给我们,AI 跑脚本 + 人工核验,出一份可拿去问财务的异常清单。看全部自动化服务(9.9 元起)。虚拟物品交付后不退款,未达承诺免费重做。

← 喵窝资源铺