FHIR 扩展程序

本页面介绍了 Cloud Healthcare API 如何支持 FHIR 扩展程序

概览

FHIR 允许使用用户定义的、资源和数据类型的扩展程序。Cloud Healthcare API 支持存储和检索这些扩展程序。

扩展程序值

扩展程序元素是键值对。存储在 url 字段的密钥表示扩展程序定义(指定扩展程序的内容和含义)的规范网址。value 字段是选择元素,可以包含许多不同的 FHIR 数据类型。

此机制在所有 FHIR 版本中都是相同的,但早期版本可用的数据类型较少。您可以在 FHIR 标准(DSTU2STU3R4)中查找扩展程序可用的数据类型。

以下示例显示了在根元素上具有两个扩展程序(头发颜色和公民身份)的 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 资源,该扩展程序包含子扩展程序 codeperiod

{
  "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 会存储和检索修饰符扩展程序,但不会尝试解释其含义。如果应用遇到无法识别的修饰符扩展程序,建议应用采取适当操作,比如显示警告或完全拒绝该资源。 实现人员应尽可能避免使用修饰符扩展程序。