乐于分享
好东西不私藏

[医疗软件开源] 医保审核意见医嘱级翻译器:将医保局返回的扣款原因代码自动翻译为具体医嘱

[医疗软件开源] 医保审核意见医嘱级翻译器:将医保局返回的扣款原因代码自动翻译为具体医嘱

在医院医保办与临床科室协同整改医保审核问题的过程中,一个高频痛点长期存在:医保局反馈的扣款原因以简短编码形式呈现(如 E003-大型检查阳性指征不符),但医生无法直接据此定位到具体哪一条医嘱存在问题。人工核对需反复比对 HIS 系统中的数千条医嘱记录,耗时、易错、难以归因。Medical Insurance Audit Translator 正是为此而生,它不是通用大模型应用,也不是粗粒度的报表工具,而是一个聚焦「医嘱级归因」的轻量级规则引擎驱动工具,专为医保审核整改闭环设计。

项目采用「规则引擎为主、LLM 辅助排序为辅」的技术路线,在保证结果可解释性与审计合规性的前提下,引入 LLM 提升模糊匹配场景下的候选排序质量。所有能力均围绕真实业务流构建:从解析医保局下发的 Excel/XML 审核文件,到关联本院 HIS 医嘱明细,再到输出 Ledger 式整改清单,全程可配置、可复现、可审计。


关键能力还原:面向真实整改流程的功能设计

项目功能严格对应医保整改工作流,不堆砌概念,不脱离场景:

  • 医保审核结果解析支持医保局常见交付格式:Excel(.xlsx)与 XML(.xml)两类审核结果文件。

  • HIS 医嘱明细解析支持标准 Excel 格式医嘱导出表,字段需包含医嘱时间、项目名称、规格、金额、执行状态等关键信息。

  • 扣款原因映射基于预定义规则,将 E001 至 E010 等医保扣款代码映射为医嘱特征维度(如「检查类项目」「超适应症用药」「重复收费」等语义类别)。

  • 多条件医嘱匹配匹配逻辑分三层:精确匹配(药品名+规格+金额全等)、模糊匹配(关键词重合度 + Levenshtein 距离)、日期范围匹配(扣款日期 ± N 天内有效医嘱)。

  • LLM 辅助排序(可选关闭)对规则引擎输出的多个候选医嘱,调用 OpenAI API 进行置信度打分与重排序,提升最终推荐医嘱的合理性;可通过 --no-llm 或配置项完全禁用,不依赖 LLM 亦可运行。

  • Ledger 整改清单输出输出格式支持三种:CLI 表格(适合快速调试)、HTML(带样式表格,适配 Web 界面)、CSV(供 Excel 二次分析或导入 HIS 系统)。

  • 可配置规则引擎所有映射逻辑通过 YAML 文件定义,支持自定义扣款代码、匹配字段、权重策略与过滤阈值,无需修改代码即可适配不同地区医保规则。


技术架构:清晰分层,职责明确

项目采用典型的三层架构,模块边界清晰,便于医院信息科或开发者按需定制或审计:

┌─────────────────────────────────────────────────────────────┐│                      用户交互层                               ││  ┌──────────────┐    ┌──────────────┐                       ││  │   CLI (Click) │    │  Web (Flask)  │                       ││  └──────┬───────┘    └──────┬───────┘                       │└─────────┼───────────────────┼───────────────────────────────┘          │                   │┌─────────┴───────────────────┴───────────────────────────────┐│                      核心引擎层 (AuditTranslatorEngine)       ││  ┌──────────────────────────────────────────────────────┐   ││  │                    Core (core.py)                     │   ││  │  ┌────────────┐  ┌────────────┐  ┌────────────────┐  │   ││  │  │  Parser    │→ │Rule Engine │→ │ Translator(LLM)│  │   ││  │  │  Module    │  │  Module    │  │    Module      │  │   ││  │  └────────────┘  └────────────┘  └────────────────┘  │   ││  └──────────────────────────────────────────────────────┘   │└─────────────────────────────────────────────────────────────┘          │                   │                   │┌─────────┴───────────────────┴───────────────────┴───────────┐│                      数据层                                    ││  ┌──────────────┐  ┌──────────────┐  ┌──────────────────┐    ││  │  Parsers    │  │ Rule Engine  │  │   Output         │    ││  │  parsers/   │  │  engine/     │  │   output/       │    ││  └──────────────┘  └──────────────┘  └──────────────────┘    │└─────────────────────────────────────────────────────────────┘

各模块路径与职责如下:

模块
路径
说明
parsers
src/parsers/
实现 AuditResultParser 与 HisOrdersParser,分别处理医保审核文件与 HIS 医嘱 Excel/XML
engine
src/engine/
基于 python-constraint 构建规则引擎,完成扣款代码 → 医嘱特征 → 候选集生成全流程
llm
src/llm/
提供 OpenAILLMScoreProvider 与 MockLLMScoreProvider,支持生产环境与离线测试双模式
output
src/output/
实现 LedgerTableRenderer,统一生成 CLI / HTML / CSV 三格式 Ledger 清单

