FHIR-Profile konfigurieren

FHIR-Implementierungsleitfäden und -profile sorgen dafür, dass Ressourcen in einem FHIR-Speicher bestimmten definierten Kriterien entsprechen. Beispiele für Implementierungsleitfäden sind der US Core Implementation Guide 4.0.0 und der Carin Blue Button Implementation Guide.

Auf dieser Seite wird erläutert, wie Sie Implementierungsleitfäden und -profile in R4-FHIR-Speichern mit dem US Core Implementation Guide 4.0.0 definieren, konfigurieren und verwenden.

Überblick

FHIR-Profile sind eine Reihe zusätzlicher Regeln, die auf der Basis der FHIR-Spezifikation definiert sind, um die Verarbeitung von Ressourcen durch verschiedene Gesundheitssysteme zu verarbeiten. Sie können FHIR-Profile in einen FHIR-Speicher importieren und dort aktivieren, um sicherzustellen, dass alle Ressourcen in einem FHIR-Speicher bestimmte Kriterien in Sachen Ressourcenstruktur und erfasster Informationen erfüllen.

Strukturdefinitionen und Implementierungsleitfäden

Sie können FHIR-Profile für Ihren FHIR-Speicher importieren, indem Sie eine oder mehrere Strukturdefinitionen zusammengefasst in einen oder mehrere Implementierungsleitfäden einfügen. Mit einer Strukturdefinition können Sie Folgendes tun:

  • Definieren Sie die Einschränkung für ein Feld in einer FHIR-Ressource.
  • Wertsätze referieren, die Codesysteme und FHIR-Ressourcen verknüpfen.

Implementierungsleitfäden mit Strukturdefinitionen dienen dazu, Ressourcen zu validieren, damit sie mit dem Anwendungsfall Ihrer Drittanbieter-Software übereinstimmen.

Angenommen, Ihre Drittanbieter-Software muss die CMS (Centers for Medicare & Medicaid Services) Interoperability and Patient Access Final Rule in den USA erfüllen. Ihre Drittanbieter-Software müsste eine Patient Access API bereitstellen, die den CARIN-Profilen entspricht. Sie können den CARIN-Implementierungsleitfaden in Ihren FHIR-Speicher importieren und aktivieren, um die Ressourcen anhand der CARIN-Profile zu validieren. Leitfäden zum Importieren und Aktivieren finden Sie in den nachfolgenden Abschnitten auf dieser Seite.

Nachdem Sie den Implementierungsleitfaden importiert haben, können Sie ihn in Ihrem FHIR-Speicher für die Validierung der FHIR-Ressourcen aktivieren. Wenn eine FHIR-Ressource aktualisiert oder dem Speicher hinzugefügt wird, prüft die Cloud Healthcare API, ob sie mit einer Strukturdefinition im Implementierungsleitfaden übereinstimmt. Wenn die FHIR-Ressource übereinstimmt, wird sie dem Speicher hinzugefügt. Wenn die FHIR-Ressource nicht den Strukturdefinitionen im Implementierungsleitfaden entspricht, wird eine Fehlermeldung zurückgegeben und die FHIR-Ressource wird abgelehnt.

Erzwingung der Datenvalidierung

Die Cloud Healthcare API erzwingt die Datenvalidierung, wenn folgende Methoden verwendet werden:

Workflow zur Profilvalidierung

Das folgende Diagramm zeigt den Validierungsworkflow zum Hinzufügen oder Aktualisieren von FHIR-Ressourcen:

fhir-Profile

FHIR-Profile definieren

In den folgenden Abschnitten wird beschrieben, wie Sie Strukturdefinitionen aus Ihrer Drittanbieter-Software herunterladen und einen Implementierungsleitfaden konfigurieren.

Ressourcen zur Profilbestätigung herunterladen

Damit Ihre Strukturdefinitionen mit der autoritativen Quelle übereinstimmen, müssen Sie die Ressourcen zur Profilvalidierung, z. B. Strukturdefinitionen, Implementierungsleitfäden oder Wertsätze, von einer externen Quelle herunterladen, z. B. der Implementation Guide Registry von FHIR.org. Externe Quellen enthalten ein Paket, das alle Wertesätze, Profile, Erweiterungen, eine Liste mit Seiten und URLs für jeden Implementierungsleitfaden enthält.

