医院里最让人头疼的,不是医生不够多,而是病历“看不懂”——内科医生写的记录,外科医生得猜;市医院的数据,省医院读不了;而做科研的医生想要分析一万份病历,光是整理格式就要花掉半年时间。这就好比每个科室都有自己的档案柜,每台机器都有自己的插头,每个仪器都有自己的说明书。 电子病历(EHR/EMR)技术,就是要给这些“各说各话”的医疗数据建一座统一的“文档管理大厅”。HL7 FHIR 是这座大厅里的一种标准化“档案盒”——规定了文件夹怎么贴标签、资料怎么分类摆;OMOP CDM 则是一套“数据统计表”——把不同医院的病历数据转成同一套列头,让研究者能用同一种工具做分析。前者解决“怎么存、怎么传”,后者解决“怎么用、怎么比”。 对 AI 从业者来说,理解 EHR 结构是打开医疗 AI 大门的第一把钥匙。没有规范的数据底座,再强的模型也只是在垃圾堆里淘金。

岗位关联

理解电子病历的 FHIR 与 OMOP 双轨结构,是医疗 AI 工程化落地的必修课。掌握这套体系,你将能打通“临床数据 → 结构化处理 → 模型训练 → 产品上线”的全链路,让 AI 真正在医院里跑起来。

目录
  1. 可视化演示
  2. 病历基础概念
  3. HL7 FHIR 概览
  4. FHIR 资源详解
  5. OMOP CDM 设计
  6. 术语映射与 ETL
  7. 数据治理与 AI 落地
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示HL7 FHIR资源关系网络、FHIR与OMOP CDM表结构映射、以及从源数据到标准化模型的ETL流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

FHIR资源网络 Patient连接4类资源 Resource.ref RESTful API实现互操作

病历基础概念

想象你是一个小镇的档案管理员。过去十年,镇上的医院用纸质病历,每个医生有自己的记法:张医生喜欢画图,李医生习惯写缩写,儿科甚至用贴纸记录疫苗接种。你最大的噩梦,是某天一位病人从别的镇转来,你翻开新病历,完全看不懂对方在说什么——这就是“互操作”问题。

电子病历就是把纸质档案搬到电脑里,但“搬到电脑里”还远远不够。EMR(Electronic Medical Record,电子医疗记录)是单个医院内部的数字化病历,解决的是“本院医生能看清楚”的问题;而 EHR(Electronic Health Record,电子健康档案)则强调跨机构共享,让病人在 A 院做的检查,B 院也能调阅。两者关系就像“科室内部日志”与“全镇共享健康档案”。

对 AI 而言,病历必须是结构化数据——也就是每个字段有明确含义、有统一编码。自由文本如“患者血糖偏高”是无法直接喂给模型的;结构化后变成“血糖=7.2mmol/L(空腹),异常”,模型才能计算。HL7、FHIR、OMOP 等标准,都是为了解决结构化与互操作这两个核心问题而生的。

1. EHR 与 EMR:EHR 强调跨机构共享的健康档案,EMR 是医院内部的电子医疗记录,二者常常被混用

EMR⊂EHREMR \subset EHR

2. 结构化数据:将自由文本转为带语义标签的字段,是 AI 分析的前提

Text→NLP+标注StructuredFieldsText \xrightarrow{NLP+标注} Structured Fields

3. 互操作级别:从语法互操作(格式一致)到语义互操作(含义一致)是分层递进的

Syntax→Semantics→ProcessSyntax \rightarrow Semantics \rightarrow Process

回到档案室的比喻:你买了一批一模一样的档案盒(EMR 标准化),又跟邻镇约定了相同的标签规则(EHR 共享),最后还约定每个标签的含义(语义互操作)——这样你才能真正看懂其他镇的档案,也才能让电脑帮你统计全镇的健康趋势。

HL7 FHIR 概览

假设你终于说服全镇医生使用统一的电子病历系统,但新问题来了:药房系统要读处方、检验科系统要读化验单、保险系统要读诊断记录。每家系统都有自己的数据库结构,数据交换变成了一场“翻译官”的噩梦——这就是为什么需要 HL7 FHIR。

