3. 源数据采集与电子数据采集系统对接
采集层是临床研究数据管线的入口,它面对的不是一个系统,而是一组异构数据源:EDC 承载研究者录入的病例报告表数据,ePRO 承载受试者自报结局,eSource 提供原始电子源数据,可穿戴设备持续输出生理信号,中心实验室则按样本批次回传检验结果。这些来源在时间粒度、标识体系、编码标准和传输机制上各不相同。如果采集层只是"把数据收进来",下游清洗和统计就会反复返工。因此本节的核心任务是:为采集层建立数据契约,明确字段映射规则,并部署实时校验,让错误在进入管线的第一时间被拦截。
数据契约:先约定"接口长什么样"
数据契约是数据提供方与管线之间的一份机器可读约定,至少包含四类信息:标识与版本(来源系统、契约版本、生效日期)、结构定义(字段名、类型、是否必填、允许值域)、语义定义(字段含义、对应 CDISC 变量、单位)、传输约定(格式、频率、幂等键、失败重试策略)。以 ePRO 为例,一份契约片段可以写成:
contract: epro_diary_v1.2
source_system: ePRO-Platform-A
record_key: [study_id, site_id, subject_id, instrument_oid, visit_oid]
fields:
- name: item_oid type: string required: true
- name: response_value type: decimal range: [0,10]
- name: response_date type: datetime format: ISO8601 tz: site_local
- name: completion_status type: enum allowed: [COMPLETED, PARTIAL, MISSED]
cdisc_mapping: QSORRES / QSTESTCD / QSDTC
delivery: REST push, batch=1, retry=3, idempotency_key=record_key
契约的价值在于"可执行":它既能生成校验器,也能生成映射配置,还能作为变更管理的依据。任何一方修改字段,都必须升版本并触发回归校验,而不是悄悄改字段名。
字段映射:从源字段到标准变量
映射不是简单的改名,而是三层转换。第一层是结构映射:把源系统的嵌套 JSON 或宽表,拆解为以受试者-访视-表单为键的标准化记录。第二层是语义映射:把源字段对应到 CDISC SDTM 变量,例如 ePRO 的 item_oid 映射到 QSTESTCD,response_value 映射到 QSORRES,response_date 映射到 QSDTC。第三层是值域映射:把源系统的本地编码转换为受控术语,例如把设备厂商的 HR_BPM 统一为 VSHR 并统一单位为次/分。
映射配置建议以"映射表"形式维护,每行至少包含:源系统、源字段、目标变量、转换表达式、单位换算、缺失值处理、生效版本。这样当某个中心实验室更换 LIS 系统时,只需替换对应行,而不必改动管线代码。
实时校验:在入口处拦截错误
实时校验按强度分为四档,建议在采集层全部部署:
- 结构校验:必填字段是否存在、类型是否正确、时间格式是否合法。例如
response_date必须能被解析为 ISO8601。 - 值域校验:数值是否落在允许区间,枚举是否在受控列表内。例如疼痛评分必须在 0–10 之间。
- 逻辑校验:字段之间的约束。例如
completion_status=MISSED时response_value必须为空;visit_date不得早于知情同意日期。 - 跨源一致性校验:同一受试者在 EDC 与 ePRO 中的出生日期、性别、访视窗口是否一致;实验室结果的采样时间是否落在访视窗口内。
校验失败时不应直接丢弃数据,而应写入隔离区并生成带上下文的告警:来源系统、记录键、失败规则、原始报文片段。这样数据管理员可以判断是源系统问题、映射问题还是真实的数据质量问题。
CHK-EPRO-007),并在告警、日志和审计追踪中引用该 ID,便于回溯与规则覆盖率统计。采集层数据流与校验位置
下图展示五类数据源进入采集层后的统一处理路径:每个来源先经过契约解析,再执行字段映射,随后进入实时校验;通过校验的记录写入标准化暂存区,未通过的进入隔离区并触发告警。图中同时标出了幂等键与版本号在链路中的作用位置。
落地要点与常见陷阱
第一,幂等键必须唯一且稳定。可穿戴设备常因网络重传导致同一时间点数据重复上报,若幂等键只取时间戳,就会产生重复记录。建议使用"设备序列号 + 受试者 ID + 采样时间 + 信号类型"组合键。第二,时间与时区要显式声明。ePRO 在受试者本地时区记录,实验室结果按中心时区出具,若不在契约中声明时区,跨源一致性校验会大量误报。第三,缺失值要区分"未采集"与"不适用"。EDC 中未填写的字段可能是漏填,也可能是逻辑跳转导致的不适用,两者在 SDTM 中分别对应空值和 NOT DONE,映射时必须区分。
最后,采集层的质量需要用指标持续观察:契约覆盖率(已接入来源中已定义契约的比例)、映射成功率、校验通过率、隔离区积压量、平均修复时长。建议按日统计并按来源系统拆分,当某个来源的校验通过率持续低于阈值时,优先排查其契约版本或映射配置,而不是在下游反复清洗。