Configurar perfis FHIR

Os guias e perfis de implementação do FHIR garantem que os recursos em um armazenamento FHIR atendam aos critérios específicos definidos. Alguns exemplos de guias de implementação incluem o US Core Implementation Guide 4.0.0 e o Carin Blue Button Implementation Guide.

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

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:

fhir-profiles

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.

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

Para garantir que as definições de estrutura correspondam à fonte autoritativa, você precisa fazer 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 (em inglês). As origens 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, caso seu sistema use o perfil de paciente 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, com exceção das 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 do 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 no guia de implementação principal 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 no Cloud Storage, siga estas etapas:

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

    Por exemplo, se você estiver implementando o guia de implementação principal dos EUA, poderá excluir 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:

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

    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 implementação

Antes de ativar seu guia de implementação, verifique se todas as dependências do guia 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 tentará validar perfis em relação a 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 valida os guias de implementação apenas quando você os ativa. Se você modificar um guia de implementação e ativá-lo novamente, a API Cloud Healthcare validará o guia de implementação modificado.

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

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 um armazenamento 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 seu repositório 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.

    Esta etapa é necessária para adicionar manualmente a matriz global ao recurso do guia de implementação. Se você optar por pular esta etapa, adicione a matriz global ao criar o pacote de transação FHIR na próxima etapa usando um método diferente, como a ferramenta Bundler para recursos de validação de perfil FHIR com a sinalização 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 para recursos de validação de perfil FHIR.

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

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

    Substitua:

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

Validar recursos em relação a 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 FHIR. A validação do recurso FHIR permite determinar se o recurso FHIR está em conformidade com mais um perfil.

Para validar um recurso 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. É preciso que haja um recurso StructureDefinition em FHIR_STORE_ID que tenha esse URL. Se você estiver validando o recurso em relação aos perfis já ativados 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. É preciso que haja um recurso StructureDefinition em FHIR_STORE_ID que tenha esse URL. Se você estiver validando o recurso em relação aos perfis já ativados 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