Wenn Ihr System beispielsweise das Patientenprofil US Core verwendet, können Sie die von US Core verwendeten Strukturdefinitionen und den Implementierungsleitfaden herunterladen.

Die Cloud Healthcare API ermöglicht die Validierung der folgenden Arten von Strukturdefinitionsregeln:

  • slicing, mit Unterstützung der folgenden Discriminatoren:
    • value
    • pattern
    • profile
  • min/max
  • type
  • fixed
  • pattern
  • minValue
  • maxValue
  • maxLength
  • binding, mit Ausnahme der folgenden Regeln:
    • ValueSet.compose.include.filter
    • ValueSet.compose.exclude

Implementierungsleitfaden konfigurieren

Nachdem Sie die Strukturdefinitionen, den Implementierungsleitfaden und den Wertsatz heruntergeladen haben, müssen Sie die Profile hinzufügen, die der Implementierungsleitfaden zum Prüfen von FHIR-Ressourcen nutzt.

So konfigurieren Sie den Implementierungsleitfaden:

  1. Öffnen Sie die Datei mit dem Implementierungsleitfadens, die Sie von Ihrem Softwareanbieter heruntergeladen haben.

  2. Fügen Sie den folgenden Abschnitt hinzu, um die Strukturdefinitionen anzugeben, die Sie in Ihrem Implementierungsleitfaden validieren möchten:

    {
        "resourceType": "ImplementationGuide",
        ...
        "global": [
            {
            "type": "RESOURCE_TYPE",
            "profile": "STRUCTURE_DEFINITION_URL"
            }
        ]
        ...
    }

    Dabei gilt:

    • RESOURCE_TYPE definiert den Ressourcentyp, auf den der Implementierungsleitfaden angewendet wird.
    • STRUCTURE_DEFINITION_URL ist die URL zur Definition der Quellstruktur des Profils, z. B. das US Core-Patientenprofil.
  3. Speichern Sie die Datei mit dem Implementierungsleitfaden.

    Das folgende Beispiel zeigt die Patienten- und Organisationsprofile, die für den US Core-Implementierungsleitfaden aktiviert sind:

    "global":[
      {
        "type":"Patient",
        "profile":"https://hl7.org/fhir/us/core/StructureDefinition/us-core-patient"
      },
      {
        "type":"Organization",
        "profile":"https://hl7.org/fhir/us/core/StructureDefinition/us-core-organization"
      },
      ...
    ]
    

Implementierungsleitfaden in Cloud Storage hochladen

Nachdem Sie Ihren Implementierungsleitfaden bearbeitet haben, müssen Sie folgende Dateien in Cloud Storage hochladen:

  • Implementierungsleitfaden
  • Gebäudedefinitionen
  • Wertesätze

Nach dem Hochladen können Sie diese Dateien verwenden, um Ressourcen in Ihrem FHIR-Speicher zu validieren.

So laden Sie Ihren Implementierungsleitfaden in Cloud Storage hoch:

  1. Löschen Sie alle Dateien aus dem Implementierungsleitfaden, die nicht von FHIR-Profilen in der Cloud Healthcare API verwendet werden.

    Wenn Sie beispielsweise den US Core-Implementierungsleitfaden implementieren, können Sie die folgenden Dateien löschen:

    • .DS_Store
    • ig-r4.json
    • openapi/.index.json
    • package.json
  2. Führen Sie die folgenden Befehle aus, um den Implementierungsleitfaden, Strukturdefinitionen und Wertsätze in Cloud Storage hinzuzufügen:

    gcloud storage cp \
       PATH_TO_IMPLEMENTATION_GUIDE \
       gs://BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY \
       --recursive

    Dabei gilt:

    • PATH_TO_IMPLEMENTATION_GUIDE ist der Pfad zum Implementierungsleitfaden auf Ihrem lokalen Computer
    • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY ist der Bucket und das Verzeichnis, in dem Sie den Implementierungsleitfaden in Cloud Storage speichern

Implementierungsleitfaden importieren

Wenn Sie den Implementierungsleitfaden verwenden möchten, um Profile in Ihrem FHIR-Speicher zu validieren, importieren Sie ihn als FHIR-Ressource in Ihren FHIR-Speicher.

