Configura i profili FHIR

Le guide all'implementazione e i profili FHIR assicurano che le risorse in un archivio FHIR siano conformi a criteri definiti specifici. Alcuni esempi di guide all'implementazione includono la US Core Implementation Guide 4.0.0 e la Carin Blue Button Implementation Guide.

Questa pagina spiega come definire, configurare e utilizzare le guide all'implementazione e i profili nei datastore FHIR R4 utilizzando la Guida all'implementazione di base per gli Stati Uniti 4.0.0.

Panoramica

I profili FHIR sono un insieme di regole aggiuntive definite sulla base della specifica FHIR di base che gestiscono il modo in cui diversi sistemi sanitari elaborano le risorse. Puoi importare e attivare i profili FHIR in un archivio FHIR per assicurarti che tutte le risorse in un archivio FHIR soddisfino criteri specifici per la struttura delle risorse e le informazioni acquisite.

Definizioni delle strutture e guide all'implementazione

Puoi importare i profili FHIR per il tuo archivio FHIR inserendo una o più definizioni di strutture raggruppate in una o più guide all'implementazione. Utilizza una definizione di struttura per:

  • Definisci la limitazione per un campo in una risorsa FHIR.
  • Insiemi di valori di riferimento che collegano sistemi di codici e risorse FHIR.

Utilizza una guida all'implementazione con definizioni di strutture per convalidare le risorse in modo che corrispondano al caso d'uso del software di terze parti.

Ad esempio, supponiamo che il tuo software di terze parti debba essere conforme alla regola finale sull'interoperabilità e sull'accesso dei pazienti dei Centers for Medicare & Medicaid Services (CMS) negli Stati Uniti. Il software di terze parti deve fornire un'API Patient Access conforme ai profili CARIN. Puoi importare e attivare la guida all'implementazione CARIN nel tuo datastore FHIR per convalidare le risorse in base ai profili CARIN. L'importazione e l'attivazione delle guide all'implementazione sono descritte nelle sezioni successive di questa pagina.

Dopo aver importato la guida all'implementazione, puoi attivarla nel tuo datastore FHIR per la convalida delle risorse FHIR. Quando una risorsa FHIR viene aggiornata o aggiunta all'archivio, l'API Cloud Healthcare verifica se corrisponde a una definizione di struttura nella guida all'implementazione. Se la risorsa FHIR corrisponde, viene aggiunta all'archivio. Se la risorsa FHIR non è conforme alle definizioni della struttura nella guida all'implementazione, viene restituito un messaggio di errore e la risorsa FHIR viene rifiutata.

Applicazione della convalida dei dati

L'API Cloud Healthcare applica la convalida dei dati quando vengono utilizzati i seguenti metodi:

Flusso di lavoro di convalida del profilo

Il seguente diagramma mostra il flusso di lavoro di convalida per l'aggiunta o l'aggiornamento delle risorse FHIR:

fhir-profiles

Definisci i tuoi profili FHIR

Le sezioni seguenti descrivono come scaricare le definizioni delle strutture dal software di terze parti e configurare una guida all'implementazione.

Scaricare le risorse per la convalida del profilo

Per assicurarti che le definizioni delle strutture corrispondano alla tua fonte autorevole, devi scaricare le risorse di convalida del profilo, come definizioni delle strutture, guide all'implementazione o insiemi di valori, da una fonte esterna, ad esempio il registro delle guide all'implementazione di FHIR.org. Le origini esterne forniscono un pacchetto contenente tutti i set di valori, i profili, le estensioni, un elenco di pagine e gli URL per ogni guida all'implementazione.

Ad esempio, se il tuo sistema utilizza il profilo del paziente di US Core, puoi scaricare le definizioni della struttura e la guida all'implementazione utilizzata da US Core.

L'API Cloud Healthcare consente la convalida per il seguente tipo di regole di definizione della struttura:

  • slicing, con il supporto dei seguenti discriminatori:
    • value
    • pattern
    • profile
  • min/max
  • type
  • fixed
  • pattern
  • minValue
  • maxValue
  • maxLength
  • binding, ad eccezione delle seguenti regole:
    • ValueSet.compose.include.filter
    • ValueSet.compose.exclude

