Agrupación de recursos del FHIR - AWS HealthLake

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Agrupación de recursos del FHIR

Un FHIR Bundle es un contenedor que contiene una colección de recursos del FHIR. AWS HealthLake AWS HealthLake admite dos tipos de paquetes con comportamientos diferentes: o. batchtransaction

  • En el caso de un paquete «por lotes», cada recurso del FHIR contenido en el paquete se procesa y registra individualmente. Cada operación de recursos se trata de forma independiente de los demás recursos.

  • En el caso de un paquete de «transacciones», todos los recursos del FHIR contenidos en el paquete se procesan como una operación atómica. Todos los recursos de la operación deben realizarse correctamente o no se confirma ni almacena ninguna actualización de los recursos del paquete.

Puede agrupar recursos del FHIR del mismo tipo o de tipos diferentes, y estos pueden incluir una combinación de otras interacciones del FHIR definidas en este capítulo (p. ej.create,read, updatedelete, ysearch). Para obtener información adicional, consulte el paquete de recursos en la documentación del FHIR R4.

Diferencias clave entre los paquetes de tipo Batch y Transaction:

Por lotes
  • Operaciones independientes que pueden tener éxito o fallar individualmente

  • El procesamiento continúa incluso si algunas operaciones fallan

  • La orden de ejecución no está garantizada

  • Ideal para operaciones masivas en las que es aceptable un éxito parcial

Transacción
  • Atomicidad garantizada: o todas tienen éxito o todas fallan

  • Mantiene la integridad referencial de los recursos a los que se hace referencia localmente (dentro del paquete)

  • Operaciones procesadas en el orden especificado

  • Se produce un error total si se produce un error en alguna operación

Ejemplos de casos de uso:

  • Batch: carga de varios registros de pacientes no relacionados

  • Transacción: crear un paciente con observaciones y afecciones relacionadas, en las que todos deben triunfar juntos

nota

Ambos utilizan el tipo de recurso Bundle, pero difieren en el campo «tipo»:

{ "resourceType": "Bundle", "type": "transaction", "entry": [ { "fullUrl": "urn:uuid:4f6a30fb-cd3c-4ab6-8757-532101f72065", "resource": { "resourceType": "Patient", "id": "new-patient", "active": true, "name": [ { "family": "Johnson", "given": [ "Sarah" ] } ], "gender": "female", "birthDate": "1985-08-12", "telecom": [ { "system": "phone", "value": "555-123-4567", "use": "home" } ] }, "request": { "method": "POST", "url": "Patient" } }, { "fullUrl": "urn:uuid:7f83f473-d8cc-4a8d-86d3-9d9876a3248b", "resource": { "resourceType": "Observation", "id": "blood-pressure", "status": "final", "code": { "coding": [ { "system": "http://loinc.org", "code": "85354-9", "display": "Blood pressure panel" } ], "text": "Blood pressure panel" }, "subject": { "reference": "urn:uuid:4f6a30fb-cd3c-4ab6-8757-532101f72065" }, "effectiveDateTime": "2023-10-15T09:30:00Z", "component": [ { "code": { "coding": [ { "system": "http://loinc.org", "code": "8480-6", "display": "Systolic blood pressure" } ] }, "valueQuantity": { "value": 120, "unit": "mmHg", "system": "http://unitsofmeasure.org", "code": "mm[Hg]" } }, { "code": { "coding": [ { "system": "http://loinc.org", "code": "8462-4", "display": "Diastolic blood pressure" } ] }, "valueQuantity": { "value": 80, "unit": "mmHg", "system": "http://unitsofmeasure.org", "code": "mm[Hg]" } } ] }, "request": { "method": "POST", "url": "Observation" } }, { "resource": { "resourceType": "Appointment", "id": "appointment-123", "status": "booked", "description": "Annual physical examination", "start": "2023-11-15T09:00:00Z", "end": "2023-11-15T09:30:00Z", "participant": [ { "actor": { "reference": "urn:uuid:4f6a30fb-cd3c-4ab6-8757-532101f72065" }, "status": "accepted" } ] }, "request": { "method": "PUT", "url": "Appointment/appointment-123" } }, { "request": { "method": "DELETE", "url": "MedicationRequest/med-request-456" } } ] }

Agrupar los recursos del FHIR como entidades independientes