HL7 是医疗信息交换标准的国际组织,从早期的 HL7 v2(基于管道字符的文本协议)进化到 v3(基于 XML 但过于复杂而少有落地),最终在 2014 年推出了 FHIR(Fast Healthcare Interoperability Resources,快速医疗互操作资源)。FHIR 的核心革命在于:它把 RESTful API 的思想引入医疗领域,让电子病历系统像互联网应用一样通过 HTTP 请求交换数据。

FHIR 的基本单元叫“资源”(Resource),比如 Patient(患者)、Observation(检查结果)、MedicationRequest(用药医嘱)。每种资源有固定的 JSON/XML 结构,像一份份填写好的标准表格。系统间交换数据,就是把这些资源通过 GET、POST、PUT 等 HTTP 操作传来传去——这跟手机 App 调后端接口是完全一样的模式。

档案室的比喻在这里有了新角色:FHIR 相当于全镇统一了档案的“快递协议”——每个档案盒都有标准编号(资源 ID),有标准尺寸(资源结构),有统一的寄送方式(REST API)。档案室之间传档案,不再需要人工抄写,而是像寄快递一样扫码、打包、发货,全程可追踪。

FHIR=RESTful API+Resource Model+JSON/XMLFHIR = RESTful\,API + Resource\,Model + JSON/XML
FHIR 的本质,是给 20 世纪的医疗数据穿上一件 21 世纪的互联网外衣。
  1. RESTful API用 HTTP 动词(GET/POST/PUT/DELETE)操作资源,与 Web 应用同构
    GET/Patient/123→返回患者资源GET /Patient/123 \rightarrow 返回患者资源
  2. 资源模型每种资源由数据结构 + 约束规则组成,类似数据库的表结构
    Resource=StructureDefinition+DataElementsResource = StructureDefinition + DataElements
  3. JSON 序列化资源可序列化为 JSON 格式,方便解析与存储
    Resource→serializeJSONResource \xrightarrow{serialize} JSON

FHIR 资源详解

一个 FHIR 资源内部长什么样?我们以 Patient 资源为例拆开来看。在档案室的比喻里,Patient 资源就是每个人的“主档案袋”,上面贴满了标准标签:姓名、出生日期、性别、联系方式——每个标签在 FHIR 里叫“元素”(Element),而这些元素的值都有明确的类型约束,比如出生日期必须是 date 类型,性别必须来自枚举值表。

更妙的是资源的“引用”机制。Patient 资源上会记录“就诊历史”指向一组 Encounter(就诊)资源,而 Encounter 资源又指向 Observation(检查)资源——就像主档案袋里有一根根红色引线,连到不同颜色的子档案袋。这种通过逻辑引用(Reference)而非物理嵌的方式组织数据,让数据既可拆开独立传输,又能按需组装成完整画像。

FHIR 还允许通过“扩展”(Extension)机制添加标准之外的自定义字段——就像档案袋上可以贴便利贴,但便利贴必须按照规范格式写,不能随手涂鸦。当一次操作需要同时更新多个资源时,用 Bundle 把多个资源打包成一个事务包一次提交,保证所有操作要么全部成功、要么全部失败,这在“转诊转科”这类需要同时更新多张表的工作流里特别有用。

回到档案室:以前你想了解一个病人的完整情况,要翻遍整个档案室;现在有了 FHIR 的红色引线,你可以沿着 Patient → Encounter → Observation 的链条迅速调齐所有相关档案,还能用 Bundle 把“一次门诊”的所有新增记录打包存档,保证这批档案“要么全进库,要么全不进”。

Bundle=⋃i=1nResourcei,all−or−nothingBundle = \bigcup_{i=1}^{n} Resource_i, \quad all-or-nothing
Bundle 可理解为一个承载一次医疗事件的“档案合集”,确保数据一致性。
  1. 资源结构资源由元数据(id、meta)、数据元素(字段)、扩展三部分组成
    R={id, meta, elements, extensions}R = \{id,\ meta,\ elements,\ extensions\}
  2. 引用关系资源通过 Reference 指向其他资源,形成图状关联
    Patient→ReferenceEncounter→ReferenceObservationPatient \xrightarrow{Reference} Encounter \xrightarrow{Reference} Observation
  3. 事务一致性Bundle 事务确保多资源更新原子性
    ∀i∈[1,n], commit(Δi)  ⟺  commit(Bundle)\forall i \in [1,n],\ commit(\Delta_i) \iff commit(Bundle)

OMOP CDM 设计

