乐于分享
好东西不私藏

[医疗软件开源] 传染病网报规则逆向校验引擎:面向医疗机构的合规性辅助工具

[医疗软件开源] 传染病网报规则逆向校验引擎:面向医疗机构的合规性辅助工具

在《中华人民共和国传染病防治法》与《传染病信息报告管理规范》持续强化执行背景下,基层医疗机构面临日益严格的法定传染病上报时效性与完整性要求。漏报、迟报、错报不仅影响公共卫生响应效率,更可能引发监管问责。但临床一线医务人员常需在繁重诊疗任务中兼顾复杂诊断标准判断,ICD-10 编码匹配、检验结果阈值判定、症状组合逻辑、病种互斥关系、上报优先级排序……这些规则高度结构化却难以人工实时闭环核验。

「传染病网报规则逆向校验引擎」正是为此而生:它不替代医生判断,而是将国家层面发布的传染病诊断标准转化为可加载、可执行、可热更新的规则模型,输入患者结构化数据后,输出明确的「应报/疑报/不报」建议及未满足条件清单,成为医务科质控与院感防控环节中可嵌入工作流的技术支点。

以下内容严格依据项目 README 还原整理,涵盖其定位、能力边界、技术构成、使用路径与配置要点,供开发者快速评估集成可行性。

核心能力与工作机制

本引擎聚焦解决“从临床数据到网报决策的规则映射断层”,其能力设计完全围绕医疗合规场景展开:

  • 多条件联合判定同时支持 ICD-10 编码(含通配符如 A00.*)、检验结果(数值型用 ><;文本型用 ==!=)、临床症状(按编码与名称双维度匹配)三类条件的逻辑组合,支持 AND(全满足)与 OR(任一满足)两种判定模式。

  • 病种互斥与冲突消解当患者数据同时触发多个传染病规则时,引擎自动识别 exclusion_rules 中定义的互斥关系,并依据 priority 字段进行降级处理:低优先级病种结果由「应报」降为「疑报」,避免重复上报。

  • 全链路输出支持输出形态覆盖不同使用角色需求:

  • CLI 彩色终端输出,适合批量脚本调用与日志追踪
  • HTML 可视化报告,含高亮未匹配项与置信度评分
  • CSV/Excel 导出,便于 Excel 表格复核与归档
  • Web 看板实时统计,支持科室下钻与病例详情穿透

  • 规则热更新机制修改 YAML 规则文件后,可通过 POST /api/rules/reload 接口动态重载,无需重启服务,满足疾控中心规则频繁调整的运维节奏。

  • LLM 辅助生成(可选)在配置 OPENAI_API_KEY 后,可为「疑报」或「应报」案例自动生成整改建议草稿与网报材料初稿,降低文书负担。

所有判定逻辑均基于 YAML 规则文件驱动,无硬编码业务逻辑,规则即配置,规则即文档。

技术架构与模块职责

系统采用分层清晰的混合技术栈设计,Python 承担核心规则执行,Node.js 提供 Web 服务能力,前端轻量静态化部署:

graph TB    subgraph 数据层        A[患者数据 JSON] --> D[数据适配层]        R[规则 YAML] --> L[规则加载器]    end    subgraph 核心引擎        D --> E[规则执行引擎]        L --> E        E --> C[冲突解决器]        C --> V[ValidationResult]    end    subgraph 报告层        V --> CLI[CLI彩色报告]        V --> HTML[HTML可视化报告]        V --> CSV[CSV导出]        V --> EXCEL[Excel导出]    end    subgraph Web服务        E --> API[Web API]        API --> WEB[Web可视化看板]        API --> WS[WebSocket实时告警]    end    subgraph LLM辅助        V --> LLM[LLM整改建议]        V --> LLM2[LLM网报材料]    end

各组件技术选型与职责如下表所示:

组件
技术栈
职责
数据适配层
Python + Pydantic
患者数据读取、ICD-10 编码映射、字段校验与标准化
规则引擎
Python + YAML
规则加载、条件匹配、互斥检测、优先级排序、结果生成
报告生成器
Python + Jinja2
渲染 CLI 输出、HTML 页面、CSV/Excel 文件
Web服务
Express.js + TypeScript
提供 REST API、WebSocket 实时推送、静态资源托管
前端
HTML + Chart.js
实现可视化看板、科室筛选、患者详情页、交互式图表
LLM辅助
OpenAI API(可选)
调用大模型生成整改建议与网报材料初稿

目录结构体现清晰关注点分离:

infectious-disease-reporting-validator/├── src/                  # Python 主体逻辑│   ├── data_adapter/     # 数据适配层│   ├── rule_engine/      # 规则引擎核心│   ├── report_generator/ # 报告生成器│   ├── utils/            # 日志、配置等通用工具│   └── main.py           # CLI 入口├── web/                  # Node.js Web 服务│   ├── public/          # 前端静态文件│   └── routes/          # API 路由实现├── data/                 # 示例数据与规则│   ├── rules/           # YAML 规则定义│   └── sample_*.json    # 样本患者数据├── tests/                # 单元测试├── rules/                # 默认规则表(备用)└── requirements.txt      # Python 依赖

