Configurer des profils FHIR

Les guides de mise en œuvre et les profils FHIR garantissent que les ressources d'un magasin FHIR sont conformes à un ensemble spécifique de critères définis. Les guides de mise en œuvre incluent par exemple le guide de mise en œuvre US Core 4.0.0 et le guide de mise en œuvre Blue Button de Carin.

Cette page explique comment définir, configurer et utiliser des profils et des guides de mise en œuvre dans les magasins FHIR R4 à l'aide du guide de mise en œuvre US Core 4.0.0.

Présentation

Les profils FHIR sont un ensemble de règles supplémentaires définies en plus de la spécification FHIR de base pour gérer le traitement des ressources par différents systèmes de santé. Vous pouvez importer et activer des profils FHIR dans un datastore FHIR pour vous assurer que toutes les ressources d'un datastore FHIR répondent à des critères spécifiques concernant la structure des ressources et les informations collectées.

Définitions de structure et guides de mise en œuvre

Vous pouvez importer des profils FHIR pour votre magasin FHIR en insérant une ou plusieurs définitions de structure regroupées dans un ou plusieurs guides de mise en œuvre. Utilisez une définition de structure pour effectuer les opérations suivantes :

  • Définir la contrainte d'un champ dans une ressource FHIR
  • Référencer des ensembles de valeurs qui associent des systèmes de code et des ressources FHIR.

Vous utilisez un guide de mise en œuvre avec des définitions de structure pour la validation des ressources afin que celles-ci correspondent au cas d'utilisation de votre logiciel tiers.

Par exemple, supposons que votre logiciel tiers doive respecter les règles finales d'interopérabilité et d'accès des patients des Centres de services Medicare et Medicaid (CMS, Centers for Medicare and Medicaid Services) aux États-Unis. Votre logiciel tiers doit fournir une API d'accès Patient conforme aux profils CARIN. Vous pouvez importer et activer le guide de mise en œuvre CARIN dans votre magasin FHIR afin de valider les ressources par rapport aux profils CARIN. L'importation et l'activation des guides de mise en œuvre sont décrites dans les sections suivantes de cette page.

Après avoir importé votre guide de mise en œuvre, vous pouvez l'activer dans votre datastore FHIR pour la validation des ressources FHIR. Lorsqu'une ressource FHIR est mise à jour ou ajoutée au datastore, l'API Cloud Healthcare vérifie si elle correspond à une définition de structure du guide de mise en œuvre. Si la ressource FHIR correspond, elle est ajoutée au datastore. Si la ressource FHIR ne respecte pas les définitions de structure du guide de mise en œuvre, un message d'erreur est renvoyé et la ressource FHIR est rejetée.

Application de la validation des données

L'API Cloud Healthcare applique la validation des données lorsque vous utilisez les méthodes suivantes :

Workflow de validation du profil

Le diagramme suivant montre le workflow de validation pour l'ajout ou la mise à jour de ressources FHIR :

fhir-profiles

Définir vos profils FHIR

Les sections suivantes vous expliquent comment télécharger des définitions de structure à partir de votre logiciel tiers et comment configurer un guide de mise en œuvre.

Télécharger les ressources de validation de votre profil

Pour vous assurer que vos définitions de structure correspondent à votre source faisant autorité, vous devez télécharger les ressources de validation de profil, telles que les définitions de structure, les guides d'implémentation ou les ensembles de valeurs, à partir d'une source externe, comme le registre des guides d'implémentation de FHIR.org. Les sources externes fournissent un package contenant l'ensemble des ensembles de valeurs, profils et extensions, ainsi qu'une liste de pages et des URL pour chaque guide de mise en œuvre.

Par exemple, si votre système utilise le profil de patient US Core, vous pouvez télécharger les définitions de structure et le guide de mise en œuvre utilisés par US Core.

L'API Cloud Healthcare permet de valider le type de règles de définition de structure suivant :

  • slicing, avec prise en charge des discriminateurs suivants :
    • value
    • pattern
    • profile
  • min/max
  • type
  • fixed
  • pattern
  • minValue
  • maxValue
  • maxLength
  • binding, à l'exception des règles suivantes :
    • ValueSet.compose.include.filter
    • ValueSet.compose.exclude

Configurer votre guide de mise en œuvre