Folgende Beispiele zeigen, wie Sie den Implementierungsleitfaden in einen FHIR-Speicher importieren:

gcloud

Führen Sie den gcloud healthcare fhir-stores import gcs-Befehl aus, um Ihren Implementierungsleitfaden als Ressource einem FHIR-Speicher hinzuzufügen:

gcloud healthcare fhir-stores import gcs FHIR_STORE_ID \
  --dataset=DATASET_ID \
  --gcs-uri='gs://BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY/*' \
  --content-structure=resource-pretty

Dabei gilt:

  • FHIR_STORE_ID ist die FHIR-Speicher-ID
  • DATASET_ID: Die Dataset-ID
  • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY ist der Speicherort des Implementierungsleitfadens in einem Cloud Storage-Bucket

Die Ausgabe sieht so aus:

Request issued for: [FHIR_STORE_ID]
Waiting for operation [OPERATION_ID] to complete...done.
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID

In dieser Ausgabe gilt:

  • PROJECT_ID, LOCATION, DATASET_ID sind die Werte, die Sie im Methodenaufruf angegeben haben
  • OPERATION_ID ist eine Kennung für den lang andauernden Vorgang, von der Cloud Healthcare API bereitgestellt

Führen Sie den Befehl gcloud healthcare operations describe aus und geben Sie OPERATION_ID aus der Antwort an, um weitere Details des Vorgangs anzuzeigen:

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

Die Ausgabe sieht so aus: Wenn die Antwort done: true enthält, ist der Vorgang abgeschlossen. Ist dies nicht der Fall, wird der Vorgang noch ausgeführt. Warten Sie einige Sekunden und rufen Sie dann den Befehl gcloud healthcare operations describe noch einmal auf.

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata
  apiMethodName: google.cloud.healthcare.v1.fhir.FhirService.ImportResources
  createTime: 'CREATE_TIME'
  endTime: 'END_TIME'
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID
response:
  '@type': type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ImportResourcesResponse
  fhirStore: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID

API

curl

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data '{
      "contentStructure": "RESOURCE_PRETTY",
      "gcsSource": {
        "uri": "gs://BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY/*"
      }
    }' "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:import"

Dabei gilt:

  • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY ist der Speicherort des Implementierungsleitfadens in einem Cloud Storage-Bucket
  • PROJECT_ID ist die ID Ihres Google Cloud-Projekts
  • LOCATION ist der Standort des Datasets
  • DATASET_ID ist die Dataset-ID
  • FHIR_STORE_ID ist die FHIR-Speicher-ID

Die Antwort lautet:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

In dieser Ausgabe gilt:

  • PROJECT_ID, LOCATION, DATASET_ID sind die Werte, die Sie im Methodenaufruf angegeben haben
  • OPERATION_ID ist eine Kennung für den lang andauernden Vorgang, von der Cloud Healthcare API bereitgestellt

Mit der Methode operations.get können Sie den Status des Vorgangs verfolgen:

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

Dabei gilt:

  • PROJECT_ID ist die ID Ihres Google Cloud-Projekts
  • LOCATION ist der Standort des Datasets
  • DATASET_ID ist die Dataset-ID
  • FHIR_STORE_ID ist die FHIR-Speicher-ID
  • OPERATION_ID ist die ID, die vom lang andauernden Vorgang zurückgegeben wurde

Die Ausgabe sieht so aus: Wenn die Antwort "done": true enthält, ist der Vorgang abgeschlossen. Ist dies nicht der Fall, wird der Vorgang noch ausgeführt. Warten Sie einige Sekunden und rufen Sie dann die Methode operations.get noch einmal auf.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.fhir.FhirService.ImportResources",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL",
    "counter": {
      "success": "SUCCESS_COUNT"
    }
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ImportResourcesResponse",
  }
}

PowerShell

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body '{
    "contentStructure": "RESOURCE_PRETTY",
    "gcsSource": {
      "uri": "gs://BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY/*"
    }
  }' `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:import" | Select-Object -Expand Content

Dabei gilt:

  • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY ist der Speicherort des Implementierungsleitfadens in einem Cloud Storage-Bucket
  • PROJECT_ID ist die ID Ihres Google Cloud-Projekts
  • LOCATION ist der Standort des Datasets
  • DATASET_ID ist die Dataset-ID
  • FHIR_STORE_ID ist die FHIR-Speicher-ID

