View a markdown version of this page

Raggruppamento di risorse FHIR - AWS HealthLake

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Raggruppamento di risorse FHIR

Un FHIR Bundle è un contenitore per una raccolta di risorse FHIR in. AWS HealthLake AWS HealthLake supporta due tipi di pacchetti con comportamenti di elaborazione diversi.

Batchi pacchetti elaborano ogni risorsa in modo indipendente. Se una risorsa fallisce, le risorse rimanenti possono comunque avere successo. Ogni operazione viene elaborata singolarmente e l'elaborazione continua anche quando alcune operazioni falliscono. Utilizzate pacchetti in batch per operazioni di massa in cui è accettabile un successo parziale, come il caricamento di più cartelle cliniche di pazienti non correlate.

Transactioni pacchetti elaborano tutte le risorse in modo atomico come una singola unità. Tutte le operazioni relative alle risorse hanno esito positivo oppure nessuna di AWS HealthLake esse viene eseguita. Utilizza i pacchetti di transazioni quando hai bisogno di un'integrità referenziale garantita tra le risorse correlate, ad esempio per creare un paziente con osservazioni e condizioni correlate in cui tutti i dati devono essere registrati insieme.

Differenze tra pacchetti batch e pacchetti di transazioni
Funzionalità Archiviazione Transaction
Modello di elaborazione Ogni operazione riesce o fallisce indipendentemente. Tutte le operazioni hanno esito positivo o negativo come singola unità atomica.
Gestione degli errori L'elaborazione continua anche se le singole operazioni falliscono. L'intero pacchetto fallisce se una singola operazione fallisce.
Ordine di esecuzione L'ordine di esecuzione non è garantito. Le operazioni vengono elaborate nell'ordine specificato.
Integrità referenziale Non applicato in tutte le operazioni. Applicato per le risorse referenziate localmente all'interno del pacchetto.
Ideale per Operazioni in blocco in cui il successo parziale è accettabile. Risorse correlate che devono essere create o aggiornate insieme.

È possibile raggruppare risorse FHIR dello stesso tipo o di tipo diverso e queste possono includere una combinazione di operazioni FHIR, come,create, readupdate, delete e. patch Per ulteriori informazioni, vedere Resource Bundle nella documentazione di FHIR R4.

Di seguito sono riportati alcuni esempi di casi d'uso per ogni tipo di pacchetto.

Pacchetti Batch
  • Carica più cartelle cliniche dei pazienti non correlate da diverse strutture durante la sincronizzazione notturna dei dati.

  • Carica in blocco la cronologia dei farmaci, in cui alcuni dati potrebbero presentare problemi di convalida.

  • Carica dati di riferimento, ad esempio organizzazioni e professionisti, laddove i singoli errori non influiscano sulle altre voci.

Pacchetti di transazioni
  • Crea un paziente con le relative osservazioni e condizioni durante il ricovero al pronto soccorso, in cui tutti i dati devono essere registrati insieme.

  • Aggiorna l'elenco dei farmaci del paziente e le relative informazioni sulle allergie, che devono rimanere coerenti.

  • Registra un incontro completo con il paziente, le osservazioni, le procedure e le informazioni di fatturazione come un'unica unità atomica.

Importante

Sia i pacchetti batch che quelli di transazione utilizzano la stessa Bundle struttura di risorse. L'unica differenza è il valore del type campo.

L'esempio seguente mostra un pacchetto di transazioni con più tipi di risorse e operazioni.

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

Raggruppamento di risorse FHIR come entità indipendenti

Raggruppare le risorse FHIR come entità indipendenti

  1. Raccogli HealthLake region e datastoreId valorizza. Per ulteriori informazioni, consulta Ottenere le proprietà dell'archivio dati.

  2. Costruisci un URL per la richiesta utilizzando i valori raccolti per HealthLake region edatastoreId. Non specificate un tipo di risorsa FHIR nell'URL. Per visualizzare l'intero percorso dell'URL nell'esempio seguente, scorri il pulsante Copia.

    POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/
  3. Costruisci un corpo JSON per la richiesta, specificando ogni verbo HTTP come parte degli elementi. method L'esempio seguente utilizza un'interazione batch di tipo con la Bundle risorsa per creare nuove risorse. Patient Medication Tutte le sezioni obbligatorie vengono commentate di conseguenza. Ai fini di questa procedura, salva il file con nome. batch-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. Inviare la richiesta . Il tipo di Bundle batch FHIR utilizza una POST richiesta con autorizzazione AWS Signature Version 4 o SMART on FHIR. Il seguente esempio di codice utilizza lo strumento da riga di curl comando a scopo dimostrativo.

    SigV4

    Autorizzazione 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

    Esempio di autorizzazione SMART on FHIR per il tipo di dati IdentityProviderConfiguration.

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

    Il chiamante può assegnare le autorizzazioni nella lambda di autorizzazione. Per ulteriori informazioni, consulta OAuth Cannocchiali 2.0.

    Il server restituisce una risposta che mostra le Medication risorse Patient e le risorse create a seguito della Bundle richiesta di tipo batch.

