FHIR-Erweiterungen

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

Überblick

FHIR erlaubt 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, für das 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 einzelnes Wertfeld haben. Wenn Sie eine Erweiterung definieren möchten, die ein Array von Werten enthält, müssen Sie mehrere Erweiterungselemente mit derselben 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 Name url 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, die eine komplexe patient-citizenship-Erweiterung mit den untergeordneten Erweiterungen code und period enthält:

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

Einfache Datentypen in FHIR können auch 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 beim zweiten Wert von name.given, aber ohne Erweiterung beim 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

Zum Zweck der Interoperabilität können der Name und die 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 optional, wenn Sie Erweiterungen in der Cloud Healthcare API verwenden.

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 mithilfe von Tools zum Erstellen von FHIR-Profilen definiert.

Modifikatorerweiterungen

Modifikatorerweiterungen ähneln Erweiterungen, werden jedoch im modifierExtension-Feld 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.