Configurar perfis de FHIR

Os guias e perfis de implementação do FHIR garantem que os recursos em um armazenamento de FHIR estão em conformidade com critérios específicos. Alguns exemplos de guias de implementação incluem o Guia de implementação de núcleo dos EUA 4.0.0 e o Guia de implementação do Botão Azul da Carin.

Esta página explica como definir, configurar e usar guias e perfis de implementação em armazenamentos de FHIR R4 usando o guia de implementação principal dos EUA 4.0.0.

Visão geral

Os perfis FHIR são um conjunto de regras adicionais definidas no topo da especificação FHIR de base para lidar com a maneira como diferentes sistemas de saúde processam recursos. É possível importar e ativar perfis do FHIR em um armazenamento de FHIR para garantir que todos os recursos em um armazenamento do FHIR atendam a critérios específicos da estrutura de recursos e das informações capturadas.

Definições de estrutura e guias de implementação

É possível importar perfis FHIR do armazenamento de FHIR inserindo uma ou mais definições de estrutura agrupadas em um ou mais guias de implementação. Use uma definição de estrutura para fazer o seguinte:

  • Defina a restrição de um campo em um recurso FHIR.
  • Refira-se a conjuntos de valores que vinculam sistemas de código e recursos FHIR.

Use um guia de implementação com definições de estrutura para validar recursos correspondentes ao caso de uso do software de terceiros.

Por exemplo, suponha que seu software de terceiros precise obedecer à interoperabilidade dos Centros de Controle de Medicamentos e Serviços de Medicamento (CMS, na sigla em inglês) e à regra final de acesso ao paciente nos EUA. O software de terceiros precisará fornecer uma API Patient Access em conformidade com perfis do CARIN. Você pode importar e ativar o guia de implementação do CARIN no armazenamento de FHIR para validar os recursos nos perfis do CARIN. A importação e a ativação de guias de implementação estão descritas nas seções subsequentes desta página.

Depois de importar o guia de implementação, é possível ativá-lo no armazenamento de FHIR para validação de recursos. Quando um recurso FHIR é atualizado ou adicionado ao armazenamento, a API Cloud Healthcare verifica se ele corresponde a uma definição de estrutura no guia de implementação. Se o recurso FHIR corresponder, o recurso FHIR será adicionado ao armazenamento. Se o recurso não estiver em conformidade com as definições de estrutura no guia de implementação, uma mensagem de erro será retornada e o recurso será rejeitado.

Aplicação da validação de dados

A API Cloud Healthcare aplica a validação de dados ao usar os seguintes métodos:

Fluxo de trabalho de validação de perfil

O diagrama a seguir mostra o fluxo de trabalho de validação para adicionar ou atualizar recursos FHIR:

Perfis de FHIR

Definir seus perfis de FHIR

As seções a seguir descrevem como fazer o download das definições de estrutura do software de terceiros e configurar um guia de implementação.

Fazer o download dos recursos de validação do perfil

Para garantir que suas definições de estrutura correspondam à fonte autoritativa, faça o download dos recursos de validação de perfil, como definições de estrutura, guias de implementação ou conjuntos de valores, de uma fonte externa, como o registro do guia de implementação do FHIR.org. As fontes externas fornecem um pacote que contém todos os conjuntos de valores, perfis, extensões, uma lista de páginas e URLs para cada guia de implementação.

Por exemplo, se o sistema usa o perfil de paciente do US Core, faça o download das definições de estrutura e do guia de implementação usados pelo US Core.

A API Cloud Healthcare permite a validação do seguinte tipo de regras de definição de estrutura:

  • slicing, com suporte para os seguintes discriminadores:
    • value
    • pattern
    • profile
  • min/max
  • type
  • fixed
  • pattern
  • minValue
  • maxValue
  • maxLength
  • binding, exceto nas seguintes regras:
    • ValueSet.compose.include.filter
    • ValueSet.compose.exclude

Configurar seu guia de implementação

Depois de fazer o download das definições de estrutura, do guia de implementação e do conjunto de valores, adicione os perfis que o guia de implementação usa para validar os recursos FHIR.