Condizionale PUTs nei pacchetti

AWS HealthLake supporta gli aggiornamenti condizionali all'interno dei pacchetti utilizzando i seguenti parametri di query:

  • _id(autonomo)

  • _idin combinazione con uno dei seguenti:

    • _tag

    • _createdAt

    • _lastUpdated

Quando si utilizza il condizionale PUTs nei pacchetti, AWS HealthLake valuta i parametri della query rispetto alle risorse esistenti e interviene in base ai risultati della corrispondenza.

Comportamento di aggiornamento condizionale
Scenario Stato HTTP Azione intrapresa
Risorsa senza ID fornito 201 Creato Crea sempre una nuova risorsa.
Risorsa con nuovo ID (nessuna corrispondenza) 201 Creato Crea una nuova risorsa con l'ID specificato.
Risorsa con ID esistente (corrispondenza singola) 200 OK Aggiorna la risorsa corrispondente.
Risorsa con ID esistente (è stato rilevato un conflitto) 409 Conflitto Restituisce un errore. Non viene apportata alcuna modifica.
Risorsa con ID esistente (ID non corrispondente) 400 Richiesta non valida Restituisce un errore. Non viene apportata alcuna modifica.
Risorse multiple soddisfano le condizioni 412 Precondizione non riuscita Restituisce un errore. Non viene apportata alcuna modifica.

Nel seguente esempio, abbinato a un aggiornamento condizionale, la Patient risorsa con ID FHIR si 476 aggiorna solo se la condizione _lastUpdated=lt2025-04-20 è soddisfatta.

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

Raggruppamento delle risorse FHIR come singola entità

Per raggruppare le risorse FHIR come un'unica entità

  1. Raccogli HealthLake region e datastoreId valorizza. Per ulteriori informazioni, consulta Ottenere le proprietà dell'archivio dati.

  2. Costruisci un URL per la richiesta utilizzando i valori raccolti per HealthLake region edatastoreId. Includi il tipo di risorsa FHIR Bundle come parte dell'URL. Per visualizzare l'intero percorso dell'URL nell'esempio seguente, scorri il pulsante Copia.

    POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Bundle
  3. Costruisci un corpo JSON per la richiesta, specificando le risorse FHIR da raggruppare. L'esempio seguente raggruppa due risorse in. Patient HealthLake Ai fini di questa procedura, salva il file con nomebatch-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. Inviare la richiesta . Il tipo di Bundle documento FHIR utilizza una POST richiesta con protocollo di AWS firma Signature Version 4. Il seguente esempio di codice utilizza lo strumento da riga di curl comando a scopo dimostrativo.

    SigV4

    Autorizzazione 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

    Esempio di autorizzazione SMART on FHIR per il tipo di dati IdentityProviderConfiguration.

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

    Il chiamante può assegnare le autorizzazioni nella lambda di autorizzazione. Per ulteriori informazioni, consulta OAuth Cannocchiali 2.0.

    Il server restituisce una risposta che mostra due Patient risorse create a seguito della richiesta del Bundle tipo di documento.

Configurazione del livello di convalida per i pacchetti

Quando raggruppate le risorse FHIR, potete facoltativamente specificare un'intestazione x-amzn-healthlake-fhir-validation-level HTTP per configurare un livello di convalida per la risorsa. Questo livello di convalida verrà impostato per tutte le richieste di creazione e aggiornamento all'interno del pacchetto. AWS HealthLake attualmente supporta i seguenti livelli di convalida:

  • strict: Le risorse vengono convalidate in base all'elemento del profilo della risorsa o alla specifica R4 se non è presente alcun profilo. Questo è il livello di convalida predefinito per. AWS HealthLake

  • structure-only: Le risorse vengono convalidate rispetto a R4, ignorando i profili di riferimento.

  • minimal: Le risorse vengono convalidate minimamente, ignorando alcune regole R4. Le risorse che non superano i controlli di struttura richiesti search/analytics verranno aggiornate per includere un avviso per l'audit.

