Bündelung der FHIR-Ressourcen - AWS HealthLake

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Bündelung der FHIR-Ressourcen

Ein FHIR Bundle ist ein Container für eine Sammlung von FHIR-Ressourcen in. AWS HealthLake AWS HealthLake unterstützt zwei Arten von Bundles mit unterschiedlichem Verhalten: oder. batchtransaction

  • Bei einem Batch-Paket wird jede im Paket enthaltene FHIR-Ressource einzeln verarbeitet und protokolliert. Jeder Ressourcenvorgang wird unabhängig von den anderen Ressourcen behandelt.

  • Bei einem Transaktionspaket werden alle im Paket enthaltenen FHIR-Ressourcen als atomare Operation verarbeitet. Alle Ressourcen des Vorgangs müssen erfolgreich sein, oder es werden keine Ressourcenaktualisierungen im Paket festgeschrieben und gespeichert.

Sie können FHIR-Ressourcen desselben oder verschiedener Typen bündeln, und sie können eine Mischung aus anderen in diesem Kapitel definierten FHIR-Interaktionen enthalten (z. B.create,, read updatedelete, undsearch). Weitere Informationen finden Sie unter Resource Bundle in der FHIR R4-Dokumentation.

Hauptunterschiede zwischen Paketen vom Typ Batch und Transaktion:

Stapel
  • Unabhängige Operationen, die einzeln erfolgreich sein oder fehlschlagen können

  • Die Verarbeitung wird fortgesetzt, auch wenn einige Operationen fehlschlagen

  • Die Reihenfolge der Ausführung ist nicht garantiert

  • Ideal für Massenoperationen, bei denen ein teilweiser Erfolg akzeptabel ist

Transaktion
  • Atomarität garantiert — entweder sind alle erfolgreich oder alle scheitern

  • Behält die referenzielle Integrität für lokal referenzierte Ressourcen (innerhalb des Bundles) bei

  • Die Operationen wurden in der angegebenen Reihenfolge verarbeitet

  • Schlägt vollständig fehl, wenn ein Vorgang fehlschlägt

Beispiele für Anwendungsfälle:

  • Batch: Hochladen mehrerer Patientenakten, die nichts miteinander zu tun haben

  • Transaktion: Erstellung eines Patienten mit ähnlichen Beobachtungen und Erkrankungen, bei dem alle gemeinsam erfolgreich sein müssen

Anmerkung

Beide verwenden den Bundle-Ressourcentyp, unterscheiden sich jedoch im Feld „Typ“:

{ "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" } } ] }

Bündelung von FHIR-Ressourcen als unabhängige Einheiten

Um FHIR-Ressourcen als unabhängige Einheiten zu bündeln

  1. Sammeln HealthLake region und bewertendatastoreId. Weitere Informationen finden Sie unter Eigenschaften des Datenspeichers abrufen.

  2. Konstruieren Sie mithilfe der gesammelten Werte für HealthLake region und eine URL für die AnfragedatastoreId. Geben Sie in der URL keinen FHIR-Ressourcentyp an. Scrollen Sie über die Schaltfläche Kopieren, um den gesamten URL-Pfad im folgenden Beispiel anzuzeigen.

    POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/
  3. Konstruieren Sie einen JSON-Hauptteil für die Anfrage und geben Sie jedes HTTP-Verb als Teil der method Elemente an. Im folgenden Beispiel wird eine batch Typinteraktion mit der Bundle Ressource verwendet, um neue Medication Ressourcen Patient zu erstellen. Alle erforderlichen Abschnitte sind entsprechend kommentiert. Speichern Sie die Datei für dieses Verfahren unterbatch-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. Senden Sie die Anforderung . Der Bundle Batchtyp FHIR verwendet eine POST Anfrage mit entweder AWS Signature Version 4 oder SMART bei der FHIR-Autorisierung. Im folgenden Codebeispiel wird das curl Befehlszeilentool zu Demonstrationszwecken verwendet.

    SigV4

    SigV4-Autorisierung

    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

    Beispiel für die SMART-on-FHIR-Autorisierung für den IdentityProviderConfigurationDatentyp.

    { "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\"]}" }

    Der Anrufer kann im Autorisierungs-Lambda Berechtigungen zuweisen. Weitere Informationen finden Sie unter OAuth 2.0-Bereiche.

    Der Server gibt eine Antwort zurück, in der die Medication Ressourcen Patient und die Ressourcen angezeigt werden, die als Ergebnis der Bundle Batch-Anfrage erstellt wurden.

PUTs Befriedigend in Paketen

AWS HealthLake unterstützt bedingte Updates innerhalb von Bundles mit den folgenden Abfrageparametern:

  • _id(eigenständig)

  • _idin Kombination mit einer der folgenden Optionen:

    • _tag

    • _createdAt

    • _lastUpdated

