FHIR-Erweiterungen

Auf dieser Seite wird erläutert, wie die Cloud Healthcare API FHIR-Erweiterungen unterstützt.

Überblick

FHIR ermöglicht benutzerdefinierte Erweiterungen für Ressourcen und Datentypen. Die Cloud Healthcare API unterstützt das Speichern und Abrufen dieser Erweiterungen.

Erweiterungswerte

Ein Erweiterungselement ist ein Schlüssel/Wert-Paar. Der im Feld url gespeicherte Schlüssel gibt die kanonische URL einer Erweiterungsdefinition an, die den Inhalt und die Bedeutung der Erweiterung definiert. Das Feld value ist ein Auswahlelement, das viele verschiedene FHIR-Datentypen enthalten kann.

Dieser Mechanismus ist in allen FHIR-Versionen gleich, außer dass frühere Versionen weniger verfügbare Datentypen haben. Die verfügbaren Datentypen für Erweiterungen finden Sie im FHIR-Standard (DSTU2, STU3, R4).

Das folgende Beispiel zeigt eine Patient-Ressource mit zwei Erweiterungen, Haarfarbe und Staatsangehörigkeit, im Stammelement:

{
  "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"
        }]
      }
    }
  ]
}

Komplexe Datentypen und Elemente mit untergeordneten Feldern können ebenfalls Erweiterungen haben. Beispielsweise enthält Patient eine Erweiterung für das identifier-Feld, die ein komplexer Datentyp ist, und eine Erweiterung für das communication-Feld, die andere untergeordnete Felder enthält:

{
  "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
        }
      ]
    }
  ]
}

Jedes Erweiterungselement kann nur ein einziges Wertfeld haben. Wenn Sie eine Erweiterung mit einem Array von Werten definieren möchten, müssen Sie mehrere Erweiterungselemente mit demselben url definieren.

Für folgende Ressourcentypen können Sie Erweiterungen für das Stammelement nicht definieren:

  • Binary
  • Bundle
  • Parameters

Komplexe Erweiterungen

Erweiterungen können Erweiterungen enthalten, um eine verschachtelte Struktur zu definieren. Der url-Name der untergeordneten Erweiterung ist relativ zur äußeren Erweiterung. Jedes Erweiterungselement muss entweder ein Wertelement oder eine verschachtelte untergeordnete Erweiterung haben, aber nicht beides.

Das folgende Beispiel zeigt eine Patient-Ressource mit einer komplexen patient-citizenship-Erweiterung mit den untergeordneten Erweiterungen code und 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"
          }
        }
      ]
      }
  ]
}

Erweiterungen für primitive Typen

Primäre Datentypen in FHIR können ebenfalls Erweiterungen haben. Im JSON-Format werden die Erweiterungen in einem zusätzlichen JSON-Attribut mit _ dargestellt, mit dem Namen des einfachen Elements vorangestellt, wie in der FHIR-JSON-Darstellung beschrieben.

Das folgende Beispiel im JSON-Format zeigt eine Patient-Ressource mit einer Erweiterung im birthDate-Feld:

{
  "resourceType": "Patient",
  "active": true,
  "gender": "male",
  "birthDate": "1970-01-01",
  "_birthDate": {
    "extension": [
      {
        "url": "http://example.com/fhir/StructureDefinition/date-type",
        "valueString": "A"
      }
    ]
  }
}

Wenn das einfache Element wiederholt wird, wird das Attribut mit _ auch als Array behandelt. Dabei werden Nullwerte verwendet, um Erweiterungswerte den entsprechenden einfachen Elementen zuzuordnen.

Das folgende Beispiel zeigt eine Patient-Ressource mit einer Erweiterung für den zweiten Wert von name.given, aber ohne Erweiterung für den ersten Wert:

{
  "resourceType": "Patient",
  "name": {
    "given": [
      "ABC",
      "DEF"
    ],
    "_given": [
      null,
      {
        "extension": [
          {
            "url": "http://hl7.org/fhir/StructureDefinition/display",
            "valueString": "XYZ"
          }
        ]
      }
    ]
  }
}

Erweiterung mit einer StructureDefinition definieren

Für die Interoperabilität können Name und Bedeutung einer Erweiterung mit einer StructureDefinition-Ressource definiert werden, die veröffentlicht oder verteilt werden kann, damit Nutzer der Daten sie interpretieren können. Dies ist bei der Verwendung von Erweiterungen in der Cloud Healthcare API optional.

Die Identität dieser Definition wird durch die kanonische URL im Feld „url“ angegeben. Für Daten, die zwischen Organisationen ausgetauscht werden, wird empfohlen, eine URL zu verwenden, mit der Datennutzer die StructureDefinition abrufen können. Die Cloud Healthcare API validiert diese URL nicht und versucht auch nicht, sie zu beheben.

Der Inhalt einer StructureDefinition-Ressource kann komplex sein und wird häufig mit Tools zum Erstellen von FHIR-Profilen definiert.

Modifikatorerweiterungen

Modifikatorerweiterungen ähneln Erweiterungen, werden jedoch im Feld modifierExtension gespeichert. Modifikatorerweiterungen sind zusätzliche Daten, die nicht ignoriert werden können, da sie die Interpretation des Elements, das sie enthält, ungültig machen könnte.

Modifikatorerweiterungen könnten beispielsweise angeben, dass ein Patient nicht die angegebene Erkrankung hat oder dass ein Medikament nicht verschrieben werden darf.

Die Cloud Healthcare API speichert und ruft Modifikatorerweiterungen ab, versucht jedoch nicht, deren Bedeutung zu interpretieren. Anwendungen sollten beim Auftreten unverständlicher Modifikatorerweiterungen entsprechende Maßnahmen ergreifen. Es kann beispielsweise eine Warnung angezeigt werden, oder die Ressource kann vollständig abgelehnt werden. Nach Möglichkeit sollten Modifikatorenerweiterungen vermieden werden.