FHIR 解决了“怎么传”,但科研还要解决“怎么比”。假设你收集了全国 100 家医院的 FHIR 数据,却发现:有的医院诊断用 ICD-10,有的用 SNOMED-CT;有的记录“高血压”为疾病,有的记录为症状;有的用“mg/dL“有的用”mmol/L“作血糖单位——这时你需要一个统一的”分析型数据模型”,这就是 OMOP CDM。

OHDSI 组织(Observational Health Data Sciences and Informatics)推出的 OMOP CDM(Observational Medical Outcomes Partnership Common Data Model)是一套专门为观察性研究设计的关系型数据库模型。它把医疗数据按“人物(Person)”为中心组织成事实表,比如 condition_occurrence(疾病发生)、drug_exposure(药物暴露)、visit_occurrence(就诊事件)等,每张表都是行事件模型——每一行代表一次具体事件,而不是一条汇总记录。

OMOP 的灵魂是“标准化概念”(Standardized Concepts)。每个概念有唯一的概念 ID(如“高血压”对应概念 ID 320128),并挂载在概念层级里(比如“继发性高血压”是“高血压”的子概念)。这样,100 家医院的“高血压”病例,无论源系统用什么编码,映射到 OMOP 后都指向同一个概念 ID——这正是跨院大规模分析的基石。分析者只需写一行 SQL 就能统计所有医院的高血压患病率。

档案室的数据统计问题,在 OMOP 里变成了标准化的“统计台账”:不管原始档案是什么语言、什么格式,映射之后都落到统一模板里。研究者不再需要理解 100 种病历写法,只需要理解 OMOP 的 30 张表,就能写出通用的分析 SQL——这就像用统一的 Excel 表格统计 100 个班级的成绩,大家填同一个模板,汇总只需一个公式。

OMOP=Person+Domain Tables+Standardized ConceptOMOP = Person + Domain\,Tables + Standardized\,Concept
OMOP 等于把各家医院的数据“翻译成同一种方言”,让跨院统计像查一张表那样简单。
  1. 人物维度表person 表存患者基本属性,作为所有事实表的外键锚点
    Person(person_id,gender,birth_year,… )Person(person\_id, gender, birth\_year, \dots)
  2. 事件事实表每种临床事件一张表,采用行事件模型
    Condition(person_id,concept_id,start_date,… )Condition(person\_id, concept\_id, start\_date, \dots)
  3. 概念标准化本地编码通过映射表转为标准概念 ID
    ICD10:I10→mapconcept_id=320128ICD10: I10 \xrightarrow{map} concept\_id = 320128

术语映射与 ETL

有了 FHIR 和 OMOP 这两个“目标格式”,下一步就是把医院真实数据转过去。这个过程的核心是 ETL(Extract-Transform-Load,抽取-转换-加载),而 ETL 中最难的不是技术,而是“翻译”——术语映射。

假设某医院系统里诊断编码用的是 ICD-10,其中 “E11.9“ 表示”2 型糖尿病不伴并发症“。而 OMOP 标准概念里,SNOMED-CT 的 ”44054006“ 表示”Type 2 diabetes mellitus“。怎么让两者对应?答案是用”术语映射表“(Concept Map)。OHDSI 提供了工具 Athena,可以下载标准概念表和映射关系包,其中包含源编码到标准概念 ID 的映射规则。有些映射是一对一的,有些是”一对多”的——一个粗粒度源编码可能要拆成多个标准概念,反之亦然。

ETL 的标准流程一般包括五步,我们用“档案翻译厂”来比喻:第一步“抽档”(Extract)——从源库拉出原始数据;第二步“翻标”(Transform)——对每条记录做术语映射和单位换算;第三步“质检”(Validate)——检查必填字段是否缺失、概念 ID 是否合法;第四步“归档”(Load)——写入目标 CDM 表;第五步“复盘”(Audit)——统计映射覆盖率与质量指标。真实工程中,映射覆盖率 90% 已经很优秀,剩余 10% 需要人工审核或建立局部映射。

档案翻译厂的核心竞争力不是翻译速度,而是“翻译质量”。一个编码映射错了,会导致后续所有统计结果跑偏——就像把“高血压”错翻成“低血压”,整个镇的慢性病统计全部作废。所以 ETL 过程的最后一步永远是质量复查,这跟档案室里的“双人核对”制度如出一辙。

