[开源] 扫单核查宝:面向影像科技师的 PACS 与 HIS 医嘱实时比对工具

本项目是专为影像科技师设计的临床操作辅助软件,解决日常扫描中「PACS 实际执行项目」与「HIS 医嘱开具项目」不一致导致的拍错部位问题。系统在技师扫描患者腕带后,毫秒级查询当日 HIS 医嘱数据,自动比对 PACS 准备执行的检查类型(如 CT 胸部 / MRI 颈椎 / X 光腰椎),发现不匹配即触发声音+弹窗双重提醒,并完整记录每次校验结果至日志文件。它不介入 HIS 或 PACS 原有流程,不修改任何医院信息系统数据库,仅作为独立 CLI 工具运行于工作站本地;核心能力包括串口扫码枪通信、多源医嘱-检查映射规则配置、模拟测试模式、结构化日志归档。技术栈以 Go 语言构建高并发低延迟主程序,Python 辅助生成和校验 JSON 规则配置,支持 Windows 与 Linux 环境,交付形态为命令行可执行程序,无 Web 依赖、无服务端部署。
定位与能力范围
我们不做 HIS-PACS 接口改造,也不替代任何厂商集成平台。扫单核查宝只做一件事:在技师点击「开始检查」前,抢在 PACS 录入检查项目那一刻,完成一次精准、轻量、可审计的医嘱一致性校验。它的作用边界非常清晰,
- 触发时机唯一:仅响应扫码枪输入(或 --simulate 模拟输入);
- 比对对象明确:HIS 医嘱中的 order_item 字段(如「CT上腹部平扫+增强」)与 PACS 即将登记的 exam_item(如「CT腹部」);
- 判断逻辑务实:不追求语义级 NLP 解析,而是基于预置规则 JSON 文件进行关键词模糊匹配与白名单校验;
- 反馈方式克制:仅弹窗+蜂鸣,不拦截 PACS 操作流,由技师自主确认或跳过;
- 数据流向封闭:所有日志写入本地 logs/verify.log,不上传、不联网、不依赖外部认证。
这决定了它不是一套“大而全”的质控平台,而是嵌入在影像科真实工作节奏里的一个确定性动作:扫码 → 校验 → 提示 → 记录。它服务于日均处理 50–100 例患者的基层与三级医院影像科技师,尤其适合 HIS-PACS 接口仅做基础单据同步、缺乏动态规则与即时反馈机制的现状。
核心功能
系统围绕「一次扫码、一次比对、一次留痕」构建三层闭环能力:
-
实时医嘱拉取与缓存
启动时加载his_orders_sample.csv(或生产环境对接 HIS 导出接口),按patient_id建立内存索引;扫码后秒级定位该患者当日全部医嘱,避免重复查库。 -
双源项目语义对齐
不直接比字符串全等,而是通过exam_rules.json中定义的映射关系实现合理兼容。例如规则中声明"CT腹部": ["CT上腹部", "CT下腹部", "CT全腹部"],当医嘱含任一子项,PACS 登记「CT腹部」即视为合规。 -
异常行为可追溯
每次校验生成结构化日志条目,包含时间戳、患者 ID、HIS 医嘱项、PACS 执行项、匹配状态(match/mismatch)、是否人工确认。日志默认落盘至logs/verify.log,支持--log-path自定义路径,供科室月度质控分析使用。
|
功能模块 |
输入来源 |
输出形式 |
可配置性 |
|---|---|---|---|
|
医嘱加载 |
CSV 文件或 HIS 接口导出 |
内存哈希表索引 |
支持字段重映射( |
|
规则引擎 |
exam_rules.json |
布尔匹配结果 + 不匹配详情 |
支持增删改关键词组、启用/禁用规则集 |
|
提醒机制 |
匹配失败事件 |
弹窗文本 + 系统蜂鸣音 |
文本内容可本地化,音效不可关闭(保障警示强度) |
|
日志归档 |
校验全过程 |
行式文本日志(UTF-8) |
支持路径、轮转周期、最大保留天数(需代码微调) |
使用与配置
首次使用只需三步:准备数据、生成规则、启动校验。全程无需安装服务或配置数据库。
git clone https://github.com/nexorin9/scan-verify-guardian
cd scan-verify-guardian
先用 Python 生成规则配置(模板见 rules/rules_template.csv):
python rules/generator.py --input rules/rules_template.csv --output rules/exam_rules.json
再进入主程序目录,运行模拟模式验证流程:
cd cmd/scanner
go run scanner --simulate --his-orders ../../data/his_orders_sample.csv --pacs-exams ../../data/pacs_exams_sample.csv --rules ../../rules/exam_rules.json
实际部署时,只需将 --simulate 替换为 --serial-port COM3(Windows)或 /dev/ttyUSB0(Linux),并确保扫码枪已正确接入对应串口。所有参数均可写入 shell 脚本或 Windows 批处理文件固化调用。
工程结构
项目采用极简分层设计,每个目录职责单一、边界清晰:
|
目录路径 |
主要职责 |
关键文件说明 |
|---|---|---|
cmd/scanner/ |
Go 主程序入口 |
main.go
实现串口监听、状态机流转、规则加载、日志写入 |
data/ |
样例数据存放 |
his_orders_sample.csv
与 |
rules/ |
规则配置中心 |
exam_rules.json
是运行时唯一规则源; |
logs/ |
运行日志输出 |
默认 |
README.md |
用户操作指南 |
含快速开始、常见问题、环境要求等全部用户侧说明 |
Go 模块严格隔离:cmd/scanner 仅依赖标准库与少量第三方串口包,不引入 Web 框架或 ORM;Python 脚本仅用于规则生成,不参与运行时逻辑,二者零耦合。
环境与运行
系统对运行环境要求极低,适配一线影像科老旧工作站:
|
依赖项 |
最低版本 |
说明 |
|---|---|---|
|
Go |
1.21+ |
编译 |
|
Python |
3.9+ |
仅用于 |
|
操作系统 |
Windows 10+ / Linux Kernel 5.4+ |
支持 USB 虚拟串口(CH340/CP2102 等常见芯片) |
|
硬件 |
任意 HID 类扫码枪 |
串口参数默认 |
若扫码枪无法识别,优先检查设备管理器中是否出现新串口,再确认参数是否匹配;不确定环境是否就绪?直接启用 --simulate 模式,用键盘输入模拟扫码,即可走通全部校验链路。
数据与扩展
所有外部数据通过 CSV 文件注入,字段定义严格遵循说明文档要求:
|
数据类型 |
必填字段 |
示例值 |
说明 |
|---|---|---|---|
|
HIS 医嘱数据 |
patient_id
, |
ZS2024001
, |
order_time
用于过滤当日医嘱,支持 ISO8601 格式 |
|
PACS 执行数据 |
patient_id
, |
ZS2024001
, |
exam_time
仅作日志记录,不影响匹配逻辑 |
|
规则配置 |
JSON 结构体 |
{ "CT胸部": ["CT胸廓", "CT肺部", "CT纵隔"] } |
键为 PACS 登记项,值为允许的 HIS 医嘱关键词数组 |
规则支持增量更新:修改 exam_rules.json 后,重启程序即可生效,无需重新编译。未来如需对接 HIS API,只需替换 data/his_orders_sample.csv 的加载逻辑,主体校验流程完全不变。
限制与说明
我们明确告知当前能力边界,避免误用场景:
- 不支持 DICOM Modality Worklist(MWL)自动获取医嘱,仅依赖 CSV 或导出文件;
- 不解析 DICOM Tag,不读取 PACS 存档图像元数据,仅比对登记环节输入项;
- 规则匹配为前缀+关键词模式,不支持正则表达式或深度学习语义相似度;
- 日志为纯文本格式,不提供内置报表或可视化看板,需配合 Excel 或 ELK 等工具二次分析。
这些限制不是技术短板,而是设计选择:保持轻量、可控、可审计。当科室需要更高阶能力时,它已预留扩展点,比如将 his_orders_sample.csv 替换为 HTTP 接口调用,或把日志输出改为 Syslog 协议推送到医院 SIEM 平台。
项目地址:
https://github.com/nexorin9/scan-verify-guardian
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)