Referências de recursos do FHIR

Esta página explica como a API Cloud Healthcare oferece suporte a referências de recursos FHIR.

Visão geral

As referências de recursos FHIR são links direcionais de um recurso de origem para um recurso de destino. É possível usar as referências de recursos FHIR para conectar os recursos. Por exemplo, o tipo de recurso FHIR Observation tem um campo subject do tipo Referência, que pode ser usado para vincular a um recurso Patient como tema da observação.

As referências de recursos FHIR também podem ser circulares. Por exemplo, o tipo de recurso FHIR CarePlan tem um campo replaces que pode apontar para outro CarePlan.

O elemento mais importante na estrutura de referência do FHIR é a referência. Os outros elementos, como display e identifier, são mantidos como estão na API Cloud Healthcare.

Os formatos compatíveis de Reference.reference na API Cloud Healthcare incluem:

Referência de recursos locais

As referências de recursos são definidas como RESOURCE_TYPE/RESOURCE_ID. A API Cloud Healthcare também é compatível com a inserção do prefixo completo do nome do armazenamento FHIR na frente de RESOURCE_TYPE/RESOURCE_ID. Por exemplo, FHIR_STORE_NAME/RESOURCE_TYPE/RESOURCE_ID. Se você usar esse formato, o nome do armazenamento precisará corresponder ao armazenamento FHIR da solicitação. Caso contrário, a solicitação será rejeitada devido a referências que não são locais.

A opção de configuração do armazenamento FhirStore.disableReferentialIntegrity controla a verificação de integridade referencial da validação de referência local que é ativada por padrão. Para mais informações sobre a verificação de integridade referencial, consulte Integridade referencial do FHIR.

Referências com controle de versão

A API Cloud Healthcare aceita referências a uma versão específica do recurso de destino. Para vincular a uma versão específica do recurso de destino, use o formato após RESOURCE_ID/_history/VERSION_ID] na referência local.

Quando a verificação de integridade referencial é ativada, o servidor verifica se a versão histórica existe no armazenamento FHIR. O método Resource-purge remove versões históricas, com referência ou não.

Referências condicionais

Como alternativa para especificar explicitamente o ID do recurso de destino, executeBundle aceita uma consulta de pesquisa de referência condicional para o recurso de destino que resolve para o ID do recurso de destino no momento da solicitação. Por exemplo, Patient?identifier=abc.

Se a consulta de pesquisa não for resolvida para um recurso de destino ou se for resolvida para mais de um recurso de destino, o servidor rejeitará a solicitação mesmo se a verificação de integridade referencial estiver ativada.

URI que começa com urn:uuid ou urn:oid

Ao usar o método executeBundle com um pacote de transações, é possível usar as referências do identificador universal exclusivo (UUID, na sigla em inglês) ou do identificador de objeto (OID, na sigla em inglês) para resolver referências para outros recursos que estão sendo criados ou atualizados no mesmo pacote. Para mais informações, consulte o guia Como gerenciar pacotes do FHIR.

URL externo completo

Os URLs externos completos, como http://www.example.com/abc, são armazenados sem modificação no campo de referência. A API Cloud Healthcare não resolve o URL nem tenta verificar a validade dele.

Quando o URL externo completo corresponde ao URL completo do armazenamento FHIR da solicitação, a referência é tratada como uma referência de recurso local.

Referência do fragmento

Uma referência de fragmento aponta para uma recurso contido embutidos em um recurso. Por exemplo, se um registro "Observação" mencionar um clínico geral, mas não houver um diretório controlado desses profissionais, não será possível criar um recurso "Clínico geral" completo. O clínico geral é um recurso contido no registro "Observação". Os campos de referência de um recurso podem apontar para os recursos em linha usando a forma de #[INLINE_RESOURCE_ID].

No exemplo de FHIR R4 a seguir, p1 e p2 são IDs de recursos em linha referenciados como #p1 e #p2:

{
  "resourceType": "Observation",
  "contained": [
    {
      "resourceType":"Patient",
      "id": "p1",
      "generalPractitioner": {"reference": "#p2"}
    },
    {
      "resourceType":"Practitioner",
      "id": "p2"
    }
  ],
  "status": "final",
  "subject": {"reference": "#p1"},
  "performer": [{"reference": "#p2"}]
}

O [INLINE_RESOURCE_ID] precisa existir como um recurso contido no recurso. Caso contrário, o servidor rejeitará a solicitação. O recurso contido só pode ser referenciado pelo próprio contêiner ou por outros recursos contidos no mesmo contêiner.