MappingCov=∣MappedCodes∣∣SourceCodes∣,Target≥90%MappingCov = \frac{|MappedCodes|}{|SourceCodes|},\quad Target \geq 90\%
ETL 的核心不是“搬运数据”,而是“翻译语义”。
  1. 抽取从源库(通常为 EHR 的 FHIR API 或直接数据库)读取原始记录
    Extract:Sraw→DataFrameExtract: S_{raw} \rightarrow DataFrame
  2. 转换映射本地编码 → 标准概念 ID,附加单位统一与字段重命名
    Transform:Clocal→concept_mapCstandardTransform: C_{local} \xrightarrow{concept\_map} C_{standard}
  3. 加载与验证写入 OMOP 表并执行质量规则检查
    Load+Validate:count(rows)=count(fki_valid)Load + Validate: count(rows) = count(fki\_valid)

数据治理与 AI 落地

最后一道大题:数据终于规范化了,接下来怎么给 AI 用?现实中医疗 AI 项目 80% 的时间都花在数据治理上,而非模型调参。

去标识化(De-identification)是第一道红线。HIPAA 规定 18 类标识符必须去除或加密,包括姓名、身份证号、电话号码、甚至精确到日的出生日期。在 FHIR 资源里,Patient.name 和 Patient.identifier 是需要重点处理的字段;在 OMOP 流程里,person 表的 person_id 需替换为随机生成的不可逆 ID。做联邦学习时,数据不出院,模型参数加密传输,则是另一层更严格的治理手段。

数据质量评估需要贯穿 ETL 全流程。常见维度包括完整性(必填字段缺失率)、一致性(同一患者年龄与出生日期是否矛盾)、时效性(数据是否过期)。在 OMOP 中,每个表都有主键约束和外键约束,违反约束的行必须被记录并修正。实践中通常建立“数据质量仪表盘”,每批数据入库后自动生成质量报告。

当数据底座就绪后,AI 落地路径变得清晰:从 OMOP 表提取特征 → 存入特征库(Feature Store)→ 训练模型 → 以 FHIR 资源形式输出预测结果接入临床系统。整个过程像流水线工厂:OMOP 是“原料仓库”,特征库是“精加工车间”,FHIR 是“包装出货区”——每个环节都有明确接口,缺一不可。

回到档案室的收尾场景:你终于可以用统计台账(OMOP)驱动“健康数据分析部”(AI 团队)挖掘全镇的健康规律,再把分析结果用标准档案盒(FHIR)送回临床科室。整个过程有规则、有质检、有追溯——这就是数据治理的意义,也是医疗 AI 从“实验室玩具”变成“临床工具”的关键一步。

P(Deploy)=P(Data_Quality)×P(Model_Fit)×P(Integration)P(Deploy) = P(Data\_Quality) \times P(Model\_Fit) \times P(Integration)
AI 在医疗落地的瓶颈不是算法,而是数据治理与系统集成的“最后一公里”。
  1. 去标识化规则去除 18 类标识符,保留供研究的非敏感字段
    DirectID={name,SSN,phone,… }→removedDirectID = \{name, SSN, phone, \dots\} \rightarrow removed
  2. 数据质量维度完整性、一致性、时效性、准确性四个维度综合评分
    DQ=w1Completeness+w2Consistency+w3TimelinessDQ = w_1 Completeness + w_2 Consistency + w_3 Timeliness
  3. 部署链路OMOP 特征 → 特征库 → 训练 → FHIR 预测输出
    OMOP→FeatureStore→Model→FHIROMOP \rightarrow Feature Store \rightarrow Model \rightarrow FHIR

AI 应用场景

场景一:慢病风险预测模型的跨院训练

阶段:数据准备与特征工程

解决的问题:单一医院慢病样本量不足,模型泛化能力差;而不同医院的病历结构和诊断编码不统一,直接拼接数据会导致特征语义错乱。通过 OMOP CDM 将 5 家医院的 EHR 数据统一为同一套标准化概念,AI 团队可直接在统一的表结构上提取特征、训练模型。

具体案例:某医疗 AI 公司为区域卫生平台构建“2 型糖尿病并发症风险模型”。他们先将 5 家医院的源数据通过 ETL 流程映射至 OMOP 标准表,再使用标准化概念 ID 筛选糖尿病患者队列,最终在 12 万人的队列上训练出预测模型,AUC 达 0.86。整个数据准备周期从预期的 6 个月缩短至 6 周。