Après avoir téléchargé vos définitions de structure, votre guide de mise en œuvre et votre ensemble de valeurs, vous devez ajouter les profils que le guide de mise en œuvre utilise pour valider les ressources FHIR.

Pour configurer le guide d'implémentation, procédez comme suit:

  1. Ouvrez le fichier du guide de mise en œuvre que vous avez téléchargé à partir de votre fournisseur de logiciels tiers.

  2. Ajoutez la section suivante pour inclure les définitions de structure qui doivent être validées par votre guide de mise en œuvre :

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

    Remplacez les éléments suivants :

    • RESOURCE_TYPE : définit le type de ressource auquel s'applique le guide de mise en œuvre.
    • STRUCTURE_DEFINITION_URL : URL de la définition de la structure source du profil, par exemple, profil de patient US Core.
  3. Enregistrez le fichier du guide de mise en œuvre.

    L'exemple suivant montre les profils de patient et d'organisation activés pour le guide de mise en œuvre 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"
      },
      ...
    ]
    

Importer votre guide de mise en œuvre dans Cloud Storage

Une fois que vous avez modifié votre guide de mise en œuvre, vous devez importer les fichiers suivants dans Cloud Storage :

  • Le guide de mise en œuvre
  • Les définitions de structure
  • Les ensembles de valeurs

Après l'importation, vous pouvez utiliser ces fichiers pour valider les ressources de votre datastore FHIR.

Pour importer votre guide de mise en œuvre dans Cloud Storage, procédez comme suit :

  1. Supprimez de votre guide de mise en œuvre tous les fichiers qui ne sont pas utilisés par les profils FHIR dans l'API Cloud Healthcare.

    Par exemple, si vous implémentez le guide de mise en œuvre US Core, vous pouvez supprimer les fichiers suivants :

    • .DS_Store
    • ig-r4.json
    • openapi/.index.json
    • package.json
  2. Pour ajouter le guide de mise en œuvre, les définitions de structure et les ensembles de valeurs à Cloud Storage, exécutez les commandes suivantes :

    gsutil cp -r \
       PATH_TO_IMPLEMENTATION_GUIDE \
       gs://BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY
    

    Remplacez les éléments suivants :

    • PATH_TO_IMPLEMENTATION_GUIDE : chemin d'accès au guide de mise en œuvre sur votre ordinateur local
    • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY : bucket et répertoire dans lequel vous stockez le guide de mise en œuvre dans Cloud Storage

Importer votre guide de mise en œuvre

Pour utiliser le guide de mise en œuvre pour valider les profils dans votre datastore FHIR, importez-le dans votre datastore FHIR en tant que ressource FHIR.

Les exemples suivants montrent comment importer votre guide de mise en œuvre dans un datastore FHIR :

gcloud

Pour ajouter votre guide de mise en œuvre en tant que ressource à un magasin FHIR, exécutez la commande 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

Remplacez les éléments suivants :

  • FHIR_STORE_ID : ID du datastore FHIR
  • DATASET_ID : ID de l'ensemble de données
  • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY : emplacement du guide de mise en œuvre dans un bucket Cloud Storage

Le résultat est le suivant :

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

Dans ce résultat :

  • PROJECT_ID, LOCATION et DATASET_ID : valeurs que vous avez fournies dans l'appel de méthode
  • OPERATION_ID : identifiant de l'opération de longue durée fournie par l'API Cloud Healthcare

Pour afficher plus de détails sur l'opération, exécutez la commande gcloud healthcare operations describe en fournissant le OPERATION_ID spécifié dans la réponse :

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

Le résultat est le suivant. Si la réponse contient done: true, l'opération est terminée. Si ce n'est pas le cas, l'opération est toujours en cours d'exécution. Patientez quelques secondes, puis exécutez de nouveau la commande 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"

Remplacez les éléments suivants :

  • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY : emplacement du guide de mise en œuvre dans un bucket Cloud Storage
  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ID de l'ensemble de données
  • FHIR_STORE_ID : ID du datastore FHIR

La réponse est la suivante :

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

Dans ce résultat :

  • PROJECT_ID, LOCATION et DATASET_ID : valeurs que vous avez fournies dans l'appel de méthode
  • OPERATION_ID : identifiant de l'opération de longue durée fournie par l'API Cloud Healthcare