Die Antwort lautet:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

In dieser Ausgabe gilt:

  • PROJECT_ID, LOCATION, DATASET_ID sind die Werte, die Sie im Methodenaufruf angegeben haben
  • OPERATION_ID ist eine Kennung für den lang andauernden Vorgang, von der Cloud Healthcare API bereitgestellt

Mit der Methode operations.get können Sie den Status des Vorgangs verfolgen:

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

Dabei gilt:

  • PROJECT_ID ist die ID Ihres Google Cloud-Projekts
  • LOCATION ist der Standort des Datasets
  • DATASET_ID ist die Dataset-ID
  • FHIR_STORE_ID ist die FHIR-Speicher-ID
  • OPERATION_ID ist die ID, die vom lang andauernden Vorgang zurückgegeben wurde

Die Ausgabe sieht so aus: Wenn die Antwort "done": true enthält, ist der Vorgang abgeschlossen. Ist dies nicht der Fall, wird der Vorgang noch ausgeführt. Warten Sie einige Sekunden und rufen Sie dann die Methode operations.get noch einmal auf.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.fhir.FhirService.ImportResources",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL",
    "counter": {
      "success": "SUCCESS_COUNT"
    }
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ImportResourcesResponse",
  }
}

Abhängigkeiten der Implementierung hochladen und importieren

Bevor Sie den Implementierungsleitfaden aktivieren können, müssen Sie prüfen, ob alle Abhängigkeiten des Leitfadens hochgeladen und importiert wurden. Abhängigkeiten werden durch den Parameter dependsOn im Implementierungsleitfaden so definiert:

"dependsOn":[
  {
    "id":"hl7_fhir_uv_bulkdata",
    "uri":"http://hl7.org/fhir/uv/bulkdata/ImplementationGuide/hl7.fhir.uv.bulkdata",
    "packageId":"hl7.fhir.uv.bulkdata",
    "version":"1.0.1"
  },
  {
    "id":"vsac",
    "uri":"http://fhir.org/packages/us.nlm.vsac/ImplementationGuide/us.nlm.vsac",
    "packageId":"us.nlm.vsac",
    "version":"0.3.0"
  }
]

Folgen Sie der Anleitung unter Implementierungsleitfaden in Cloud Storage hochladen bzw. Implementierungsleitfaden importieren, um Abhängigkeiten hochzuladen und zu importieren.

Implementierungsleitfaden aktivieren

Wenn Sie eine Implementierungsleitfadenressource zum Validieren von Profilen verwenden möchten, müssen Sie den Implementierungsleitfaden aktivieren. Wenn Sie mehrere Implementierungsleitfäden aktivieren, versucht die Cloud Healthcare API, Profile anhand aller Implementierungsleitfäden zu validieren. Eine FHIR-Ressource muss nur einem Profil aus einem der aktivierten Implementierungsleitfäden entsprechen.

Die Cloud Healthcare API validiert Implementierungsleitfäden nur, wenn Sie sie aktivieren. Wenn Sie einen Implementierungsleitfaden ändern und wieder aktivieren, validiert die Cloud Healthcare API den geänderten Implementierungsleitfaden.

Wenn Sie einen Implementierungsleitfaden entfernen, nachdem er aktiviert wurde, ist der Implementierungsleitfaden nicht mehr wirksam.

In folgenden Beispielen wird gezeigt, wie Sie Ihren Implementierungsleitfaden zur Profilvalidierung für einen vorhandenen FHIR-Speicher aktivieren:

curl

Stellen Sie zum Aktivieren des Implementierungsleitfadens eine PATCH-Anfrage und geben Sie folgenden Informationen an:

  • Name und Speicherort des übergeordneten Datasets
  • Der Name des FHIR-Speichers
  • Das enabledImplementationGuides-Feld, das auf den Pfad zu Ihrer Ressource für den Implementierungsleitfaden festgelegt ist

Das folgende Beispiel zeigt eine PATCH-Anfrage mit curl.

curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/fhir+json; charset=utf-8" \
    --data '{
      "validationConfig": {
          "enabledImplementationGuides": ["IMPLEMENTATION_GUIDE_URL"],
          "disableProfileValidation": false
      }
    }' "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?updateMask=validationConfig"