场景二:FHIR 驱动的临床决策支持系统集成

阶段:模型推理与系统集成

解决的问题:模型预测结果如何无缝融入医生日常工作流?传统做法是让医生跳出 HIS 系统打开另一个 Web 应用,这大大降低了使用率。利用 FHIR 标准,将模型输出的风险评分封装为 Observation 资源,直接写入医院的 FHIR 服务器,医生在原有 EHR 界面即可看到风险评估结果。

具体案例:某三甲医院部署“脓毒症早期预警系统”。每小时从 FHIR API 拉取患者的生命体征和化验结果,模型推理后生成风险评分,再以 FHIR Observation 资源写回系统,在医生工作台自动弹窗预警。由于全程使用 FHIR 标准接口,与院内系统的对接仅耗时 2 周。

场景三:真实世界证据研究(RWE)数据底座

阶段:分析数据集构建

解决的问题:药企上市后需要开展真实世界研究,评估药物在广泛人群中的安全性与有效性。传统人工病历审查费时费力且样本量有限。通过 OMOP CDM 建设统一的 RWD 数据底座,研究团队可编写标准 SQL 快速query出目标人群和临床事件。

具体案例:某药企与三家医院合作,将 10 年历史 EHR 数据转换为 OMOP 格式,构建包含 80 万患者的 RWD 数据库。针对某降糖药的心血管安全性研究,从数据准备到论文投稿仅用时 3 个月,而传统方法通常需要 12 个月以上。

Python 演示

python63 行
# -*- coding: utf-8 -*-"""FHIR 资源解析与 OMOP 概念映射演示"""import jsonfrom datetime import datetime  FHIR_PATIENT = {    "resourceType": "Patient",    "id": "pat-001",    "identifier": [{"system": "http://hospital.org/mrn", "value": "MRN-88321"}],    "name": [{"family": "Zhang", "given": ["Wei"]}],    "birthDate": "1985-04-12",    "gender": "male"}  CONCEPT_MAP = {    "E11.9": 44054006,   # ICD-10 -> SNOMED CT    "I10": 320128,    "J45": 195967001}  class OMOPMapper:    def __init__(self, mapping):        self.mapping = mapping        self.concept_map = mapping     def map_code(self, source_code):        if source_code in self.concept_map:            return self.concept_map[source_code]        return 0   # unmapped, 0 = no matching concept  def parse_fhir_patient(resource):    if resource["resourceType"] != "Patient":        raise ValueError("Not a Patient resource")    birth_year = int(resource["birthDate"][:4])    age = datetime.now().year - birth_year    return {        "person_id": hash(resource["id"]) % 100000,        "gender": resource["gender"],        "age": age    }  def transform_condition(local_code, mapper):    concept_id = mapper.map_code(local_code)    if concept_id == 0:        raise ValueError(f"Unmappable code: {local_code}")    return {"condition_concept_id": concept_id, "source_code": local_code}  if __name__ == "__main__":    demo_mapper = OMOPMapper(CONCEPT_MAP)    pt = parse_fhir_patient(FHIR_PATIENT)    print("OMOP person:", pt)     cond = transform_condition("E11.9", demo_mapper)    print("Mapped condition:", cond)     unknown = transform_condition("Z99.9", demo_mapper)    print("Unknown code:", unknown)
目的:演示从 FHIR JSON 格式的患者资源中提取关键信息,并利用概念映射表将临床诊断编码转换为 OMOP 标准概念 ID 的完整流程。
  1. FHIR_PATIENT = {...}硬编码一条 FHIR Patient 资源 JSON,模拟医院系统通过 FHIR API 返回的数据
  2. CONCEPT_MAP = {...}定义 ICD-10 本地编码到 SNOMED-CT 标准概念 ID 的映射表,实际工程中从 Athena 下载
  3. class OMOPMapper:封装了术语映射逻辑,map_code 方法负责编码翻译,未命中返回 0 表示“无法映射”
  4. parse_fhir_patient(resource)从 FHIR 资源中提取 person_id、gender、age,用于写入 OMOP person 表
  5. hash(resource["id"]) % 100000用哈希生成不可逆伪 ID,模拟去标识化,防止真实 MRN 泄露
  6. transform_condition(local_code, mapper)将单条诊断编码映射为 OMOP 标准概念,并抛出异常提示未映射编码
  7. if __name__ == "__main__":程序入口,依次执行解析与映射,演示一条真实数据的完整流转

