FHIR

FHIR 配置文件和扩展说明:实现指南如何约束资源,以及如何对其进行验证

FHIR 配置文件是一种 StructureDefinition,用于缩小基本资源范围:必需元素、必须支持、固定代码、切片、绑定、不变式。扩展则添加了基本资源未包含的内容。说明了配置文件的发布方式、meta.profile 的含义、验证器如何检查它们,并附有每个概念的可读示例。

作者 发布于 阅读约 1 分钟

简短回答: FHIR 的基础资源设计得非常灵活:几乎所有内容都是可选的,大多数代码也只是示例,这样一种标准就可以适用于所有国家。Profile 是一个 StructureDefinition,它为特定用途收紧了资源:在此上下文中,Patient 必须具有此类型的标识符,Observation.code 必须是此列表中的 LOINC 代码,此元素必须受支持,而那个元素则可能不出现。Extension 添加了基础资源所缺乏的元素,通过一个 URL 标识,并由其自身的 StructureDefinition 定义。Implementation guides(US Core、IPS、国家指南)是 profile、extension、value set 和示例的集合。资源在其 meta.profile 中说明它声称遵循哪些 profile,验证器会对其进行检查。

Profile 可以改变什么

FHIR 配置文件只能通过缩小资源来改变它:收紧基数、将元素标记为必须支持、固定值或模式、将元素绑定到具有强度的值集、将列表切片成命名部分、限制选择类型、添加 FHIRPath 不变量以及限制引用目标。配置文件不能添加元素、重命名任何内容或放宽基本规范。

约束 作用 示例
基数 使可选元素变为必需,或禁止它们 Patient.identifier 1..*; Patient.photo 0..0
必须支持 接收者在收到元素时必须能够存储和显示 US Core 将 birthDate 标记为必须支持
固定值或模式 将元素锁定为一个值 Observation.category 固定为 vital-signs
绑定 将元素指向一个具有特定强度的值集 Observation.code 绑定到 vital signs 列表,必需
切片 将列表分成具有各自规则的命名部分 血压:组件切片为收缩压和舒张压
类型限制 限制一个选择 value[x] 限制为 valueQuantity
不变式 必须满足的 FHIRPath 规则 "effective[x] 必须存在" 或 "value 或 dataAbsentReason"
引用目标 限制引用可以指向的内容 subject 仅限 Patient,且仅限符合此 profile 的患者

Profile 只能收紧。它不能添加元素(这是 extension 的作用),不能重命名任何内容,也不能放宽基础规则。

绑定强度

FHIR 定义了四种绑定强度。required:代码必须来自值集。extensible:如果概念匹配,则使用值集;否则允许使用其他代码。preferred:推荐,但不强制执行。example:仅作说明,大多数基本资源都是如此。将 extensible 误读为 required 是导致验证错误的最常见原因。

可读的 Profile 摘录

FHIR 配置文件是 StructureDefinition,其差分列表仅包含与基本资源不同的约束,而其快照列表包含所有元素。下面的可读摘录将 Observation 约束为家庭血压:代码固定为 LOINC 85354-9,组件被切片为精确的收缩压和舒张压部分。

Profile 的差分 (differential) 仅列出与基础资源不同的部分;快照 (snapshot) 列出所有内容。此差分表示血压 Observation 必须携带 LOINC 85354-9 和正好两个组件:

{
  "resourceType": "StructureDefinition",
  "url": "https://example.org/fhir/StructureDefinition/bp-home",
  "name": "HomeBloodPressure",
  "status": "active",
  "kind": "resource",
  "abstract": false,
  "type": "Observation",
  "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Observation",
  "derivation": "constraint",
  "differential": {"element": [
    {"id": "Observation.code", "path": "Observation.code",
     "patternCodeableConcept": {"coding": [{"system": "http://loinc.org", "code": "85354-9"}]}},
    {"id": "Observation.component", "path": "Observation.component", "min": 2, "max": "2",
     "slicing": {"discriminator": [{"type": "pattern", "path": "code"}], "rules": "closed"}},
    {"id": "Observation.component:systolic", "path": "Observation.component", "sliceName": "systolic", "min": 1, "max": "1"},
    {"id": "Observation.component:systolic.code", "path": "Observation.component.code",
     "patternCodeableConcept": {"coding": [{"system": "http://loinc.org", "code": "8480-6"}]}},
    {"id": "Observation.component:diastolic", "path": "Observation.component", "sliceName": "diastolic", "min": 1, "max": "1"},
    {"id": "Observation.component:diastolic.code", "path": "Observation.component.code",
     "patternCodeableConcept": {"coding": [{"system": "http://loinc.org", "code": "8462-4"}]}}
  ]}
}

