Riferimenti tra risorse FHIR

Questa pagina spiega in che modo l'API Cloud Healthcare supporta Riferimenti delle risorse FHIR.

Panoramica

I riferimenti alle risorse FHIR sono link diretti da una risorsa di origine a una risorsa di destinazione. I riferimenti alle risorse FHIR possono essere utilizzati per connettere le risorse. Per Ad esempio, il tipo di risorsa FHIR Observation ha un campo subject il tipo di riferimento, che può essere utilizzato per il collegamento a una risorsa Patient come oggetto dell'osservazione.

I riferimenti alle risorse FHIR possono anche essere circolari. Ad esempio, il tipo di risorsa FHIR CarePlan ha un campo replaces che può puntare a un altro CarePlan.

L'elemento più importante nella struttura di riferimento FHIR è reference. Gli altri elementi, come display e identifier, sono persistenti così come sono nell'API Cloud Healthcare.

I formati supportati di Reference.reference nell'API Cloud Healthcare include:

Riferimento alla risorsa locale

I riferimenti alle risorse sono definiti come RESOURCE_TYPE/RESOURCE_ID. L'API Cloud Healthcare supporta anche l'aggiunta del nome completo del datastore FHIR davanti a RESOURCE_TYPE/RESOURCE_ID. Per un esempio, FHIR_STORE_NAME/RESOURCE_TYPE/RESOURCE_ID. Se utilizzi questo formato, il nome del datastore deve corrispondere al datastore FHIR della richiesta. In caso contrario, la richiesta viene rifiutata a causa di riferimenti non locali.

L'opzione di configurazione del datastore FhirStore.disableReferentialIntegrity controlla il controllo dell'integrità referenziale per la convalida dei riferimenti locali, è abilitata per impostazione predefinita. Per ulteriori informazioni sul controllo dell'integrità referenziale, consulta Integrità referenziale FHIR.

Riferimenti con più versioni

L'API Cloud Healthcare supporta i riferimenti a una versione specifica della risorsa di destinazione. Per creare un link a una versione specifica della risorsa di destinazione, utilizza il formato dopo RESOURCE_ID/_history/VERSION_ID] nel riferimento locale.

Quando il controllo dell'integrità referenziale è abilitato, il server verifica che la versione storica esista nell'archivio FHIR. La Resource-purge rimuove le versioni cronologiche indipendentemente dal fatto che vi si faccia riferimento o meno.

Riferimenti condizionali

In alternativa a specificare esplicitamente l'ID risorsa di destinazione, executeBundle accetta una query di ricerca con riferimento condizionale per la risorsa di destinazione che risolve nell'ID risorsa di destinazione al momento della richiesta. Ad esempio: Patient?identifier=abc.

Se la query di ricerca non risolve in una risorsa di destinazione o in più di una, il server rifiuta la richiesta indipendentemente dal fatto che il controllo dell'integrità referenziale sia abilitato.

URI che inizia con urn:uuid o urn:oid

Quando utilizzi il metodo executeBundle con un bundle di transazioni, puoi utilizzare riferimenti a UUID (Universally Unique Identifier) o OID (Object Identifier) per risolvere i riferimenti ad altre risorse in fase di creazione o aggiornamento nello stesso bundle. Per saperne di più, consulta la guida alla gestione dei bundle FHIR.

URL esterno completo

Gli URL esterni completi come http://www.example.com/abc vengono archiviati non modificati nel campo di riferimento. L'API Cloud Healthcare non risolve l'URL o non tenta di verificarne la validità.

Quando l'URL esterno completo corrisponde all'URL completo dell'archivio FHIR della richiesta, il riferimento viene trattato come un riferimento a una risorsa locale.

Riferimento frammento

Un frammento di riferimento punta a un risorsa contenuta incorporati in una risorsa. Ad esempio, se un record di osservazione menziona un medico di base, ma non esiste una directory di medici controllata, non è possibile creare una risorsa completa per il medico. Il medico di base è una risorsa contenuta nel record Osservazione. I campi di riferimento di una risorsa possono puntare alle risorse incorporate utilizzando la forma #[INLINE_RESOURCE_ID].

Nel seguente esempio di FHIR R4, p1 e p2 sono ID risorse in linea a cui viene fatto riferimento come #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"}]
}

[INLINE_RESOURCE_ID] deve esistere come risorsa contenuta all'interno dell'istruzione risorsa, in caso contrario il server rifiuta la richiesta. La risorsa contenuta può a cui vi fa riferimento solo il container o altre risorse contenute all'interno dello stesso containerizzato.