Partilhar via


Operação de Importação

A operação de importação permite carregar dados de Recursos de Interoperabilidade de Cuidados de Saúde Rápidos (FHIR®) para o servidor FHIR em débito elevado com a operação de $import. A importação suporta a carga de dados inicial e incremental no servidor FHIR.

Utilizar a operação de $import

Nota

Tem de ter a função de Importador de Dados FHIR no servidor FHIR para utilizar $import.

Para utilizar $import, tem de configurar o servidor FHIR com as instruções apresentadas no artigo Configurar definições de importação . Os dados FHIR a importar têm de ser armazenados em ficheiros específicos de recursos no formato FHIR NDJSON no arquivo de blobs do Azure.

Para a operação de importação, certifique-se de que

  • Todos os recursos num ficheiro têm de ser do mesmo tipo. Pode ter vários ficheiros por tipo de recurso.
  • Os dados a importar têm de estar no mesmo Inquilino do serviço FHIR.
  • O número máximo de ficheiros a importar por operação é de 10 000.

Nota:

  • A operação de importação não suporta referências condicionais nos recursos.
  • Durante a operação de importação, se vários recursos partilharem o mesmo ID de recurso, apenas um desses recursos é importado aleatoriamente. Existe um erro registado para os recursos que partilham o mesmo ID de recurso.

Chamar $import

Faça uma POST chamada para <<FHIR service base URL>>/$import com o cabeçalho e corpo do pedido apresentados:

Cabeçalho do Pedido

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

Corpo

Nome do Parâmetro Description Cartão. Valores aceites
inputFormat Cadeia que representa o nome do formato da origem de dados. Atualmente, apenas os ficheiros FHIR NDJSON são suportados. 1..1 application/fhir+ndjson
mode Valor do modo de importação 1..1 Para o valor inicial do modo de utilização InitialLoad de importação. Para o modo de importação incremental, utilize IncrementalLoad o valor do modo. Se não for fornecido nenhum valor de modo, o valor do modo IncrementalLoad é considerado por predefinição.
entrada Detalhes dos ficheiros de entrada. 1..* Uma matriz JSON com três partes descritas na tabela abaixo.
Nome da peça de entrada Description Cartão. Valores aceites
tipo Tipo de recurso do ficheiro de entrada 1..1 Um tipo de recurso FHIR válido que corresponde ao ficheiro de entrada.
URL Url de armazenamento do Azure do ficheiro de entrada 1..1 Valor de URL do ficheiro de entrada que não pode ser modificado.
etag Etag do ficheiro de entrada no armazenamento do Azure utilizado para verificar se o conteúdo do ficheiro não foi alterado. 0..1 Valor Etag do ficheiro de entrada que não pode ser modificado.

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

Verificar o estado da importação

Assim que $import for iniciada, é devolvido um corpo de resposta vazio com uma ligação de chamada de retorno no Content-location cabeçalho da resposta juntamente com 202-Accepted o código de estado. Armazene esta ligação de chamada de retorno para verificar o estado de importação.

Para verificar o estado da importação, faça a chamada REST com o GET método para a ligação de chamada de retorno devolvida no passo anterior. Pode interpretar a resposta com a seguinte tabela:

Código de resposta Corpo da resposta Description
202 Aceite 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 alguma entrada error.url Ocorreu um erro ao importar alguns dos recursos. Veja os ficheiros localizados em error.url para obter os detalhes. Os restantes recursos foram importados com êxito.
Outro Ocorreu um erro fatal e a operação parou. Os recursos importados com êxito não foram revertidos.

A tabela abaixo 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 ficheiro que contém detalhes do erro. Cada error.url é exclusivo de um 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"
        }
    ]
}

Resolução de problemas

Permite percorrer soluções para alguns códigos de erro que poderá encontrar durante a operação de importação.

200 OK, mas existe um erro com o URL na resposta

Comportamento: A operação de importação é efetuada com êxito e devolve 200 OK. No entanto, error.url estão presentes no corpo da resposta. Os ficheiros presentes na error.url localização 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 ficheiros NDJSON contêm recursos com referências condicionais, que atualmente não são suportados por $import.

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

400 Pedido Incorreto

Comportamento: A operação de importação falhou e 400 Bad Request é devolvida. 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 a ligação para o armazenamento do Azure está correta. Verifique as definições de rede e firewall para se certificar de que o servidor FHIR consegue aceder ao armazenamento. Se o seu serviço estiver numa VNet, certifique-se de que o armazenamento está na mesma VNet ou numa VNet que tenha peering com a VNet do serviço FHIR.

403 Proibido

Comportamento: A operação de importação falhou e 403 Forbidden é devolvida. 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: Utilizamos a identidade gerida para autenticação de armazenamento de origem. Este erro pode ser causado por uma atribuição de função em falta ou errada.

Solução: Atribua a função Contribuidor de Dados de Blobs de Armazenamento ao servidor FHIR, seguindo o guia RBAC.

Erro Interno do Servidor 500

Comportamento: A operação de importação falhou e 500 Internal Server Error é devolvida. 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: Atingiu o limite de armazenamento do serviço FHIR.

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

Passos seguintes

Neste artigo, ficou a saber como a operação de importação permite importar dados FHIR para o servidor FHIR com débito elevado. Para obter mais informações sobre como converter dados em FHIR, exportar definições para configurar uma conta de armazenamento e mover dados para Azure Synapse, consulte

FHIR® é uma marca registada do HL7 e é utilizada com a permissão de HL7.