我做了一个合同发票批量提取工具,还能批量核验发票真伪
做财务、审计、授信审查或者项目管理时,我们经常会收到一整个文件夹的合同和发票。
文件不一定整齐:有的是带文字层的 PDF,有的是扫描件,有的是 Word,还有的是手机拍摄的图片。真正开始工作后,大家需要的也不是“打开文件看一眼”,而是把其中的买卖双方、金额、日期、付款条件、税率、项目名称等信息逐项摘出来,再整理成一份能够筛选、统计和复核的 Excel 台账。
单份文件并不难。难的是几十份、几百份文件连续处理时,仍然要保证:
没有漏掉文件;
没有抄错金额、日期和编号;
合同中的付款、验收和违约条款没有摘偏;
销售与采购方向判断正确;
发票台账和真伪核验结果能够一一对应。
所以,我最近做了一个 Windows 桌面工具,尝试把这段重复而琐碎的工作串起来。它面向的不是单份文件演示,而是整批任务:选择一个合同或发票文件夹后,程序会递归扫描其中的文件,批量识别、批量提取、批量生成台账;对于发票,还可以在台账生成后继续逐张批量核验真伪。
它不替代财务人员、法务人员或审查人员作出最终判断。它做的事情更具体:
把整批文件的读取、提取、台账整理、分类统计和发票核验交给程序,把人的时间留给复核和判断。
【01|软件主界面】
![]()
图注:合同与发票共用一套桌面入口,选择文件夹后即可批量处理。
01 为什么合同、发票整理特别适合自动化
传统整理方式通常是这样的:
打开第一份文件→ 找到主体、日期、编号和金额→ 复制到 Excel→ 再找付款、验收、税率等信息→ 打开下一份文件→ 重复以上操作→ 最后再做分类和汇总
这里没有哪一步特别复杂,但每一步都需要注意力。
当文件数量增加后,问题会迅速放大:扫描件需要先识别文字,合同条款分散在不同页面,发票版式也不完全一致;有些 PDF 自带文字,有些只有图片,还有些文件一部分页面有文字、一部分页面需要 OCR。
而且,合同和发票的整理目标并不相同。
合同更关注交易双方、合同标的、含税与不含税金额、付款节奏、质保金、履行期限、交付验收、发票约定、付款违约责任和争议解决等信息。
发票则不仅要提取发票号码、开票日期、购销双方、项目名称、不含税金额、税率、税额和价税合计,判断这张票属于销售发票还是采购发票,还要进一步核验发票的真实性,并为每张发票保留核验状态、说明、时间和结果截图。
这意味着,单纯把图片转成文字还不够。真正有价值的是把不同格式、不同版式的原始材料,转成字段统一、可以筛选和汇总的数据。
02 两条批量处理链路,从原始文件一直走到核验结果
这个工具不是要求用户逐份选择文件,而是以文件夹为一个批次统一处理。两条主要处理链路可以概括为:
合同批次:整批原始合同 → 批量内容识别 → 批量结构化提取 → 合同台账与统计发票批次:整批原始发票 → 批量内容识别 → 批量结构化提取 → 发票台账 → 逐张批量核验 → 结果回写与截图留档
第一层,是读取原始文件。
对于常见的 PDF、Word 和图片,程序会先判断文件类型和内容状态。带有可用文字层的 PDF 优先直接读取;扫描件或文字严重缺失的文件,再交给 OCR。混合型 PDF 则按页面处理,尽量避免整份文件重复识别。
第二层,是理解内容并提取字段。
识别得到的文本会被统一整理,再由大模型按照合同或发票对应的字段规则进行结构化提取。金额字段会进一步清洗,日期、编号、交易双方等内容也会进入统一列。
第三层,是形成可继续工作的结果。
程序不是只输出一段识别文字,而是直接生成合同台账或发票台账,并根据己方公司名称判断销售、采购方向,按年月和交易对方形成统计工作表。
【02|运行日志】
![]()
图注:处理过程分阶段显示,失败文件也会在日志中留下具体原因。
03 合同整理:不只是抽取金额
整理合同台账时,最容易被低估的是“字段之间的业务关系”。
例如,一份合同里可能同时出现合同总价、阶段付款比例、质保金比例和违约金标准。如果只搜索数字,很容易把几个金额混在一起。付款条件还可能散落在“结算方式”“验收”“发票开具”和“违约责任”等不同条款中。
当前版本会重点提取以下内容:
合同类型、买方名称、卖方名称;
商品或服务内容、规格与数量;
合同含税金额、不含税金额和币种;
是否预付、付款期数、各期比例、账期和回款依赖;
质保金或保证金;
签订时间、合同编号或订单号;
履行期限、交付与验收节点;
发票类型与税率约定;
付款相关违约责任、争议解决;
无法确认或需要人工复核的疑点。
如果同一个文件中包含多份合同,程序会尝试按合同编号、签订日期和交易双方的变化拆分记录,而不是默认“一份文件只对应一行”。
填写己方公司名称后,程序还会根据己方处于买方还是卖方,自动标记为采购合同、销售合同、内部合同或第三方合同,并识别对方名称。若提供关联方名单,还可以在台账中增加关联方标记。
最终生成的 Excel 除了“合同台账”,还可以包含“销售合同统计”和“采购合同统计”,按年月、交易对方汇总合同数量和金额。
【 03|合同台账与统计】
![]()
图注:合同关键信息汇总为一行,并按年月和交易对方形成分类统计。
04 发票批量整理、批量核验:从识别到查验形成闭环
发票处理看起来比合同标准化,但实际也有几个容易出错的地方。更重要的是,当前工具处理的不是“上传一张、识别一张”,而是先把一个文件夹中的发票批量整理成台账,再按照台账逐张执行批量核验。
第一,发票可能是文本型 PDF,也可能是扫描件。当前工具采用“文字优先、质量校验、必要时再 OCR”的方式:能够可靠读取的文字层直接使用;发现关键栏位、编号或金额严重缺失时,再回退到 OCR。
第二,同一张发票可能有多个商品或服务项目。工具会按原发票中的出现顺序提取不同项目名称,而不是只保留第一项。
第三,提取完成并不等于核验完成。当前版本可以继续访问国家税务总局全国增值税发票查验平台,根据已经生成的发票台账,连续逐张填写发票信息并读取网页返回结果。使用者不需要每核验一张票就重新复制号码、日期和金额,也不需要再把核验结论手工抄回 Excel。
验证码优先由本地识别模型处理。自动识别多次仍未通过时,软件会弹出独立的人工验证码窗口,由使用者看图填写,不会因为浏览器在后台运行就无法继续。
核验完成后,发票台账会追加:
真伪;
核验状态;
核验说明;
核验截图;
核验时间。
每张发票的结果截图也会单独保存在输出目录中,便于日后回看。每完成一张核验,结果就会立即写入并保存到工作簿,减少长批次运行中途异常造成的结果丢失。程序在处理下一张发票前会重新加载查验页面,并核对返回结果中的发票号码,避免上一张发票的页面结果串到下一张。
因此,这里的“批量核验”并不是简单地把浏览器重复点击很多次,而是把一整批发票的提取数据、查验状态、说明、截图和时间对应到同一份台账中,形成可以继续筛选和复核的结果。
【 04|发票自动查验过程】
![]()
图注:程序逐张提交查验信息,查验结论以税务网站实际返回内容为准。
【 05|发票台账和核验截图目录】
![]()
图注:提取结果、查验结论和结果截图在同一批次中对应保存。
05 实际使用,只需要几个步骤
我没有把它做成需要培训很久的复杂系统。日常使用主要分为以下几步。
第一步:配置模型 API
软件右上角有单独的“API 配置”入口。
合同和发票的结构化提取使用 DeepSeek;扫描件和图片的 OCR 使用智谱 GLM-OCR。DeepSeek 配置一个 API Key,多文件共享同一个客户端并行处理;GLM-OCR 可以按账号配置,每个账号设置并发数。
【 06|API 配置窗口】
![]()
第二步:准备输入和输出文件夹
把需要处理的合同或发票集中放入一个文件夹。在软件中选择一次输入文件夹和输出文件夹,也可以直接把文件夹从资源管理器拖入输入框。后续文件扫描、内容识别和台账生成都按这一批次连续执行,不需要逐份添加文件。
软件默认递归处理子文件夹,适合原始资料已经按客户、项目或月份分目录存放的情况。为了避免下次扫描时把结果再次当成输入,输出文件夹不能放在输入文件夹内部。
第三步:选择运行模式
合同支持三种模式:
完整分析:从原始文件开始,依次完成文字提取、结构化分析和 Excel 导出。
重新提取:已经生成 Markdown 时,跳过文件转换,重新提取字段。
重新统计:已经有合同台账时,不再调用模型,只按新的己方公司名称或关联方名单刷新性质标记和统计。
发票支持完整分析和使用已有 Markdown 重新提取。真伪核验也可以通过界面选项决定是否对整批发票继续执行。
这种拆分的好处是:调整分类名单或统计口径时,不一定要从原始文件全部重跑。
第四步:启动任务并复核结果
运行日志会持续显示当前进度。任务结束后,可以直接打开输出目录查看 Excel 台账、统计工作表、中间提取结果、调试文件和发票核验截图。
Excel 会自动设置表头、筛选、冻结首行、列宽、边框、换行和金额格式,生成后即可继续筛选、补充和复核。
06 它具体替我做了什么
| 工作环节 | 原来的做法 | 使用工具后 |
|---|---|---|
| 文件读取 | 逐份打开 PDF、Word 或图片 | 一次选择文件夹,递归扫描并批量处理 |
| 扫描件识别 | 手工 OCR 或边看边录入 | 自动判断,必要时调用 OCR |
| 合同字段整理 | 在不同条款中逐项寻找 | 按统一字段提取并生成台账 |
| 发票字段整理 | 逐张抄录票号、税率和金额 | 批量提取并清洗金额字段 |
| 销售采购分类 | 人工判断己方是买方还是卖方 | 根据己方公司名称自动标记 |
| 汇总统计 | 手工透视或重复做公式 | 自动生成销售、采购统计工作表 |
| 发票查验 | 逐张打开网站、复制信息、记录结论并截图 | 按发票台账连续批量核验,逐张回写状态并保存截图 |
| 失败处理 | 容易在批量操作中遗漏 | 日志保留失败文件和具体原因 |
这里最重要的变化,并不是把每个动作都变成“无人值守”。
更准确地说,是把人从大量复制、粘贴、切换窗口和重复录入中解放出来,再集中检查程序标出的结果和疑点。
07 我刻意保留了几个人工环节
做这类工具,真正危险的不是它偶尔识别失败,而是让人误以为结果永远正确。
所以,当前版本刻意保留了几个边界:
合同条款由模型提取,但重要金额、付款条件、违约责任仍应回到原文核对;
发票“真伪”来自税务查验平台的实际返回,网站异常、请求受限或字段不完整时,结果会标为未知或相应状态,不强行下结论;
自动验证码失败后交给人工,不尝试绕过必要的验证步骤;
无法可靠判断的内容保留为疑点,而不是编造一个看似完整的答案;
使用者应确认自己有权处理相关合同和发票,并根据单位的数据安全要求决定是否调用外部模型 API。
这也是我对业务自动化的理解:
不是把“人”从流程中删除,而是把人的注意力放到真正需要判断的地方。
08 还有哪些地方准备继续完善
当前版本已经完成了合同台账、发票台账、销售采购统计和发票真伪核验的基本闭环,但距离成熟的生产工具仍有继续优化的空间。
后续可以考虑:
增加合同与发票之间的自动匹配;
对金额、税率、主体和项目名称做更系统的一致性检查;
增加批次汇总、失败重试和人工复核状态;
支持自定义字段模板,适应不同行业的合同台账口径;
增加本地化或企业内网模型方案,进一步控制敏感数据的处理边界。
写在最后
很多办公室自动化项目,真正有价值的地方并不是做出一个会“识别文件”的演示,而是让输出能够接住下一步工作。
合同和发票也是一样。
从原始文件到文字,从文字到字段,从字段到 Excel,再从 Excel 回到人的复核和判断——只有把这条链路真正串起来,自动化才不只是少点几次鼠标,而是让一项原本零散、重复、容易出错的工作,变成一套可以持续复用的流程。
这个工具还在继续完善。
但至少现在,面对一整个文件夹的合同和发票时,我不必再从第一行 Excel 开始,一份一份地复制了。
获取软件
如果你也需要批量整理合同和发票、自动生成 Excel 台账,或者批量核验发票真伪,欢迎关注本公众号,并在后台私信回复关键词:
合同发票
系统将自动发送软件下载链接。