Para configurar o guia de implementação, siga estas etapas:

  1. Abra o arquivo de guia de implementação que você salvou do seu provedor de software de terceiros.

  2. Adicione a seção a seguir para incluir as definições de estrutura a serem validadas pelo guia de implementação:

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

    Substitua:

    • RESOURCE_TYPE: define o tipo de recurso ao qual o guia de implementação é aplicável.
    • STRUCTURE_DEFINITION_URL: o URL para a definição da estrutura de origem do perfil, por exemplo, o Perfil de paciente principal dos EUA.
  3. Salve o arquivo do guia de implementação.

    O exemplo a seguir mostra os perfis de paciente e organização ativados para o guia de implementação do núcleo dos EUA:

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

Fazer upload do guia de implementação para o Cloud Storage

Depois de editar o guia de implementação, faça upload dos seguintes arquivos para o Cloud Storage:

  • Guia de implementação
  • Definições de estrutura
  • Conjuntos de valores

Depois de fazer o upload, é possível usar esses arquivos para validar recursos no armazenamento de FHIR.

Para fazer upload do guia de implementação para o Cloud Storage, siga estas etapas:

  1. Exclua todos os arquivos do guia de implementação que não são usados pelos perfis do FHIR na API Cloud Healthcare.

    Por exemplo, se você estiver implementando o guia de implementação principal dos EUA, exclua os seguintes arquivos:

    • .DS_Store
    • ig-r4.json
    • openapi/.index.json
    • package.json
  2. Para adicionar o guia de implementação, as definições de estrutura e os conjuntos de valores ao Cloud Storage, execute os seguintes comandos:

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

    Substitua:

    • PATH_TO_IMPLEMENTATION_GUIDE: o caminho para o guia de implementação na máquina local
    • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: o bucket e o diretório em que você armazena o guia de implementação no Cloud Storage.

Importar o guia de implementação

Para usar o guia de implementação para validar perfis no armazenamento de FHIR, importe-o para o armazenamento de FHIR como um recurso de FHIR.

Os exemplos a seguir mostram como importar o guia de implementação para um armazenamento de FHIR:

gcloud

Para adicionar o guia de implementação como um recurso a um armazenamento de FHIR, execute o 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

Substitua:

  • FHIR_STORE_ID: o ID de armazenamento do FHIR;
  • DATASET_ID: o ID do conjunto de dados;
  • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: o local do guia de implementação em um bucket do Cloud Storage.

A saída é esta:

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

Nesta saída:

  • PROJECT_ID, LOCATION, DATASET_ID: os valores que você forneceu na chamada do método;
  • OPERATION_ID: um identificador para a operação de longa duração fornecida pela API Cloud Healthcare.

Para ver mais detalhes da operação, execute o comando gcloud healthcare operations describe, fornecendo o OPERATION_ID da resposta:

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

A saída é esta: se a resposta contiver done: true, a operação será concluída. Caso contrário, a operação ainda está em execução. Aguarde alguns segundos e execute o comando gcloud healthcare operations describe novamente.

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"

Substitua:

  • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: o local do guia de implementação em um bucket do Cloud Storage;
  • PROJECT_ID: o ID do seu projeto do Google Cloud;
  • LOCATION: o local do conjunto de dados;
  • DATASET_ID: o ID do conjunto de dados;
  • FHIR_STORE_ID: o ID de armazenamento do FHIR.

A resposta é esta:

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

Nesta saída:

  • PROJECT_ID, LOCATION, DATASET_ID: os valores que você forneceu na chamada do método;
  • OPERATION_ID: um identificador para a operação de longa duração fornecida pela API Cloud Healthcare.

Para acompanhar o status da operação, use o método 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"

Substitua:

  • PROJECT_ID: o ID do seu projeto do Google Cloud;
  • LOCATION: o local do conjunto de dados;
  • DATASET_ID: o ID do conjunto de dados;
  • FHIR_STORE_ID: o ID de armazenamento do FHIR;
  • OPERATION_ID: o ID retornado da operação de longa duração.