Profile 很少手动编写;作者使用 FHIR Shorthand (FSH) 和 SUSHI,或 Forge 和 Simplifier 等工具,并通过 HL7 IG Publisher 发布。指南以包 (packages) 的形式分发(hl7.fhir.us.core#6.1.0, hl7.fhir.uv.ips#1.1.0),验证器和服务器会加载这些包。

Extensions

Extension 是一个键值对元素,放在 extension(或 modifierExtension,当它改变资源含义且不应被忽略时)。其 url 是其 StructureDefinition 的规范 URL;其值是一个类型化的 value[x],或嵌套的 extensions。出生地是 Patient 上的一个 HL7 定义的 extension:

{
  "resourceType": "Patient",
  "id": "example",
  "extension": [{
    "url": "http://hl7.org/fhir/StructureDefinition/patient-birthPlace",
    "valueAddress": {"city": "Lyon", "country": "FR"}
  }],
  "name": [{"family": "Doe", "given": ["Jane"]}]
}

良好实践规则:在定义新 extension 之前,先查找现有的 extension(HL7 的注册表和国家指南);给它一个你控制的域下的 URL;在 StructureDefinition 中定义它,以便他人可以验证它;切勿为基础元素已涵盖的内容使用 extension。

meta.profile 和验证

meta.profile 是 FHIR 资源声称符合的一系列规范 URL,声称不等于证明。验证器会根据基本规范和每个声称的配置文件来检查资源,或者根据您命名的配置文件来检查。HL7 参考验证器使用包在本地运行,FHIR 服务器公开接受配置文件参数的 $validate 操作。

meta.profile 列出了资源声称符合的规范 URL。声称不等于证明:验证器会根据基础规范和声称的每个 profile(或你要求它使用的 profile)来检查资源。HL7 参考验证器 (validator_cli.jar) 在本地运行并加载包;服务器提供 POST /Observation/$validate?profile=…;IG Publisher 会验证指南中的所有示例。一个资源可以同时符合多个 profile(例如,国家 Patient profile 和 IPS Patient profile),只要它们不冲突。

两条实用规则:声明了 CapabilityStatement 中某个 profile 的服务器应拒绝不符合该 profile 的资源;接收资源的客户端不应拒绝未知 extension 或 profile 未禁止的额外元素,因为基础规范允许它们。

在 Anpheros 中

Anpheros Platform 是一个 FHIR R4 服务器,它使用 LOINC 进行观察,使用 ATC 进行药物,并在适用时使用 SNOMED CT,并提供一个免费验证器,用于根据 FHIR R4 检查资源的结构。当诊所发送带有 meta.profile 设置为国家或 IPS 配置文件的资源时,该声明会得到保留,以便下游系统可以对其进行验证。

免费验证器位于开发者网站上:免费验证器。有关指南本身,请参阅 FHIR 实现指南详解。

相关页面

来源

常见问题

Profile 可以为资源添加新元素吗?

不可以。Profile 只能约束。新数据应放在 extension 中,然后 profile 可以像其他元素一样要求或禁止它。

must-support 实际要求什么?

Implementation guide 会定义它;通常意味着发送方在拥有数据时会填充该元素,接收方会存储并能够显示它。它并不使该元素成为强制性的。

如果资源没有 meta.profile,它是否无效?

不。meta.profile 是一个声称,而不是一个要求。服务器或指南可能要求它;基础规范则不要求。可以要求验证器根据资源未声明的 profile 进行检查。

我如何知道在我的国家应该使用哪个 profile?

每个国家的 FHIR 社区都会发布一个核心指南(US Core、UK Core、nl-core、德国 Basisprofile 等);implementation guides 页面解释了如何找到它们。跨境摘要使用 IPS。

Anpheros Platform

在沙盒中免费试用

5 分钟完成第一次 FHIR 调用. 一个内置患者授权的 HL7 FHIR R4 API:先在沙盒中试用,然后连接您自己的应用或诊所系统。

免费 · 30 位合成患者 · 无需信用卡

本指南仅供参考,不能替代医生诊疗。涉及健康的决定请咨询医生。紧急情况下,请拨打当地急救电话(欧洲为 112)。
撰写人
Anpheros 团队

Anpheros 致力于打造一个由患者掌控的医疗记录,并可在欧盟的 HL7 FHIR R4 平台上与任何诊所共享。这些指南旨在帮助您理解和整理您的健康信息,但不能替代您的医生。

关于 Anpheros →