2. 临床数据标准与清洗规则来源
临床研究数据自动清洗的第一道难题,不是“怎么洗”,而是“按什么标准洗、规则从哪里来”。如果规则来源不清,清洗脚本就会变成一堆凭经验写死的判断,既无法追溯,也无法在方案修订或标准升级后复用。本节把清洗规则的来源分成两大类:一类是数据标准,规定数据“长什么样、放在哪里、叫什么名字”;另一类是研究文档,规定数据“在本次研究中应该满足什么业务约束”。自动清洗引擎的规则库,本质上是这两类来源的合并与参数化。
一、四类数据标准各自约束什么
CDISC SDTM/ADaM 是监管递交场景下的核心标准。SDTM 规定采集数据的标准化结构,例如受试者标识用 USUBJID、不良事件域用 AE、实验室检查域用 LB,变量有受控术语(CT)约束,如 AETERM、AESER、AESEV 的取值集合。ADaM 则规定分析数据集结构,如 ADSL、ADAE、ADTTE,强调派生变量与可追溯性。对清洗而言,SDTM 主要提供结构校验与术语校验规则:变量是否必填、类型是否匹配、日期是否符合 ISO 8601、受控术语是否在允许列表内。ADaM 则更多提供派生一致性规则,例如 ADSL 中的 TRTSDT 是否等于首次给药日期、TRTEDT 是否晚于 TRTSDT。
HL7 FHIR 面向医疗互操作,以资源(Resource)为单位组织数据,如 Patient、Observation、MedicationAdministration、Condition。FHIR 的清洗规则重点在资源引用完整性与编码系统一致性:Observation.subject 必须指向存在的 Patient,code 应使用 LOINC 或本地编码系统并声明 system,valueQuantity 必须带 unit 和 code。FHIR 还提供 Profile 与 Extension 机制,可以把研究特定的约束写成可校验的 profile,这使清洗规则可以直接从标准文件生成,而不是手工编写。
OMOP CDM 是观察性研究常用的关系型通用数据模型,核心表包括 PERSON、VISIT_OCCURRENCE、DRUG_EXPOSURE、CONDITION_OCCURRENCE、MEASUREMENT 等。OMOP 的清洗规则集中在概念标准化:所有临床概念必须映射到标准概念 ID(concept_id),如药品映射到 RxNorm、诊断映射到 SNOMED、检验映射到 LOINC。因此 OMOP 场景下的清洗往往包含“源值 → 标准概念”的映射校验,以及 source_value 与 concept_id 是否同时存在、映射是否落在正确 domain 的检查。
方案与 CRF 注释是研究特有的规则来源。CRF 注释(CRF Annotation)把每个采集字段标注到 SDTM 变量,例如“AE 开始日期”标注为 AESTDTC,“是否严重”标注为 AESER。方案则规定访视窗口、允许的剂量范围、必填评估项、逻辑跳转条件。清洗规则中的业务逻辑校验大多来自这里:访视日期是否落在方案规定的窗口内、AESER 为“是”时 AEACN 是否必填、年龄是否在入排标准范围内。
数据管理计划(DMP)是清洗要求的汇总与落地文件。DMP 通常包含数据核查计划(DVP),逐条列出检查项、检查逻辑、触发条件、处理方式(自动质疑、人工核查、忽略)和责任人。DMP 中的清洗要求是自动清洗引擎最直接的规则输入,它把标准约束和方案约束翻译成可执行的检查条目。
二、从来源到可执行规则:一条规则的完整定义
自动清洗引擎中的每条规则,通常需要包含以下字段:规则编号、规则名称、来源依据、适用数据集与变量、检查逻辑表达式、触发条件、严重级别、处理方式、责任人。以一条来自 SDTM 与 DMP 的规则为例:
规则编号: CHK-AE-003
规则名称: 严重不良事件必填字段完整性
来源依据: SDTM IG AE 域 AESER 条件必填 + DMP DVP 第 4.2 节
适用数据: AE 数据集
检查逻辑: IF AESER = "Y" THEN AETERM, AESTDTC, AEACN 均非空
触发条件: AESER = "Y" 且上述任一字段为空
严重级别: 高
处理方式: 自动生成质疑,进入人工核查队列
责任人: 数据管理员 DM
这条规则把“标准中的条件必填”和“DMP 中的处理方式”合并成了一条可执行条目。引擎读取后,会对 AE 数据集逐行求值,命中即产生质疑记录。可以看到,规则的可追溯性来自“来源依据”字段——当方案修订或 SDTM 版本升级时,可以据此定位需要同步修改的规则。
三、不同标准来源的规则如何协同
实际项目中,四类标准往往同时存在。一个常见的数据流是:CRF 采集数据 → 按 CRF 注释映射到 SDTM → 用 SDTM 规则做结构与术语校验 → 按方案与 DMP 做业务逻辑校验 → 派生 ADaM 并做一致性校验。如果同时需要对接 OMOP 或 FHIR,则在映射层增加概念标准化与资源引用校验。此时清洗引擎的规则库应按“来源 + 适用层级”组织,避免把 SDTM 的结构规则误用到 OMOP 表上。
实践提示:建立规则库时,建议为每条规则标注“来源标准 + 版本号”。例如 SDTM IG 3.4 与 3.3 对某些变量的必填性要求不同,若不记录版本,规则在标准升级后可能静默失效。FHIR 的 Profile 和 OMOP 的 vocabulary 版本同样需要记录。
四、规则来源的优先级与冲突处理
当不同来源对同一字段提出不同要求时,需要明确优先级。一般原则是:方案与 DMP 的业务约束优先于通用标准约束,因为研究特定要求更贴近实际数据含义;监管递交标准(SDTM/ADaM)优先于互操作标准(FHIR/OMOP),因为递交场景的合规性要求更严格。若出现冲突,例如方案允许某字段为空但 SDTM 要求必填,应在 DMP 中记录例外说明,并在规则中显式标注“方案例外”,而不是直接删除标准规则。
常见误区:把 CRF 注释直接当作清洗规则。CRF 注释只说明字段映射到哪个 SDTM 变量,并不说明该变量的取值约束、条件必填或跨字段逻辑。清洗规则必须结合 SDTM IG、方案和 DMP 共同确定,否则会漏掉大量业务逻辑校验。
五、规则来源的版本管理与变更影响
标准和研究文档都会变更。SDTM IG 升级可能新增变量或调整受控术语;方案修订可能改变访视窗口;DMP 更新可能新增检查项。自动清洗工程需要建立“来源版本 → 规则版本 → 清洗结果”的追溯链。一个可操作的做法是:每次来源文档变更时,先做影响分析,列出受影响的规则编号,再逐条评估是否需要修改检查逻辑或严重级别,最后在规则库中记录变更日期和变更原因。这样,当清洗结果出现异常时,可以快速判断是数据问题还是规则变更导致。
总结来看,临床数据自动清洗的规则来源不是单一标准,而是“标准定结构、文档定业务、DMP 定执行”的三层体系。理解每一层约束什么、如何合并成可执行规则、冲突时如何取舍,是构建可维护清洗规则库的前提。