4. 规则体系架构设计

医疗数据质量规则体系如果只是把几百条校验规则堆在一个文档里,很快就会失控:同一条“住院号非空”在三个系统里写法不同,某个字段口径变更后没人知道哪些规则受影响,规则上线后也无法解释为什么这条数据被拦截。要解决这些问题,必须先把规则体系当成一个“有层次、有元数据、有存储、有执行”的工程结构来设计。本节围绕四个核心构件展开:分层架构负责“规则怎么分类”,元数据管理负责“规则描述什么”,规则仓库负责“规则存在哪里”,规则引擎负责“规则怎么跑起来”。

一、分层架构:基础规则、业务规则、场景规则

分层的目的不是把规则分等级,而是按“稳定性”和“复用范围”分层。越靠下的层越稳定、越通用,越靠上的层越贴近具体业务和场景,变化也越快。

基础规则层面向数据本身的结构与格式,与具体业务无关,例如:字段非空、数据类型合法、值域范围、编码格式、主键唯一、日期格式符合 YYYY-MM-DD。这类规则通常由数据标准直接推导,全院甚至跨机构通用。示例:患者性别代码必须属于 GB/T 2261.1 的取值集合 {0,1,2,9};出生日期不得晚于当前日期。

业务规则层面向医疗业务逻辑,依赖具体业务语义,例如:入院日期不得晚于出院日期;手术编码必须与手术日期同时存在;同一患者同一时间段不得存在两条在院记录。业务规则通常由临床、病案、医保等业务方确认,跨系统复用但需要业务口径支撑。

场景规则层面向具体应用场景,例如上报、结算、科研入组、质控抽查。同一份数据在不同场景下要求不同:病案首页上报要求主要诊断编码必须为 ICD-10 医保版 2.0;而科研入组可能要求某病种必须有病理诊断。场景规则变化最频繁,应尽量通过“引用下层规则 + 场景附加约束”的方式组合,而不是重复定义。

分层判断口诀:与业务无关的放基础层,与业务有关但跨场景的放业务层,只在特定用途下成立的放场景层。一条规则若同时满足多层,按“最上层优先、下层可复用”的原则归位。

二、元数据管理:让每条规则可解释、可追溯

规则元数据是规则的“身份证”。没有元数据,规则仓库就只是一个文本堆。建议每条规则至少登记以下字段:规则编号、规则名称、所属分层、适用数据对象(表/字段)、规则表达式、阈值或参数、严重级别、责任部门、生效时间、版本号、关联数据标准、变更记录。其中“关联数据标准”和“版本号”最关键:前者让规则能追溯到口径来源,后者让规则变更可回滚、可对比。

元数据管理还要解决“字段—规则—场景”的三向关联。例如字段“主要诊断编码”关联基础规则(编码格式)、业务规则(必须有诊断名称)、场景规则(医保上报版本要求)。当该字段口径变更时,通过元数据即可反查出所有受影响规则,而不是靠人工翻文档。

三、规则仓库与规则引擎的定位

规则仓库是规则的“唯一可信来源”,负责存储、版本、检索、发布和权限。它不负责执行,只负责“规则是什么、当前生效哪一版”。规则仓库应支持按分层、数据对象、责任部门、场景等维度检索,并保留历史版本,做到任何一次拦截都能回溯到当时生效的规则版本。

规则引擎是规则的“执行器”,负责把仓库中发布的规则加载、解析、匹配到数据上并输出结果。它关注的是执行效率、执行顺序、错误定位和结果输出。规则引擎不生产规则,也不应硬编码业务逻辑;它从仓库拉取规则,按优先级执行,返回“通过/不通过/告警”及命中的规则编号。

两者的边界可以概括为:仓库管“规则的生命周期”,引擎管“规则的一次执行”。规则变更走仓库发布流程,引擎只消费已发布版本,避免“改了规则但引擎还在跑旧逻辑”的常见问题。

医疗数据质量规则体系架构 分层架构 场景规则层:上报 / 结算 / 科研 / 质控 业务规则层:临床逻辑 / 病案 / 医保口径 基础规则层:非空 / 类型 / 值域 / 编码格式 稳定性:下层高 → 上层低;复用范围:下层广 → 上层窄 元数据管理 规则编号 · 名称 · 分层 · 数据对象 表达式 · 阈值 · 严重级别 · 责任部门 关联数据标准 · 版本号 · 生效时间 字段 ↔ 规则 ↔ 场景 三向关联,支撑影响分析 规则仓库(唯一可信来源) 存储 · 版本 · 检索 · 发布 · 权限 按分层 / 对象 / 部门 / 场景检索 管规则生命周期,不执行规则 规则引擎(执行器) 加载 · 解析 · 匹配 · 优先级执行 输出:通过 / 告警 / 不通过 + 规则编号 只消费已发布版本,不生产规则 描述 入库 发布 拉取规则 作用于医疗数据

四、四者如何协同:一次规则执行的完整链路

把四个构件串起来看,一次典型的规则执行链路是:数据标准与业务口径先沉淀为元数据,元数据描述规则并归入相应分层;规则经审核后进入规则仓库并发布版本;规则引擎从仓库拉取当前生效版本,加载到内存或规则集,按优先级对数据逐条匹配;命中后输出结果并携带规则编号,供质控人员回溯到仓库中的规则定义和元数据。

以一个具体示例说明。假设字段“出院日期”需要校验:基础层规则 R-B-012 要求“出院日期格式为 YYYY-MM-DD 且非空”;业务层规则 R-BIZ-045 要求“出院日期 ≥ 入院日期”;场景层规则 R-SCN-008 要求“医保结算场景下出院日期不得晚于结算日期”。三条规则分别登记元数据,关联到“出院日期”字段和“医保结算”场景。引擎执行时按基础→业务→场景顺序匹配,若 R-BIZ-045 不通过,输出规则编号和实际值,质控人员即可定位是入院/出院日期逻辑问题,而不是格式问题。

架构设计的关键判断:规则仓库与规则引擎必须解耦。仓库负责“规则是什么、哪一版生效”,引擎负责“这一次怎么跑”。两者通过版本号和发布状态衔接,才能既保证规则可管理,又保证执行可追溯。

五、落地时的常见误区

  • 分层混用:把“医保上报要求主要诊断编码为 2.0 版”写进基础层,导致基础规则频繁变更。应归入场景层。
  • 元数据缺失:只存规则表达式,不记录责任部门和关联标准,规则失效后无人认领。
  • 仓库与引擎耦合:引擎直接读规则文档或硬编码阈值,规则变更无法统一发布和回滚。
  • 场景规则重复定义:每个场景把基础规则重写一遍,导致同一字段多套口径。应引用下层规则再附加场景约束。

总结来说,分层架构解决规则的“组织方式”,元数据管理解决规则的“可解释与可追溯”,规则仓库解决规则的“存储与版本”,规则引擎解决规则的“执行与反馈”。四者各司其职、边界清晰,规则体系才能从一份文档演变为可持续运行的工程能力。