Le risorse associate al livello di convalida minimo possono essere inserite in un Datastore nonostante la convalida non riuscita richiesta per l'indicizzazione della ricerca. In questo caso, le risorse verranno aggiornate per includere un'estensione specifica di Healthlake per documentare tali errori e le voci contenute nella risposta del Bundle includeranno le seguenti risorse: 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." } ] } } } ] }

Inoltre, la seguente intestazione di risposta HTTP verrà inclusa con il valore «true»:

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

Tieni presente che i dati inseriti in formato non corretto secondo la specifica R4 potrebbero non essere ricercabili come previsto se questi errori sono presenti.

Supporto limitato per il tipo «message» di tipo Bundle

HealthLake fornisce un supporto limitato per il tipo FHIR Bundle message attraverso un processo di conversione interno. Questo supporto è progettato per scenari in cui i pacchetti di messaggi non possono essere riformattati all'origine, come l'importazione di feed ADT (Admission, Discharge, Transfer) da sistemi ospedalieri preesistenti.

avvertimento

Questa funzionalità richiede un elenco esplicito degli AWS account consentiti e non applica la semantica dei messaggi FHIR R4 o l'integrità referenziale. Contatta l' AWS assistenza per richiedere l'attivazione del tuo account prima di utilizzare i pacchetti di messaggi.

Principali differenze rispetto all'elaborazione standard dei messaggi

  • Pacchetti di messaggi (specifica FHIR): la prima immissione deve essere una MessageHeader che faccia riferimento ad altre risorse. Alle risorse mancano i singoli request oggetti e l' MessageHeader evento determina le azioni di elaborazione.

  • HealthLake Elaborazione: converte i pacchetti di messaggi in pacchetti batch assegnando automaticamente le operazioni PUT a ciascuna risorsa immessa. Le risorse vengono elaborate in modo indipendente senza applicare la semantica dei messaggi o l'integrità referenziale.

Limitazioni importanti

  • Le regole di elaborazione specifiche dei messaggi FHIR R4 non vengono applicate

  • Nessuna integrità transazionale tra le risorse

  • I riferimenti tra le risorse non vengono convalidati

  • Richiede un elenco esplicito degli account consentiti

Esempio di struttura del pacchetto di messaggi

{ "resourceType": "Bundle", "type": "message", "entry": [ { "resource": { "resourceType": "MessageHeader", "eventCoding": { "system": "http://hl7.org/fhir/us/davinci-alerts/CodeSystem/notification-event", "code": "notification-admit" }, "focus": [{"reference": "Encounter/example-id"}] } }, { "resource": {"resourceType": "Patient", "id": "example-id"} }, { "resource": {"resourceType": "Encounter", "id": "example-id"} } ] }
Nota

Ogni risorsa viene archiviata in modo indipendente come se fosse inviata tramite singole operazioni PUT. Se è richiesta la semantica completa della messaggistica FHIR o la convalida dell'integrità referenziale, preelabora i pacchetti di messaggi o implementa la convalida a livello di applicazione prima dell'invio.

Transazioni di bundle asincrone

AWS HealthLake supporta il Bundle tipo asincrono transaction che consente di inviare transazioni con un massimo di 500 risorse. Quando invii una transazione asincrona, la mette in HealthLake coda per l'elaborazione e restituisce immediatamente un URL di polling. Puoi utilizzare questo URL per controllare lo stato e recuperare la risposta. Questo segue lo schema del pacchetto asincrono FHIR.

Quando utilizzare le transazioni asincrone

  • È necessario inviare più di 100 risorse (limite sincrono) in una singola transazione.

  • Desiderate evitare di bloccare l'applicazione in attesa del completamento dell'elaborazione della transazione.

  • È necessario elaborare volumi elevati di risorse correlate con un throughput migliore.

Importante

I risultati dei sondaggi sono disponibili per 90 giorni dopo il completamento della transazione. Dopo questo periodo di 90 giorni, l'URL del sondaggio non restituisce più risultati. Progetta la tua integrazione per recuperare e archiviare i risultati all'interno di questa finestra.

Nota

