一、”这是哪里的发票?”——医保审核员的困惑

2024 年 11 月,某市医保中心,审核员小李面对一张发票犯了难。

“这是哪里的发票?” “XX 县人民医院。” “怎么没有财政监制章?” “县医院自己印的……” “那这个能报销吗?”

小李拿不准,叫来科长。科长看了半天,说:”打电话问县医院财务科。”

一个电话打过去,对方说:”哦,我们医院从 2023 年开始用电子发票了,这个是系统自动生成的,没有监制章,但可以在财政部网站查验。”

虚惊一场。但这样的”虚惊”,每天都在上演。

中国有多少种医疗票据?

没人知道确切数字。国家财政部规定的标准票据只有几种(住院发票、门诊发票、电子发票),但实际执行中:

  • 31 个省份,每个省份的财政监制章版式不同
  • 3000+ 三级医院,大部分有自己的票据格式
  • 10000+ 二级医院,票据格式五花八门
  • 30000+ 基层医疗机构,票据更加不规范

这还不包括:

  • 历史票据(2010 年前的老版式)
  • 军队医院票据(特殊版式)
  • 民营医院票据(自制格式)
  • 药店购药小票(热敏纸、格式各异)

某省医保局统计:省内有效医疗票据版式超过 300 种,跨省票据超过 1000 种。

让审核员记住 1000 种票据格式,不可能。但让机器记住,可以。

二、技术方案:版式识别的”三层架构”

处理百种票据格式,核心是”版式识别”——先判断这是什么类型的票据,再用对应的模板识别。

第一层:粗分类(5 大类)

类别 1:财政监制住院发票
特征:红色财政监制章、固定版式、有发票代码/号码
识别方法:检测财政监制章(红色圆形/椭圆形)

类别 2:财政监制门诊发票
特征:与住院发票类似,但标题为"门诊收费票据"
识别方法:OCR 识别标题文字

类别 3:医院自制发票
特征:无财政监制章、医院 LOGO、自定义版式
识别方法:检测医院名称 + 发票关键字

类别 4:费用明细清单
特征:表格形式、多行项目、无金额合计(或有)
识别方法:表格检测 + 表头识别

类别 5:电子发票(PDF/OFD)
特征:电子版式文件、有电子签章、可查验
识别方法:文件格式检测 + 电子签章验证

粗分类准确率目标:>98%

第二层:细分类(按省份/医院)

粗分类后,进一步细分:

住院发票
├── 北京市财政监制
├── 上海市财政监制
├── 广东省财政监制
├── ...(31 省份)
└── 军队医院专用

门诊发票
├── 北京市财政监制
├── 上海市财政监制
└── ...

细分方法:

  • 检测财政监制章文字(”XX 省财政厅监制”)
  • 检测医院名称(与医院库匹配)
  • 检测发票代码前缀(按地区编码)

细分类准确率目标:>95%

第三层:字段模板匹配

确定具体版式后,加载对应的字段模板:

{
  "template_id": "BJ_INPATIENT_2023",
  "template_name": "北京市住院发票 2023 版",
  "fields": [
    {"name": "invoice_code", "type": "text", "bbox": [450, 80, 580, 100]},
    {"name": "invoice_no", "type": "text", "bbox": [450, 105, 580, 125]},
    {"name": "date", "type": "date", "bbox": [350, 150, 480, 170]},
    {"name": "total_amount", "type": "currency", "bbox": [400, 400, 550, 425]},
    ...
  ]
}

模板匹配优势:

  • 识别速度快(直接裁剪指定区域)
  • 准确率高(避免全文识别干扰)
  • 可维护(新增版式只需添加模板)

三、关键技术:如何应对”非标”票据

问题 1:无模板票据怎么办?

即使有 1000 种模板,还是会遇到”从未见过”的票据。

解决方案:零样本字段提取

步骤 1:使用通用 OCR 识别全文
步骤 2:使用 NLP 模型识别字段语义

<ul>
<li>"发票代码"、"发票号码"、"日期"、"金额"等关键词</li>
<li>关键词附近的数字即为目标字段</li>
</ul>
步骤 3:输出结构化数据
步骤 4:人工校验后,加入模板库

某省实测:零样本提取准确率 82%,足够支撑人工快速校验。

问题 2:表格型费用清单如何处理?

费用清单是典型的”行数不定”表格,传统 OCR 模板无法处理。

解决方案:表格结构化提取

步骤 1:表格检测(使用 TableNet 模型)

<ul>
<li>输出:表格区域坐标</li>
</ul>

步骤 2:行列检测

<ul>
<li>使用投影法检测行线、列线</li>
<li>输出:单元格坐标矩阵</li>
</ul>

