银行流水自动对账

银行流水和银行日记账逐笔勾对,未达账项靠人工翻

规则型
输入数据
银行流水、银行日记账
核心方法
多条件匹配 + 金额容差 + 一对多 / 多对一匹配
输出物
已勾对、未达账项、余额调节表
FA01_bank_reconciliation

银行对账模型

31 个步骤 · 38 条连接 · 12 条判定规则 · 由规格自动渲染,确认后再生成工作流

这个模型解决什么

每月几百上千笔银行流水要和账面逐笔核对,户名写法不一、日期对不齐、附言五花八门,人工核对一天也做不完一个月的量。

对账是财务每月必做、且几乎全靠人工的环节。自动匹配掉能对上的八成,人只看剩下的两成,时间从按天算变成按小时算;更重要的是每次的判断口径一致,谁来跑结果都一样,审计时说得清。

模型编号:FA01领域:财务与内部审计使用频率:每月一次或按周谁来用:出纳、财务共享中心、内部审计
适用场景
  • 月末对账:把当月银行流水与账面应收应付跑一遍,先自动匹配再人工处理差异
  • 资金日清:每天跑一次,当天的未匹配项当天核实,避免积压到月末
  • 审计抽查:对某个账户某段时间做全量核对,输出差异清单作为底稿
口径假设
  • 附言中的单据号格式假设为 AP 加八位数字,按实际编号规则调整正则
  • 日期窗口三天,含银行早于或晚于账面两种情况
  • 一笔账面记录只能被匹配一次,先匹配上的占用
  • 户名规范化会去掉「有限公司」「有限责任公司」等后缀与括号空格
适用边界
  • 一对多不在本版范围:一笔银行收款对应多笔账面、或多笔付款合并支付,需要另一个模型
  • 金额必须完全相同,手续费导致的差额不会被匹配
  • 不处理跨月、跨账户的匹配
  • 输出是待核清单,不是核销结论,实际核销仍需人工确认

数据来源

bank_statements.csv 读取银行流水
流水号交易日期银行账号收付方向金额对方户名附言
book_entries.csv 读取账面记录
单据号记账日期往来单位收付方向金额经办人备注

处理步骤

