
医务科和病案室在病历归档前质控时,往往面临一个具体矛盾:面对 HIS、EMR 等五源数据和不断迭代的核心制度规则,人工核对效率极低,且整改过程难以追溯。规则一旦变更,全量病历的复核成本就会成倍增加。本项目是一个用 Rust 编写的质控业务规则管理系统,交付形态为命令行工具与 HTTP 服务。它把核心制度、单病种、临床路径的质控规则喂给系统,按规则对住院病历事件流批量跑缺陷还原与整改流转。技术栈基于 Rust 1.75+、axum 和 tokio,提供四类缺陷检测与字节级回执留痕,让每一份病历的质控过程都像软件发布一样可复盘、可审计。
多源事件流的统一接入与归并
医疗数据的复杂性在于,一份住院病历的事件散落在多个异构系统中。医嘱在 HIS,病程记录在 EMR,体征单在护理系统,还有不良事件上报和 LIS 检验报告。传统做法是编写复杂的关联查询去各个表里拼凑数据,不仅性能差,而且极难处理时间线上的交叉与乱序。
为了解决这个问题,我们设计了统一的事件流接入机制。系统通过 EventSource trait 抽象,让 HIS、EMR、护理、不良事件、LIS 五类事件流共用同一接入接口。在内存中,扫描引擎使用单迭代器按时间升序对这五源数据进行 k-way merge 归并,并处理时间漂移。这样一来,下游的规则检测模块看到的不再是割裂的数据表,而是一个按时间顺序完美排列的单一事件流。这种设计极大地简化了时间窗口偏差等复杂规则的计算逻辑,也让多源数据的比对变得异常清晰。
规则登记与全生命周期审计
质控规则不是一成不变的,核心制度和单病种指标会随着政策要求频繁调整。如果规则管理混乱,就会导致新旧标准同时生效,质控结果失去公信力。
我们将规则的生命周期划分为草稿、启用、试运行、必检、归档五个阶段。规则登记后,必须严格按照状态机走完整个流程。每次状态切换,系统都会自动写入审计轨迹。例如,当医务科启用单病种急性心梗的新版规则时,系统会自动将上一版本归档,避免新旧规则同时生效造成错乱。后续的事件流扫描会自动按新版本评估,而旧版本的回执依然可读。这种全生命周期的审计设计,确保了任何一条质控规则的下发与废止都有迹可循。
四类缺陷检测与词干归一
在拿到归并后的单一事件流后,系统会启动四类缺陷检测引擎。同一份规则可以被多类评估模型调用,具体包括:必填字段缺失检测、时间窗口偏差检测、词袋命中检测、责任科室漂移检测。
其中,词袋命中检测在处理自然语言文本时面临巨大挑战。主诉和病程记录中,医生对同一症状的描述往往千差万别。为此,我们引入了多语种词干归一机制。系统对主诉和病程文本走中英文分流的轻量归一处理,能够自动识别并合并同义词。例如,系统可以将胸痛、胸疼、胸口痛自动归入同一个词袋。这种细粒度的文本处理能力,大幅降低了因书写习惯不同导致的假阳性缺陷,让质控结果更贴近临床实际。
责任科室确认与整改流转
发现缺陷只是质控的第一步,如何推动临床科室整改才是核心难点。过去,质控员通过微信群或纸质单据下发整改通知,经常面临石沉大海或扯皮推诿的情况。
我们在系统中设计了严格的责任科室逐条确认机制。系统跑批生成的每一份缺陷清单,都会转化为具体的整改单。每条缺陷必须由对应的责任科室联络员在系统内进行确认。如果未确认,该整改单就不会进入后续的流转环节。为了防止网络重试或人为误操作导致的状态错乱,所有写操作都要求提供幂等键。通过这种强约束的确认机制,我们把整改责任真正落实到了具体的人,确保了质控流程的严肃性。
字节级回执留痕与审计重放
在医疗审计和飞检中,任何一份病历的质控结果都必须经得起回溯。如果系统升级或代码重构导致同样的输入产生不同的输出格式,审计就会面临巨大风险。
我们为每份整改单回执设计了字节级布局留痕机制。回执以定长头加校验和的形式写入本地磁盘,并利用 fsync 提高落盘可靠性。这种设计确保了每一份回执在物理存储上的绝对一致性。后续,审计员或院感人员可以随时使用 audit replay 命令,重放同输入得到完全相同的字节流。系统还内置了 verify-golden 钩子,用于在持续集成阶段跑通所有标准字节流断言。字节级回执摘要为内部审计和取证提供了不可辩驳的底层证据。
典型业务场景落地
为了让大家更直观地理解系统的运作方式,我们梳理了两个最典型的业务场景。
第一个场景是月度批量质控。医务科把本月生效的核心制度规则打包为配置文件,通过命令行灌入系统。病案室从各系统导出本月数百份病历的五源事件流文件,分别灌入。质控员执行跑批扫描命令,系统瞬间完成全量病历的缺陷还原,并输出按规则分组的缺陷清单与可核对的字节回执。责任科室通过 API 逐条确认整改单。最后,审计员可以在任何时候重放同输入,得到字节级同回执,用于飞检取证。
第二个场景是新规则切换。当医务科启用新版单病种规则时,系统通过事件驱动自动完成版本切换。旧版本规则被安全归档,新规则立即生效。整个切换过程无需停机,也不影响正在进行的质控任务,真正实现了规则的热更新与平滑过渡。
安全合规与系统边界
在医疗信息化建设中,明确系统的边界与遵守安全合规要求同等重要。我们在一开始就为系统划定了严格的红线。
首先,本工具不写回生产库。整改回执由病案室或责任科室人工确认后,由人工导入 HIS,本工具不替代医务科签字或代签。其次,系统不输出临床诊断或治疗建议,仅做文书层面的缺项、互斥与时间序提示,最终判定由医务人员人工复核。在数据安全方面,导出审计包时会自动去除患者姓名、身份证、手机号等敏感信息,仅保留入院ID哈希与事件字段。接口层面,系统采用恒定时间比对进行 API Key 校验,防止时序攻击,生产环境建议接入统一的身份认证系统。
快速开始与项目结构
系统采用 Rust 编写,依赖管理清晰,启动迅速。以下是快速体验的最小启动流程:
# 1. 安装依赖(需 Rust 1.75+;cargo 自带;macOS/Linux 默认 ~/.cargo/bin)
# 2. 复制配置:cp .env.example .env
# 3. 构建:cargo build --locked
# 4. 跑通最小启动:cargo run --bin qc-rule-manager -- serve --port 8080
# (启动 axum 监听 0.0.0.0:8080 + AppState 初始化)
# 5. 验证:cargo test --locked
# 端到端验证:bash scripts/verify.sh
项目结构经过精心规划,领域模型、字节布局持久化、规则注册、扫描引擎、事件评估模型、词干归一、审计模块、事件源接入、API 路由与命令行工具各自独立。这种高内聚低耦合的设计,不仅保证了核心逻辑的纯粹性,也为后续扩展新的缺陷检测模型打下了坚实基础。
项目地址: https://github.com/nexorin9/qc-rule-manager
往期热门文章
HIS厂商的"架构收敛":当所有系统长得一模一样,你凭什么收费?
一群鼓吹AI Coding的专家,正在制造医疗信息化的新技术债
夜雨聆风