简短回答: 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 实现指南详解。
相关页面
- FHIR implementation guides 详解
- FHIR 中的 CodeableConcept 和 Coding
- FHIR Observation 详解
- FHIR Patient 资源详解
- 术语服务器详解
- FHIR 验证器 (开发者网站)
来源
- HL7 FHIR R4: Profiling FHIR
- HL7 FHIR R4: Extensibility
- HL7 FHIR R4: StructureDefinition
- HL7 FHIR R4: Terminology bindings
- HL7 FHIR Shorthand
- HL7 FHIR validator
- HL7 FHIR R4: patient-birthPlace extension
常见问题
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。
在沙盒中免费试用
5 分钟完成第一次 FHIR 调用. 一个内置患者授权的 HL7 FHIR R4 API:先在沙盒中试用,然后连接您自己的应用或诊所系统。
免费 · 30 位合成患者 · 无需信用卡