步骤 3:单元格识别

<ul>
<li>对每个单元格执行 OCR</li>
<li>输出:单元格文本</li>
</ul>

步骤 4:表头语义标注

<ul>
<li>识别第一行(表头)</li>
<li>标注每列类型:药品名称、规格、数量、单价、金额</li>
<li>使用 NLP 模型(如 BERT)理解表头语义</li>
</ul>

步骤 5:数据提取

<ul>
<li>按列类型提取数据</li>
<li>输出结构化列表</li>
</ul>

某省实测:表格提取准确率 94%,支持最多 50 行×15 列的表格。

问题 3:手写体票据如何处理?

部分基层医疗机构仍使用手写票据。

解决方案:手写体专用模型

模型架构:CRNN + Attention
训练数据:50 万 + 手写医疗票据样本
数据增强:

<ul>
<li>随机旋转、倾斜</li>
<li>添加噪声、模糊</li>
<li>模拟不同笔迹</li>
</ul>

后处理:

<ul>
<li>医疗术语词典校正</li>
<li>数字格式校验</li>
<li>上下文语义校验</li>
</ul>

实测:手写体识别准确率 85%(打印体 98%)。

四、系统架构:支撑日均 10 万张票据识别

硬件架构

图像接入层
├── 窗口高拍仪(实时拍摄)
├── 扫描仪(批量扫描)
├── 手机 APP(拍照上传)
└── 邮件/传真(历史票据)

OCR 处理层
├── 版式分类集群(CPU,4 节点)
├── 模板匹配集群(CPU,8 节点)
├── 深度学习集群(GPU,4 卡 A10)
└── 表格处理集群(CPU+GPU 混合,4 节点)

数据存储层
├── 原始图像(对象存储,50TB)
├── OCR 结果(Elasticsearch,全文检索)
├── 模板库(MySQL,1000+ 模板)
└── 样本库(用于持续训练)

性能指标

某省医保平台实测:

  • 单张票据识别时间:P50=1.8 秒,P95=4.2 秒
  • 并发处理能力:200 张/秒
  • 日处理量:10 万 + 张
  • 服务可用性:99.95%

持续学习机制

票据版式会不断更新,系统需要持续学习:

新票据到来
    ↓
版式分类
    ↓
是否有匹配模板?
    ├→ 有:使用模板识别
    └→ 无:零样本提取 + 人工校验
            ↓
        加入模板库
            ↓
        定期批量训练更新模型

某省数据:每月新增模板 15-20 个,模型季度更新一次。

五、实战效果:识别率与效率双提升

识别准确率

某省医保局测试数据(10000 张票据样本):

票据类型 样本数 识别准确率
财政监制住院发票 3500 98.7%
财政监制门诊发票 2800 98.2%
医院自制发票 1500 95.3%
费用明细清单 1800 94.1%
电子发票 400 99.5%
综合 10000 97.2%

效率提升

环节 传统人工 OCR 自动 提升
票据分类 30 秒/张 0.1 秒/张 300 倍
字段提取 2 分钟/张 2 秒/张 60 倍
数据录入 3 分钟/张 0 秒/张
合计 5.5 分钟/张 2.1 秒/张 157 倍

业务价值

  • 审核员人力释放:从 120 人降至 35 人
  • 审核时效提升:从 3 天降至 4 小时
  • 差错率降低:从 4.5% 降至 0.9%
  • 参保人满意度:从 72% 提升至 93%

六、踩过的坑

坑 1:热敏纸褪色 部分药店小票使用热敏纸,时间久了字迹褪色。 解决:图像增强(对比度提升、边缘锐化);严重褪色的转人工。

坑 2:多页票据分页 费用清单多页时,扫描可能漏页或重复。 解决:检测页码连续性;金额合计校验。

坑 3:印章遮挡 医院公章、财务章遮挡关键字段。 解决:印章检测 + 去除(颜色分割);严重遮挡的转人工。

坑 4:电子发票重复报销 同一张电子发票可能被多次打印报销。 解决:发票代码 + 号码去重;与财政部查验平台对接。

七、结语

处理百种票据格式,听起来是个”脏活累活”——没有高深的算法,只有无尽的模板和细节。

但正是这些”脏活累活”,支撑着医保报销的顺畅运行。当审核员不再需要为”这是哪里的发票”而困惑,当参保人不再需要等待数天才能拿到报销款——技术的价值,就体现在这些平凡的细节里。

OCR 识别医疗票据,只是医保数字化的基础设施。但基础设施的价值,不在于炫技,而在于稳定、可靠、持续地提供服务。

让机器做机器擅长的事(识别、计算),让人做人擅长的事(判断、决策)——这才是人机协作的正确姿势。