[开源] 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.gocd 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