安装与运行方式

项目同时支持 Python CLI 与 Node.js Web 服务双模式,安装步骤明确分离:

# 安装 Python 依赖pip install -r requirements.txt# 安装 Node.js 依赖并编译 TypeScriptnpm installnpm run build

CLI 模式(推荐快速验证)

# 单次验证(终端彩色输出)python -m src.main --input data/sample_patients.json --rules data/sample_rules.yaml# 生成 HTML 报告python -m src.main --input data/sample_patients.json --rules data/sample_rules.yaml --output output/ --format html# 生成汇总统计python -m src.main --input data/sample_patients.json --rules data/sample_rules.yaml --format summary

TypeScript CLI(开发调试友好)

# 验证单个患者数据npx ts-node src/cli/index.ts validate --input data/sample_patients.json --rules data/sample_rules.yaml# 启动本地 Web 服务npx ts-node src/cli/index.ts serve --port 3000

Web 服务(生产部署首选)

# 启动服务(监听 3000 端口)npm start# 浏览器访问可视化看板# http://localhost:3000

规则编写与配置要点

规则以 YAML 格式定义,位于 data/rules/ 目录下,其字段设计直指传染病上报关键要素:

diseases:  - id: cholera    name: 霍乱    icd10_codes:      - "A00.101"      - "A00.201"      - "A00.901"    lab_conditions:      - test_name: "霍乱弧菌培养"        operator: "=="        result_value: "阳性"        required: true      - test_name: "霍乱弧菌快速检测"        operator: "=="        result_value: "阳性"        required: false    symptoms:      - code: "S001"        name: "水样腹泻"        required: true      - code: "S002"        name: "呕吐"        required: false    reportable: true    priority: 10    time_limit_hours: 2    exclusion_rules: []    condition_logic: "AND"

关键字段说明如下:

  • id
    病种唯一标识(小写英文),用于互斥与 API 关联
  • icd10_codes
    支持精确匹配与通配符(如 A00.*
  • lab_conditions
    required: true 表示该检验为强制阳性项;operator 支持 ==!=>>=<<=
  • symptoms
    required: true 表示该症状为必备项
  • priority
    数字越大优先级越高,冲突时决定保留/降级策略
  • exclusion_rules
    填写互斥病种 id 列表,如 ["hiv"]
  • condition_logic
    控制 required 条件间的布尔关系

配置通过 .env 文件或环境变量生效:

变量
说明
默认值
RULES_FILE
规则文件路径
rules/传染病网报规则表.yaml
DATA_DIR
数据目录
data
OUTPUT_DIR
输出目录
output
LOG_LEVEL
日志级别
INFO
WEB_PORT
Web 服务端口
3000
OPENAI_API_KEY
LLM API Key(可选)
-

API 接口与数据契约

Web 服务提供标准 RESTful 接口,基础路径为 http://localhost:3000/api,无认证,响应均为 JSON:

验证单个患者(核心接口)

POST /api/validateContent-Type: application/json

请求体需符合严格 Schema,包含 patient_iddiagnoseslab_resultssymptoms 等字段。响应返回判定结果、置信度、未匹配条件与原因说明。

查询与统计接口

  • GET /api/results?page=1&limit=20&department=感染科&decision=应报
    分页查询结果
  • GET /api/statistics
    全院维度统计摘要(应报/疑报/不报总数、科室分布、病种分布)
  • GET /api/diseases
    获取当前加载的全部病种列表
  • GET /api/alerts/high-priority
    获取高优先级「应报」告警
  • POST /api/rules/reload
    热重载规则文件

错误响应统一格式:

{  "error": "VALIDATION_ERROR",  "message": "患者数据格式不正确",  "details": ["birth_date 字段格式错误,应为 YYYY-MM-DD"]}

错误码包括 VALIDATION_ERRORRULE_LOAD_ERRORINTERNAL_ERROR

使用边界与免责说明

本工具定位明确:辅助参考,非临床决策替代品

  • 判定结果仅反映规则引擎对输入数据的逻辑匹配程度,不构成医学诊断结论
  • 「应报」表示满足当前规则集全部必要条件,但最终是否上报须由具备资质的医务人员结合临床实际判断
  • 所有 LLM 生成内容仅为初稿参考,严禁未经审核直接提交至传染病信息报告系统
  • 项目不承诺覆盖全部地方性补充规则或最新修订版国标,使用者需自行维护规则文件同步

项目地址:https://github.com/nexorin9/infectious-disease-reporting-validator国内仓库:https://gitee.com/nexorin9/infectious-disease-reporting-validator欢迎交流使用问题与规则共建。