本页面介绍了 Cloud Healthcare API 如何支持 FHIR 扩展程序。
概览
FHIR 允许使用用户定义的、资源和数据类型的扩展程序。Cloud Healthcare API 支持存储和检索这些扩展程序。
扩展程序值
扩展程序元素是键值对。存储在 url
字段的密钥表示扩展程序定义(指定扩展程序的内容和含义)的规范网址。value
字段是选择元素,可以包含许多不同的 FHIR 数据类型。
此机制在所有 FHIR 版本中都是相同的,但早期版本可用的数据类型较少。您可以在 FHIR 标准(DSTU2、STU3、R4)中查找扩展程序可用的数据类型。
以下示例显示了在根元素上具有两个扩展程序(头发颜色和公民身份)的 Patient
资源:
{
"resourceType": "Patient",
"active": true,
"gender": "male",
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/hair-color",
"valueString": "brown"
},
{
"url": "http://example.com/fhir/StructureDefinition/patient-citizenship",
"valueCodeableConcept": {
"coding" : [{
"system" : "urn:iso:std:iso:3166",
"code" : "US"
}]
}
}
]
}
复杂的数据类型和带有子字段的元素也可以包含扩展程序;例如,以下 Patient
包含 identifier
字段上的扩展程序(该字段是复杂的数据类型)和 communication
字段上的扩展程序(该字段包含其他子字段):
{
"resourceType": "Patient",
"active": true,
"gender": "male",
"identifier": [
"system": "MRN",
"value": "AB1234",
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/last-verified",
"valueDateTime": "2021-01-01T00:00:00Z"
}
]
],
"communication": [
{
"language": {
"coding": [{
"system": "urn:iso:std:iso:639",
"code": "EN"
}]
},
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/fluency-level",
"valueInteger": 7
}
]
}
]
}
每个扩展程序元素只能有一个值字段。要定义包含值数组的扩展程序,您必须使用相同的 url
定义多个扩展程序元素。
您无法为以下资源类型定义根元素上的扩展程序:
Binary
Bundle
Parameters
复杂扩展程序
扩展程序可以包含其他扩展程序,形成嵌套结构。子扩展程序的 url
名称与外层扩展程序相关。每个扩展程序元素都必须包含一个值元素或一个嵌套子扩展程序,但不能同时包含这两者。
以下示例展示了包含复杂的 patient-citizenship
扩展程序的 Patient
资源,该扩展程序包含子扩展程序 code
和 period
:
{
"resourceType": "Patient",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/patient-citizenship",
"extension": [
{
"url": "code",
"valueCodeableConcept": {
"coding": [{
"system": "urn:iso:std:iso:3166",
"code": "CA"
}]
}
},
{
"url": "period",
"valuePeriod": {
"start": "2010-01-01"
}
}
]
}
]
}
基元类型的扩展程序
FHIR 中的基元数据类型也可以具有扩展程序。当以 JSON 格式表示时,扩展程序表示为附加 JSON 属性,并在基元元素名称的前面附加 _
,如 FHIR JSON 表示法中所定义的那样。
以下 JSON 格式的示例显示包含 birthDate
字段上的扩展程序的 Patient
资源:
{
"resourceType": "Patient",
"active": true,
"gender": "male",
"birthDate": "1970-01-01",
"_birthDate": {
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/date-type",
"valueString": "A"
}
]
}
}
如果基元元素重复,则包含 _
的属性也会当作数组进行处理,其中 null 值用于将扩展程序值与其对应的基元对齐。
以下示例显示了一个 Patient
资源,其在 name.given
的第二个值上有一个扩展程序,但在第一个值上没有扩展程序:
{
"resourceType": "Patient",
"name": {
"given": [
"ABC",
"DEF"
],
"_given": [
null,
{
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/display",
"valueString": "XYZ"
}
]
}
]
}
}
使用 StructureDefinition
定义扩展程序
为实现互操作性,可以使用 StructureDefinition
资源定义扩展程序的名称和含义。您可以发布或分发该资源,以便数据使用者解释数据。在 Cloud Healthcare API 中使用扩展程序时,这是可选操作。
此定义的身份由“网址”字段中的规范网址表示。对于在组织之间交换的任何数据,建议使用数据使用者可以追随的网址以获取 StructureDefinition
。Cloud Healthcare API 不会验证此网址,也不会尝试解析此网址。
StructureDefinition
资源的内容可能很复杂,并且通常由 FHIR 配置文件修改工具指定。
修饰符扩展程序
修饰符扩展程序与扩展程序类似,但存储在 modifierExtension
字段中。修饰符扩展程序是不能忽略的附加数据,因为它可能会使对包含该扩展程序的元素的解释失效。
例如,修饰符扩展程序可能表示患者没有指定症状,或者不得开某种药品。
Cloud Healthcare API 会存储和检索修饰符扩展程序,但不会尝试解释其含义。如果应用遇到无法识别的修饰符扩展程序,建议应用采取适当操作,比如显示警告或完全拒绝该资源。 实现人员应尽可能避免使用修饰符扩展程序。