今天本来只是想把手头一叠报销发票录进系统,结果坐下来才发现事情没有这么简单。票据来源太杂了:有电子发票 PDF,有拍照的纸质小票,还有几张从邮箱里翻出来的附件。文件名不是数字串就是手机默认的 IMG 名字,光是把它们和报销单对上,就花掉了我不少时间。
所以这次我干脆先不打开录入界面,而是换了一条顺序:先把票据整成一份能核对的表,再决定哪些进系统、哪些退回去补材料。
先把票据放进一个文件夹
第一步很笨,但效果明显。我把这段时间攒下来的票据都收进同一个文件夹,然后按“年份-月份”建子目录,不再散在下载目录、微信目录和桌面。手机拍的小票统一转成 PDF 或清晰的 JPG,模糊到看不清发票号码的直接单独放一个“模糊待处理”目录,不混进去扫描。
这个动作听起来像是在做归档,其实是为了减少后面识别的干扰。我试过直接拿一堆混着截图、聊天照片和小票的图片去识别,出来的结果会比干净输入差不少。先把输入整理干净,后面的人工核对量会明显下来。
固定输出字段,比一次识别准更重要的是每次都一样
我这次没有让工具自由发挥,而是先定好字段,再一次性处理整批:
发票类型、开票日期、发票号码、销售方名称、项目或服务简称、不含税金额、税额、价税合计、购买方名称、报销人、项目编号、备注。
字段定下来以后,我让工具只做两件事:把票面上看得见的内容抽到对应字段里,抽不出来的标成“待确认”。这样就不会出现第一批识别结果里有某列、第二批又没有的情况。实际用下来,固定字段最大的价值不是让识别更准,而是让后面的异常检查变得可重复。
对不出金额的,一律单独拎出来
票据里最容易出问题的不是文字,是数字。价税合计、税额和不含税金额之间是有关系的,我会让表里固定做一条公式:不含税金额加上税额是否等于价税合计,差一分钱也标出来。这个检查帮我抓到过一张税额抄错的小票,如果直接录进系统,后面和付款记录对不上,还得回头翻原件。
除了金额,我还会看开票日期和报销周期。跨月、跨季度的票据单独标色,不是不能报,而是需要先确认这笔费用的归属期间。把问题在表里标出来,比进了系统再发现要容易处理得多。
重复票据要先归一化,再判断
这次最实用的一个步骤是去重。因为同一张发票可能既在邮箱里、又在微信里、还被拍照存过一份。我用的判断口径是“发票代码加发票号码”,但没有直接比字符串,而是先做归一化:去掉空格和横线,把全角数字转成半角,货币符号统一,英文字母转成小写。
归一化之后再去匹配,误报会少很多。上次没做这一步时,同一张发票因为号码中间多了一个空格,被当成了两张不同的票。现在我会把它当作一条固定规则写进流程,而不是临时用眼睛比对。
还有一种情况是票面上没有发票号码的纸质小票。这种不能靠号码去重,我会按日期加收款方加金额做一次“疑似重复”提示,但不直接判定。因为确实存在同一天、同一家店、同样金额的两次消费,最终还是要结合银行流水或微信支付记录看。
处理完的结果长什么样
这轮整理下来,每张票据最后只会落到两种状态:可以核对的和需要补的。可以核对的,12 个字段都填齐,金额自洽,和已有票据不重复;需要补的,会明确写出原因,比如缺字段、金额待核、疑似重复或票据类型识别不了。表格里用筛选就能很快分开,不用再逐张翻扫描件。
需要补的票据也不会被自动丢掉,而是换一个状态继续跟:缺发票号码的回去找开票方,金额有问题的重拍一张清晰的,疑似重复的先对应付款记录。等确认完,再统一进入报销流程,而不是一边处理一边改表。
工具做的是整理,签核还是人来做
做到这里我反而更确定一件事:AI 办公工具适合把散落的票据收成一张能核对的表,不适合替我做能不能报的判断。哪些费用属于项目支出、超额要不要走例外、跨期票据归到哪一期,这些都需要业务和财务确认。工具能帮我把问题列清楚,但最后一步必须有人签字。
今天这套流程还有一个附带好处,就是原始文件和整理后的表格是放在一起的。以后有人问某笔报销是怎么来的,顺着表格里的文件编号就能找到对应的扫描件,不用再翻聊天记录。
下一步
我准备先把这张表接进现有的报销流程,只做两件事:生成一个待报销单据的草稿,并把原始文件路径一起记进去。暂时不碰审批和付款,那两个节点留给财务系统里的正式权限来处理。等这张表跑顺了,再考虑把识别结果直接写回 ERPNext 的费用报销模块。
下一步如果顺利,我会记录清晰度差的小票怎么补拍,以及同一张票据在不同平台重复提交时,系统里该怎么留痕。