Para agrupar los recursos del FHIR como entidades independientes

  1. Recolecta HealthLake region y datastoreId valora. Para obtener más información, consulte Obtención de propiedades de los almacenes de datos.

  2. Cree una URL para la solicitud utilizando los valores recopilados para HealthLake region ydatastoreId. No especifique un tipo de recurso FHIR en la URL. Para ver la ruta URL completa en el siguiente ejemplo, desplázate sobre el botón Copiar.

    POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/
  3. Crea un cuerpo JSON para la solicitud y especifica cada verbo HTTP como parte de los method elementos. En el siguiente ejemplo, se utiliza una interacción de batch tipos con el Bundle recurso para crear Medication recursos Patient y nuevos. Todas las secciones obligatorias se comentan en consecuencia. Para realizar este procedimiento, guarde el archivo comobatch-independent.json.

    { "resourceType": "Bundle", "id": "bundle-batch", "meta": { "lastUpdated": "2014-08-18T01:43:30Z" }, "type": "batch", "entry": [ { "resource": { "resourceType": "Patient", "meta": { "lastUpdated": "2022-06-03T17:53:36.724Z" }, "text": { "status": "generated", "div": "Some narrative" }, "active": true, "name": [ { "use": "official", "family": "Jackson", "given": [ "Mateo", "James" ] } ], "gender": "male", "birthDate": "1974-12-25" }, "request": { "method": "POST", "url": "Patient" } }, { "resource": { "resourceType": "Medication", "id": "med0310", "contained": [ { "resourceType": "Substance", "id": "sub03", "code": { "coding": [ { "system": "http://snomed.info/sct", "code": "55452001", "display": "Oxycodone (substance)" } ] } } ], "code": { "coding": [ { "system": "http://snomed.info/sct", "code": "430127000", "display": "Oral Form Oxycodone (product)" } ] }, "form": { "coding": [ { "system": "http://snomed.info/sct", "code": "385055001", "display": "Tablet dose form (qualifier value)" } ] }, "ingredient": [ { "itemReference": { "reference": "#sub03" }, "strength": { "numerator": { "value": 5, "system": "http://unitsofmeasure.org", "code": "mg" }, "denominator": { "value": 1, "system": "http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm", "code": "TAB" } } } ] }, "request": { "method": "POST", "url": "Medication" } } ] }
  4. Envíe la solicitud . El tipo de Bundle lote del FHIR utiliza una POST solicitud con la versión 4 de AWS Signature o SMART previa autorización del FHIR. El siguiente ejemplo de código utiliza la herramienta de línea de curl comandos con fines de demostración.

    SigV4

    autorización SigV4

    curl --request POST \ 'https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/' \ --aws-sigv4 'aws:amz:region:healthlake' \ --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \ --header "x-amz-security-token:$AWS_SESSION_TOKEN" \ --header 'Accept: application/json' \ --data @batch-type.json
    SMART on FHIR

    Ejemplo de autorización SMART on FHIR para el tipo de IdentityProviderConfigurationdatos.

    { "AuthorizationStrategy": "SMART_ON_FHIR", "FineGrainedAuthorizationEnabled": true, "IdpLambdaArn": "arn:aws:lambda:your-region:your-account-id:function:your-lambda-name", "Metadata": "{\"issuer\":\"https://ehr.example.com\", \"jwks_uri\":\"https://ehr.example.com/.well-known/jwks.json\",\"authorization_endpoint\":\"https://ehr.example.com/auth/authorize\",\"token_endpoint\":\"https://ehr.token.com/auth/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_basic\",\"foo\"],\"grant_types_supported\":[\"client_credential\",\"foo\"],\"registration_endpoint\":\"https://ehr.example.com/auth/register\",\"scopes_supported\":[\"openId\",\"profile\",\"launch\"],\"response_types_supported\":[\"code\"],\"management_endpoint\":\"https://ehr.example.com/user/manage\",\"introspection_endpoint\":\"https://ehr.example.com/user/introspect\",\"revocation_endpoint\":\"https://ehr.example.com/user/revoke\",\"code_challenge_methods_supported\":[\"S256\"],\"capabilities\":[\"launch-ehr\",\"sso-openid-connect\",\"client-public\",\"permission-v2\"]}" }

    La persona que llama puede asignar permisos en la lambda de autorización. Para obtener más información, consulte OAuth osciloscopios 2.0.

    El servidor devuelve una respuesta que muestra los Medication recursos Patient y los recursos creados como resultado de la solicitud de tipo Bundle lote.

Condicional PUTs en paquetes

AWS HealthLake admite las actualizaciones condicionales dentro de los paquetes mediante los siguientes parámetros de consulta:

  • _id(independiente)

  • _iden combinación con uno de los siguientes:

    • _tag

    • _createdAt

    • _lastUpdated