Configura la guida all'implementazione

Dopo aver scaricato le definizioni della struttura, la guida all'implementazione e il set di valori, devi aggiungere i profili utilizzati dalla guida all'implementazione per convalidare le risorse FHIR.

Per configurare la guida all'implementazione, svolgi i seguenti passaggi:

  1. Apri il file della guida all'implementazione scaricato dal fornitore di software di terze parti.

  2. Aggiungi la sezione seguente per includere le definizioni della struttura da convalidare dalla guida all'implementazione:

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

    Sostituisci quanto segue:

    • RESOURCE_TYPE: definisce il tipo di risorsa a cui si applica la guida all'implementazione.
    • STRUCTURE_DEFINITION_URL: l'URL alla definizione della struttura di origine del profilo, ad esempio il profilo del paziente principale degli Stati Uniti.
  3. Salva il file della guida all'implementazione.

    L'esempio seguente mostra i profili Patient e Organization abilitati per la guida all'implementazione di US Core:

    "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"
      },
      ...
    ]
    

Carica la guida all'implementazione su Cloud Storage

Dopo aver modificato la guida all'implementazione, devi caricare i seguenti file su Cloud Storage:

  • Guida all'implementazione
  • Definizioni della struttura
  • Set di valori

Dopo il caricamento, puoi utilizzare questi file per convalidare le risorse nel tuo archivo FHIR.

Per caricare la guida all'implementazione su Cloud Storage, completa i seguenti passaggi:

  1. Elimina dalla guida all'implementazione tutti i file non utilizzati dai profili FHIR nell'API Cloud Healthcare.

    Ad esempio, se stai implementando la Guida all'implementazione di base per gli Stati Uniti, puoi eliminare i seguenti file:

    • .DS_Store
    • ig-r4.json
    • openapi/.index.json
    • package.json
  2. Per aggiungere la guida all'implementazione, le definizioni della struttura e i set di valori a Cloud Storage, esegui i seguenti comandi:

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

    Sostituisci quanto segue:

    • PATH_TO_IMPLEMENTATION_GUIDE: il percorso della guida all'implementazione sulla tua macchina locale
    • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: il bucket e la directory in cui memorizzi la guida all'implementazione in Cloud Storage

Importa la guida all'implementazione

Per utilizzare la guida all'implementazione per convalidare i profili nel tuo archivio FHIR, importala nel tuo archivio FHIR come risorsa FHIR.

Gli esempi riportati di seguito mostrano come importare la guida all'implementazione in un archivio FHIR:

gcloud

Per aggiungere la guida all'implementazione come risorsa a un datastore FHIR, esegui il comando gcloud healthcare fhir-stores import gcs:

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

Sostituisci quanto segue:

  • FHIR_STORE_ID: l'ID del datastore FHIR
  • DATASET_ID: l'ID set di dati
  • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: la posizione della guida all'implementazione in un bucket Cloud Storage

L'output è il seguente:

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 questo output:

  • PROJECT_ID, LOCATION, DATASET_ID: i valori che hai fornito nella chiamata al metodo
  • OPERATION_ID: un identificatore per l'operazione a lunga esecuzione fornita dall'API Cloud Healthcare

Per visualizzare ulteriori dettagli sull'operazione, esegui il comando gcloud healthcare operations describe fornendo il valore OPERATION_ID della risposta:

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

L'output è il seguente. Se la risposta contiene done: true, l'operazione è stata completata. In caso contrario, l'operazione è ancora in esecuzione. Attendi qualche secondo, quindi esegui di nuovo il comando gcloud healthcare operations describe.

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"

Sostituisci quanto segue:

  • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: la posizione della guida all'implementazione in un bucket Cloud Storage
  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • LOCATION: la posizione del set di dati
  • DATASET_ID: l'ID set di dati
  • FHIR_STORE_ID: l'ID del datastore FHIR

La risposta è la seguente:

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

In questo output:

  • PROJECT_ID, LOCATION, DATASET_ID: i valori che hai fornito nella chiamata al metodo
  • OPERATION_ID: un identificatore per l'operazione a lunga esecuzione fornita dall'API Cloud Healthcare

