[开源] 输血申请全链路状态追踪系统:面向输血科与临床护士长的实时流程监控工具
本项目是一个专为医院输血科、护理部及临床科室设计的全流程数字化追踪系统完整覆盖「申请→配血→取血→输血→完成/中止」五个核心环节以状态机驱动流程演进对每个节点设置可配置超时阈值NORMAL/URGENT/EMERGENCY三级超时即触发分级告警提供命令行CLI时间线快查、实时监控终端、HTML甘特图可视化看板与SSE事件推送能力底层采用Python transitions状态机引擎TypeScript/Node.js Web服务双栈架构数据模型严格映射真实业务字段如request_id、blood_type、emergency_level、state_entry_time等所有规则与阈值均通过YAML配置文件统一管理不硬编码、不黑盒。交付形态包括本地CLI工具、浏览器可访问的Web监控页含甘特图、告警面板、申请详情页、RESTful API接口支持前端集成或第三方调度系统调用以及结构化导出JSON/CSV适配院内已有信息化环境。定位与能力范围我们不做通用工作流引擎也不做LIS或HIS插件本系统聚焦输血业务本身只解决一个明确问题当一张输血申请单进入流程后它卡在哪、为什么卡、谁该介入、是否已超时。因此它的能力边界非常清晰-流程建模严格按《临床输血技术规范》和三甲评审条款抽象出10个标准状态APPLICATION_SUBMITTED至TRANSFUSION_ABORTED每个状态转换均有明确触发条件如approve、start_crossmatch、complete等禁止跳步或逆向回退-时效管控所有超时判断基于“状态驻留时长”非绝对时间戳差值避免因人工补录导致误报阈值按紧急程度分三级NORMAL/URGENT/EMERGENCY且支持按科室、血型组合差异化配置通过timeouts.yaml与blood_types.yaml联动-双模呈现CLI面向值班人员快速定位list/watch/alert/timeline/export五类命令Web端面向护士长与输血科主任全局掌控甘特图横轴为时间、纵轴为申请单色块长度状态持续时长红色块直指超时项-可追溯性每个状态变更生成BloodIssueEvent事件记录含操作人、地点、备注所有告警Alert携带elapsed_minutes与threshold_minutes一眼可知超时幅度-零依赖部署不强制对接任何中间件数据存于本地JSON文件配置由YAML驱动CLI与Web服务可独立运行适合从单院区起步逐步推广。核心功能与使用逻辑所有功能围绕“状态”展开不是展示静态台账而是反映动态过程。我们把用户角色与工具形态做了强绑定工具类型主要使用者典型场景关键命令/入口CLI终端输血科值班员、信息科运维夜班巡检、应急排查、批量导出日报python -m src.cli.main list --state CROSSMATCH_IN_PROGRESSpython -m src.cli.main alert --severity CRITICALHTML甘特图护士长、输血科主任晨会复盘、流程瓶颈分析、质控检查http://localhost:3000自动渲染所有申请的时间轴告警面板质控专员、医务处超时归因、整改跟踪、指标上报http://localhost:3000/alert.html按严重等级聚合支持点击下钻申请详情页床边护士、主治医生查看单例全流程、核对操作人、确认当前责任方http://localhost:3000/detail.html?idBR0001_0001特别说明watch命令不是简单轮询而是每秒拉取增量事件并比对状态变更配合RichFormatter实现彩色高亮如超时状态标红、进行中状态标粉终端里一眼锁定异常单timeline命令则将单张申请的所有事件按时间排序输出带时间戳的状态跃迁序列比翻日志快十倍。使用与配置系统开箱即用无需数据库或云服务。首次运行只需三步cd transfusion-tracker python -m src.data.generator npm run dev前三行生成模拟数据data/sample_requests.json sample_events.json第四行启动Web服务。CLI与Web共享同一套引擎实例所有状态变更实时同步。关键配置全部集中在config/目录-timeouts.yaml定义各状态超时阈值单位分钟支持NORMAL/URGENT/EMERGENCY三级继承关系-blood_types.yaml声明ABO/Rh血型规则与相容性矩阵供后续扩展交叉配血逻辑-scenarios.yaml控制模拟数据生成参数如急诊占比、科室分布便于压力测试。修改配置后无需重启服务CLI命令与Web API均在运行时读取最新YAML确保策略调整即时生效。环境与运行本系统对运行环境要求务实兼顾老旧设备兼容性与现代开发体验组件最低要求推荐版本说明Python3.93.10CLI与核心引擎运行基础transitions库依赖3.9Node.js1820 LTSWeb服务与构建工具链npm随附安装操作系统Windows 10/11, Linux, macOS—无GUI依赖终端友好启动方式分两类-开发模式npm run dev热重载适合调试界面与API-生产模式npm run build npm start精简包适合部署到科室服务器。CLI始终可用即使Web服务未启动python -m src.cli.main list仍可离线查看本地数据快照。数据与扩展数据模型完全贴合临床术语拒绝技术抽象-BloodRequest包含request_idBR0001_0001、patient_name张三、department急诊科、emergency_levelEMERGENCY等15个必填字段与电子病历申请单字段一一对应-BloodIssueEvent记录每次状态变更含from_state/to_state如CROSSMATCH_IN_PROGRESS → CROSSMATCH_COMPLETE、operator李护士、location输血科配血室- 所有数据默认存为JSON结构清晰可读export命令支持导出CSV供Excel分析--pretty参数让JSON缩进易读。扩展路径明确- 新增状态改写transitions状态机定义 更新timeouts.yaml 补充颜色映射- 对接HIS复用现有REST API调用/api/requests/:id获取单例/api/requests/:id/timeline拉取全路径- 增加告警通道在alert命令逻辑后插入企业微信/短信网关调用不侵入核心引擎。限制与说明我们坦诚说明当前边界避免过度承诺- 不替代LIS或HIS的检验结果传递仅消费其输出的申请单号与患者基础信息- 不执行物理配血或血液发放动作只监控这些动作是否按时发生- 甘特图时间粒度为分钟级不支持秒级追踪临床场景无此精度需求- 超时判定基于本地系统时间跨时区部署需确保服务器时钟与院内NTP服务同步- 所有数据默认落盘为JSON文件如需高并发或多节点可自行接入Redis或SQLite文档预留了DataStore抽象层。这套设计源于我们在三所医院输血科的真实陪跑不是先写代码再找场景而是把护士长晨会上说的“昨天那张急诊单配血拖了90分钟但没人知道卡在哪”这句话直接变成了CROSSMATCH_IN_PROGRESS状态下的红色甘特图块和alert-detail命令输出的处理建议。项目地址https://github.com/nexorin9/transfusion-tracker