Ersetzen Sie Folgendes:

  • IMPLEMENTATION_GUIDE_URL: die URL, die im Attribut url der ImplementationGuide-Ressource definiert ist, z. B. http://hl7.org/fhir/us/core/ImplementationGuide/hl7.fhir.us.core
  • PROJECT_ID ist die ID Ihres Google Cloud-Projekts
  • LOCATION ist der Standort des Datasets
  • DATASET_ID ist die Dataset-ID
  • FHIR_STORE_ID ist die FHIR-Speicher-ID

Die Antwort lautet:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID",
  "validationConfig": {
    "enabledImplementationGuides": ["IMPLEMENTATION_GUIDE_URL"]
  }
}

PowerShell

Stellen Sie zum Aktivieren des Implementierungsleitfadens eine PATCH-Anfrage und geben Sie folgenden Informationen an:

  • Name und Speicherort des übergeordneten Datasets
  • Der Name des FHIR-Speichers
  • Das enabledImplementationGuides-Feld, das auf den Pfad zu Ihrer Ressource für den Implementierungsleitfaden festgelegt ist

Das folgende Beispiel zeigt eine PATCH-Anfrage mit Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Patch `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body '{
      "validationConfig": {
          "enabledImplementationGuides": ["IMPLEMENTATION_GUIDE_URL"]
      }
  }' `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?updateMask=validationConfig" | Select-Object -Expand Content

Ersetzen Sie Folgendes:

  • IMPLEMENTATION_GUIDE_URL: die URL, die im Attribut url der ImplementationGuide-Ressource definiert ist, z. B. http://hl7.org/fhir/us/core/ImplementationGuide/hl7.fhir.us.core
  • PROJECT_ID ist die ID Ihres Google Cloud-Projekts
  • LOCATION ist der Standort des Datasets
  • DATASET_ID ist die Dataset-ID
  • FHIR_STORE_ID ist die FHIR-Speicher-ID

Die Antwort lautet:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID",
  "validationConfig": {
    "enabledImplementationGuides": ["IMPLEMENTATION_GUIDE_URL"],
  },
}

Python

def enable_implementation_guide(
    project_id,
    location,
    dataset_id,
    fhir_store_id,
    implementation_guide_url,
):
    """
    Patches an existing FHIR store to enable an ImplementationGuide resource
    that exists in the FHIR store.

    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir
    before running the sample."""
    # Imports the Google API Discovery Service.
    from googleapiclient import discovery

    api_version = "v1"
    service_name = "healthcare"
    # Instantiates an authorized API client by discovering the Healthcare API
    # and using GOOGLE_APPLICATION_CREDENTIALS environment variable.
    client = discovery.build(service_name, api_version)

    # TODO(developer): Uncomment these lines and replace with your values.
    # project_id = 'my-project'  # replace with your GCP project ID
    # location = 'us-central1'  # replace with the dataset's location
    # dataset_id = 'my-dataset'  # replace with your dataset ID
    # fhir_store_id = 'my-fhir-store'  # replace with the FHIR store's ID
    # implementation_guide_url =
    # 'http://hl7.org/fhir/us/core/ImplementationGuide/hl7.fhir.us.core'  #
    # replace with the 'url' property in the ImplementationGuide resource
    fhir_store_parent = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    fhir_store_name = f"{fhir_store_parent}/fhirStores/{fhir_store_id}"

    validation_config = {
        "validationConfig": {"enabledImplementationGuides": [implementation_guide_url]}
    }

    request = (
        client.projects()
        .locations()
        .datasets()
        .fhirStores()
        .patch(
            name=fhir_store_name, updateMask="validationConfig", body=validation_config
        )
    )

    response = request.execute()
    print(
        "Enabled ImplementationGuide with URL {} on FHIR store {}".format(
            implementation_guide_url, fhir_store_id
        )
    )

    return response

Implementierungsleitfäden in der Google Cloud Console aktivieren

Wenn Sie in der Google Cloud Console einen FHIR-Speicher erstellen oder bearbeiten, haben Sie folgende Möglichkeiten:

  • Wählen Sie die Standardimplementierungsleitfäden aus, die von der Cloud Healthcare API bereitgestellt werden.
  • Benutzerdefinierten Implementierungsleitfaden aus Cloud Storage in Ihren FHIR-Speicher importieren