Il Bundle tipo sincrono transaction continua a supportare fino a 100 risorse ed è la modalità di elaborazione predefinita. Se invii un Bundle tipo transaction con più di 100 risorse senza l'Prefer: respond-asyncintestazione, HealthLake restituisce un 422 Unprocessable Entity errore. I pacchetti con tipo non batch sono supportati per l'elaborazione asincrona: solo i tipi transaction possono essere inviati in modo asincrono (con un massimo Bundle di 500 operazioni).

Invio di una transazione asincrona

Per inviare una transazione asincrona, invia una POST richiesta all'endpoint del data store con l'intestazione. Prefer: respond-async Il pacchetto deve avere un tipo. transaction I pacchetti con tipo non batch sono supportati per l'elaborazione asincrona dei pacchetti.

HealthLake esegue le convalide iniziali del pacchetto al momento dell'invio. Se la convalida ha esito positivo, HealthLake restituisce HTTP 202 Accepted con un'intestazione di content-location risposta che contiene l'URL del polling.

Per inviare un tipo asincrono Bundle transaction

  1. Invia una POST richiesta all'endpoint del HealthLake data store.

    POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/
  2. Costruisci un corpo JSON per la richiesta con il tipo di bundle. transaction Ai fini di questa procedura, salva il file con nome. async-transaction.json

    { "resourceType": "Bundle", "type": "transaction", "entry": [ { "resource": { "resourceType": "Patient", "active": true, "name": [ { "use": "official", "family": "Smith", "given": ["Jane"] } ], "gender": "female", "birthDate": "1990-01-15" }, "request": { "method": "POST", "url": "Patient" } }, { "resource": { "resourceType": "Observation", "status": "final", "code": { "coding": [ { "system": "http://loinc.org", "code": "85354-9", "display": "Blood pressure panel" } ] }, "subject": { "reference": "urn:uuid:example-patient-id" } }, "request": { "method": "POST", "url": "Observation" } } ] }
  3. Invia la richiesta con l'Prefer: respond-asyncintestazione. Il tipo di Bundle transazione FHIR utilizza una POST richiesta con autorizzazione AWS Signature Version 4 o SMART on FHIR. Il seguente esempio di codice utilizza lo strumento da riga di curl comando a scopo dimostrativo.

    SigV4

    Autorizzazione 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' \ --header 'Prefer: respond-async' \ --data @async-transaction.json
    SMART on FHIR

    Esempio di autorizzazione SMART on FHIR per il tipo di dati IdentityProviderConfiguration.

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

    Il chiamante può assegnare le autorizzazioni nella lambda di autorizzazione. Per ulteriori informazioni, consulta OAuth Cannocchiali 2.0.

  4. In caso di invio riuscito, il server restituisce HTTP 202 Accepted. L'intestazione della content-location risposta contiene l'URL del sondaggio. Il corpo della risposta è una OperationOutcome risorsa.

    HTTP/1.1 202 Accepted content-location: https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Transaction/transactionId
    { "resourceType": "OperationOutcome", "issue": [ { "severity": "information", "code": "informational", "diagnostics": "Submitted Asynchronous Bundle Transaction", "location": [ "https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Transaction/transactionId" ] } ] }

Sondaggio sullo stato delle transazioni

Dopo aver inviato una transazione asincrona, utilizza l'URL di polling dall'intestazione della content-location risposta per verificare lo stato della transazione. Invia una GET richiesta all'URL del sondaggio.

Nota

Per gli archivi dati compatibili con SMART on FHIR, il token di autorizzazione deve includere read le autorizzazioni sul tipo di Transaction risorsa per verificare lo stato della transazione. Per ulteriori informazioni sugli ambiti SMART on FHIR, vedere. SMART su ambiti FHIR OAuth 2.0 supportati da HealthLake

Invia una GET richiesta all'URL del sondaggio. L'esempio seguente utilizza lo strumento da curl riga di comando.

SigV4

Autorizzazione SigV4

curl --request GET \ 'https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Transaction/transactionId' \ --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'
SMART on FHIR

Autorizzazione SMART su FHIR. Il token di autorizzazione deve includere read le autorizzazioni sul tipo di Transaction risorsa.

curl --request GET \ 'https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Transaction/transactionId' \ --header 'Authorization: Bearer $SMART_ACCESS_TOKEN' \ --header 'Accept: application/json'

La tabella seguente descrive le possibili risposte.