En función de los resultados de hacer coincidir las condiciones proporcionadas con el recurso existente, ocurrirá lo siguiente con los códigos de resultado asociados que indican la acción realizada:

Al crear o actualizar los recursos del FHIR, el sistema gestiona diferentes escenarios en función de la asignación de ID de recursos y de las coincidencias existentes:

  • Los recursos que no IDs los tienen siempre se crean (201).

  • IDs Se crean los recursos con nuevos (201).

  • Los recursos existentes IDs actualizan el recurso coincidente (200) o devuelven errores si hay un conflicto (409) o si los identificadores no coinciden (400).

  • Si hay varios recursos coincidentes, se produce un error en una condición previa (419).

En el ejemplo del paquete con actualización condicional, el recurso para pacientes con el identificador FHIR solo 456 se actualizará si _lastUpdated=lt2025-04-20 se cumple la condición.

{ "resourceType": "Bundle", "id": "bundle-batch", "meta": { "lastUpdated": "2014-08-18T01:43:30Z" }, "type": "batch", "entry": [ { "resource": { "resourceType": "Patient", "id": "476", "meta": { "lastUpdated": "2022-06-03T17:53:36.724Z" }, "active": true, "name": [ { "use": "official", "family": "Jackson", "given": [ "Mateo", "James" ] } ], "gender": "male", "birthDate": "1974-12-25" }, "request": { "method": "PUT", "url": "Patient?_id=476&_lastUpdated=lt2025-04-20" } }, { "resource": { "resourceType": "Medication", "id": "med0310", "contained": [ { "resourceType": "Substance", "id": "sub03", "code": { "coding": [ { "system": "http://snomed.info/sct", "code": "55452001", "display": "Oxycodone (substance)" } ] } } ], "code": { "coding": [ { "system": "http://snomed.info/sct", "code": "430127000", "display": "Oral Form Oxycodone (product)" } ] }, "form": { "coding": [ { "system": "http://snomed.info/sct", "code": "385055001", "display": "Tablet dose form (qualifier value)" } ] }, "ingredient": [ { "itemReference": { "reference": "#sub03" }, "strength": { "numerator": { "value": 5, "system": "http://unitsofmeasure.org", "code": "mg" }, "denominator": { "value": 1, "system": "http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm", "code": "TAB" } } } ] }, "request": { "method": "POST", "url": "Medication" } } ] }

Agrupar los recursos del FHIR como una sola entidad