So importieren Sie einen benutzerdefinierten Implementierungsleitfaden:

  1. Ressourcen zur Profilbestätigung herunterladen

  2. Optional: Konfigurieren Sie den Implementierungsleitfaden.

    Dieser Schritt ist erforderlich, um der Ressource des Implementierungsleitfadens das global-Array manuell hinzuzufügen. Wenn Sie diesen Schritt überspringen, müssen Sie das global-Array hinzufügen, wenn Sie im nächsten Schritt das FHIR-Transaktions-Bundle mit einer anderen Methode erstellen, z. B. mit dem Tool Bundler for FHIR profile validation resources (Bundler für Ressourcen zur Validierung von FHIR-Profilen) und dem Flag generate_global_array.

  3. Erstellen Sie ein FHIR-Transaktions-Bundle mit Ihren Ressourcen zur Profilvalidierung, das den Implementierungsleitfaden, die Strukturdefinitionen und die Wertsätze enthält.

    Sie können das Transaktions-Bundle mit dem Tool Bundler for FHIR profile validation resources erstellen.

  4. Laden Sie das FHIR-Profil-Validierungspaket in einen Cloud Storage-Speicherort hoch.

    gcloud storage cp \
       PATH_TO_PROFILE_VALIDATION_BUNDLE \
       gs://BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY \
       --recursive

    Ersetzen Sie Folgendes:

    • PATH_TO_PROFILE_VALIDATION_BUNDLE: der Pfad zum Profilvalidierungs-Bundle auf Ihrem lokalen Computer
    • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: der Cloud Storage-Speicherort, an dem das Bundle gespeichert werden muss
  5. Importieren Sie Ihren benutzerdefinierten Implementierungsleitfaden aus dem Cloud Storage-Speicherort, wenn Sie Ihren FHIR-Speicher erstellen oder bearbeiten.

Ressourcen anhand bestimmter Profile validieren

In den folgenden Beispielen wird gezeigt, wie Sie eine FHIR-Ressource für ein bestimmtes Profil oder für alle Profile validieren, die für einen FHIR-Speicher definiert wurden. Durch die Validierung der FHIR-Ressource können Sie feststellen, ob Ihre FHIR-Ressource einem oder mehreren Profilen entspricht.

Verwenden Sie die Methode fhir.Resource-validate, um eine FHIR-Ressource zu validieren.

curl

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data @RESOURCE_FILE \
    'https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/RESOURCE_TYPE/$validate?profile=PROFILE_URL'

Dabei gilt:

  • RESOURCE_FILE ist der Speicherort einer Datei, die die Ressource enthält
  • PROJECT_ID ist die ID Ihres Google Cloud-Projekts
  • LOCATION ist der Standort des Datasets
  • DATASET_ID ist die Dataset-ID
  • FHIR_STORE_ID ist die FHIR-Speicher-ID
  • PROFILE_URL ist die kanonische URL des FHIR-Profils, z. B. http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient für eine Patientenressource. In FHIR_STORE_ID muss eine Strukturdefinition mit dieser URL vorhanden sein. Wenn Sie die Ressource anhand der Profile validieren, die Sie bereits im Speicher aktiviert haben, geben Sie diesen Abfrageparameter nicht an.
  • RESOURCE_TYPE ist der Ressourcentyp.

Wenn eine Ressource den Profilen entspricht, wird eine Antwort wie diese zurückgegeben:

{
  "issue": [
    {
      "code": "informational",
      "details": {
        "text": "success"
      },
      "diagnostics": "success",
      "severity": "information"
    }
  ],
  "resourceType": "OperationOutcome"
}

Wenn eine Ressource keinem Profil entspricht, wird ein Fehler mit einer Antwort wie dieser zurückgegeben:

{
    "issue": [
        {
            "code": "processing",
            "diagnostics": "Profile http://hl7.org/fhir/StructureDefinition/AuditEvent, Element 'AuditEvent.agent.requestor': minimum required = 1, but only found 0",
            "location": [
                "AuditEvent.agent"
            ],
            "severity": "error"
        }
    ],
    "resourceType": "OperationOutcome"
}