常见误区

误区“EHR 和 EMR 不就是一回事吗?都是电子病历,叫法不同而已,项目里用哪个都行。”

正解两者定位有本质差异。EMR 是医院内部的数字化医疗记录,服务于单院区的临床流程;EHR 强调跨机构共享和个人健康全周期记录,包含来自多源系统的汇总信息。用档案室的比喻:EMR 是“科室自己的柜子”,EHR 是“全镇共享的健康档案”。做数据集成时,明确目标数据在哪个层级,直接决定了接口设计和数据模型选型。

为何常见:中文语境下“电子病历”这个译名同时对应两个英文缩写,日常交流中混用频繁,缺乏概念辨析的语境。

误区“我们公司要建 EHR 系统,直接用 FHIR 做数据库存储就行了吧?”

正解FHIR 是交换标准(Interoperability Standard),不是数据库系统。它定义了资源的数据结构和 RESTful API 交互方式,但底层存储方式完全由实现者决定——你可以用 PostgreSQL、MongoDB,甚至文件系统存储 FHIR 资源。理解为“档案盒的规格说明”比“档案柜本身”更准确。实际工程中,FHIR Server 通常只是数据交换层,底层分析仍依赖专用的数据仓库。

为何常见:FHIR 的 JSON 结构看起来像文档数据库的 record,加上很多实现提供 "FHIR Storage" 命名,容易让人误以为是存储引擎。

误区“把数据按 OMOP 的表结构导进去就完成了,之后直接写 SQL 分析就行。”

正解OMOP 的价值 80% 在“映射质量”而非“表结构”。两张表的列名一样,但一行的概念 ID 映射错了,分析结果就全错了。此外,OMOP 还要求遵守关于人物一生事件的相关性约束(如同一患者在时间轴上逻辑连贯)、域映射的语义准确性等。建表是骨架,映射与治理才是血肉。

为何常见:初学者看到 OMOP 文档里以表结构为主,容易误以为“表结构对齐=数据对齐”。实际完成映射需要较多临床知识。

误区“FHIR 已经是国际标准了,数据分析直接对 FHIR 数据做就行,没必要转 OMOP。”

正解FHIR 和 OMOP 解决的是不同环节的问题:FHIR 解决临床数据交换,面向“点对点实时获取单患者数据”;OMOP 解决研究分析的数据整合,面向“大规模人群的统计计算”。生产系统中两者常常共存——FHIR 做业务接口,数据下沉到 OMOP 做分析。选型取决于你是做“挂号缴费”这类事务,还是“10 万人糖尿病患病率统计”这类分析。

为何常见:FHIR 知名度高、社区活跃,容易给人“标准统一天下”的错觉;但忽视了事务型与分析型工作负载的本质差异。

误区“把姓名和身份证号删掉就完成了脱敏,数据可以放心拿出去做模型训练了。”

正解简单的字段删除≠去标识化。研究已证明,仅通过出生日期、性别、邮政编码三项,就能重识别出 63%-87% 的个体。正规的去标识化流程包括泛化(如年龄模糊化为年龄段)、扰动(如微移日期)、抑制(删除罕见组合记录)等多重手段,并在发布前做重识别风险评估。实际项目中必须接受“完全匿名不可能,控制重识别风险在可接受范围内”的理念。

为何常见:HIPAA 的 18 类标识符清单简洁明了,容易让人产生“删掉这些字段就合规”的错觉;重识别攻击的文献传播度远低于安全指南。

面试题

Q1. EMR 与 EHR 的核心区别是什么?

单选题 · easy

  • A.EMR 服务于单院区内部流程,EHR 支持跨机构共享← 正确答案
  • B.EMR 只能存文本,EHR 可以存影像数据
  • C.EMR 是免费软件,EHR 是商业软件
  • D.EMR 只用于门诊,EHR 只用于住院

答案:A。EMR 是医院内部的电子医疗记录,侧重单一机构;EHR 是电子健康档案,强调患者全生命周期数据的跨机构共享。档案室比喻中,EMR 是科室内部日志,EHR 是全镇共享的健康档案。

Q2. FHIR 中“资源”(Resource)是什么?