Per monitorare lo stato dell'operazione, utilizza il metodo operations.get:

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"

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • LOCATION: la posizione del set di dati
  • DATASET_ID: l'ID set di dati
  • FHIR_STORE_ID: l'ID del datastore FHIR
  • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

L'output è il seguente. Se la risposta contiene "done": true, l'operazione è stata completata. In caso contrario, l'operazione è ancora in esecuzione. Attendi qualche secondo e poi richiama di nuovo il metodo operations.get.

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

Sostituisci quanto segue:

  • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: la posizione della guida all'implementazione in un bucket Cloud Storage
  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • LOCATION: la posizione del set di dati
  • DATASET_ID: l'ID set di dati
  • FHIR_STORE_ID: l'ID del datastore FHIR

La risposta è la seguente:

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

In questo output:

  • PROJECT_ID, LOCATION, DATASET_ID: i valori che hai fornito nella chiamata al metodo
  • OPERATION_ID: un identificatore per l'operazione a lunga esecuzione fornita dall'API Cloud Healthcare

Per monitorare lo stato dell'operazione, utilizza il metodo operations.get:

$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

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • LOCATION: la posizione del set di dati
  • DATASET_ID: l'ID set di dati
  • FHIR_STORE_ID: l'ID del datastore FHIR
  • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

L'output è il seguente. Se la risposta contiene "done": true, l'operazione è stata completata. In caso contrario, l'operazione è ancora in esecuzione. Attendi qualche secondo e poi richiama di nuovo il metodo operations.get.

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

Carica e importa le dipendenze dell'implementazione

Prima di poter attivare la guida all'implementazione, devi assicurarti che tutte le dipendenze della guida siano caricate e importate. Le dipendenze sono definite dal parametro dependsOn nella guida all'implementazione come segue:

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

Per caricare e importare le dipendenze, segui le istruzioni riportate rispettivamente in Caricare la guida all'implementazione su Cloud Storage e Importare la guida all'implementazione.

Attivare la guida all'implementazione

Per utilizzare una risorsa della guida all'implementazione per convalidare i profili, devi attivare la guida all'implementazione. Se attivi più di una guida all'implementazione, l'API Cloud Healthcare tenta di convalidare i profili in base a tutte le guide all'implementazione. Una risorsa FHIR deve corrispondere a un solo profilo di qualsiasi guida all'implementazione abilitata.

L'API Cloud Healthcare convalida le guide all'implementazione solo quando le attivi. Se modifichi una guida all'implementazione e la riattivi, l'API Cloud Healthcare convalida la guida all'implementazione modificata.

Se rimuovi una guida all'implementazione dopo averla attivata, la guida all'implementazione non avrà più effetto.

Gli esempi riportati di seguito mostrano come attivare la guida all'implementazione per la convalida del profilo in un archivio FHIR esistente:

curl

Per attivare la guida all'implementazione , effettua una richiesta PATCH e specifica le seguenti informazioni:

  • Il nome e la posizione del set di dati principale
  • Il nome del datastore FHIR
  • Il campo enabledImplementationGuides impostato sul percorso della risorsa della guida all'implementazione

L'esempio seguente mostra una richiesta PATCH che utilizza 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"

Sostituisci quanto segue:

  • IMPLEMENTATION_GUIDE_URL: l'URL definito nella proprietà url della risorsa ImplementationGuide, ad esempiohttp://hl7.org/fhir/us/core/ImplementationGuide/hl7.fhir.us.core
  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • LOCATION: la posizione del set di dati
  • DATASET_ID: l'ID set di dati
  • FHIR_STORE_ID: l'ID del datastore FHIR

La risposta è la seguente:

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

PowerShell

Per attivare la guida all'implementazione , effettua una richiesta PATCH e specifica le seguenti informazioni:

  • Il nome e la posizione del set di dati principale
  • Il nome del datastore FHIR
  • Il campo enabledImplementationGuides impostato sul percorso della risorsa della guida all'implementazione

Il seguente esempio mostra una richiesta PATCH mediante 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

