AI PLAY玩法更新持续收录
← 回到更新流

2026-09-26 · 原文发布日

银行对账单自动入库:OpenAI提取+余额校验防错

监听Google Drive文件夹新增的对账单PDF/CSV,提取文本后交OpenAI返回账户、账期、余额和交易列表的JSON;先做硬性校验——期初余额加全部交易额必须等于期末余额(按整数分计),不平则拒绝导入、记日志并用Gmail告知差异和疑似符号错误;平账后读Sheets里的分类规则给交易打标签,用指纹比对剔除已导入的重复交易,只把新交易追加进Transactions页并写导入日志。付费模板(标价大于0),可按需换成QuickBooks等落点。

原文要点

作者Ziad Karim在n8n.io上架的付费工作流(workflow 19951,标价大于0,Paddle收款,14天退款):监听Google Drive文件夹新增PDF/CSV对账单,下载后提取文本(PDF文本提取或CSV转文本),交OpenAI返回含账户、账期、余额、交易列表的结构化JSON;以整数分校验期初余额加全部交易额等于期末余额,可定位首个流水余额不匹配处;不平则拒绝导入、在Sheets记日志并用Gmail发出差异与疑似符号错误的邮件;平账后读取Sheets里的规则页(Match/Category/Direction,方向支持in/out/any)分类,用指纹比对剔除已导入交易,仅追加新交易到Transactions页并写Import log。共17个节点,声称在n8n 2.x构建测试。

这次做成什么

说明购买前能判断什么、购买后如何搭,并用本站独立设计的合成对账单练习验证“余额校验+指纹去重”两个核心机制。注意:原模板需付费购买,以下是本站按公开说明还原的练习方案,不是原工作流文件,也未实测原模板界面参数。

准备什么

  • n8n实例(作者称在n8n 2.x构建测试)
  • 已购买并下载的原工作流JSON文件(付费内容)
  • Google Drive凭据及一个仅放对账单的监听文件夹
  • OpenAI API密钥或OpenAI兼容服务
  • Google Sheets凭据和含Transactions/Rules/Import log三个分页的表
  • Gmail凭据及可发信的账号
  • OpenAI等模型服务可能产生额外费用,与原模板价格分开

具体怎么做

  1. 准备三个分页的表结构

    Transactions页至少含日期、描述、金额、类别、Fingerprint列;Rules页含Match、Category、Direction三列,Direction取in/out/any;Import log页含文件名、时间、结果、差异说明。Fingerprint用日期+金额+规范化描述拼接后哈希(如SHA1)生成,作为去重键。

  2. 导入模板并接监听与提取

    在n8n导入购买的JSON,配置Google Drive Trigger指向对账单文件夹。下载节点后按文件类型分流:PDF走文本提取,CSV走转文本。练习阶段可先用一个Set节点粘贴合成账单文本代替真实文件,验证后半段逻辑。

  3. OpenAI结构化提取

    Chat Model节点接Structured Output Parser,schema含account、period、openingBalance、closingBalance、transactions数组(每项date/description/amount,金额单位为元、带正负号)。提示词要求收入为正、支出为负,仅输出JSON。

  4. 整数分余额校验与拒绝分支

    Code节点把所有金额乘100取整,计算opening+sum(amounts)是否等于closing;不等则走拒绝分支:向Import log写一行refused记录,并用Gmail节点发邮件说明差异金额(分转元)与疑似符号错误的交易。符号写反会让总额偏差该笔金额的两倍,所以金额绝对值恰等于差额一半的交易最可疑。相等才继续。

  5. 规则分类、指纹去重与追加

    读Rules页,对每笔交易按Direction匹配收入或支出、描述包含Match串则打上Category。读Transactions页现有Fingerprint集合,仅保留指纹不在集合中的交易,追加写入Transactions,并在Import log写一行成功摘要(新交易数、跳过重复数)。

可直接复制的材料

OpenAI对账单提取提示词(本站独立撰写)

本站独立编写,需在output parser定义同名schema;金额符号约定必须与本提示词一致。

你是银行对账单解析器。从下方文本提取结构化数据,仅输出JSON:
{"account":"账号后四位","period":"YYYY-MM","openingBalance":期初余额数字,"closingBalance":期末余额数字,"transactions":[{"date":"YYYY-MM-DD","description":"摘要原文","amount":数字}]}
规则:收入amount为正,支出为负;金额保留两位小数;不要补全或猜测文本中没有的交易;无法识别的字段填null。
对账单文本:{{$json.statementText}}

合成对账单CSV(练习用)

本站合成数据:10000.00+8500.00-3600.00-412.35+2000.00=16487.65,平账;把-3600.00改成3600.00可制造一笔符号错误用于测试拒绝分支。

date,description,amount
2026-09-01,期初余额结转,10000.00
2026-09-03,工资入账,8500.00
2026-09-05,房租支出,-3600.00
2026-09-12,电费代扣,-412.35
2026-09-20,转账收入,2000.00
2026-09-30,期末余额,16487.65

Rules分类规则页示例

本站独立示例,Direction=any表示收支均可匹配;正式使用按你的科目表替换。

Match,Category,Direction
工资,薪资收入,in
房租,居住支出,out
电费,公共事业,out
转账,转账往来,any

输入与输出示例

本站虚构演示,输入输出数字严格对应,未实际运行原模板,不代表作者实测结果。

输入

上传上方合成CSV(其中房租误写为+3600.00)到监听文件夹

对应输出

校验结果:期初1000000分+交易合计1368765分=2368765分,不等于期末1648765分,差额720000分;定位到『房租支出 3600.00』,其金额绝对值360000分恰为差额一半,疑似符号错误;Import log写入refused行,Gmail发出差异7200.00元及疑似符号错误提示

做完检查这些

  • 合成平账CSV导入后Transactions新增4笔交易(工资、房租、电费、转账),Import log有一行success记录
  • 同一文件再次导入时指纹比对跳过全部4笔,追加0笔、跳过4笔
  • 把房租改为正数后触发拒绝分支,邮件中差异金额为7200.00元且指出疑似符号错误交易
  • 金额校验全程使用整数分计算,不出现浮点误差导致的误判
  • Rules页新增一条规则后,重跑能对存量未分类交易生效

容易卡住的地方

  • 本模板为付费商品,未购买前无法核对节点细节;本站步骤基于公开说明还原,未核实参数请以原模板为准
  • OpenAI提取可能误读版式复杂的PDF,余额校验正是防错闸,不要跳过拒绝分支直接导入
  • Fingerprint列必须存在于Transactions页且规则页必须有Match/Category/Direction三列,否则去重和分类失效
  • 金额必须以整数分运算,浮点相加会在分位上产生误判
  • Gmail节点需替换收件人地址并确认账号可从n8n发信
  • 模型调用另计费;本站不承诺任何费用数值与免费可用性

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Import reconciled bank statements into Google Sheets with Google Drive and OpenAI
原作者
Ziad Karim
原始发布日期
2026-09-26T00:11:57.870Z
来源
https://n8n.io/workflows/19951