[开源] 门诊患者实时就诊指引 Web:以中文为主体的轻量级候诊导航系统,对接 HIS 叫号与检查预约数据
2026/6/1 5:46:07 网站建设 项目流程

本项目是专为门诊场景设计的实时就诊指引 Web 系统,面向医院信息科、门诊部及导诊服务团队,解决患者在挂号后「不知道下一步去哪、等多久、是否要换楼换层」的核心动线困惑。系统以挂号 ID 为唯一入口,自动串联 HIS 叫号状态、检查预约时间、科室布局配置与平均接诊时长,输出结构化指引:包括当前所处环节(如初诊完成)、下一步目的地(心电图室 3F-208)、窗口编号(B07)、预计等待时长(约 12 分钟)及倒计时提示。支持多步骤流程(抽血→B超→回诊室)、大屏候诊模式(按科室展示排队人数),提供 Web 页面、CLI 命令行工具、RESTful API 三种交付形态。技术栈采用 Node.js + TypeScript + Express 后端,SQLite 模拟 HIS 数据源,前端为零框架原生 HTML/CSS/JS 实现,兼顾部署轻量性与医疗环境兼容性。

定位与能力范围

我们不做全院级 HIMS 替代,也不做移动端 App 封装。本项目的边界非常清晰:它是一套「挂号 ID 驱动的动线翻译器」,把后台系统里分散的叫号状态、预约记录、科室排班、空间布局等结构化数据,实时翻译成患者能一眼看懂的自然语言指引。不采集生物信息,不修改 HIS 记录,不介入医嘱或处方流程,只读取、只计算、只呈现。

适用典型场景包括:
- 患者扫码进入自助终端或打开候诊大厅网页,输入挂号 ID,即刻获得下一步动作;
- 导诊护士通过 CLI 快速查询某患者全流程节点,辅助人工引导;
- 门诊办调用/api/queue/:dept接口获取各科室实时排队人数,用于动态调度;
- 信息科用npm run init-db初始化模拟库后,直接基于 config.yaml 配置科室楼层、检查室坐标、平均耗时,无需二次开发即可适配本院物理动线。

它不是通用低代码平台,也不是 AI 问诊助手;它的价值锚点就落在「ID 输入 → 地点+时间+步骤」这一条确定性链路上,所有模块设计都围绕这个闭环展开。

核心功能

系统能力全部围绕「让患者少问一句、少走一步、少等一分」展开,不堆砌概念,只落地可感知的交互点:

  • 单 ID 全流程牵引

    :输入一个挂号 ID,自动拉取该患者在本次就诊中已发生的环节(如已签到、已缴费)、当前所处状态(如正在叫号队列第3位)、下一步明确动作(前往放射科 2F-112 做胸部CT)、以及该动作的时空预期(窗口 B12,预计等待 8 分钟,倒计时实时更新);

  • 多步骤路径显性化

    :对含多个检查项的复诊患者(如:抽血→尿检→心电图→回诊室),系统不只显示“下一步”,而是渲染完整路径卡片流,当前步骤高亮,后续步骤灰显但可展开查看每步所需位置与预估耗时;

  • 候诊大厅大屏模式

    :启用/web/screen.html即进入全屏视图,按科室分组滚动展示排队人数、当前叫号、平均等待时长(如:内科-1诊室,排队 5 人,当前叫 12 号,均等 6 分钟),字体放大、色彩分区,适配 55 英寸以上公共显示屏;

  • 脱敏与合规前置

    :患者姓名自动脱敏为「张*明」,身份证号、手机号仅保留末四位,所有日志不落盘敏感字段,符合《医疗卫生机构网络安全管理办法》对前端展示的基本要求;

  • 离线可用基础能力

    :SQLite 数据库随包发布,npm run init-db后即自带模拟 HIS 数据,无网络依赖亦可启动本地服务并演示全流程,方便院内培训与应急演练。

功能类型

支持形态

说明

患者自助指引

Web 页面(/web/index.html)

支持扫码/手动输入挂号 ID,响应式布局,适配平板与自助机触屏

科室级队列监控

Web 大屏(/web/screen.html)

