扣子发票识别报销系统开发实战指南
设想一个日常场景:财务人员每天打开邮箱,数十封“报销申请”堆积,每封都得下载附件、打开发票、手动录入金额、核对税号,再跑去找部门领导签字。这套流程既费时费力,又极易出错。借助AI工作流,这些步骤完全可以自动执行。
真正需要的方案是:员工上传发票后,系统自动识别票面信息、匹配报销人、校验合规性,然后直接推送到审批流程。整个环节中,人工干预几乎降为零。
基础骨架怎么搭
登录扣子(Coze)平台,进入「工作流」,新建一个流程,暂命名为“发票报销自动化”。
开始节点上需要挂两个参数:第一个是 files(类型为 Array
接着添加一个「选择器」节点,设置数学条件:“文件数量 > 0”。如果条件成立,流程继续往下走;否则直接终止,并返回提示:“未上传发票”。
这一步看似简单,却是整个流程的基石——没人传文件,后续操作全无意义。
发票解析:两条路径可选
发票解析是整个工作流的核心。根据上传文件的类型和质量,可选择不同插件:
方法一:Image2Text——适合清晰的扫描件或手机拍照。把上一个节点的 files 接入,开启“高精度OCR模式”,输出字段设为 text_content。识别出来的文本可供后续大模型节点使用。
方法二:文档解析插件——PDF或OFD格式的电子发票推荐此路径。同样接入 files,模式选“发票专用版面分析”。该插件能识别14个字段,从发票代码、号码、开票日期到销售方名称,基本覆盖所需信息。
需要特别提醒:如果员工上传的是模糊拍照图,或发票上有手写备注,最好勾选“启用图像增强”。否则像“购买方税号”这类字段容易漏识别,校验时会带来麻烦。
结构化提取:让数据变成干净的JSON
发票内容解析出来后仍是原始文本。需要再加一个大模型节点做结构化整理,建议命名为“发票信息整理”。
系统提示词需固定:
角色:你是一个财务数据清洗引擎,仅从OCR文本中提取真实存在的字段,禁止编造、补全或推测任何值。
输出要求:返回严格JSON数组,每个对象含字段——发票号码、开票日期(YYYY-MM-DD)、金额(纯数字)、销售方名称、购买方纳税人识别号、发票链接(取自开始节点.files中对应文件的url)、submitter_id(直接填入开始节点.submitter_id值)。
在此节点内,开启“深度思考”开关,模型建议选豆包·1.5·Pro·32k。用户提示词直接传入前序节点的输出结果,即 {{image2text_output.text_content}} 或 {{document_parse_output.result}}。
结构化输出后,紧接着嵌入一个「JSON校验」节点。校验规则必须严格:强制检查发票号码长度是否为12位、金额是否为正数、开票日期是否早于今天。只要有一条校验不通过,流程直接中断,并返回具体错误信息,便于修复。
这一步看似繁琐,但实际经验表明,这种硬校验是防止后续审批环节出问题的最后一道防线。
对接飞书审批与多维表格
数据整理完毕,最后一步就是将审批单发起流程自动化。
先添加「飞书审批」插件,选择“发起审批实例”动作。审批模板ID需提前在飞书管理后台复制,模板里最好配置“财务初审→部门负责人复核→财务终审”三级审批流程。
表单字段映射要准确:报销人填入 submitter_id;发票附件就是 files;金额字段从发票信息整理的输出中,对所有发票金额进行求和;明细行则将JSON数组转为表格形式,每行显示发票号码、开票日期、销售方和金额四项。
最后再来一个「飞书多维表格」插件,选择“add_records”工具。app_token 去飞书开放平台获取,records 字段直接填入前面整理好的发票数据,表格指向一个预设的“待审发票库”。每收到一个审批单,这条记录也同时入库备查。
整个流程,从员工上传发票到数据归档,基本可以做到无人值守。这才是真正的“自动化报销”——省下来的时间,拿去研究别的工作流,不香吗?