A saída é esta. Se a resposta contiver "done": true, a operação será concluída. Caso contrário, a operação ainda está em execução. Aguarde alguns segundos e chame o método operations.get novamente.

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

Substitua:

  • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: o local do guia de implementação em um bucket do Cloud Storage;
  • PROJECT_ID: o ID do seu projeto do Google Cloud;
  • LOCATION: o local do conjunto de dados;
  • DATASET_ID: o ID do conjunto de dados;
  • FHIR_STORE_ID: o ID de armazenamento do FHIR.

A resposta é esta:

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

Nesta saída:

  • PROJECT_ID, LOCATION, DATASET_ID: os valores que você forneceu na chamada do método;
  • OPERATION_ID: um identificador para a operação de longa duração fornecida pela API Cloud Healthcare.

Para acompanhar o status da operação, use o método 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

Substitua:

  • PROJECT_ID: o ID do seu projeto do Google Cloud;
  • LOCATION: o local do conjunto de dados;
  • DATASET_ID: o ID do conjunto de dados;
  • FHIR_STORE_ID: o ID de armazenamento do FHIR;
  • OPERATION_ID: o ID retornado da operação de longa duração.

A saída é esta. Se a resposta contiver "done": true, a operação será concluída. Caso contrário, a operação ainda está em execução. Aguarde alguns segundos e chame o método operations.get novamente.

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

Fazer upload e importar dependências da sua implementação

Antes de ativar o guia de implementação, verifique se todas as dependências dele foram enviadas e importadas. As dependências são definidas pelo parâmetro dependsOn no guia de implementação da seguinte maneira:

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

Para fazer upload e importar dependências, siga as instruções em Fazer upload do guia de implementação para o Cloud Storage e Importar o guia de implementação, respectivamente.

Ativar o guia de implementação

Para usar um recurso de guia de implementação para validar perfis, você precisa ativar o guia de implementação. Se você ativar mais de um guia de implementação, a API Cloud Healthcare vai tentar validar os perfis em todos os guias de implementação. Um recurso FHIR só precisa corresponder a um perfil de qualquer guia de implementação ativado.

A API Cloud Healthcare só valida os guias de implementação quando você os ativa. Se você modificar um guia de implementação e ativar novamente, a API Cloud Healthcare vai validar o guia modificado.

Se você remover um guia de implementação depois de ativá-lo, ele vai deixar de entrar em vigor.

Os exemplos a seguir mostram como ativar o guia de implementação para validação de perfil em um armazenamento de FHIR existente:

curl

Para ativar seu guia de implementação, faça uma solicitação PATCH e especifique as seguintes informações:

  • O nome e o local do conjunto de dados pai.
  • O nome do armazenamento FHIR
  • O campo enabledImplementationGuides, definido como o caminho para o recurso do guia de implementação

O exemplo a seguir mostra uma solicitação PATCH usando 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"

Substitua:

  • IMPLEMENTATION_GUIDE_URL: o URL definido na propriedade url do recurso ImplementationGuide, por exemplo, http://hl7.org/fhir/us/core/ImplementationGuide/hl7.fhir.us.core
  • PROJECT_ID: o ID do seu projeto do Google Cloud;
  • LOCATION: o local do conjunto de dados;
  • DATASET_ID: o ID do conjunto de dados;
  • FHIR_STORE_ID: o ID de armazenamento do FHIR.

A resposta é esta:

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

PowerShell

Para ativar seu guia de implementação, faça uma solicitação PATCH e especifique as seguintes informações:

  • O nome e o local do conjunto de dados pai.
  • O nome do armazenamento FHIR
  • O campo enabledImplementationGuides, definido como o caminho para o recurso do guia de implementação

O exemplo a seguir mostra uma solicitação PATCH usando o 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

