Operação de importação

A operação de importação permite carregar dados FHIR® (Fast Healthcare Interoperability Resources) para o servidor FHIR com alta taxa de transferência usando a operação de $import. A importação dá suporte à carga de dados inicial e incremental no servidor FHIR.

Usando $import operação

Observação

Você deve ter a função importador de dados FHIR no servidor FHIR para usar $import.

Para usar $import, você precisa configurar o servidor FHIR usando as instruções no artigo Definir configurações de importação . Os dados FHIR a serem importados devem ser armazenados em arquivos específicos do recurso no formato FHIR NDJSON no repositório de blobs do Azure.

Para a operação de importação, verifique

  • Todos os recursos em um arquivo devem ser do mesmo tipo. Você pode ter vários arquivos por tipo de recurso.
  • Os dados a serem importados devem estar no mesmo locatário do serviço FHIR.
  • O número máximo de arquivos a serem importados por operação é de 10.000.

Observação:

  • A operação de importação não dá suporte a referências condicionais em recursos.
  • Durante a operação de importação, se vários recursos compartilharem a mesma ID de recurso, apenas um desses recursos será importado aleatoriamente. Há um erro registrado para os recursos que compartilham a mesma ID de recurso.

Chamando $import

Faça uma POST chamada para <<FHIR service base URL>>/$import com o cabeçalho e o corpo da solicitação mostrados:

Cabeçalho da solicitação

Prefer:respond-async
Content-Type:application/fhir+json

Corpo

Nome do Parâmetro Descrição Cartão. Valores aceitos
inputFormat Cadeia de caracteres que representa o nome do formato da fonte de dados. Atualmente, há suporte apenas para arquivos FHIR NDJSON. 1..1 application/fhir+ndjson
mode Valor do modo de importação 1..1 Para o valor inicial do modo de uso InitialLoad de importação. Para o modo de importação incremental, use IncrementalLoad o valor do modo. Se nenhum valor de modo for fornecido, o valor do modo IncrementalLoad será considerado por padrão.
input Detalhes dos arquivos de entrada. 1..* Uma matriz JSON com três partes descritas na tabela abaixo.
Nome da parte de entrada Descrição Cartão. Valores aceitos
tipo Tipo de recurso do arquivo de entrada 1..1 Um tipo de recurso FHIR válido que corresponde ao arquivo de entrada.
URL URL de armazenamento do Azure do arquivo de entrada 1..1 Valor de URL do arquivo de entrada que não pode ser modificado.
etag Etag do arquivo de entrada no armazenamento do Azure usado para verificar se o conteúdo do arquivo não foi alterado. 0..1 Valor de Etag do arquivo de entrada que não pode ser modificado.

Corpo de exemplo para importação de carga inicial:

{
    "resourceType": "Parameters",
    "parameter": [
        {
            "name": "inputFormat",
            "valueString": "application/fhir+ndjson"
        },
        {
            "name": "mode",
            "valueString": "InitialLoad"
        },
        {
            "name": "input",
            "part": [
                {
                    "name": "type",
                    "valueString": "Patient"
                },
                {
                    "name": "url",
                    "valueUri": "https://example.blob.core.windows.net/resources/Patient.ndjson"
                },
                {
                    "name": "etag",
                    "valueUri": "0x8D92A7342657F4F"
                }
            ]
        },
        {
            "name": "input",
            "part": [
                {
                    "name": "type",
                    "valueString": "CarePlan"
                },
                {
                    "name": "url",
                    "valueUri": "https://example.blob.core.windows.net/resources/CarePlan.ndjson"
                }
            ]
        }
    ]
}

Verificando status de importação

Depois que $import é iniciado, um corpo de resposta vazio com um link de retorno de chamada é retornado no Content-location cabeçalho da resposta junto com 202-Accepted status código. Armazene esse link de retorno de chamada para marcar o status de importação.

Para marcar importar status, faça a chamada REST com o GET método para o link de retorno de chamada retornado na etapa anterior. Você pode interpretar a resposta usando a tabela a seguir:

Código de resposta Corpo da resposta Descrição
202 Aceito A operação ainda está em execução.
200 OK O corpo da resposta não contém nenhuma entrada error.url Todos os recursos foram importados com êxito.
200 OK O corpo da resposta contém uma entrada error.url Erro ao importar alguns dos recursos. Consulte os arquivos localizados em error.url para obter os detalhes. O restante dos recursos foi importado com êxito.
Outro Ocorreu um erro fatal e a operação foi interrompida. Os recursos importados com êxito não foram revertidos.

A tabela a seguir fornece alguns dos campos importantes no corpo da resposta:

Campo Descrição
transactionTime Hora de início da operação de importação em massa.
output.count Contagem de recursos que foram importados com êxito
error.count Contagem de recursos que não foram importados devido a algum erro
error.url URL do arquivo que contém detalhes do erro. Cada error.url é exclusivo de uma URL de entrada.

Resposta de exemplo:

{
    "transactionTime": "2021-07-16T06:46:52.3873388+00:00",
    "request": "https://importperf.azurewebsites.net/$Import",
    "output": [
        {
            "type": "Patient",
            "count": 10000,
            "inputUrl": "https://example.blob.core.windows.net/resources/Patient.ndjson"
        },
        {
            "type": "CarePlan",
            "count": 199949,
            "inputUrl": "https://example.blob.core.windows.net/resources/CarePlan.ndjson"
        }
    ],
    "error": [
        { 
        "type": "OperationOutcome",
        "count": 51,
        "inputUrl": "https://example.blob.core.windows.net/resources/CarePlan.ndjson",
        "url": "https://example.blob.core.windows.net/fhirlogs/CarePlan06b88c6933a34c7c83cb18b7dd6ae3d8.ndjson"
        }
    ]
}

Solução de problemas

Permite soluções passo a passo para alguns códigos de erro que você pode encontrar durante a operação de importação.

200 OK, mas há um erro com a URL na resposta

Comportamento: A operação de importação é bem-sucedida e retorna 200 OK. No entanto, error.url estão presentes no corpo da resposta. Os arquivos presentes no error.url local contêm fragmentos JSON semelhantes ao exemplo abaixo:

{
    "resourceType": "OperationOutcome",
    "issue": [
        {
            "severity": "error",
            "details": {
                "text": "Given conditional reference '{0}' does'nt resolve to a resource."
            },
            "diagnostics": "Failed to process resource at line: {0} with stream start offset: {1}"
        }
    ]
}

Causa: Os arquivos NDJSON contêm recursos com referências condicionais, que atualmente não têm suporte do $import.

Solução: Substitua as referências condicionais a referências normais nos arquivos NDJSON.

400 Solicitação Inválida

Comportamento: Falha na operação de importação e 400 Bad Request é retornada. O corpo da resposta tem o seguinte conteúdo:

{
    "resourceType": "OperationOutcome",
    "id": "13876ec9-3170-4525-87ec-9e165052d70d",
    "issue": [
        {
            "severity": "error",
            "code": "processing",
            "diagnostics": "import operation failed for reason: No such host is known. (example.blob.core.windows.net:443)"
        }
    ]
}

Solução: Verifique se o link para o armazenamento do Azure está correto. Verifique as configurações de rede e firewall para garantir que o servidor FHIR possa acessar o armazenamento. Se o serviço estiver em uma VNet, verifique se o armazenamento está na mesma VNet ou em uma VNet que tenha emparelhamento com a VNet do serviço FHIR.

403 Proibido

Comportamento: Falha na operação de importação e 403 Forbidden é retornada. O corpo da resposta tem o seguinte conteúdo:

{
    "resourceType": "OperationOutcome",
    "id": "bd545acc-af5d-42d5-82c3-280459125033",
    "issue": [
        {
            "severity": "error",
            "code": "processing",
            "diagnostics": "import operation failed for reason: Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature."
        }
    ]
}

Causa: Usamos a identidade gerenciada para autenticação de armazenamento de origem. Esse erro pode ser causado por uma atribuição de função ausente ou incorreta.

Solução: Atribua a função colaborador de dados de blob de armazenamento ao servidor FHIR seguindo o guia do RBAC.

Erro interno de servidor 500

Comportamento: Falha na operação de importação e 500 Internal Server Error é retornada. O corpo da resposta tem o seguinte conteúdo:

{
    "resourceType": "OperationOutcome",
    "id": "0d0f007d-9e8e-444e-89ed-7458377d7889",
    "issue": [
        {
            "severity": "error",
            "code": "processing",
            "diagnostics": "import operation failed for reason: The database '****' has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions."
        }
    ]
}

Causa: Você atingiu o limite de armazenamento do serviço FHIR.

Solução: Reduza o tamanho dos dados ou considere a API do Azure para FHIR, que tem um limite de armazenamento maior.

Próximas etapas

Neste artigo, você aprendeu sobre como a operação de importação permite importar dados FHIR para o servidor FHIR com alta taxa de transferência. Para obter mais informações sobre como converter dados em FHIR, exportar configurações para configurar uma conta de armazenamento e mover dados para Azure Synapse, consulte

FHIR® é uma marca registrada da HL7 e é usado com a permissão da HL7.