[开源] 医保基金流向追踪图:面向医保办自查与汇报的可视化分析系统
本项目是一个专为医保基金管理设计的可视化分析工具,将原始医保结算数据自动构建成有向资金流向图,以科室、医生、药品、诊疗项目为节点,以实际结算路径为边,直观呈现资金在医疗服务体系内的真实流动轨迹。我们不做抽象指标堆砌,而是把每一分医保基金的去向落到具体服务单元上;异常节点(如出度突增、资金断点、闭环流动、孤岛科室)自动高亮并支持下钻核查;最终交付一个开箱即用的 HTML 交互式大盘,既可本地运行供医保办日常筛查,也适合作为向分管领导汇报资金使用合规性的核心材料。系统提供 Python + Node.js 双 CLI 入口,覆盖模拟数据生成、图构建、异常检测、服务启动全流程;技术栈明确分层:Python 负责数据建模与规则计算,Node.js/TypeScript 承载 D3.js 可视化与命令行交互,所有能力均通过结构化输出(JSON 报告 + CSV 明细)留痕可溯。
定位与能力范围
我们聚焦医保基金监管中最基础也最易被忽视的一环:资金是否按真实服务链条流动。不是看总额超支,而是看钱有没有“走对路”,比如某药品大量结算却未关联到对应科室或医生,或某科室收治量低但资金流入极高,或多个节点形成无临床意义的资金小闭环。这类问题无法靠 Excel 汇总发现,必须还原为图结构才能识别。因此,本项目不替代 DRG/DIP 分组或智能审核系统,而是补上“资金流拓扑校验”这一层:它不判断单次结算是否合理,但能指出“这一批结算在整体网络中是否自洽”。适用对象非常明确:一线医保办工作人员(需快速自查)、医保科负责人(需向上汇报逻辑链)、以及参与医保飞行检查的数据支持人员(需定位可疑节点)。边界也很清晰:输入是标准医保结算明细表(含患者、科室、医生、药品、项目、金额等字段),输出是可交互图谱+结构化异常报告,不接入医院HIS实时库,不处理影像或文书类非结构化数据。
核心功能模块
系统能力由五个协同模块构成,各司其职且职责分明:
模块 | 职责说明 | 关键实现 |
|---|---|---|
数据模型层 | 定义资金图基本单元: | 所有节点类型(科室/医生/药品/项目)统一继承自 |
资金流向建模引擎 | 将结算记录转化为有向边:例如“患者在内科就诊 → 使用阿司匹林 → 产生费用”,生成“内科→阿司匹林”边并累加金额 | FundFlowBuilder按预设映射规则(如结算记录中“科室”字段指向节点,“药品名称”字段指向另一节点)自动连线 |
异常检测引擎 | 基于图论指标识别四类典型异常: | 检测阈值(如2.5)支持 CLI 参数动态调整,结果写入 |
D3.js 可视化层 | 渲染力导向图:节点大小正比于关联金额,边粗细反映资金量,异常节点添加红色外框与闪烁动画,支持拖拽、缩放、点击查看详情面板 | 详情面板显示该节点全部出入边、金额汇总、关联结算记录ID列表,不依赖后端接口,纯前端渲染 |
CLI 交互工具 | 统一操作入口: | 同时提供 Python 端( |
使用与配置流程
从零开始跑通整套流程,只需四步命令,无需修改代码:
# 1. 安装 Python 依赖(数据处理与检测) pip install -r requirements.txt # 2. 安装 Node.js 依赖(可视化与 CLI) npm install# 3. 生成符合真实分布的演示数据(1000条) npm run generate# 4. 执行分析并启动本地服务 npm run analyze npm run serve打开浏览器访问http://localhost:8080即可见交互图谱。若需定制分析,Python CLI 提供更细粒度控制:
# 按科室筛选分析(仅处理“内科”相关结算) python src/main.py --data-path data/demo_data.csv --department 内科 --output-dir output/ # 调整异常检测敏感度(阈值从默认2.5改为3.0) python src/main.py --data-path data/demo_data.csv --output-dir output/ --outlier-threshold 3.0所有输出文件均落于output/目录:anomaly_report_*.json包含异常类型、节点名、触发原因;anomaly_details_*.csv列出每条异常边的原始结算记录ID、金额、时间戳,方便回溯原始单据。
工程结构与技术选型
我们坚持“Python 做事,Node.js 呈现”的分工原则。Python 层专注数据可信性:结算记录清洗、图结构构建、异常规则计算,这些逻辑必须可复现、可审计、可嵌入现有医保数据平台;Node.js 层专注体验:D3.js 图形渲染、CLI 命令解析、静态资源服务,保证前端交互流畅,且不依赖 Python 运行时。这种分离让系统既能作为独立工具运行,也易于解耦集成:比如将FundFlowBuilder导出为 Python 包供其他医保分析系统调用,或将anomaly_report.json直接推送到单位内网BI平台。
项目目录严格按职责划分: -src/:Python 核心逻辑,含models/(数据定义)、graph_builder.py(建图)、anomaly_detector.py(检测)、main.py(CLI 入口) -templates/:HTML 与 JavaScript 模板,D3 渲染逻辑在此集中维护 -data/:输入数据目录(支持 CSV) -output/:所有分析结果输出位置(JSON + CSV) -docs/:项目文档(含异常类型说明、字段映射规则)
数据与扩展性设计
输入数据只需满足基础字段即可启动:patient_id,department,doctor,drug_name,treatment_item,amount,settlement_date。我们不强制要求字段名完全匹配,而是在graph_builder.py中预留映射配置,例如将医院HIS导出的dept_name字段映射到department,或把medication映射为drug_name。这种设计使系统能快速适配不同区域医保平台的导出格式。未来扩展方向明确:
-新增节点类型:如增加“检验科室”“耗材品牌”节点,只需在FundNode子类中定义新类型,并在FundFlowBuilder中补充映射规则;
-增强异常规则:如加入“同一患者7日内跨科室高频结算”规则,可直接在AnomalyDetector中新增检测方法,不影响可视化层;
-输出对接:anomaly_details_*.csv的字段设计已预留original_system_id(原始系统单据号)列,便于与医院结算系统做 ID 对接。
限制与说明
本系统有明确的能力边界,我们不掩盖也不夸大:
-不替代专业审核:检测出的breakpoint(断点)节点需人工判断是数据缺失还是真实违规,系统只负责标记“此处逻辑断裂”;
-不处理时间序列深度分析:不预测未来流向,不建模月度趋势,所有分析基于单批次结算数据快照;
-图布局为示意性:D3 力导向图的物理位置无业务含义,仅用于视觉分组,判断依据始终是节点度数、金额、连接关系等结构化指标;
-模拟数据生成逻辑公开:npm run generate产生的数据遵循真实医保分布规律(如门诊药品占比、科室结算集中度),但数值为模拟,不可用于正式审计。
异常类型判定规则已在项目文档中逐条说明,例如circular_flow(资金闭环)定义为:存在至少3个节点 A→B→C→A 的有向路径,且每条边金额均大于阈值,这排除了因数据噪声导致的两节点互指误报。
项目地址:
https://github.com/nexorin9/medical-insurance-trail-map