取数 判定 关联与汇总 输出
  • 1. CSV读取器 读取银行流水 上游:—
    • 文件:bank_statements.csv
  • 2. CSV读取器 读取账面记录 上游:—
    • 文件:book_entries.csv
  • 3. 字符串处理 从附言里提取账面单据号 上游:1
    • 表达式:regexReplace($附言$, “.*(AP[0-9]{8}).*”, “$1”)
    • 新增列:提取单号
  • 4. 字符串处理 户名规范化 上游:3
    • 表达式:regexReplace($对方户名$, “\\s|(示例)|[()()]|股份有限公司|有限责任公司|有限公司|公司”, “”)
    • 新增列:户名规范
  • 5. 字符串处理 往来单位规范化 上游:2
    • 表达式:regexReplace($往来单位$, “\\s|(示例)|[()()]|股份有限公司|有限责任公司|有限公司|公司”, “”)
    • 新增列:单位规范
  • 10. 表关联 按附言单号匹配 上游:4、5
    • 左表关联列:提取单号
    • 右表关联列:单据号
    • 排除列:单位规范
  • 11. 规则引擎 标记 M1 上游:10
    • 新增列:匹配方式
    • 规则:TRUE => “M1 附言单号匹配”
  • 12. 规则引擎 置信度 上游:11
    • 新增列:置信
    • 规则:TRUE => “高”
  • 20. 表关联 取出未按单号匹配的流水 上游:4、5
    • 只要未匹配的行(反连接)
    • 保留左表未匹配行
    • 左表关联列:提取单号
    • 右表关联列:单据号
  • 21. 表关联 按金额户名方向匹配 上游:20、5
    • 左表关联列:户名规范、金额、收付方向
    • 右表关联列:单位规范、金额、收付方向
  • 22. 字符串转日期&时间 日期转换 上游:21
    • 日期格式:yyyy-MM-dd
    • 选中列:交易日期、记账日期
  • 23. 日期时间差 计算日期差 上游:22
    • 日期列 1:记账日期
    • 日期列 2:交易日期
    • 新增列:相隔天数
  • 24. 基于规则的行过滤器 日期在窗口内 → 匹配 上游:23
    • 规则:$相隔天数$ <= 3 AND $相隔天数$ >= -3 => TRUE
  • 25. 规则引擎 标记 M2 上游:24
    • 新增列:匹配方式
    • 规则:TRUE => “M2 金额户名日期匹配”
  • 26. 规则引擎 置信度 上游:25
    • 新增列:置信
    • 规则:TRUE => “高”
  • 27. 基于规则的行过滤器 超出日期窗口 → 未匹配 上游:23
    • 规则:NOT ($相隔天数$ <= 3 AND $相隔天数$ >= -3) => TRUE
  • 28. 规则引擎 标记未匹配 上游:27
    • 新增列:匹配方式
    • 规则:TRUE => “未匹配:银行有账面无”
  • 29. 规则引擎 置信度 上游:28
    • 新增列:置信
    • 规则:TRUE => “待核”
  • 30. 表关联 没有任何候选的流水 上游:20、5
    • 只要未匹配的行(反连接)
    • 保留左表未匹配行
    • 左表关联列:户名规范、金额、收付方向
    • 右表关联列:单位规范、金额、收付方向
  • 31. 规则引擎 标记未匹配 上游:30
    • 新增列:匹配方式
    • 规则:TRUE => “未匹配:银行有账面无”
  • 32. 规则引擎 置信度 上游:31
    • 新增列:置信
    • 规则:TRUE => “待核”
  • 40. 表串联 合并已匹配的两路 上游:12、26
  • 41. 分组聚合 取出已匹配的单据号 上游:40
    • 分组列:单据号
  • 42. 表关联 账面中未被匹配的记录 上游:5、41
    • 只要未匹配的行(反连接)
    • 保留左表未匹配行
    • 左表关联列:单据号
    • 右表关联列:单据号
  • 43. 规则引擎 标记未匹配 上游:42
    • 新增列:匹配方式
    • 规则:TRUE => “未匹配:账面有银行无”
  • 44. 规则引擎 置信度 上游:43
    • 新增列:置信
    • 规则:TRUE => “待核”
  • 50. 表串联 合并全部四类 上游:40、29
  • 51. 表串联 合并 上游:50、32
  • 52. 表串联 合并 上游:51、44
  • 53. 排序器 按匹配方式排序 上游:52
    • 排序列:匹配方式
  • 54. CSV写入器 写出对账结果 上游:53
    • 文件:result.csv

判定规则汇总

节点所在步骤规则
11标记 M1TRUE => "M1 附言单号匹配"
12置信度TRUE => "高"
24日期在窗口内 → 匹配$相隔天数$ <= 3 AND $相隔天数$ >= -3 => TRUE
25标记 M2TRUE => "M2 金额户名日期匹配"
26置信度TRUE => "高"
27超出日期窗口 → 未匹配NOT ($相隔天数$ <= 3 AND $相隔天数$ >= -3) => TRUE
28标记未匹配TRUE => "未匹配:银行有账面无"
29置信度TRUE => "待核"
31标记未匹配TRUE => "未匹配:银行有账面无"
32置信度TRUE => "待核"
43标记未匹配TRUE => "未匹配:账面有银行无"
44置信度TRUE => "待核"

期望结果

示例数据下应得到 28 行,按「匹配方式」分布如下。运行后与 expected_result.csv 逐行比对。

12M2 金额户名日期匹配
6未匹配:银行有账面无
5M1 附言单号匹配
5未匹配:账面有银行无
iModel 专属客服
在线留言或电话联系
在线留言

留下您的问题和联系方式,我们会在一个工作日内回复。

手机与邮箱至少填一项

4008568196 拨打此号码联系我们

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码