在大型综合医院日常运营中,患者抱怨「等太久」几乎每天都在发生。但问题究竟出在哪?是叫号系统响应慢、医生问诊超时、缴费窗口排队长,还是预约平台与现场流程脱节?传统排查方式依赖人工导出多个系统数据,在 Excel 中反复 VLOOKUP 和手动匹配,耗时长、容错低、难以复现。而门诊患者等待时间瓶颈归因分析系统正是为解决这一典型痛点而生,它不依赖数据库权限,不编写 SQL,不接入实时 API,仅靠三份标准 CSV 文件,就能在几分钟内完成跨系统时间链对齐、统计检验与可视化归因。
本项目是一个开箱即用的开源工具,专为医院信息科、医务处运营分析岗、智慧医院建设团队设计。它将复杂的数据工程流程封装成简洁命令,把统计学方法嵌入分析引擎,最终输出可直接呈报科室主任的瓶颈报告和交互式仪表盘。无需数据科学家,也无需定制开发,即可快速定位「哪里卡、为何卡、谁来改」。
项目概述:从多源碎片数据到可行动的瓶颈洞察
该系统核心目标是构建患者在门诊全流程中的标准化时间链,并据此识别显著拖慢整体效率的关键节点。所谓全流程,覆盖从「预约报到」开始,经「候诊」「问诊」「缴费」「检查」「取药」六个典型环节;所谓多源,指分别来自叫号系统、HIS(医院信息系统)和预约平台的独立数据源。
项目通过三层能力实现闭环: - 数据适配层:内置 queue_adapter.py、his_adapter.py、appointment_adapter.py 三个适配器,统一解析不同格式的 CSV 文件,输出结构一致的 DataFrame; - 时间链构建层:基于患者 ID 与时间戳进行秒级容错对齐(例如允许 ±30 秒偏差),自动拼接完整就诊路径; - 瓶颈分析层:按科室、时段、患者类型(如初诊/复诊/急诊)多维分组,计算各节点耗时的均值、中位数、90 分位,并执行 t 检验或 Mann-Whitney U 检验,筛选出具有统计显著性的瓶颈。
所有分析结果以结构化文件与 HTML 可视化双形式输出,兼顾技术复核与业务汇报需求。
技术亮点:Python + TypeScript 的务实组合
本项目未追求技术堆砌,而是围绕「易部署、易理解、易交付」原则选型,形成清晰的职责边界与协作逻辑:
Python 层承担核心分析任务使用
pandas进行高效数据清洗与合并,numpy支持数值运算,scipy提供统计检验能力,typer构建健壮 CLI 入口。所有算法逻辑集中于src/python/目录下,模块职责明确,便于二次开发与审计。TypeScript/Node.js 封装用户接口CLI 工具基于
Commander.js实现命令解析,Web 服务采用轻量Express.js暴露/api/results等标准接口。前端使用原生Chart.js渲染热力图与柱状图,无框架依赖,加载快、兼容强。架构解耦,进退自如Python 分析引擎可完全脱离 Web 层独立运行;CLI 与 Web 服务共享同一套分析结果生成逻辑,确保结论一致性;所有中间产物(如
patient_time_chains.json)均保留,支持回溯验证。开箱即用的跨平台支持提供 Windows 批处理脚本(
run_analysis.bat、start_web.bat)与 Unix Shell 脚本(run_analysis.sh、start_web.sh),降低一线人员使用门槛;示例数据集已预置在data/目录,首次运行无需额外准备。
应用场景:可用于医院精细化运营的多个关键环节
本项目并非通用数据分析平台,而是聚焦真实医疗管理场景的垂直工具,适合以下典型用途:
投诉溯源分析当某科室出现集中性候诊投诉时,可快速锁定具体时段与瓶颈节点,例如发现「内分泌科 14:00–15:00 候诊时长 90 分位达 47 分钟,p = 0.003」,支撑增开临时号源等即时干预。
资源调配评估对比不同科室、不同时段、不同类型患者的各节点耗时分布,辅助判断是否需调整医生排班、收费窗口数量或检查设备投放策略。
流程优化基线建立定期运行分析,生成历史趋势报告,量化改进措施(如上线新叫号规则、优化分诊逻辑)前后的等待时间变化,验证优化效果。
跨系统协同诊断当 HIS 记录与叫号系统显示时间明显错位时,可通过
data_merger.py的容错对齐机制识别数据同步延迟或录入异常,反向推动系统集成治理。信息科能力建设工具作为低代码分析范例,帮助非编程背景的信息科同事掌握数据驱动决策方法,减少对 IT 部门或外部厂商的依赖。
使用指南:三步完成本地部署与分析
项目对环境要求清晰,安装与运行流程标准化,全程可在 15 分钟内走通。
环境准备
确保已安装以下基础运行时: - Python 3.9 或更高版本 - Node.js 18 或更高版本 - npm 8 或更高版本
安装步骤
首先克隆项目并进入目录:
git clone https://github.com/nexorin9/outpatient-waittime-bottleneck-analyzer.gitcd outpatient-waittime-bottleneck-analyzer/接着安装 Python 依赖,推荐使用虚拟环境隔离:
python -m venv venvsource venv/bin/activatepip install -r requirements.txtpython -c "import pandas, numpy, scipy; print('Python 依赖 OK')"然后安装并构建 Node.js 层:
npm installnpm run buildls dist/快速启动分析
默认使用 data/ 目录下的示例数据,执行完整分析只需一条命令:
npm run start:cli -- analyze --data-dir data/分析完成后,将在当前目录生成如下关键输出文件:
bottleneck_ranking_report.txt | ||
bottleneck_ranking.json | ||
significant_bottlenecks.json | ||
bottleneck_stats.csv |
如需交互式查看,可启动 Web 服务:
npm run start:server访问 http://localhost:3000 即可打开可视化仪表盘,支持按科室、时段、患者类型动态筛选,热力图直观呈现各节点等待时间分布。
高级用法示例
指定分析单一科室:
npm run start:cli -- analyze --data-dir data/ --dept 内分泌科指定输出为纯文本格式(适合集成至邮件或通知系统):
npm run start:cli -- analyze --data-dir data/ --format textWindows 用户可直接运行编译后脚本,跳过 npm 启动层:
node dist/cli.js analyze --data-dir data/总结:让数据归因回归业务本质
在医疗信息化持续深化的今天,大量系统已上线多年,但数据仍沉睡在各自孤岛中。本项目不做大而全的平台,也不追求炫酷大屏,而是聚焦一个具体问题:如何让信息科同事在接到科主任电话后,3 分钟内给出有统计依据的归因结论。它用严谨的时序对齐逻辑替代手工匹配,用自动化显著性检验替代经验判断,用轻量可视化替代 PPT 拼接。
所有功能均围绕「可解释」「可复现」「可交付」展开。每一行代码职责清晰,每一个输出文件语义明确,每一条命令参数含义直白。它不替代医院现有系统,而是成为连接系统之间的「分析胶水」;它不要求用户掌握高级编程技能,但保留了充分的扩展接口,方便后续对接院内数据中台或 BI 工具。
项目当前免费开源,若您对项目有疑问、使用上的困惑或想深入交流,欢迎私信我们,或加入社群讨论。
项目地址:https://github.com/nexorin9/outpatient-waittime-bottleneck-analyzer国内仓库:https://gitee.com/nexorin9/outpatient-waittime-bottleneck-analyzer
夜雨聆风