Codici di risposta ai sondaggi
Stato HTTP Significato Corpo di risposta
202 Accettato La transazione è in coda OperationOutcomecon diagnostica «INVIATA»
202 Accettato La transazione è in fase di elaborazione OperationOutcomecon diagnostica «IN_PROGRESS»
200 OK Transazione completata con successo Bundlecon tipo transaction-response
4xx/5xx Transazione fallita OperationOutcomecon dettagli sull'errore

Gli esempi seguenti mostrano ogni tipo di risposta.

Transazione in coda (202)

{ "resourceType": "OperationOutcome", "id": "transactionId", "issue": [ { "severity": "information", "code": "informational", "diagnostics": "SUBMITTED" } ] }
Elaborazione delle transazioni (202)

{ "resourceType": "OperationOutcome", "id": "transactionId", "issue": [ { "severity": "information", "code": "informational", "diagnostics": "IN_PROGRESS" } ] }
Transazione completata (200)

{ "resourceType": "Bundle", "type": "transaction-response", "entry": [ { "response": { "status": "201", "location": "Patient/example-id/_history/1", "etag": "W/\"1\"", "lastModified": "2024-01-15T10:30:00.000Z" } }, { "response": { "status": "201", "location": "Observation/example-id/_history/1", "etag": "W/\"1\"", "lastModified": "2024-01-15T10:30:00.000Z" } } ] }
Transazione non riuscita (4xx/5xx)

{ "resourceType": "OperationOutcome", "issue": [ { "severity": "error", "code": "exception", "diagnostics": "Transaction failed: conflict detected on resource Patient/example-id" } ] }

Ordine di elaborazione

I pacchetti di tipo asincrono vengono messi in coda ma non transaction vengono elaborati in un rigoroso ordine di invio. HealthLake ottimizza l'elaborazione in base alla capacità disponibile e al carico di sistema.

Importante

Non dipendono dal fatto che le transazioni vengano elaborate nell'ordine in cui sono state inviate. Ad esempio, se invii la Transazione A alle 10:00 e la Transazione B alle 10:01, la Transazione B potrebbe essere completata prima della Transazione A. Progetta la tua applicazione per:

  • Gestire out-of-order il completamento.

  • Utilizza l'URL del sondaggio per tracciare ogni transazione in modo indipendente.

  • Implementa il sequenziamento a livello di applicazione se l'ordine è importante per il tuo caso d'uso.

Quote e limitazioni

Le quote e i limiti di velocità seguenti si applicano alle transazioni asincrone.

Quote di transazione asincrone
Quota Valore Regolabile
Numero massimo di operazioni per transazione asincrona 500 No
Numero massimo di transazioni in sospeso per archivio dati 500
  • Le transazioni asincrone condividono gli stessi limiti di velocità API definiti in. Service Quotas

  • Il polling sullo stato delle transazioni condivide gli stessi limiti di velocità API delle operazioni read (GET) sulle risorse FHIR.

  • Se viene raggiunto il limite di transazioni in sospeso, gli invii successivi restituiscono un errore fino al completamento delle transazioni esistenti.

Gestione degli errori

Per un pacchetto di «transazioni», tutte le risorse FHIR contenute nel pacchetto vengono elaborate come un'operazione atomica. Tutte le risorse dell'operazione devono avere esito positivo, altrimenti non viene elaborata alcuna operazione nel pacchetto.

Gli errori si dividono in due categorie: gli errori di invio che vengono HealthLake restituiti in modo sincrono e gli errori di elaborazione recuperati tramite il polling.

Errori di invio

HealthLake convalida il pacchetto al momento dell'invio e restituisce gli errori in modo sincrono prima che la transazione venga messa in coda. Gli errori di invio includono errori di convalida delle risorse FHIR non validi, tipi di risorse non supportati, superamento del limite di 500 operazioni e utilizzo dell'intestazione con pacchetti batch. Prefer: respond-async Se è stato raggiunto il limite di transazioni in sospeso per l'archivio dati, restituisce un. HealthLake ThrottlingException Quando si verifica un errore di invio, la transazione non verrà messa in coda.

Errori di elaborazione

Gli errori di elaborazione si verificano dopo che la transazione è stata messa in coda e vengono restituiti tramite l'URL di polling. Questi includono i conflitti di transazione, in cui un'altra operazione ha modificato una risorsa che fa parte della transazione, e gli errori del server durante l'elaborazione. Quando si verifica un errore di elaborazione, non viene effettuata alcuna modifica delle risorse della transazione. L'URL di polling restituirà un OperationOutcome con i dettagli dell'errore.