Configurar perfis FHIR

Os perfis e guias de implementação de FHIR garantem que os recursos em um repositório FHIR estão de acordo com critérios específicos definidos. Alguns exemplos de guias de implementação incluir o Guia de implementação principal 4.0.0 dos EUA e o Guia de implementação do botão Carin Blue.

Esta página explica como definir, configurar e usar guias de implementação e em armazenamentos FHIR do 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 aos Centros para Medicare e Interoperabilidade dos Serviços Medicaid (CMS) e Acesso ao paciente final regra 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.

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

Para garantir que as definições da estrutura correspondam à fonte autorizada, você vai precisar para 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 Registro do guia de implementação da FHIR.org (em inglês). As fontes externas fornecem um pacote que contém todos os conjuntos de valores, perfis extensões de local, uma lista de páginas e URLs para cada guia de implementação.

Por exemplo, se o sistema usa o Núcleo dos EUA perfil do paciente, faça o download das definições da estrutura e da implementação usado 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 a 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 da origem do perfil. definição da estrutura, por exemplo, o perfil principal do paciente 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 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, conclua seguintes etapas:

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

    Por exemplo, se você implementar o pacote básico dos EUA guia de implementação, 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:

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

    Substitua:

    • PATH_TO_IMPLEMENTATION_GUIDE: o caminho para a implementação. na sua máquina local
    • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: o bucket e 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 as dependências da implementação

Antes de ativar o guia de implementação, verifique se todas as dependências do guia são enviadas e importadas. As dependências são definidas pelo parâmetro dependsOn no seu 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 no 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 tenta validar perfis em relação a todas as implementações guias. Um recurso FHIR só precisa corresponder a um perfil de qualquer um ativado guia de implementação.

A API Cloud Healthcare só valida guias de implementação quando você ativá-las. Se você modificar um guia de implementação e ativá-lo novamente, a API Cloud Healthcare valida o guia de implementação modificado.

Se você remover um guia de implementação depois de ativá-lo, o guia de implementação deixa 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

Quando você usa o console do Google Cloud para criar ou editar um armazenamento FHIR, será possível seguintes:

  • Selecione os guias de implementação padrão disponibilizados pela API Cloud Healthcare
  • Importar um guia de implementação personalizado do Cloud Storage para seu armazenamento 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 seu guia de implementação recurso manualmente. Se você optar por pular esta etapa, adicione a matriz global ao criar o pacote de transações FHIR na próxima etapa usando um método diferente, como o Bundler para recursos de validação de perfil FHIR com a sinalização generate_global_array.

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

    É possível criar o pacote de transações usando o Bundler para recursos de validação de perfil FHIR .

  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 perfil. na sua máquina local
    • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: os Local do Cloud Storage em que o pacote precisa ser armazenado
    .
  5. Importe seu guia de implementação personalizado do local do Cloud Storage quando você cria ou editar seu repositório FHIR.

Validar recursos em relação a perfis específicos

Os exemplos a seguir mostram como validar um recurso FHIR para um determinado ou para todos os perfis definidos para um armazenamento FHIR. Como validar o recurso FHIR permite determinar se o recurso FHIR está em conformidade com um ou mais perfis.

Para validar um recurso FHIR, use o 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. Deve haver um Recurso StructureDefinition em FHIR_STORE_ID que tem esse URL. Se você for validando o recurso em relação aos perfis que você já ativou na store, 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á retornou:

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

Se um recurso não estiver em conformidade com um perfil, será retornado um erro com semelhante à seguinte:

{
    "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. Deve haver um Recurso StructureDefinition em FHIR_STORE_ID que tem esse URL. Se você for validando o recurso em relação aos perfis que você já ativou na store, 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 à seguinte será retornou:

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

Se um recurso não for validado para um perfil, será retornado um erro com uma semelhante à seguinte:

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