PowerShell

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body '@RESOURCE_FILE' `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/RESOURCE_TYPE/$validate?profile=PROFILE_URL" | Select-Object -Expand Content

Dabei gilt:

  • RESOURCE_FILE ist der Speicherort einer Datei, die die Ressource enthält
  • PROJECT_ID ist die ID Ihres Google Cloud-Projekts
  • LOCATION ist der Standort des Datasets
  • DATASET_ID ist die Dataset-ID
  • FHIR_STORE_ID ist die FHIR-Speicher-ID
  • PROFILE_URL ist die kanonische URL des FHIR-Profils, z. B. http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient für eine Patientenressource. In FHIR_STORE_ID muss eine Strukturdefinition mit dieser URL vorhanden sein. Wenn Sie die Ressource anhand der Profile validieren, die Sie bereits im Speicher aktiviert haben, geben Sie diesen Abfrageparameter nicht an.
  • RESOURCE_TYPE ist der Ressourcentyp.

Wenn eine Ressource für ein Profil validiert wird, wird eine Antwort wie diese zurückgegeben:

{
  "issue": [
    {
      "code": "informational",
      "details": {
        "text": "success"
      },
      "diagnostics": "success",
      "severity": "information"
    }
  ],
  "resourceType": "OperationOutcome"
}

Wenn eine Ressource nicht für ein Profil validiert wird, wird ein Fehler mit einer Antwort wie dieser zurückgegeben:

{
    "issue": [
        {
            "code": "processing",
            "diagnostics": "Profile http://hl7.org/fhir/StructureDefinition/AuditEvent, Element 'AuditEvent.agent.requestor': minimum required = 1, but only found 0",
            "location": [
                "AuditEvent.agent"
            ],
            "severity": "error"
        }
    ],
    "resourceType": "OperationOutcome"
}

Python

def validate_resource_profile_url(
    project_id, location, dataset_id, fhir_store_id, resource_type, profile_url
):
    """Validates an input FHIR resource's conformance to a profile URL. The
    profile StructureDefinition resource must exist in the FHIR store before
    performing validation against the URL.

    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir
    before running the sample."""
    # Imports Python's built-in "os" module
    import os

    # Imports the google.auth.transport.requests transport
    from google.auth.transport import requests

    # Imports a module to allow authentication using a service account
    from google.oauth2 import service_account

    # Gets credentials from the environment.
    credentials = service_account.Credentials.from_service_account_file(
        os.environ["GOOGLE_APPLICATION_CREDENTIALS"]
    )
    scoped_credentials = credentials.with_scopes(
        ["https://www.googleapis.com/auth/cloud-platform"]
    )
    # Creates a requests Session object with the credentials.
    session = requests.AuthorizedSession(scoped_credentials)

    # URL to the Cloud Healthcare API endpoint and version
    base_url = "https://healthcare.googleapis.com/v1"

    # TODO(developer): Uncomment these lines and replace with your values.
    # project_id = 'my-project'  # replace with your GCP project ID
    # location = 'us-central1'  # replace with the parent dataset's location
    # dataset_id = 'my-dataset'  # replace with the parent dataset's ID
    # fhir_store_id = 'my-fhir-store' # replace with the FHIR store ID
    # resource_type = 'Patient'  # replace with the FHIR resource type
    # profile_url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient'  # replace with the profile URL
    url = f"{base_url}/projects/{project_id}/locations/{location}"

    resource_path = "{}/datasets/{}/fhirStores/{}/fhir/{}".format(
        url, dataset_id, fhir_store_id, resource_type
    )

    resource_path += "/$validate"
    params = {"profile": profile_url}

    # The body shown works with a Patient resource and is not guaranteed
    # to work with other types of FHIR resources. If necessary,
    # supply a new body with data that corresponds to the resource you
    # are validating and supply a new resource_type.
    body = {
        "name": [{"use": "official", "family": "Smith", "given": ["Darcy"]}],
        "gender": "female",
        "birthDate": "1970-01-01",
        "resourceType": "Patient",
    }

    # Sets required application/fhir+json header on the request
    headers = {"Content-Type": "application/fhir+json;charset=utf-8"}

    response = session.post(resource_path, headers=headers, json=body, params=params)
    response.raise_for_status()

    resource = response.json()

    print(json.dumps(resource))

    return resource