Referencias de recursos de FHIR

En esta página, se explica cómo la API de Cloud Healthcare admite las referencias de recursos de FHIR.

Descripción general

Las referencias de recursos de FHIR son vínculos direccionales que apuntan a un recurso de destino a partir de un recurso de origen. Las referencias de recursos de FHIR se pueden usar para conectar recursos. Por ejemplo, el tipo de recurso de FHIR Observation tiene un campo de Referencia del tipo subject, que se puede usar para vincular a un recurso Patient como sujeto de la observación.

Las referencias de recursos de FHIR también pueden ser circulares. Por ejemplo, el tipo de recurso de FHIR CarePlan tiene un campo replaces que puede apuntar a otro CarePlan.

El elemento más importante en la estructura de referencia de FHIR es la referencia. Los otros elementos, como display y identifier, se conservan como en la API de Cloud Healthcare.

Los formatos compatibles de Reference.reference en la API de Cloud Healthcare incluyen los siguientes:

Referencia de recursos locales

Las referencias de recursos se definen como RESOURCE_TYPE/RESOURCE_ID. La API de Cloud Healthcare también admite anteponer el nombre completo del almacén de FHIR frente a RESOURCE_TYPE/RESOURCE_ID. Por ejemplo, FHIR_STORE_NAME/RESOURCE_TYPE/RESOURCE_ID. Si usas este formato, el nombre del almacén debe coincidir con el almacén de FHIR de la solicitud. De lo contrario, se rechaza la solicitud debido a referencias no locales.

La opción de configuración de almacenes FhirStore.disableReferentialIntegrity controla la verificación de integridad referencial para la validación de referencia local, que se habilita de forma predeterminada. Para obtener más información sobre la verificación de integridad referencial, consulta Integridad referencial de FHIR.

Referencias con versiones

La API de Cloud Healthcare admite referencias a una versión específica del recurso de destino. Para establecer un vínculo a una versión específica del recurso de destino, usa el formato que sigue después de RESOURCE_ID/_history/VERSION_ID] en la referencia local.

Cuando la verificación de integridad referencial está habilitada, el servidor verifica que la versión histórica exista en el almacén de FHIR. El método Resource-purge quita las versiones históricas sin importar si se hace referencia a ellas.

Referencias condicionales

Como alternativa a especificar explícitamente el ID del recurso de destino, executeBundle acepta una búsqueda de referencia condicional para el recurso de destino que resuelve el ID del recurso objetivo en el momento de la solicitud. Por ejemplo, Patient?identifier=abc.

Si la búsqueda no se resuelve en un recurso de destino o se resuelve en más de uno, el servidor rechaza la solicitud, independientemente de si está habilitada la verificación de integridad referencial.

URI que comienza con urn:uuid o urn:oid

Cuando usas el método executeBundle con un paquete de transacciones, las referencias de identificador único universal (UUID) o de identificador de objeto (OID) se pueden usar para resolver referencias en otros recursos que se crean o actualizan en el mismo paquete. Para obtener más información, consulta la guía de administración de paquetes de FHIR.

URL externa completa

Las URL externas completas, como http://www.example.com/abc, se almacenan sin modificar en el campo de referencia. La API de Cloud Healthcare no resuelve la URL ni intenta verificar su validez.

Cuando la URL externa completa coincide con la URL completa del almacén de FHIR de la solicitud, la referencia se trata como una referencia de recurso local.

Referencia de fragmentos

Una referencia de fragmento apunta a un recurso contenido que está intercalado en un recurso. Por ejemplo, si un registro de observación menciona a un profesional general, pero no hay un directorio de profesionales controlado, no se puede crear un recurso de profesional completo. El profesional general es un recurso contenido en el registro de observación. Los campos de referencia de un recurso pueden apuntar a los recursos intercalados con la forma #[INLINE_RESOURCE_ID].

En la siguiente muestra de FHIR R4, p1 y p2 son ID de recursos intercalados a los que se hace referencia como #p1 y #p2:

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

El [INLINE_RESOURCE_ID] debe existir como un recurso contenido dentro del recurso; de lo contrario, el servidor rechaza la solicitud. El contenedor contenido solo puede hacer referencia a su contenedor o a otros recursos contenidos dentro del mismo contenedor.