View a markdown version of this page

Raggruppamento delle 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 delle 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 bundle 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. Utilizza i pacchetti batch per operazioni in blocco in cui è accettabile un successo parziale, ad esempio il caricamento di più cartelle cliniche non correlate.

Transactioni bundle elaborano tutte le risorse in modo atomico come una singola unità. O tutte le operazioni sulle risorse hanno esito positivo o non AWS HealthLake ne esegue nessuna. Utilizza i pacchetti di transazioni quando hai bisogno di garantire l'integrità referenziale tra le risorse correlate, ad esempio creando un paziente con osservazioni correlate e condizioni in cui tutti i dati devono essere registrati insieme.

Differenze tra batch e pacchetti di transazioni
Funzionalità Archiviazione Transaction
Modello di elaborazione Ogni operazione riesce o fallisce indipendentemente. Tutte le operazioni riescono o falliscono come una 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 applicata 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 tipi diversi e possono includere una combinazione di operazioni FHIR, ad esempiocreate, 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 in batch
  • Carica più cartelle cliniche non correlate provenienti da diverse strutture durante la sincronizzazione notturna dei dati.

  • Carica in blocco i registri storici dei farmaci, laddove alcuni documenti potrebbero presentare problemi di convalida.

  • Carica i dati di riferimento, ad esempio organizzazioni e professionisti, in cui i singoli errori non influiscono sugli altri dati.

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

  • Aggiorna l'elenco dei farmaci di un 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 transazioni 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 delle risorse FHIR come entità indipendenti

Raggruppare le risorse FHIR come entità indipendenti

  1. Raccogli HealthLake region e valori. datastoreId 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, salvare 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. L'esempio di codice seguente utilizza lo strumento a 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 nel lambda di autorizzazione. Per ulteriori informazioni, consulta Ambiti OAuth 2.0.

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

PUT condizionali in pacchetti

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

Nota

I PUT condizionali sono supportati solo nei pacchetti. batch Transactioni bundle non supportano i PUT condizionali.

  • _id(autonomo)

  • _idin combinazione con uno dei seguenti:

    • _tag

    • createdAt

    • _lastUpdated

Quando si utilizzano PUT condizionali 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 (conflitto rilevato) 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.
Diverse risorse soddisfano le condizioni 412 Precondizione non riuscita Restituisce un errore. Non viene apportata alcuna modifica.

Nel seguente pacchetto di esempio con 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 in un'unica entità

Per raggruppare le risorse FHIR come un'unica entità

  1. Raccogli HealthLake region e valori. datastoreId 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, salvare 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. L'esempio di codice seguente utilizza lo strumento a 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 nel lambda di autorizzazione. Per ulteriori informazioni, consulta Ambiti OAuth 2.0.

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

Configurazione del livello di convalida per i pacchetti

Quando si raggruppano le risorse FHIR, è possibile specificare facoltativamente 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 qualsiasi profilo 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 di verifica.

Le risorse incluse nel livello di convalida minimo possono essere inserite in un Datastore nonostante la convalida fallita richiesta per l'indicizzazione delle ricerche. In questo caso, le risorse verranno aggiornate per includere un'estensione specifica di Healthlake per documentare tali errori e le voci all'interno della risposta del pacchetto 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 della risposta HTTP verrà inclusa con il valore «true»:

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

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

Supporto limitato per il tipo di pacchetto «messaggio»

HealthLake fornisce un supporto limitato per il tipo di pacchetto FHIR message attraverso un processo di conversione interno. Questo supporto è progettato per scenari in cui i pacchetti di messaggi non possono essere riformattati all'origine, ad esempio l'acquisizione di feed ADT (Admission, Discharge, Transfer) dai sistemi ospedalieri precedenti.

avvertimento

Questa funzionalità richiede un elenco esplicito degli AWS account e non applica la semantica dei messaggi FHIR R4 o l'integrità referenziale. Contatta l' AWS assistenza per richiedere l'abilitazione 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 voce deve essere una MessageHeader che fa riferimento ad altre risorse. Le risorse sono prive di request oggetti singoli 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 ogni voce di risorsa. Le risorse vengono elaborate in modo indipendente senza applicare la semantica dei messaggi o l'integrità referenziale.

Limitazioni importanti

  • Le regole di Message-specific elaborazione FHIR R4 non vengono applicate

  • Nessuna integrità transazionale tra le risorse

  • Inter-resource i riferimenti non sono convalidati

  • Richiede un elenco esplicito delle autorizzazioni dell'account

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 stata inviata tramite singole operazioni PUT. Se sono richieste 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 in 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 verificare 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.

  • Vuoi evitare di bloccare la tua applicazione in attesa del completamento dell'elaborazione della transazione.

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

Importante

I risultati del sondaggio sono disponibili per 90 giorni dopo il completamento della transazione. Dopo questo periodo di 90 giorni, l'URL di polling 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 il Bundle tipo transaction può essere inviato in modo asincrono (con un massimo di 500 operazioni).

Nota

PATCHle operazioni e le PUT condizionali non sono supportate nelle transazioni di bundle asincrone.

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 per il 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 di polling.

Per inviare una transazione asincrona di tipo Bundle

  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 pacchetto. transaction Ai fini di questa procedura, salva il file come. 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 a 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 nel lambda di autorizzazione. Per ulteriori informazioni, consulta Ambiti OAuth 2.0.

  4. In caso di invio riuscito, il server restituisce HTTP 202 Accettato. L'intestazione della content-location risposta contiene l'URL del polling. 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 della transazione

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

Nota

Per gli archivi dati SMART su FHIR abilitati, il token di autorizzazione deve includere read le autorizzazioni sul tipo di Transaction risorsa per il polling dello 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 polling. 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 on 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 «INVIATO»
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 i dettagli dell'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 fallita (4xx/5xx)

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

Elaborazione dell'ordine

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 del sistema.

Importante

Non dipendono dalle transazioni in corso di elaborazione 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 domanda in modo da:

  • Gestisci il completamento degli ordini non conformi.

  • Usa l'URL di polling 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 tasso 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 Sì
  • Le transazioni asincrone condividono gli stessi limiti di velocità API definiti in. Service Quotas

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

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

Gestione degli errori

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

Gli errori si dividono in due categorie: errori di invio che vengono HealthLake restituiti in modo sincrono ed errori di elaborazione recuperati tramite 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 bundle batch. Prefer: respond-async Se è stato raggiunto il limite di transazioni in sospeso per il data store, 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 vengono apportate modifiche alle risorse della transazione. L'URL di polling restituirà un messaggio OperationOutcome con i dettagli dell'errore.