Substitua:

  • IMPLEMENTATION_GUIDE_URL: o URL definido na propriedade url do recurso ImplementationGuide, por exemplo, http://hl7.org/fhir/us/core/ImplementationGuide/hl7.fhir.us.core
  • PROJECT_ID: o ID do seu projeto do Google Cloud;
  • LOCATION: o local do conjunto de dados;
  • DATASET_ID: o ID do conjunto de dados;
  • FHIR_STORE_ID: o ID de armazenamento do FHIR.

A resposta é esta:

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

Usar o console do Google Cloud para ativar os guias de implementação

Ao usar o console do Google Cloud para criar ou editar uma loja FHIR, é possível fazer o seguinte:

  • Selecione os guias de implementação padrão fornecidos pela API Cloud Healthcare.
  • Importar um guia de implementação personalizado do Cloud Storage para o armazenamento de FHIR

Para importar um guia de implementação personalizado, siga estas etapas:

  1. Faça o download dos recursos de validação do perfil.

  2. Opcional: configure seu guia de implementação.

    Essa etapa é necessária para adicionar a matriz global ao recurso do guia de implementação manualmente. Se você optar por pular esta etapa, adicione a matriz global ao criar o pacote de transações do FHIR na próxima etapa usando um método diferente, como a ferramenta Bundler para recursos de validação de perfil do FHIR com a flag generate_global_array.

  3. Crie um pacote de transações FHIR dos recursos de validação do perfil, que inclui o guia de implementação, as definições de estrutura e os conjuntos de valores.

    É possível criar o pacote de transações usando a ferramenta Bundler for FHIR profile validation resources.

  4. Faça upload do pacote de validação do perfil FHIR para um local do Cloud Storage.

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

    Substitua:

    • PATH_TO_PROFILE_VALIDATION_BUNDLE: o caminho para o pacote de validação do perfil na máquina local
    • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: o local do Cloud Storage em que o pacote precisa ser armazenado
  5. Importe seu guia de implementação personalizada do local do Cloud Storage ao criar ou editar sua loja de FHIR.

Validar recursos com base em perfis específicos

Os exemplos a seguir mostram como validar um recurso FHIR para um perfil específico ou para todos os perfis definidos para um armazenamento de FHIR. A validação do recurso FHIR permite determinar se ele está em conformidade com um ou mais perfis.

Para validar um recurso do FHIR, use o método 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'

Substitua:

  • RESOURCE_FILE: o local de um arquivo que contém o recurso
  • PROJECT_ID: o ID do seu projeto do Google Cloud;
  • LOCATION: o local do conjunto de dados;
  • DATASET_ID: o ID do conjunto de dados;
  • FHIR_STORE_ID: o ID de armazenamento de FHIR
  • PROFILE_URL: o URL canônico do perfil FHIR, por exemplo, http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient para um recurso de paciente. Precisa haver um recurso StructureDefinition em FHIR_STORE_ID que tenha esse URL. Se você estiver validando o recurso com base nos perfis que já ativou na loja, não forneça esse parâmetro de consulta.
  • RESOURCE_TYPE: o tipo de recurso

Se um recurso estiver em conformidade com os perfis, uma resposta semelhante a esta será retornada:

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

Se um recurso não estiver em conformidade com um perfil, um erro será retornado com uma resposta semelhante a esta:

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

Substitua:

  • RESOURCE_FILE: o local de um arquivo que contém o recurso
  • PROJECT_ID: o ID do seu projeto do Google Cloud;
  • LOCATION: o local do conjunto de dados;
  • DATASET_ID: o ID do conjunto de dados;
  • FHIR_STORE_ID: o ID de armazenamento de FHIR
  • PROFILE_URL: o URL canônico do perfil FHIR, por exemplo, http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient para um recurso de paciente. Precisa haver um recurso StructureDefinition em FHIR_STORE_ID que tenha esse URL. Se você estiver validando o recurso com base nos perfis que já ativou na loja, não forneça esse parâmetro de consulta.
  • RESOURCE_TYPE: o tipo de recurso

Se um recurso for validado para um perfil, uma resposta semelhante a esta será retornada:

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

Se um recurso não for validado para um perfil, um erro será retornado com uma resposta semelhante a esta:

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