Para agrupar los recursos del FHIR como una sola entidad

  1. HealthLake regionRecopila y datastoreId valora. Para obtener más información, consulte Obtención de propiedades de los almacenes de datos.

  2. Cree una URL para la solicitud utilizando los valores recopilados para HealthLake region ydatastoreId. Incluya el tipo de recurso FHIR Bundle como parte de la URL. Para ver la ruta URL completa en el siguiente ejemplo, desplázate sobre el botón Copiar.

    POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Bundle
  3. Crea un cuerpo JSON para la solicitud, especificando los recursos del FHIR que quieres agrupar. En el siguiente ejemplo, se agrupan dos Patient recursos. HealthLake Para realizar este procedimiento, guarde el archivo comobatch-single.json.

    { "resourceType": "Bundle", "id": "bundle-minimal", "language": "en-US", "identifier": { "system": "urn:oid:1.2.3.4.5", "value": "28b95815-76ce-457b-b7ae-a972e527db4f" }, "type": "document", "timestamp": "2020-12-11T14:30:00+01:00", "entry": [ { "fullUrl": "urn:uuid:f40b07e3-37e8-48c3-bf1c-ae70fe12dabf", "resource": { "resourceType": "Composition", "id": "f40b07e3-37e8-48c3-bf1c-ae70fe12dabf", "status": "final", "type": { "coding": [ { "system": "http://loinc.org", "code": "60591-5", "display": "Patient summary Document" } ] }, "date": "2020-12-11T14:30:00+01:00", "author": [ { "reference": "urn:uuid:45271f7f-63ab-4946-970f-3daaaa0663ff" } ], "title": "Patient Summary as of December 7, 2020 14:30" } }, { "fullUrl": "urn:uuid:45271f7f-63ab-4946-970f-3daaaa0663ff", "resource": { "resourceType": "Practitioner", "id": "45271f7f-63ab-4946-970f-3daaaa0663ff", "active": true, "name": [ { "family": "Doe", "given": [ "John" ] } ] } } ] }
  4. Envíe la solicitud . El tipo de Bundle documento FHIR utiliza una POST solicitud con el protocolo de AWS firma Signature versión 4. El siguiente ejemplo de código utiliza la herramienta de línea de curl comandos con fines de demostración.

    SigV4

    autorización SigV4

    curl --request POST \ 'https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Bundle' \ --aws-sigv4 'aws:amz:region:healthlake' \ --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \ --header "x-amz-security-token:$AWS_SESSION_TOKEN" \ --header 'Accept: application/json' \ --data @document-type.json
    SMART on FHIR

    Ejemplo de autorización SMART on FHIR para el tipo de IdentityProviderConfigurationdatos.

    { "AuthorizationStrategy": "SMART_ON_FHIR", "FineGrainedAuthorizationEnabled": true, "IdpLambdaArn": "arn:aws:lambda:your-region:your-account-id:function:your-lambda-name", "Metadata": "{\"issuer\":\"https://ehr.example.com\", \"jwks_uri\":\"https://ehr.example.com/.well-known/jwks.json\",\"authorization_endpoint\":\"https://ehr.example.com/auth/authorize\",\"token_endpoint\":\"https://ehr.token.com/auth/token\",\"token_endpoint_auth_methods_supported\":[\"client_secret_basic\",\"foo\"],\"grant_types_supported\":[\"client_credential\",\"foo\"],\"registration_endpoint\":\"https://ehr.example.com/auth/register\",\"scopes_supported\":[\"openId\",\"profile\",\"launch\"],\"response_types_supported\":[\"code\"],\"management_endpoint\":\"https://ehr.example.com/user/manage\",\"introspection_endpoint\":\"https://ehr.example.com/user/introspect\",\"revocation_endpoint\":\"https://ehr.example.com/user/revoke\",\"code_challenge_methods_supported\":[\"S256\"],\"capabilities\":[\"launch-ehr\",\"sso-openid-connect\",\"client-public\",\"permission-v2\"]}" }

    La persona que llama puede asignar permisos en la lambda de autorización. Para obtener más información, consulte OAuth osciloscopios 2.0.

    El servidor devuelve una respuesta que muestra dos Patient recursos creados como resultado de la solicitud de tipo de Bundle documento.

Configurar el nivel de validación de los paquetes

Al agrupar los recursos del FHIR, puede especificar opcionalmente un encabezado x-amzn-healthlake-fhir-validation-level HTTP para configurar un nivel de validación para el recurso. Este nivel de validación se establecerá para todas las solicitudes de creación y actualización del paquete. AWS HealthLake actualmente admite los siguientes niveles de validación:

  • strict: Los recursos se validan según el elemento de perfil del recurso o según la especificación R4 si no hay ningún perfil presente. Este es el nivel de validación predeterminado para AWS HealthLake.

  • structure-only: Los recursos se validan con el R4 e ignoran los perfiles a los que se hace referencia.

  • minimal: Los recursos se validan mínimamente, ignorando ciertas reglas de R4. Los recursos que no superen las comprobaciones de estructura requeridas se search/analytics actualizarán para incluir una advertencia para la auditoría.

Los recursos incluidos con un nivel de validación mínimo pueden incorporarse a un almacén de datos a pesar de no pasar la validación necesaria para la indexación de las búsquedas. En este caso, los recursos se actualizarán para incluir una extensión específica de Healthlake para documentar dichos errores, y las entradas de la respuesta del paquete incluirán los siguientes recursos: OperationOutcome

{ "resourceType": "Bundle", "type": "batch-response", "timestamp": "2025-08-25T22:58:48.846287342Z", "entry": [ { "response": { "status": "201", "location": "Patient/195abc49-ba8e-4c8b-95c2-abc88fef7544/_history/1", "etag": "W/\"1\"", "lastModified": "2025-08-25T22:58:48.801245445Z", "outcome": { "resourceType": "OperationOutcome", "issue": [ { "severity": "error", "code": "processing", "details": { "text": "FHIR resource in payload failed FHIR validation rules." }, "diagnostics": "FHIR resource in payload failed FHIR validation rules." } ] } } } ] }

Además, se incluirá el siguiente encabezado de respuesta HTTP con el valor «true»:

x-amzn-healthlake-validation-issues : true
nota

Tenga en cuenta que es posible que los datos ingresados que tengan un formato incorrecto según la especificación R4 no se puedan buscar como se esperaba si se presentan estos errores.