自动轮询/api/queue/*,支持自定义科室展示顺序与刷新间隔

批量查询与导出

CLI 工具

npm run cli -- export 202405001 --format csv

可导出该患者完整就诊轨迹

系统集成对接

RESTful API

提供/api/guide/:id等标准端点,返回 JSON 结构化指引,便于嵌入院内 App 或微信公众号

使用与配置

上手只需三步:安装依赖、初始化数据库、启动服务。整个过程不依赖 Docker、不需 Nginx 反向代理、不强制 HTTPS,一台普通办公电脑即可跑通全链路。

cd patient-guide-web npm install npm run init-db npm run dev

服务启动后,默认监听http://localhost:3000,打开浏览器访问/web/index.html即可输入挂号 ID 测试。生产环境部署时,执行npm run build生成dist/目录,再运行node dist/api/server.js即可。

所有业务规则由config.yaml统一驱动,无需改代码:

database: path: "./data/his.db" api: port: 3000 departments: - name: "内科-1诊室" floor: "3F" room: "301" avg_duration_min: 15 queue_window: "A01-A05" - name: "心电图室" floor: "2F" room: "208" avg_duration_min: 8 queue_window: "B07-B09" layout: "3F": ["内科-1诊室", "内科-2诊室"] "2F": ["心电图室", "B超室"]

关键配置项均可被环境变量覆盖,例如将数据库路径指向 NAS 存储:
DATABASE_PATH=/mnt/nas/his.db npm run dev

科室平均接诊时长、楼层归属、窗口编号范围,这些才是影响指引准确性的核心参数,也是院内信息科最熟悉、最容易校准的数据项。

工程结构

目录即契约。我们把每个模块职责写进路径名,降低协作理解成本:

src/ ├── adapters/ # HIS 数据适配器:封装对不同厂商叫号接口的协议转换(如 HL7 v2.5 解析、WebSocket 心跳维持) ├── engine/ # 引擎层:等候时间估算引擎(基于当前队列长度 × 平均耗时 ÷ 开放窗口数)、路径指引引擎(根据科室布局配置生成楼层-房间-窗口三级定位) ├── api/ # Express 服务主干:路由注册、中间件(CORS、日志、脱敏)、CLI 入口(npm run cli 的实际执行体) ├── web/ # 前端资产:纯静态 HTML/CSS/JS,无构建步骤,/web/index.html 与 /web/screen.html 分别对应患者端与大屏端 └── utils/ # 工具集:含配置加载器(支持 YAML + 环境变量覆盖)、患者 ID 校验器(支持本院 8 位数字 ID 与 12 位条码 ID)、日志脱敏器

data/下的 SQLite 数据库含三张表:patients(模拟挂号信息)、queues(模拟叫号队列)、appointments(模拟检查预约),字段命名与常见 HIS 出参对齐,例如patient_id,dept_name,queue_number,scheduled_time,方便对照公开字段快速映射。

测试覆盖贯穿三层:Jest 覆盖 engine 层算法逻辑(如倒计时剩余秒数计算、跨楼层路径判断),Playwright 覆盖 web 端真实用户操作流(输入 ID → 点击查询 → 验证 DOM 中楼层号与倒计时文本),确保每次变更不破坏终端体验。

环境与运行

最低运行环境极其宽松,目标是在 Windows 10/11 笔记本、国产 Linux 信创终端、甚至老旧一体机上均可部署:

依赖项

版本要求

说明

Node.js

18.17.0+

LTS 版本,支持顶层 await 与更稳定的 Promise 处理

npm

9.6.7+

用于依赖安装与脚本执行,不依赖 yarn/pnpm

浏览器

Chrome 90+ / Edge 90+ / Firefox 89+

前端使用现代 CSS Grid 与Intl.RelativeTimeFormat,不降级 polyfill

无外部服务依赖:SQLite 内嵌于进程,Express 自带 HTTP 服务器,所有静态资源内置。若需对接真实 HIS,只需在adapters/下新增适配器类,实现统一接口fetchPatientStatus(patientId): Promise<Status>,其余逻辑自动复用。

我们选择 SQLite 而非 PostgreSQL,并非轻视数据规模,而是因本系统本质是「状态缓存器」:每日就诊数据按需拉取、实时计算、即时丢弃,无需事务一致性保障,反而更看重零配置、免运维、易备份(整个data/目录复制即迁移)。

前端放弃 React/Vue,是因为导诊屏常驻运行在无 GPU 加速的工控机上,原生 JS 渲染更可控、内存占用更低、首屏加载更快(实测<100ms),且规避了框架升级带来的兼容性风险。

数据与扩展

所有业务数据均通过config.yaml与 SQLite 两层驱动,不写死代码,便于院内自主维护:

  • 科室配置:增删科室只需编辑config.yamldepartments列表,重启服务即生效;

  • 布局配置:调整layout映射关系,即可改变大屏科室分组逻辑;

  • 模拟数据:data/下 SQL 文件可手工编辑,或用npm run cli -- list查看当前患者列表后,针对性构造测试数据;

  • 接口扩展:新增 API 端点只需在src/api/routes.ts中添加一行router.get('/api/new-endpoint', handler),无需重写服务主干。

未来可扩展方向明确而克制:
- 增加微信公众号菜单跳转能力(通过/web/index.html?patientId=xxx带参打开);
- 输出 FHIR 标准 Observation 资源,供院内临床数据中心订阅;
- 在engine/中接入简单规则引擎,支持「若检查预约时间距现在 <30 分钟,则优先提示前往检查室」等条件逻辑。

但我们坚持一条铁律:任何扩展不得增加前端框架、不得引入新数据库、不得要求管理员学习新配置语法。所有改动必须能在config.yaml或 SQL 文件中完成。

项目地址:
https://github.com/nexorin9/patient-guide-web

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询