Pour suivre l'état de l'opération, utilisez la méthode 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"

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ID de l'ensemble de données
  • FHIR_STORE_ID : ID du datastore FHIR
  • OPERATION_ID : ID renvoyé par l'opération de longue durée

Le résultat est le suivant. Si la réponse contient "done": true, l'opération est terminée. Si ce n'est pas le cas, l'opération est toujours en cours d'exécution. Patientez quelques secondes, puis appelez de nouveau la méthode 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

Remplacez les éléments suivants :

  • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY : emplacement du guide de mise en œuvre dans un bucket Cloud Storage
  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ID de l'ensemble de données
  • FHIR_STORE_ID : ID du datastore FHIR

La réponse est la suivante :

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

Dans ce résultat :

  • PROJECT_ID, LOCATION et DATASET_ID : valeurs que vous avez fournies dans l'appel de méthode
  • OPERATION_ID : identifiant de l'opération de longue durée fournie par l'API Cloud Healthcare

Pour suivre l'état de l'opération, utilisez la méthode 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

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ID de l'ensemble de données
  • FHIR_STORE_ID : ID du datastore FHIR
  • OPERATION_ID : ID renvoyé par l'opération de longue durée

Le résultat est le suivant. Si la réponse contient "done": true, l'opération est terminée. Si ce n'est pas le cas, l'opération est toujours en cours d'exécution. Patientez quelques secondes, puis appelez de nouveau la méthode 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",
  }
}

Transférer et importer les dépendances de votre mise en œuvre

Avant de pouvoir activer votre guide de mise en œuvre, vous devez vous assurer que toutes ses dépendances ont été correctement transférées et importées. Les dépendances sont définies par le paramètre dependsOn de votre guide de mise en œuvre, comme suit :

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

Pour transférer et importer les dépendances, suivez les instructions des sections respectives Importer votre guide de mise en œuvre dans Cloud Storage et Importer votre guide de mise en œuvre.

Activer votre guide de mise en œuvre

Pour utiliser une ressource de guide de mise en œuvre afin de valider des profils, vous devez activer ce guide. Si vous activez plusieurs guides de mise en œuvre, l'API Cloud Healthcare tente de valider les profils par rapport à tous ces guides de mise en œuvre. Une ressource FHIR n'a besoin de correspondre qu'à un seul profil parmi tous les guides de mise en œuvre activés.

L'API Cloud Healthcare valide les guides de mise en œuvre uniquement lorsque vous les activez. Si vous modifiez un guide de mise en œuvre et l'activez à nouveau, l'API Cloud Healthcare valide le guide de mise en œuvre modifié.

Si vous supprimez un guide de mise en œuvre après l'avoir activé, celui-ci cesse d'être appliqué.

Les exemples suivants montrent comment activer votre guide de mise en œuvre pour la validation du profil sur un datastore FHIR existant :

curl

Pour activer votre guide de mise en œuvre , envoyez une requête PATCH et spécifiez les informations suivantes :

  • Nom et emplacement de l'ensemble de données parent
  • Le nom du magasin FHIR
  • Le champ enabledImplementationGuides défini sur le chemin d'accès à votre ressource de guide de mise en œuvre

L'exemple suivant montre une requête PATCH utilisant 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"

Remplacez les éléments suivants :

  • IMPLEMENTATION_GUIDE_URL : URL définie dans la propriété url de la ressource ImplementationGuide, par exemple http://hl7.org/fhir/us/core/ImplementationGuide/hl7.fhir.us.core
  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ID de l'ensemble de données
  • FHIR_STORE_ID : ID du datastore FHIR

La réponse est la suivante :

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

PowerShell

Pour activer votre guide de mise en œuvre , envoyez une requête PATCH et spécifiez les informations suivantes :

  • Nom et emplacement de l'ensemble de données parent
  • Le nom du magasin FHIR
  • Le champ enabledImplementationGuides défini sur le chemin d'accès à votre ressource de guide de mise en œuvre

L'exemple suivant montre une requête PATCH utilisant 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