数据流严格遵循四阶段:

  1. 解析阶段
    parsers/ 加载并标准化医保审核结果与 HIS 医嘱数据为统一 DataFrame 结构
  2. 匹配阶段
    engine/ 根据 rules.yaml 中定义的扣款代码规则,对每条审核记录生成一组候选医嘱
  3. 翻译阶段
    llm/(若启用)对候选医嘱进行语义相关性评分与重排序
  4. 输出阶段
    output/ 将最终结果渲染为结构化 Ledger 表格,含「扣款单号」「扣款金额」「扣款原因」「疑似医嘱」「匹配理由」「状态」六列

快速上手:安装、配置与运行

安装依赖

pip install -r requirements.txt

项目依赖精简,核心为: - pandas + openpyxl:处理 Excel 数据 - python-constraint:实现可配置规则求解 - Click:提供健壮 CLI 接口 - Flask:内置轻量 Web 界面(无需额外部署) - PyYAML:加载规则与配置 - openai:仅当启用 LLM 功能时调用

配置方式

项目支持双重配置机制:YAML 配置文件 + 环境变量,优先级为「环境变量 > config.yaml > 默认值」。

复制示例配置:

cp config.yaml.example config.yamlcp .env.example .env

config.yaml 关键配置项:

llm:  api_key: ""              # OpenAI API 密钥(也可通过 OPENAI_API_KEY 环境变量设置)  model: "gpt-3.5-turbo"   # 模型名称  base_url: null           # 可选,用于对接兼容 OpenAI 的本地模型服务  temperature: 0.3          # 降低随机性,提升结果确定性  enabled: false            # 默认关闭 LLM,保障纯规则可审计性rule_engine:  default_rules_path: null # 自定义规则文件路径  match_threshold: 0.5     # 候选医嘱匹配得分低于此值则过滤logging:  level: "INFO"  format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"  file_enabled: true

启用 LLM 的环境变量写法(推荐用于测试):

export OPENAI_API_KEY="sk-..."export LLM_ENABLED="true"

CLI 使用示例

默认纯规则模式,输出终端表格:

python -m src.cli --audit-file data/audit_results.xlsx --orders-file data/his_orders.xlsx --format cli

导出 CSV 供后续分析:

python -m src.cli --audit-file data/audit_results.xlsx --orders-file data/his_orders.xlsx --no-llm --output output/result.csv

使用自定义规则文件:

python -m src.cli --audit-file data/audit_results.xlsx --orders-file data/his_orders.xlsx --rules-file data/rules.yaml

Web 界面启动

python -m src.web

访问 http://127.0.0.1:5000,即可上传审核 Excel 文件,实时查看 Ledger 表格结果,并支持一键 CSV 下载。


输出即所见:结构化、可追溯的整改清单

项目输出始终围绕「让医生一眼看懂该改什么」这一目标,不抽象、不冗余。CLI 示例输出如下:

扣款单号     │ 扣款金额 │ 扣款原因                          │ 疑似医嘱                          │ 匹配理由                      │ 状态─────────────┼──────────┼───────────────────────────────────┼───────────────────────────────────┼──────────────────────────────┼────────AUD20240001  │ ¥150.00  │ E003-大型检查阳性指征不符          │ 腹部B超检查(常规体检套餐)        │ 检查项目与扣款原因描述相符     │ 待整改AUD20240002  │ ¥320.00  │ E005-药品超适应症用药              │ 注射用头孢哌酮舒巴坦钠(1.5g×2)    │ 药品名称+规格+金额精确匹配     │ 待整改

每一行均满足三个基本要求: - 可定位:扣款单号与 HIS 医嘱 ID(或完整描述)一一对应可解释:匹配理由字段说明为何被选中,非黑盒推荐可操作:状态列为「待整改」,医生可直接据此修正医嘱或补充病历依据

Web 界面在此基础上增强可读性:中文标签、响应式表格、悬停提示、导出按钮,降低使用门槛。


适用场景与注意事项

本项目适用于以下典型场景: - 医院医保办批量处理月度审核反馈,生成科室级整改任务清单- 信息科为临床科室提供自助核查工具,减少人工转译环节- 医保智能审核系统建设初期,作为规则验证与案例沉淀辅助模块

注意事项: - 规则先行:LLM 仅为排序辅助,核心匹配逻辑由 YAML 规则定义,需根据本地医保政策持续维护 rules.yaml数据准备:HIS 医嘱 Excel 需至少包含「医嘱时间」「项目名称」「规格」「金额」四字段,否则匹配精度下降LLM 非必需:关闭 LLM 后仍为完整可用工具,所有功能不降级,仅损失部分模糊匹配场景的排序优化能力安全可控:敏感数据不出本地,LLM 请求仅发送脱敏后的医嘱文本片段与扣款原因描述,无患者身份信息


项目地址:https://github.com/nexorin9/medical-insurance-audit-translator国内仓库:https://gitee.com/nexorin9/medical-insurance-audit-translator

欢迎在 Issues 中提交规则适配建议、匹配逻辑优化点或实际使用反馈。