单选题 · easy

  • A.存储数据的物理磁盘分区
  • B.医疗信息交换的基本数据单元← 正确答案
  • C.一种 SQL 数据库的表名
  • D.医院的硬件服务器设备

答案:B。FHIR 中的资源(如 Patient、Observation、Encounter)是标准化的数据结构,通过 RESTful API 进行交换,类似标准档案盒。它不是存储介质、数据库表或硬件设备。

Q3. FHIR Bundle 的主要作用是什么?

单选题 · mid

  • A.提高单个资源的查询速度
  • B.将多个资源打包为一次性事务提交← 正确答案
  • C.替代所有 REST API 操作
  • D.对资源进行加密存储

答案:B。Bundle 将多个资源组合为事务包整体提交,保证 all-or-nothing 的原子性。适用于转诊等需同时更新多资源的场景。它不替代 REST 操作,也不负责加密。

Q4. OMOP CDM 采用哪种数据模型组织方式?

单选题 · mid

  • A.文档型模型,每患者一条 JSON 记录
  • B.行事件模型,每行代表一次临床事件← 正确答案
  • C.图模型,节点边描述关系
  • D.键值存储,以患者 ID 为键

答案:B。OMOP 采用关系型行事件模型,condition_occurrence、drug_exposure 等事实表中每一行是一条具体事件记录,配合标准化概念 ID 实现跨院统计分析。

Q5. OMOP 标准化概念 ID 解决了哪些问题?

多选题 · mid

  • A.不同医院诊断编码不统一← 正确答案
  • B.药品剂量单位不一致← 正确答案
  • C.数据存储磁盘空间不足
  • D.跨院统计分析可比性差← 正确答案

答案:ABD。标准化概念 ID 将不同源系统的编码映射为统一标识,解决“同一疾病不同编码”“不同计量单位”“跨院对比困难”等问题。它不直接解决存储空间问题。

Q6. 在 ETL 流程中,术语映射的核心目标是什么?

单选题 · mid

  • A.将源编码翻译为标准概念 ID← 正确答案
  • B.压缩数据体积以节省存储
  • C.加快数据库查询响应速度
  • D.加密敏感字段防止泄露

答案:A。

Q7. 去标识化处理中,仅删除姓名和身份证号可能存在的风险是什么?

多选题 · hard

  • A.通过出生日期+性别+邮编重新识别个体← 正确答案
  • B.数据完全不可用于任何研究
  • C.罕见组合记录的个体仍可能被定位← 正确答案
  • D.数据无法通过 HIPAA 合规审查

答案:AC。研究证明出生日期+性别+邮编三项组合可重识别 63%-87% 个体,罕见组合的字段值本身就是“指纹”;仅删除几种直接 ID 字段不足以通过严格合规审查。

Q8. FHIR 与 OMOP 的关系是什么?

单选题 · easy

  • A.FHIR 是分析模型,OMOP 是交换标准
  • B.FHIR 是交换标准,OMOP 是分析模型← 正确答案
  • C.两者功能一致,可互相替代
  • D.OMOP 是 FHIR 的旧版本

答案:B。FHIR 定位为临床数据交换标准,解决互操作问题;OMOP 定位为观察性研究分析模型,解决数据分析问题。两者共存互补,不是替代关系。

Q9. OMOP 中概念 ID 为 0 的含义是什么?

单选题 · hard

  • A.该编码映射到多个标准概念
  • B.源编码在标准概念表中不存在对应项← 正确答案
  • C.源编码已过期需更新
  • D.该编码属于受保护的特殊概念

答案:B。概念 ID=0 表示 "No matching concept",即源编码经映射后在标准概念集中找不到对应项,是 ETL 质量报告中必须重点关注的部分,通常触发人工审核流程。

Q10. 医疗 AI 部署链路中 FHIR 和 OMOP 分别在哪一环节发挥作用?

多选题 · hard

  • A.OMOP 用于特征提取与队列分析← 正确答案
  • B.FHIR 用于模型推理结果回传临床系统← 正确答案
  • C.FHIR 用于训练模型参数调优
  • D.OMOP 用于患者数据跨院汇聚← 正确答案

答案:ABD。典型链路中,OMOP 在数据汇聚与特征提取阶段将多院数据标准化为统一分析格式;FHIR 在输出端将预测结果封装为资源接入临床工作流。模型调优本身与两者无直接关联。