Basierend auf den Ergebnissen der Anpassung der für die vorhandene Ressource bereitgestellten Bedingungen wird Folgendes geschehen, wobei die zugehörigen Ergebniscodes die ergriffenen Maßnahmen angeben:

Bei der Erstellung oder Aktualisierung von FHIR-Ressourcen verarbeitet das System verschiedene Szenarien, die auf der Bereitstellung von Ressourcen-IDs und vorhandenen Übereinstimmungen basieren:

  • Ressourcen ohne IDs werden immer erstellt (201).

  • Ressourcen mit neuen Ressourcen IDs werden erstellt (201).

  • Ressourcen, die bereits vorhanden sind, aktualisieren IDs entweder die passende Ressource (200) oder geben Fehler zurück, wenn ein Konflikt (409) oder die ID nicht übereinstimmt (400).

  • Mehrere übereinstimmende Ressourcen lösen einen Fehler bei der Vorbedingung aus (419).

Im Beispielpaket mit bedingter Aktualisierung 456 wird die Patientenressource mit der FHIR-ID nur aktualisiert, wenn die Bedingung _lastUpdated=lt2025-04-20 erfüllt ist.

{ "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" } } ] }

Bündelung von FHIR-Ressourcen zu einer einzigen Einheit

Um FHIR-Ressourcen zu einer einzigen Einheit zu bündeln

  1. Sammeln HealthLake region und datastoreId schätzen. Weitere Informationen finden Sie unter Eigenschaften des Datenspeichers abrufen.

  2. Konstruieren Sie mithilfe der gesammelten Werte für HealthLake region und eine URL für die AnfragedatastoreId. Nehmen Sie den FHIR-Ressourcentyp Bundle als Teil der URL auf. Scrollen Sie über die Schaltfläche Kopieren, um den gesamten URL-Pfad im folgenden Beispiel anzuzeigen.

    POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Bundle
  3. Konstruieren Sie einen JSON-Hauptteil für die Anfrage und geben Sie die FHIR-Ressourcen an, die gruppiert werden sollen. Im folgenden Beispiel werden zwei Patient Ressourcen gruppiert HealthLake. Speichern Sie die Datei für dieses Verfahren unterbatch-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. Senden Sie die Anforderung . Der Bundle Dokumenttyp FHIR verwendet eine POST Anfrage mit dem AWS Signature Version 4-Signaturprotokoll. Im folgenden Codebeispiel wird das curl Befehlszeilentool zu Demonstrationszwecken verwendet.

    SigV4

    SigV4-Autorisierung

    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

    Beispiel für die SMART-on-FHIR-Autorisierung für den IdentityProviderConfigurationDatentyp.

    { "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\"]}" }

    Der Anrufer kann im Autorisierungs-Lambda Berechtigungen zuweisen. Weitere Informationen finden Sie unter OAuth 2.0-Bereiche.

    Der Server gibt eine Antwort zurück, in der zwei Patient Ressourcen angezeigt werden, die als Ergebnis der Bundle Dokumenttypanforderung erstellt wurden.

Konfiguration der Validierungsebene für Bundles

Beim Bündeln von FHIR-Ressourcen können Sie optional einen x-amzn-healthlake-fhir-validation-level HTTP-Header angeben, um eine Validierungsebene für die Ressource zu konfigurieren. Diese Validierungsebene wird für alle Erstellungs- und Aktualisierungsanforderungen innerhalb des Bundles festgelegt. AWS HealthLake unterstützt derzeit die folgenden Validierungsstufen:

  • strict: Ressourcen werden anhand des Profilelements der Ressource oder der R4-Spezifikation, falls kein Profil vorhanden ist, validiert. Dies ist die Standardvalidierungsebene für AWS HealthLake.

  • structure-only: Ressourcen werden anhand von R4 validiert, wobei alle referenzierten Profile ignoriert werden.

  • minimal: Ressourcen werden minimal validiert, wobei bestimmte R4-Regeln ignoriert werden. Ressourcen, die die erforderlichen Strukturprüfungen nicht bestehen, search/analytics werden aktualisiert und enthalten nun eine Warnung zur Prüfung.

Ressourcen, die mit der Mindestvalidierungsstufe gebündelt sind, können in einen Datenspeicher aufgenommen werden, obwohl die für die Suchindizierung erforderliche Überprüfung fehlgeschlagen ist. In diesem Fall werden die Ressourcen mit einer Healthlake-spezifischen Erweiterung aktualisiert, um diese Fehler zu dokumentieren, und die Einträge in der Bundle-Antwort werden Ressourcen wie folgt enthalten: 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." } ] } } } ] }

Zusätzlich wird der folgende HTTP-Antwort-Header mit dem Wert „true“ hinzugefügt:

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

Beachten Sie, dass aufgenommene Daten, die gemäß der R4-Spezifikation falsch formatiert sind, möglicherweise nicht wie erwartet durchsucht werden können, wenn diese Fehler vorliegen.