一家代账公司每月要处理三千多张票, {MOD}、收据、行程单、银行回单混在一起。以前两个会计录入,一个月错三四十张,错的地方集中得厉害:金额位数看错、税额算错、日期写成上一年。
上了识别之后,速度提了四倍,错的类型也变了。人工错的是看漏,机器错的是想当然。控住这两类错的办法不一样,得分开治。
最常见的一种错是把金额读成另一个数量级。小写金额 1,280.00 读成 12800.00,或者小数点被当成逗号。这类错在汇总时会被放大,一张错票能让整月的进项税对不上。
治的办法是双读校验:识别完用小写金额和价税合计对一次,再和大写金额对一次。三处对不上就标红。大写金额那一栏很多人觉得没用,实际上它是防这种错的最好一道闸。
票据上的日期格式五花八门,2026年10月24日、2026-10-24、26年10月24日都有。模型碰到两位数年份容易补成 20 年前或 20 年后。代账公司年底最怕这个,一张票跨错年,整个汇算都要重做。
规则里加一条:识别出的日期和票据所属期间比对,超出三个月的一律人工看。这条规则不聪明,但挡住了大部分跨年错。
{MOD}上的红 {MOD}印章常常压在金额和开票方名称上,识别会把压住的笔画读成别的字。手写的收据更麻烦,同一个「肆」字能认出三种结果。
这类错没有好办法,只能靠抽检和规则拦。我们的做法是:带手写内容的票、印章覆盖率超过三成的票,一律进人工队列,不进自动流程。宁可慢,不让错的数据进账。

同一个供应商的票,格式是固定的。给它一张模板,告诉它金额在哪个区域、税额在哪个区域,识别准确率比自由识别高一截。常用供应商做二十张模板,覆盖八成的票据量。
模板也不用画得很精确,标个大概位置就行。关键是让模型知道「这张票长这样,按这个位置找」,它就不会把备注栏里的数字当成金额。
能算出来的东西别让模型猜。金额乘税率等于税额、单价乘数量等于金额、明细合计等于价税合计、借贷必须平。这些等式写进程序里跑一遍,错票当场现形。
我们统计过,加上四条校验规则之后,进入人工的票据从三成降到一成二,而漏出去的错票几乎为零。规则是死的,死的东西在这种场景里比聪明的可靠。
全检太慢,不检太险。我们的做法是按供应商分层抽:新供应商前五十张全检,之后抽两成;老供应商抽半成;被查出过错的供应商回到全检,连续一百张无错再降级。
抽检结果要记下来,记到供应商名下。哪个供应商的票老出问题,以后它的票直接人工。这套机制跑半年,人工的工作量会自己往下掉。
把不同票种塞进同一条流程,是准确率掉得最快的原因。增值税专票、普通 {MOD}、出租车票、火车票、行程单、银行回单,版式差得远,识别逻辑也不一样。专票有密码区,火车票有乘车人身份信息,行程单有一堆费率说明。
做法是先分票种,再识别。分票种这一步用人做比机器快:扫描的时候就按类分文件夹,一张票只花两秒。省下的识别调整时间是几十倍。
票种分完之后,每类配一套自己的校验规则。火车票校验票价加手续费,行程单校验票价加机建燃油,专票校验金额乘税率。规则一分开,误报少了大半。
回单上没有税额,也没有商品明细,跟 {MOD}的逻辑完全不同。混在一起识别,模型会硬给它编一个税额出来。代账公司里这个错犯得最多,因为回单和 {MOD}常常一起收进来。
我们的处理是把回单单独走一条线:只识别日期、金额、收付方、摘要四个字段,识完直接进对账流程,不进凭证生成。两条线分开之后,凭证那边的错几乎清零。
识别出来的字段不能直接写进账,先落一张中间表,标上三个状态:自动通过、待核、人工。待核的那批,系统给出可疑理由,比如「大写与小写不一致」「税额与金额乘税率不符」。
中间表要留票面图。人工核的时候,图和字段并排看,一处一处对。我们见过有系统只给字段不给图,会计核一张票要回原始文件夹翻图,效率还不如手工录。
现在的分工是:机器识别加校验,通过的自动进账,不通过的进人工。人工那边看到的不是原始票,是「票面图 + 识别结果 + 哪条规则没过」三样并排。改一个字段平均十秒,比从头录入快。
有一类活必须留给人:判断这张票能不能用。 {MOD}的真伪、报销事项是否合规、跨期票据能不能入账,这些涉及判断,识别做得再准也没用。机器负责读字,人负责定性质。

票据里有客户名称、金额、银行账号,这些是敏感信息。用外部接口识别,等于把客户的账目传出去。做法有两条:一条是本地部署识别模型,慢一些但数据不出门;另一条是把票面先脱敏,遮掉客户名和账号,只留金额和日期。
代账这个行业,客户对数据外流极其敏感。我们见过一家因为把票据传到免费工具上,被客户发现后丢了七家客户。工具便宜,丢的客户贵。
三千张票,原来两个会计,一人一天一百张,要十五个工作日。现在机器跑一遍,人工处理那三百多张异常票,三个人两天做完。一年省下的工时,抵得上接口和模板建设的投入还多。
但账不能只算工时。错票带来的返工和客户投诉,那部分成本更高。这家公司去年因为一张跨年票错账,被客户追着改了三天报表,最后免了一个月的服务费。
别一上来就全量切。先拿一个客户、一个月的数据跑双轨:机器识一遍,人工照旧录一遍,两边对比。跑一个月,把错的类型列出来,看哪类能靠规则拦、哪类只能靠人。
双轨跑完再分批切,先切格式最规范的供应商,最后切手写收据。这个顺序反了,第一天就会被一堆识别错误淹掉,团队对这套东西的信心就没了。

识别准确率这个数字意义不大,九成八和九成九在你这里可能是天壤之别,也可能毫无区别。真正要看的是「错误有没有被拦住」,也就是错票流到账上的比例。这个比例能做到万分之一以下,系统就算过关。
追求模型本身的准确率没有尽头,把校验和抽检做扎实,才是这件事的正解。