Remplacez les éléments suivants :

  • IMPLEMENTATION_GUIDE_URL : URL définie dans la propriété url de la ressource ImplementationGuide, par exemple http://hl7.org/fhir/us/core/ImplementationGuide/hl7.fhir.us.core
  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ID de l'ensemble de données
  • FHIR_STORE_ID : ID du datastore FHIR

La réponse est la suivante :

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

Activer les guides d'implémentation à l'aide de la console Google Cloud

Lorsque vous utilisez la console Google Cloud pour créer ou modifier un store FHIR, vous pouvez effectuer les opérations suivantes:

  • Sélectionnez les guides d'implémentation par défaut fournis par l'API Cloud Healthcare.
  • Importer un guide d'implémentation personnalisé à partir de Cloud Storage dans votre store FHIR

Pour importer un guide d'implémentation personnalisé, procédez comme suit:

  1. Téléchargez vos ressources de validation de profil.

  2. Facultatif: configurez votre guide d'implémentation.

    Cette étape est nécessaire pour ajouter manuellement le tableau global à votre ressource de guide d'implémentation. Si vous choisissez d'ignorer cette étape, vous devez ajouter le tableau global lorsque vous créerez le groupe de transactions FHIR à l'étape suivante en utilisant une autre méthode, telle que l'outil Bundler pour les ressources de validation du profil FHIR avec l'indicateur generate_global_array.

  3. Créez un bundle de transactions FHIR contenant les ressources de validation de votre profil, qui inclut le guide d'implémentation, les définitions de la structure et les ensembles de valeurs.

    Vous pouvez créer le groupe de transactions à l'aide de l'outil Bundler pour les ressources de validation du profil FHIR.

  4. Importez le bundle de validation de profil FHIR dans un emplacement Cloud Storage.

    gsutil cp -r \
       PATH_TO_PROFILE_VALIDATION_BUNDLE \
       gs://BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY
    

    Remplacez les éléments suivants :

    • PATH_TO_PROFILE_VALIDATION_BUNDLE: chemin d'accès au bundle de validation de profil sur votre ordinateur local
    • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: emplacement Cloud Storage dans lequel le bundle doit être stocké
  5. Importez votre guide d'implémentation personnalisé à partir de l'emplacement Cloud Storage lorsque vous créez ou modifiez votre store FHIR.

Valider des ressources par rapport à des profils spécifiques

Les exemples suivants montrent comment valider une ressource FHIR vis-à-vis d'un profil spécifique ou vis-à-vis de tous les profils définis pour un magasin FHIR. La validation de la ressource FHIR vous permet de déterminer si votre ressource FHIR est conforme à un ou plusieurs profils.

Pour valider une ressource FHIR, utilisez la méthode 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'

Remplacez les éléments suivants :

  • RESOURCE_FILE : emplacement d'un fichier contenant la ressource
  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ID de l'ensemble de données
  • FHIR_STORE_ID : ID du magasin FHIR.
  • PROFILE_URL : URL canonique du profil FHIR, par exemple http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient pour une ressource Patient. Il doit exister une ressource StructureDefinition contenant cette URL dans FHIR_STORE_ID. Si vous validez la ressource par rapport aux profils que vous avez déjà activés dans le magasin, ne spécifiez pas ce paramètre de requête.
  • RESOURCE_TYPE : type de la ressource

Si une ressource est conforme aux profils, une réponse semblable à ce qui suit est renvoyée :

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

Si une ressource n'est pas conforme à un profil, une erreur est renvoyée avec une réponse semblable à la suivante :

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

Remplacez les éléments suivants :

  • RESOURCE_FILE : emplacement d'un fichier contenant la ressource
  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ID de l'ensemble de données
  • FHIR_STORE_ID : ID du magasin FHIR.
  • PROFILE_URL : URL canonique du profil FHIR, par exemple http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient pour une ressource Patient. Il doit exister une ressource StructureDefinition contenant cette URL dans FHIR_STORE_ID. Si vous validez la ressource par rapport aux profils que vous avez déjà activés dans le magasin, ne spécifiez pas ce paramètre de requête.
  • RESOURCE_TYPE : type de la ressource

Si une ressource est validée par rapport à un profil, une réponse semblable à la suivante est renvoyée :

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

Si une ressource n'est pas validée par rapport à un profil, une erreur est renvoyée avec une réponse semblable à la suivante :

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