2026-09-16 · 原文发布日
供应商发票自动查重、对PO、拦异常
免费n8n模板给财务用:每5分钟扫Gmail里的PDF发票,gpt-4o-mini抽取供应商、发票号、金额、PO号、IBAN等字段,先做日期、合计、隐含税率和IBAN校验,再对照Google Sheets里的供应商主档、采购订单和台账,查重复付款、银行账号变更和PO/收货金额不符。按风险分级处理:可疑的发邮件冻结、高风险发Gmail审批请求(最多等3天)、小额干净的自动通过、读不清的转人工录入,结果写回台账;每工作日早8点还发汇总异常报告。
原文要点
原模板(n8n工作流19634,作者Luca)面向财务场景:Gmail收到带PDF附件的发票邮件即触发(每5分钟轮询),从Google Sheets一次性读取Suppliers、Purchase orders、Ledger三个标签页作为对照主档;用OpenAI gpt-4o-mini抽取供应商、发票号、日期、金额、PO号、IBAN等字段;先做日期解析、合计算术、隐含VAT税率、IBAN校验,再查台账重复付款、供应商主档银行账号变更、PO与收货金额不符;按结果分流:冻结邮件通知财务、高风险/高金额走Gmail审批(最长等3天)、小额干净自动通过、读不清转人工,并append-or-update写回Ledger(以invoice_key列匹配);每工作日08:00扫描台账发汇总异常报告。阈值、审批人邮箱等在Settings节点配置。
这次做成什么
在自有n8n实例中复刻这套发票风控流水线:收票→抽取→校验→三方对照→分级路由→台账→日报。由于原文不提供可下载工作流文件,本站按描述给出可照搭的节点顺序、字段设计和提示词,属本站独立方案,非原模板文件。
准备什么
- 一个可自建的n8n实例(云端或自托管),能加Gmail、Google Sheets、OpenAI三类凭据
- 一个Google Sheet,含Suppliers、Purchase orders、Ledger三个标签页,Ledger须有invoice_key列
- OpenAI API Key,且账号可用gpt-4o-mini;API调用按官方价格另行计费
- 一个只收测试发票的Gmail邮箱或标签,避免扫到真实财务邮件
- 若干张虚构测试发票PDF(不要用真实供应商信息)
具体怎么做
建主档表格
创建Google Sheet。Suppliers标签页列:supplier_name、iban、contact_email;Purchase orders列:po_number、supplier_name、po_amount、received_amount;Ledger列:invoice_key、supplier_name、invoice_number、invoice_date、due_date、total、gross、currency、iban、po_number、status、hold_reason、approval_status。invoice_key建议用 供应商名小写_发票号 拼接,供append-or-update匹配。
配置触发与配置节点
在n8n新建工作流,加Gmail Trigger(轮询间隔5分钟,条件:有附件且文件名以.pdf结尾),绑定Gmail凭据。其后加Set节点命名Settings,写入sheet_id、finance_email、approver_email、auto_approve_limit(如500)、manager_limit(如5000)、amount_tolerance(如0.02)、duplicate_window_days(如90)、default_currency(如EUR)。原模板中工作日读取台账步骤的Sheet ID是硬编码占位,自建时统一从Settings取值。
拆分附件并抽取字段
加Split Out节点把每封邮件拆成一附件一item;加PDF文本提取节点(n8n的Extract from File,操作选PDF);再接OpenAI节点,model选gpt-4o-mini,用下方材料中的抽取提示词,要求只返回JSON。把返回JSON解析后与附件文件名合并为后续item。
一致性校验与三方对照
加Code节点:①日期能否解析;②total与gross差值比例是否超过amount_tolerance;③隐含VAT税率=(gross-total)/total是否在0~0.3合理带;④IBAN做MOD-97校验。再用Google Sheets节点一次读取三个标签页,Code节点比对:同invoice_key是否已在Ledger且状态为paid(重复付款);抽取IBAN是否等于Suppliers主档IBAN(账号变更);po_amount与received_amount差额是否超容差(PO/收货不符)。输出risk_level:blocked/high/medium/clean/unreadable。
按风险分级路由
加Switch节点按risk_level分流:unreadable→Gmail节点发人工录入通知;blocked(重复或IBAN变更)→邮件通知财务冻结并写Ledger状态hold;high或金额超manager_limit→用Gmail的发送并等待审批类节点发审批请求,超时设3天,超时视为驳回;clean且金额低于auto_approve_limit→直接写Ledger状态auto_cleared。所有分支最后都append-or-update Ledger(匹配键invoice_key)。
工作日异常日报
另建一个工作流:Schedule Trigger设工作日08:00→Google Sheets读取Ledger→Code节点筛出approval_status=pending超3天、status=hold未解决、due_date临近或逾期、同供应商同金额不同发票号的疑似重复→OpenAI节点汇总成中文摘要→Gmail发给finance_email。
可直接复制的材料
发票字段抽取提示词(粘贴到OpenAI节点)
本站独立编写,字段名需与自建Code校验节点一致;{{$json.pdfText}}按你实际的n8n表达式调整。
你是发票信息抽取器。从下面的发票PDF文本中抽取字段,只输出一个JSON对象,不要输出任何解释。字段:supplier_name(供应商全称)、invoice_number(发票号)、invoice_date(开票日期,YYYY-MM-DD)、due_date(到期日,YYYY-MM-DD)、currency(三字母币种)、net_total(净额,数字)、tax_amount(税额,数字)、gross_total(总额,数字)、po_number(采购订单号,无则null)、iban(收款银行IBAN,无则null)。任何字段读不到就填null,并在字段名加_prefix的布尔字段标记不可读,例如invoice_number_unreadable:true。发票文本如下:
{{$json.pdfText}}测试用Ledger示例行(CSV,可粘进Ledger标签页)
本站虚构数据:先放一行已付款记录,再用同invoice_key的测试发票即可触发重复付款拦截。IBAN为ISO示例号。
invoice_key,supplier_name,invoice_number,invoice_date,due_date,total,gross,currency,iban,po_number,status,hold_reason,approval_status
acme gmbh_inv-1001,ACME GmbH,INV-1001,2026-08-01,2026-08-31,1000,1190,EUR,DE89370400440532013000,PO-77,paid,,输入与输出示例
本站虚构演示,输入输出字段互相对应,未实际调用原模板或OpenAI。
输入
测试发票PDF文本:ACME GmbH, Invoice INV-1001, Date 2026-09-10, Due 2026-10-10, Net 1000.00, VAT 19% 190.00, Gross 1190.00 EUR, PO PO-77, IBAN DE89370400440532013000。Ledger中已有同invoice_key行且status=paid。对应输出
抽取JSON:supplier_name=ACME GmbH, invoice_number=INV-1001, gross_total=1190, iban=DE89…3000。校验通过(VAT隐含税率0.19);对照命中Ledger已付款记录→risk_level=blocked→向finance@example.com发冻结邮件,Ledger该invoice_key行更新为status=hold, hold_reason=duplicate_payment_suspected。做完检查这些
- 给测试邮箱发一封带虚构PDF发票的邮件,5分钟内工作流触发且每个附件单独成item
- OpenAI节点返回的JSON能被解析,缺字段时带_unreadable标记而不中断流程
- Ledger已有同invoice_key已付款行时,该发票被路由到blocked并写hold记录
- 金额低于auto_approve_limit且全部校验通过的发票直接写auto_cleared,不发审批邮件
- 工作日08:00的日报工作流能列出未回复审批和hold项
容易卡住的地方
- 原模板说明中工作日读取台账步骤的Sheet ID是硬编码占位YOUR_SHEET_ID,漏改会读不到表
- Gmail审批等待最长3天是原模板设定,审批人邮箱填错会导致全部超时驳回
- gpt-4o-mini的API费用另计,本站未核实你的账号可用性;轮询频率高会增加扫描次数
- IBAN校验只对符合IBAN格式的账号有效,非IBAN地区银行账号需另行处理
- 原模板免费可复刻思路,但界面按钮名以你n8n版本为准,本站未实测
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Screen supplier invoices for duplicates and PO mismatches with Gmail, Sheets and OpenAI
- 原作者
- Luca
- 原始发布日期
- 2026-09-15T16:51:55.400Z
- 来源
- https://n8n.io/workflows/19634