图片

本项目是专为影像科技师设计的临床操作辅助软件,解决日常扫描中「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 接口导出

内存哈希表索引

支持字段重映射(patient_idorder_itemorder_time

规则引擎

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

 与 pacs_exams_sample.csv 符合字段规范

rules/

规则配置中心

exam_rules.json

 是运行时唯一规则源;generator.py 将 CSV 转 JSON

logs/

运行日志输出

默认 verify.log,按日期滚动(需自行添加 logrotate 配置)

README.md

用户操作指南

含快速开始、常见问题、环境要求等全部用户侧说明

Go 模块严格隔离:cmd/scanner 仅依赖标准库与少量第三方串口包,不引入 Web 框架或 ORM;Python 脚本仅用于规则生成,不参与运行时逻辑,二者零耦合。

环境与运行

系统对运行环境要求极低,适配一线影像科老旧工作站:

依赖项

最低版本

说明

Go

1.21+

编译 scanner 主程序,Windows/Linux 均可交叉编译

Python

3.9+

仅用于 generator.py,非运行必需

操作系统

Windows 10+ / Linux Kernel 5.4+

支持 USB 虚拟串口(CH340/CP2102 等常见芯片)

硬件

任意 HID 类扫码枪

串口参数默认 9600,8,N,1,可通过 --baud-rate 调整

若扫码枪无法识别,优先检查设备管理器中是否出现新串口,再确认参数是否匹配;不确定环境是否就绪?直接启用 --simulate 模式,用键盘输入模拟扫码,即可走通全部校验链路。

数据与扩展

所有外部数据通过 CSV 文件注入,字段定义严格遵循说明文档要求:

数据类型

必填字段

示例值

说明

HIS 医嘱数据

patient_id

order_itemorder_time

ZS2024001

CT胸部平扫2024-05-20T09:15:22

order_time

 用于过滤当日医嘱,支持 ISO8601 格式

PACS 执行数据

patient_id

exam_itemexam_time

ZS2024001

CT胸部2024-05-20T09:17:03

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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