Sostituisci quanto segue:

  • IMPLEMENTATION_GUIDE_URL: l'URL definito nella proprietà url della risorsa ImplementationGuide, ad esempiohttp://hl7.org/fhir/us/core/ImplementationGuide/hl7.fhir.us.core
  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • LOCATION: la posizione del set di dati
  • DATASET_ID: l'ID set di dati
  • FHIR_STORE_ID: l'ID del datastore FHIR

La risposta è la seguente:

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

Utilizzare la console Google Cloud per attivare le guide all'implementazione

Quando utilizzi la console Google Cloud per creare o modificare un archivio FHIR, puoi:

  • Seleziona le guide all'implementazione predefinite fornite dall'API Cloud Healthcare
  • Importa una guida all'implementazione personalizzata da Cloud Storage nel tuo datastore FHIR

Per importare una guida all'implementazione personalizzata:

  1. Scarica le risorse per la convalida del profilo.

  2. (Facoltativo) Configura la guida all'implementazione.

    Questo passaggio è necessario per aggiungere manualmente l'array global alla risorsa della guida all'implementazione. Se scegli di saltare questo passaggio, devi aggiungere l'array global quando crei il bundle di transazioni FHIR nel passaggio successivo utilizzando un metodo diverso, ad esempio lo strumento Bundler per le risorse di convalida del profilo FHIR con il flag generate_global_array.

  3. Crea un bundle di transazioni FHIR delle risorse di convalida del profilo, che include la guida all'implementazione, le definizioni della struttura e i set di valori.

    Puoi creare il bundle di transazioni utilizzando lo strumento Bundler per le risorse di convalida del profilo FHIR.

  4. Carica il bundle di convalida del profilo FHIR in una posizione Cloud Storage.

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

    Sostituisci quanto segue:

    • PATH_TO_PROFILE_VALIDATION_BUNDLE: il percorso del bundle di convalida del profilo sulla tua macchina locale
    • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: la posizione di Cloud Storage in cui deve essere archiviato il bundle
  5. Importa la guida all'implementazione personalizzata dalla posizione Cloud Storage quando crei o modifichi il tuo archivio FHIR.

Convalida le risorse in base a profili specifici

Gli esempi riportati di seguito mostrano come convalidare una risorsa FHIR per un profilo specifico o per tutti i profili definiti per un archivio FHIR. La convalida della risorsa FHIR consente di determinare se la risorsa FHIR è conforme a uno o più profili.

Per convalidare una risorsa FHIR, utilizza il metodo fhir.Resource-validate.

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'

Sostituisci quanto segue:

  • RESOURCE_FILE: la posizione di un file contenente la risorsa
  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • LOCATION: la posizione del set di dati
  • DATASET_ID: l'ID set di dati
  • FHIR_STORE_ID: l'ID del datastore FHIR
  • PROFILE_URL: l'URL canonico del profilo FHIR, ad esempiohttp://hl7.org/fhir/us/core/StructureDefinition/us-core-patient per una risorsa Patient. In FHIR_STORE_ID deve essere presente una risorsa StructureDefinition con questo URL. Se stai convalidando la risorsa in base ai profili che hai già attivato nel store, non fornire questo parametro di query.
  • RESOURCE_TYPE: il tipo di risorsa

Se una risorsa è conforme ai profili, viene restituita una risposta simile alla seguente:

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

Se una risorsa non è conforme a un profilo, viene restituito un errore con una risposta simile alla seguente:

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

Sostituisci quanto segue:

  • RESOURCE_FILE: la posizione di un file contenente la risorsa
  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • LOCATION: la posizione del set di dati
  • DATASET_ID: l'ID set di dati
  • FHIR_STORE_ID: l'ID del datastore FHIR
  • PROFILE_URL: l'URL canonico del profilo FHIR, ad esempiohttp://hl7.org/fhir/us/core/StructureDefinition/us-core-patient per una risorsa Patient. In FHIR_STORE_ID deve essere presente una risorsa StructureDefinition con questo URL. Se stai convalidando la risorsa in base ai profili che hai già attivato nel store, non fornire questo parametro di query.
  • RESOURCE_TYPE: il tipo di risorsa

Se una risorsa è convalidata per un profilo, viene restituita una risposta simile alla seguente:

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

Se una risorsa non è convalidata per un profilo, viene restituito un errore con una risposta simile alla seguente:

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