当前位置: 首页 > news >正文

[开源] ICU 床位隔离战棋格:面向院感防控与护理排班的确定性规则引擎系统

本项目是一个专为重症监护病房(ICU)设计的床位隔离管理工具,以战棋格(grid-based chessboard)形式可视化呈现床位布局,通过纯规则引擎实时计算多重耐药菌、感染定植、免疫抑制等患者间的空间隔离约束,自动标注危险区域并触发预警。它既可作为日常院感防控的实时管理看板,也支持结构化培训考核,内置三阶预设场景、冲突扣分机制与等级评定体系。系统提供 Web 界面(React + TypeScript)、REST API 与本地 SQLite 数据库,后端采用 Go(Gin 框架),全程不依赖大语言模型(LLM),所有隔离逻辑确定、可验证、可审计。典型交付形态包括桌面浏览器操作台、平板端移动查房界面、手机端预警通知,以及 JSON/CSV/PDF 格式的数据导出能力。

定位与能力范围

我们不做泛化的床位调度系统,也不做预测型排班助手。本项目聚焦一个明确边界:当患者已收治、床位已分配、隔离需求已明确时,如何在二维物理空间中即时判断“这个安排是否合规”。它的价值不在替代人工决策,而在把《医疗机构消毒技术规范》《多重耐药菌医院感染预防与控制技术指南》等文本规则,翻译成可逐格计算、逐边校验、逐人反馈的数字逻辑。

系统处理的对象是“床-人-规则”三元关系:每张床位有坐标(行号、列号),每位患者带标签(MRSA、CRE、免疫抑制、疑似感染等),每条规则定义类型(distance 距离约束、adjacency 相邻约束、exclusive 排他约束)与参数(如“周围2格”“不能相邻”)。所有计算基于曼哈顿距离与八邻域拓扑,不引入概率、不拟合历史数据、不调用外部模型,这是确定性系统的根本前提,也是临床部署的信任基础。

它服务两类核心用户:一线护士长与院感专职人员用于日常查房与排班复核;新入职护士与进修人员用于隔离规则实操训练。不对接HIS/LIS/PACS,不采集生命体征,不生成质控报表,这些是上游系统的事。我们只回答一个问题:这张床,此刻能不能收这个人?

核心功能与交互逻辑

系统主界面是一块6行×8列的动态网格(默认可配),每格代表一张ICU床位。患者头像或缩写标签可拖拽至任意空床,释放瞬间即触发全图约束扫描。若产生冲突,对应床位自动套上红色边框,并在右上角弹出预警卡片,注明冲突类型(如“MRSA患者(B3)与免疫抑制患者(A2)距离仅1格,违反2格约束”)。

所有8条内置规则均支持启停与参数编辑,无需重启服务。例如将“艰难梭菌排他约束”的半径从1格改为0格,即关闭该规则;将“CRE相邻约束”由adjacency类型改为distance类型并设半径为1,则逻辑立即切换。规则变更后,所有已分配床位自动重检,界面实时刷新。

培训模式独立于日常管理页,加载“基础/中级/高级”任一预设场景后,网格初始状态已含若干患者与部分占床。用户需在限定床位数内完成剩余患者分配,每次拖放后即时显示得分变化(+5分/正确分配,-10分/每个冲突),最终按总分落入A-F五级评定。所有操作记录存入日志,支持回溯每一步动作与对应冲突详情。

隔离规则的工程化表达

规则不是配置项,而是可执行的逻辑单元。系统将每条规则拆解为三个原子要素:主体患者类型、约束对象类型、空间关系算子。下表列出全部8条规则及其结构化表达方式:

规则中文名

主体类型

约束对象类型

关系类型

空间参数

实际含义

MRSA距离约束

MRSA

免疫抑制

distance

2格

MRSA患者为中心,曼哈顿距离≤2的所有格不得存在免疫抑制患者

VRE距离约束

VRE

免疫缺陷

distance

2格

同上,主体与对象类型不同

