2. FHIR资源模型精读

FHIR 的资源模型不是一张“大宽表”,而是一组围绕医疗业务边界划分的独立资源。每个资源都有唯一的 resourceType、由 id 标识的实例身份、可选的 meta 元数据,以及一组语义明确的字段。理解核心资源的关键,不是背字段名,而是弄清三件事:这个资源代表什么业务对象、它通过哪些字段描述该对象、它与其他资源如何引用。本节以 Patient、Practitioner、Organization、Encounter、Observation 五个最常用资源为主线,逐层拆解字段语义与引用关系。

一、五个核心资源的业务定位

先建立整体认知:Patient 描述“接受医疗服务的对象”,Practitioner 描述“提供医疗服务的个人”,Organization 描述“承担医疗服务的机构或组织单元”,Encounter 描述“一次具体的医疗服务交互”,Observation 描述“在服务过程中产生的观察测量结果”。这五者构成了最小可用的临床数据骨架:谁(Patient)在什么机构(Organization)由谁(Practitioner)服务,产生了什么交互(Encounter)和什么结果(Observation)。

需要特别强调:FHIR 中“人”和“角色”是分离的。Practitioner 表示医疗从业者这一身份,而 PractitionerRole 才表示“某人在某机构担任某职务、提供某类服务”。初学阶段常把 Practitioner 直接当作“医生”,但在多机构执业场景下,必须通过 PractitionerRole 才能正确表达“张医生在 A 医院是心内科主任医师,在 B 诊所是兼职顾问”。

二、Patient 的字段语义

Patient 的核心字段可分为四组。身份标识组:identifier 承载业务系统分配的患者号、医保号、身份证号等,每个 identifier 通过 system 和 value 唯一确定;active 表示记录是否有效。姓名组:name 是 HumanName 类型,包含 family(姓)、given(名)、text(完整显示名),中文场景下通常 family 填姓、given 填名。人口学组:gender 取 male/female/other/unknown,birthDate 为日期,deceasedBoolean 或 deceasedDateTime 表示死亡状态。联系方式组:telecom 记录电话、邮箱,address 记录地址,contact 记录紧急联系人。

一个常见误区是把患者姓名直接当作唯一标识。正确做法是:用 identifier 做业务主键,用 name 做展示。例如某医院 HIS 中患者号 system 为 http://hospital-a.example/mrn,value 为 P202400123,这才是跨系统交换时可靠的匹配依据。

三、Practitioner 与 Organization 的字段语义

Practitioner 的字段结构与 Patient 高度相似:identifier(执业证号、工号)、name、telecom、address、qualification(资质,含 code、issuer、period)。区别在于 Practitioner 通常不记录 birthDate 和 gender 的完整人口学信息,而更强调专业资质。

Organization 的核心字段包括:identifier(机构代码)、active、type(机构类型,如医院、科室、检验中心)、name、telecom、address,以及 partOf 引用——这是 Organization 最重要的结构字段,用于表达“科室属于医院”“分院属于总院”的层级关系。partOf 指向另一个 Organization,形成树状组织结构。

四、Encounter 的字段语义与状态机

Encounter 描述一次医疗服务交互,其字段围绕“谁、在哪、何时、什么类型、什么状态”展开。status 是 Encounter 的状态机核心,取值包括 planned、arrived、triaged、in-progress、onleave、finished、cancelled 等,表示就诊流程的不同阶段。class 表示就诊类别(住院、门诊、急诊、虚拟),type 表示更细的服务类型。subject 引用 Patient,participant 引用 Practitioner 或相关方,period 记录起止时间,location 引用 Location,serviceProvider 引用 Organization。

Encounter 是连接患者、医生、机构与临床结果的枢纽资源。一次门诊就诊的典型链路是:Patient → Encounter(subject)→ Encounter.participant(Practitioner)→ Encounter.serviceProvider(Organization)→ Observation(encounter 引用回 Encounter)。

五、Observation 的字段语义

Observation 是临床测量与检验结果的核心载体。关键字段包括:status(registered/preliminary/final/amended/cancelled)、category(vital-signs、laboratory、imaging 等)、code(测量项目,通常用 LOINC 编码)、subject(引用 Patient)、encounter(引用 Encounter)、effectiveDateTime(测量时间)、performer(执行者)、valueQuantity 或 valueCodeableConcept 或 valueString(测量值)、interpretation(高低异常判断)、referenceRange(参考范围)。

以血糖为例:code 使用 LOINC 2339-0(Glucose [Mass/volume] in Blood),valueQuantity 为 {value: 5.6, unit: "mmol/L", system: "http://unitsofmeasure.org", code: "mmol/L"},interpretation 为 N(正常),referenceRange 为 3.9–6.1 mmol/L。这样一条 Observation 才能被下游系统正确解析和判读。

六、引用关系全景

五个资源之间的引用关系可以用下图表示。图中实线箭头表示直接引用,箭头旁标注引用字段名;虚线表示通过中间资源间接关联。这张图是理解 FHIR 资源网络的基础。

Patient 患者 identifier / name Practitioner 医疗从业者 identifier / qualification Organization 机构/组织 identifier / partOf Encounter 就诊交互 status / class / period Observation 观察测量 code / value / status subject participant serviceProvider encounter subject(直接引用) partOf 图例 直接引用(字段名标注) 间接/可选引用 自引用(层级结构)

七、业务映射中的关键判断

把 FHIR 资源映射到实际业务系统时,有三个高频判断点。第一,患者主索引匹配:跨系统交换时不能只靠姓名和生日,应优先使用 identifier 的 system+value 组合,必要时结合 name、gender、birthDate 做模糊匹配,并记录匹配置信度。第二,就诊与检验的关联:Observation 通过 encounter 字段关联到具体就诊,如果业务系统没有就诊号,可以只保留 subject 引用,但会丢失就诊上下文。第三,机构层级:Organization 的 partOf 可以表达科室与医院的关系,但不要用它表达“医生属于科室”——那是 PractitionerRole 的职责。

在真实项目中,建议先画出本机构的资源引用图,标注每个引用字段的实际数据来源系统。例如 Patient.identifier 来自 HIS 患者主索引,Encounter.serviceProvider 来自排班系统,Observation.performer 来自 LIS。这张映射表比任何字段文档都更能暴露集成风险。

最后给出一个可直接参考的字段映射检查表,用于验证五个核心资源的关键字段是否完整:

资源 必查字段 典型业务来源 常见问题
Patient identifier、name、gender、birthDate HIS 患者主索引 identifier 缺失或 system 不统一
Practitioner identifier、name、qualification HRP / 医师执业注册系统 与 PractitionerRole 混淆
Organization identifier、name、type、partOf 机构注册 / 科室管理 partOf 循环引用
Encounter status、class、subject、period 挂号 / 住院 / 急诊系统 status 与业务状态不一致
Observation status、code、subject、value、effectiveDateTime LIS / 护理站 / 设备网关 code 未用标准编码,value 单位缺失