CRE相邻约束

CRE

感染患者

adjacency

CRE患者八邻域内不得存在任何标记为“感染”的患者

艰难梭菌排他约束

艰难梭菌

任意患者

exclusive

1格

艰难梭菌患者周围1格内不得有任何其他患者(含空床不计)

多重耐药距离约束

多重耐药

免疫抑制

distance

1格

半径缩小,约束更严格

疑似感染相邻约束

疑似感染

确诊感染

adjacency

同一感染谱系内的传播风险隔离

ESBL距离约束

ESBL

免疫抑制

distance

1格

与多重耐药类似,但主体更具体

感染定植相邻约束

感染定植

免疫缺陷

adjacency

定植状态与缺陷状态的交叉风险

这种结构使规则具备可组合性:例如可新增一条“新冠阳性患者与未接种加强针医护人员距离约束”,只需定义主体、对象、类型与参数,引擎自动接入计算流。

使用与配置流程

日常使用无需安装客户端。启动后访问http://localhost即进入主界面。首次使用建议先点击右上角「设置」→「规则管理」,确认当前启用的规则集是否匹配本科室实际要求(如某些单位不强制执行ESBL约束)。

培训模式入口在顶部导航栏「培训模式」。选择难度后点击「加载场景」,网格将重置为预设状态。分配患者时,直接拖拽左侧患者列表中的条目至目标床位即可。操作完成后点击「提交评分」,系统立即返回总分、冲突明细与等级评定(如“总分75,B级:共1处冲突,已高亮B4床位”)。

规则自定义路径为「设置」→「规则管理」→「新增规则」。填写主体类型(字符串)、约束对象(字符串)、类型(下拉选distance/adjacency/exclusive)、距离值(仅distance/exclusive需填),保存后立即生效。所有规则持久化存于SQLite数据库,重启不丢失。

环境与运行方式

系统支持三种部署形态,适配不同使用场景:

  • 本地开发

    :需 Go 1.21+ 与 Node.js 18+。分别进入backend/frontend/目录执行启动命令:

cd backend go run cmd/server/main.go
cd frontend npm run dev

前后端分离运行,便于前端调试与后端接口测试。

  • Docker单机部署(生产)

    :一键拉起完整服务:

docker-compose up -d

前端暴露于http://localhost,后端API监听http://localhost:8080。所有数据落盘于容器卷,关机不丢。

  • Docker开发模式

    :启用热重载:

docker-compose -f docker-compose.dev.yml up -d

前端代码修改后浏览器自动刷新,后端配置文件变更实时重载,免手动重启。

环境变量可通过.env文件或命令行覆盖,默认配置如下:

变量名

默认值

作用

PORT

8080

后端HTTP服务端口

GRID_ROWS

6

网格行数(影响Canvas渲染尺寸)

GRID_COLS

8

网格列数

LOG_LEVEL

info

日志输出粒度

数据与扩展能力

系统数据模型极简:床位(id, row, col, status)、患者(id, name, type, notes)、规则(id, subject, object, rule_type, distance)。所有增删改查均通过标准REST API完成,文档见项目docs/API.md。例如获取当前全部冲突:

GET /api/conflicts

返回结构化JSON,含冲突ID、涉及床位坐标、患者ID、违反规则ID及描述文本,方便集成进医院现有告警平台。

导出功能覆盖三种格式:JSON 用于系统间数据交换,CSV 供Excel分析(含床位坐标、患者类型、冲突标志列),PDF 生成带水印的培训结业报告(含评分、等级、操作时间戳)。操作日志以追加模式写入SQLite,字段包含操作时间、操作人(当前为本地用户名)、动作类型(assign/remove/edit)、影响床位ID与患者ID,满足院感质控追溯要求。

主题切换(深色/浅色)与响应式布局确保在ICU护士站小屏显示器、查房车平板、值班手机上均可清晰辨识红色预警边框与文字提示。

限制与说明

本系统不解决以下问题:患者入科前的风险评估、床位物理改造建议、与其他信息系统(如HIS)的患者数据自动同步、非结构化医嘱中的隐含隔离要求提取。它假设患者类型标签已由临床人员准确录入,这是输入可信的前提。

规则引擎不支持条件嵌套(如“若A床为MRSA且B床为免疫抑制,则触发C床禁用”),所有规则均为扁平化的一对一约束。距离计算采用曼哈顿距离(|Δx|+|Δy|),不支持斜向欧氏距离,符合临床对“格”的直观理解。

SQLite作为嵌入式数据库,适用于单中心、中小规模ICU(≤100床)。如需对接医院级Oracle/SQL Server,可在backend/internal/database/目录下替换数据库驱动,其余业务逻辑层保持不变,这是架构设计时预留的扩展点。

说明文档位于项目docs/目录,含《安装部署指南》《用户操作手册》《API接口文档》《隔离规则配置说明》,全部为中文撰写,无英文术语堆砌。

项目地址:
https://github.com/nexorin9/icu-bed-isolation-grid

http://www.jsqmd.com/news/849987/

相关文章:

  • 炉石传说HsMod插件:55项功能打造终极个性化游戏体验
  • qt风格创建子线程。继承自qthread的类,只有run函数里面才是子线程
  • [菜鸟教程] 机器学习教程第五课-机器学习如何工作
  • Go语言服务发现:Consul与Etcd
  • ARMv8通用定时器架构与AArch64虚拟化实践
  • 电子实验记录本ELN接入大模型,就等于拥有“AI科学家”了吗?
  • 多模型选型实践在Taotoken模型广场对比不同模型效果
  • 模型量化全攻略,利用 INT4 技术在笔记本上跑得更快
  • [开源] 互联网医院多模态意图路由器:统一接收语音/文字/图片输入,自动识别挂号/咨询/改预约等6类意图并路由到对应服务节点
  • Windows 11终极优化指南:使用Win11Debloat实现专业级系统调校
  • 2026 年上半年云手机横评:傲晨云 / 掌派 / ACE 深度实测
  • 使用 curl 命令直接测试 Taotoken 聊天补全接口的步骤详解
  • 华硕笔记本终极控制指南:如何用G-Helper替代臃肿的Armoury Crate
  • iOS 27 Siri 自动删除聊天记录:深度解析与行业启示
  • 西安瘦脸2026推荐,高评价体验背后的轮廓精塑秘密 - GrowthUME
  • 给工程师的傅里叶变换:从信号处理到图像压缩,用Python代码理解核心推导
  • 避开FPGA设计里的“定时炸弹”:用Vivado Report Clock Interaction排查跨时钟域隐患(附常见约束误区)
  • 期货量化回测引擎怎么选:主流工具粒度与维护成本观察
  • 告别云台抖动!Arduino Nano + MPU6050 + PID调参实战:从原理到稳定输出的完整指南
  • 用C#给PowerMill做个外挂:手把手教你写第一个连接与断开PM的WinForm工具
  • 森利威尔SL3037C替代MP2459脚位兼容 100V输入/0.6A输出
  • XUnity.AutoTranslator:让外语游戏秒变中文的神奇翻译工具
  • AI Agent对比 / Coze Dify LangChain LangGraph的区别
  • 数据库云服务与Serverless
  • 2026年抖音视频怎么保存无水印?抖音本地去水印最新方法盘点
  • 华硕笔记本性能革命:G-Helper轻量控制工具深度评测
  • 像素空间解算赋能,跳出UWB硬件受限技术天花板——四无架构+孪生定位重构行业格局
  • 1A,30VIN,XZ4119,降压恒流LED驱动芯片 输入电压:8V-30V
  • 文献综述怎么写?研一萌新用Scholaread三天搞定开题文献综述(附100+篇文献整合方法)
  • C++零基础到工程实战(5.1):初识函数—定义调用、参数返回值、栈区内存与变量作用域分析