

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengelola sumber daya FHIR di AWS HealthLake
<a name="managing-fhir-resources"></a>

Gunakan interaksi RESTful API FHIR R4 untuk mengelola sumber daya FHIR di penyimpanan data. HealthLake Bagian berikut menjelaskan semua interaksi RESTful API FHIR R4 yang HealthLake didukung yang tersedia untuk manajemen sumber daya FHIR. Untuk informasi tentang kemampuan penyimpanan HealthLake data dan bagian mana dari spesifikasi FHIR yang didukungnya, lihat[Pernyataan Kemampuan FHIR R4 untuk AWS HealthLake](reference-fhir-capability-statement.md).

**catatan**  
Interaksi FHIR yang tercantum dalam Bab ini dibangun sesuai dengan standar HL7 FHIR R4 untuk pertukaran data perawatan kesehatan. Karena mereka adalah representasi dari layanan HL7 FHIR, mereka tidak ditawarkan melalui AWS CLI dan. AWS SDKs Untuk informasi selengkapnya, lihat [RESTful API](https://hl7.org/fhir/R4/http.html) dalam dokumentasi **FHIR R4 RESTful API**.

Tabel berikut mencantumkan interaksi FHIR R4 yang didukung oleh. AWS HealthLake Untuk informasi tentang *jenis sumber daya* FHIR yang didukung oleh HealthLake, lihat[Jenis sumber daya](reference-fhir-resource-types.md).




**Interaksi FHIR R4 didukung oleh AWS HealthLake**  
<a name="supported-fhir-interactions"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/healthlake/latest/devguide/managing-fhir-resources.html)

**Topics**
+ [Membuat sumber daya FHIR](managing-fhir-resources-create.md)
+ [Membaca sumber daya FHIR](managing-fhir-resources-read.md)
+ [Membaca sejarah sumber daya FHIR](managing-fhir-resources-read-history.md)
+ [Memperbarui sumber daya FHIR](managing-fhir-resources-update.md)
+ [Memodifikasi Sumber Daya dengan Operasi PATCH](managing-fhir-resources-patch.md)
+ [Bundling sumber daya FHIR](managing-fhir-resources-bundle.md)
+ [Menghapus sumber daya FHIR](managing-fhir-resources-delete.md)
+ [Idempotensi dan Konkurensi](managing-fhir-resources-idempotency.md)

# Membuat sumber daya FHIR
<a name="managing-fhir-resources-create"></a>

`create`Interaksi FHIR menciptakan sumber daya FHIR baru di penyimpanan HealthLake data. Untuk informasi tambahan, lihat [https://hl7.org/fhir/R4/http.html#create](https://hl7.org/fhir/R4/http.html#create)di dokumentasi **FHIR R4 RESTful API**.

**Untuk membuat sumber daya FHIR**  


1. Kumpulkan HealthLake `region` dan `datastoreId` nilai. Untuk informasi selengkapnya, lihat [Mendapatkan properti penyimpanan data](managing-data-stores-describe.md).

1. Tentukan jenis FHIR yang `Resource` akan dibuat. Untuk informasi selengkapnya, lihat [Jenis sumber daya](reference-fhir-resource-types.md).

1. Buat URL untuk permintaan menggunakan nilai yang dikumpulkan untuk HealthLake `region` dan`datastoreId`. Juga termasuk `Resource` jenis FHIR untuk membuat. Untuk melihat seluruh jalur URL dalam contoh berikut, gulir ke atas tombol **Salin**.

   ```
   POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Resource
   ```

1. Membangun badan JSON untuk permintaan, menentukan data FHIR untuk sumber daya baru. Untuk tujuan prosedur ini, kami menggunakan `Patient` sumber daya FHIR, jadi simpan file sebagai`create-patient.json`.

   ```
   {
       "resourceType": "Patient",
       "identifier": [
           {
               "system": "urn:oid:1.2.36.146.595.217.0.1",
               "value": "12345"
           }
       ],
       "name": [
           {
               "family": "Silva",
               "given": [
                   "Ana",
                   "Carolina"
               ]
           }
       ],
       "gender": "female",
       "birthDate": "1992-02-10"
   }
   ```

1. Kirim permintaan . `create`Interaksi FHIR menggunakan `POST` permintaan dengan [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) atau SMART pada otorisasi FHIR. Contoh berikut membuat `Patient` resource FHIR dalam HealthLake menggunakan curl atau Console. HealthLake Untuk melihat seluruh contoh, gulir ke atas tombol **Salin**.

------
#### [ SigV4 ]

   Otorisasi SiGv4

   ```
   curl --request POST \
     'https://healthlake.region.amazonaws.com/datastore/datastore-id/r4/Patient' \
     --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 @create-patient.json
   ```

------
#### [ SMART on FHIR ]

   SMART pada contoh otorisasi FHIR untuk tipe [https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html)data.

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

   Penelepon dapat menetapkan izin di lambda otorisasi. Untuk informasi selengkapnya, lihat [OAuth 2.0 cakupan](reference-smart-on-fhir-oauth-scopes.md).

------
#### [ AWS Console ]

**catatan**  
 HealthLake Konsol hanya mendukung otorisasi [AWS SiGv4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html).

   1. Masuk ke halaman [Jalankan kueri](https://console.aws.amazon.com/healthlake/home#/crud) di HealthLake Konsol.

   2. Di bawah bagian **Pengaturan kueri**, buat pilihan berikut.
   + **ID Penyimpanan Data** — pilih ID penyimpanan data untuk menghasilkan string kueri.
   + **Jenis kueri** - pilih`Create`.
   + **Jenis sumber daya** - pilih [jenis sumber daya](reference-fhir-resource-types.md) FHIR untuk dibuat.
   + **Badan permintaan** - membangun badan JSON untuk permintaan, menentukan data FHIR untuk sumber daya baru.

   3. Pilih **Run query** (Jalankan kueri).

------

**Mengkonfigurasi tingkat validasi untuk pembuatan sumber daya**  


Saat membuat sumber daya FHIR, Anda dapat menentukan header `x-amzn-healthlake-fhir-validation-level` HTTP secara opsional untuk mengonfigurasi tingkat validasi sumber daya. AWS HealthLake saat ini mendukung tingkat validasi berikut:
+ `strict`: Sumber daya divalidasi sesuai dengan elemen profil sumber daya, atau spesifikasi R4 jika tidak ada profil. Ini adalah tingkat validasi default untuk AWS HealthLake.
+ `structure-only`: Sumber daya divalidasi terhadap R4, mengabaikan profil yang direferensikan.
+ `minimal`: Sumber daya divalidasi minimal, mengabaikan aturan R4 tertentu. Sumber daya yang gagal dalam pemeriksaan struktur yang diperlukan search/analytics akan diperbarui untuk menyertakan peringatan untuk audit.

Sumber daya yang dibuat dengan tingkat validasi minimal dapat dicerna ke dalam Datastore meskipun validasi gagal diperlukan untuk pengindeksan pencarian. Dalam hal ini, sumber daya akan diperbarui untuk menyertakan ekstensi khusus Healthlake untuk mendokumentasikan kegagalan tersebut:

```
{
    "url": "http://healthlake.amazonaws.com/fhir/StructureDefinition/validation-issue",
    "valueString": "{\"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.\"}]}"
}
```

Selain itu, header respons HTTP berikut akan disertakan dengan nilai “true”:

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

**catatan**  
Data yang dicerna yang salah bentuk sesuai spesifikasi R4 mungkin tidak dapat dicari seperti yang diharapkan jika kesalahan ini ada.

# Membaca sumber daya FHIR
<a name="managing-fhir-resources-read"></a>

`read`Interaksi FHIR membaca keadaan sumber daya saat ini di penyimpanan HealthLake data. Untuk informasi tambahan, lihat [https://hl7.org/fhir/R4/http.html#read](https://hl7.org/fhir/R4/http.html#read)di dokumentasi **FHIR R4 RESTful API**.

**Untuk membaca sumber daya FHIR**  


1. Kumpulkan HealthLake `region` dan `datastoreId` nilai. Untuk informasi selengkapnya, lihat [Mendapatkan properti penyimpanan data](managing-data-stores-describe.md).

1. Tentukan jenis FHIR `Resource` untuk membaca dan mengumpulkan `id` nilai terkait. Untuk informasi selengkapnya, lihat [Jenis sumber daya](reference-fhir-resource-types.md). 

1. Buat URL untuk permintaan menggunakan nilai yang dikumpulkan untuk HealthLake `region` dan`datastoreId`. Juga termasuk `Resource` jenis FHIR dan yang terkait`id`. Untuk melihat seluruh jalur URL dalam contoh berikut, gulir ke atas tombol **Salin**.

   ```
   GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Resource/id
   ```

1. Kirim permintaan . `read`Interaksi FHIR menggunakan `GET` permintaan dengan [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) atau SMART pada otorisasi FHIR. `curl`Contoh berikut membaca status saat ini dari `Patient` sumber daya FHIR di HealthLake. Untuk melihat seluruh contoh, gulir ke atas tombol **Salin**.

------
#### [ SigV4 ]

   Otorisasi SiGv4

   ```
   curl --request GET \
     'https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient/id' \
     --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 ]

   SMART pada contoh otorisasi FHIR untuk tipe [https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html)data.

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

   Penelepon dapat menetapkan izin di lambda otorisasi. Untuk informasi selengkapnya, lihat [OAuth 2.0 cakupan](reference-smart-on-fhir-oauth-scopes.md).

------
#### [ AWS Console ]

   1. Masuk ke halaman [Jalankan kueri](https://console.aws.amazon.com/healthlake/home#/crud) di HealthLake Konsol.

   2. Di bawah bagian **Pengaturan kueri**, buat pilihan berikut.
   + **ID Penyimpanan Data** — pilih ID penyimpanan data untuk menghasilkan string kueri.
   + **Jenis kueri** - pilih`Read`.
   + **Jenis sumber daya** - pilih [jenis sumber daya](reference-fhir-resource-types.md) FHIR untuk dibaca.
   + **ID Sumber Daya** — masukkan ID sumber daya FHIR.

   3. Pilih **Run query** (Jalankan kueri).

------

# Membaca sejarah sumber daya FHIR
<a name="managing-fhir-resources-read-history"></a>

`history`Interaksi FHIR mengambil sejarah sumber daya FHIR tertentu di penyimpanan data. HealthLake Dengan menggunakan interaksi ini, Anda dapat menentukan bagaimana isi sumber daya FHIR telah berubah dari waktu ke waktu. Ini juga berguna dalam koordinasi dengan log audit untuk melihat keadaan sumber daya sebelum dan sesudah modifikasi. Interaksi FHIR`create`,`update`, dan `delete` menghasilkan versi historis dari sumber daya yang akan disimpan. Untuk informasi tambahan, lihat [https://hl7.org/fhir/R4/http.html#history](https://hl7.org/fhir/R4/http.html#history)di dokumentasi **FHIR R4 RESTful API**.

**catatan**  
Anda dapat memilih keluar dari `history` jenis sumber daya FHIR tertentu. Untuk memilih keluar, buat kasus menggunakan [AWS Support Center Console](https://console.aws.amazon.com/support/home#/). Untuk membuat kasus Anda, masuk ke kasing Anda Akun AWS dan pilih **Buat kasus**.

**Untuk membaca sejarah sumber daya FHIR**  


1. Kumpulkan HealthLake `region` dan `datastoreId` nilai. Untuk informasi selengkapnya, lihat [Mendapatkan properti penyimpanan data](managing-data-stores-describe.md).

1. Tentukan jenis FHIR `Resource` untuk membaca dan mengumpulkan `id` nilai terkait. Untuk informasi selengkapnya, lihat [Jenis sumber daya](reference-fhir-resource-types.md). 

1. Buat URL untuk permintaan menggunakan nilai yang dikumpulkan untuk HealthLake `region` dan`datastoreId`. Juga termasuk `Resource` jenis FHIR, yang terkait`id`, dan parameter pencarian opsional. Untuk melihat seluruh jalur URL dalam contoh berikut, gulir ke atas tombol **Salin**.

   ```
   GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Resource/id/_history{?[parameters]}
   ```  
**HealthLake parameter pencarian yang didukung untuk interaksi FHIR `history`**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/healthlake/latest/devguide/managing-fhir-resources-read-history.html)

1. Kirim permintaan . `history`Interaksi FHIR menggunakan `GET` permintaan dengan [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) atau SMART pada otorisasi FHIR. `curl`Contoh berikut menggunakan parameter `_count` pencarian untuk mengembalikan 100 hasil pencarian historis per halaman untuk `Patient` sumber daya FHIR di HealthLake. Untuk melihat seluruh contoh, gulir ke atas tombol **Salin**.

------
#### [ SigV4 ]

   Otorisasi SiGv4

   ```
   curl --request GET \
     'https://healthlake.region.amazonaws.com/datastore/datastore-id/r4/Patient/id/_history?_count=100' \
     --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 ]

   SMART pada contoh otorisasi FHIR untuk tipe [https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html)data.

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

   Penelepon dapat menetapkan izin di lambda otorisasi. Untuk informasi selengkapnya, lihat [OAuth 2.0 cakupan](reference-smart-on-fhir-oauth-scopes.md).

------

   Isi pengembalian `history` interaksi terkandung dalam sumber daya FHIR`Bundle`, dengan tipe yang disetel ke`history`. Ini berisi riwayat versi yang ditentukan, diurutkan dengan versi tertua yang terakhir, dan termasuk sumber daya yang dihapus. Untuk informasi lebih lanjut, lihat [https://hl7.org/fhir/R4/bundle.html](https://hl7.org/fhir/R4/bundle.html)di dokumentasi **FHIR R4**.

## Membaca riwayat sumber daya FHIR khusus versi
<a name="managing-fhir-data-get-version-specific-resource"></a>

`vread`Interaksi FHIR melakukan pembacaan sumber daya khusus versi di penyimpanan data. HealthLake Dengan menggunakan interaksi ini, Anda dapat melihat konten sumber daya FHIR seperti pada waktu tertentu di masa lalu.

**catatan**  
Jika Anda menggunakan `history` interaksi FHIR *tanpa*`vread`, HealthLake selalu mengembalikan versi terbaru dari metadata sumber daya.

HealthLake mendeklarasikannya mendukung pembuatan versi [https://hl7.org/fhir/R4/capabilitystatement-definitions.html#CapabilityStatement.rest.resource.versioning](https://hl7.org/fhir/R4/capabilitystatement-definitions.html#CapabilityStatement.rest.resource.versioning)untuk setiap sumber daya yang didukung. Semua penyimpanan HealthLake data termasuk `Resource.meta.versionId` (`vid`) pada semua sumber daya.

Ketika `history` interaksi FHIR diaktifkan (secara default untuk penyimpanan data yang dibuat setelah 10/25/2024 atau berdasarkan permintaan untuk penyimpanan data yang lebih lama), `Bundle` respons menyertakan `vid` sebagai bagian dari elemen. [https://hl7.org/fhir/R4/bundle-definitions.html#Bundle.entry.response.location](https://hl7.org/fhir/R4/bundle-definitions.html#Bundle.entry.response.location) Dalam contoh berikut, `vid` ditampilkan sebagai angka`1`. Untuk melihat contoh selengkapnya, lihat [Contoh Bundle/Bundle-response](https://build.fhir.org/bundle-response.json.html) (JSON).

```
"response" : {
    "status" : "201 Created",
    "location" : "Patient/12423/_history/1",
    ...}
```

**Untuk membaca riwayat sumber daya FHIR khusus versi**  


1. Kumpulkan HealthLake `region` dan `datastoreId` nilai. Untuk informasi selengkapnya, lihat [Mendapatkan properti penyimpanan data](managing-data-stores-describe.md).

1. Tentukan `Resource` jenis FHIR untuk membaca dan mengumpulkan terkait `id` dan `vid` nilai. Untuk informasi selengkapnya, lihat [Jenis sumber daya](reference-fhir-resource-types.md).

1. Buat URL untuk permintaan menggunakan nilai yang dikumpulkan untuk HealthLake dan FHIR. Untuk melihat seluruh jalur URL dalam contoh berikut, gulir ke atas tombol **Salin**.

   ```
   GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Resource/id/_history/vid
   ```

1. Kirim permintaan . `history`Interaksi FHIR menggunakan `GET` permintaan dengan [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) atau SMART pada otorisasi FHIR. `vread`Interaksi berikut mengembalikan satu contoh dengan konten yang ditentukan untuk `Patient` sumber daya FHIR untuk versi metadata sumber daya yang ditentukan oleh. `vid` Untuk melihat seluruh jalur URL dalam contoh berikut, gulir ke atas tombol **Salin**.

------
#### [ SigV4 ]

   Otorisasi SiGv4

   ```
   curl --request GET \
     'https://healthlake.region.amazonaws.com/datastore/datastore-id/r4/Patient/id/_history/vid' \
     --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 ]

   SMART pada contoh otorisasi FHIR untuk tipe [https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html)data.

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

   Penelepon dapat menetapkan izin di lambda otorisasi. Lihat informasi yang lebih lengkap di [OAuth 2.0 cakupan](reference-smart-on-fhir-oauth-scopes.md).

------

# Memperbarui sumber daya FHIR
<a name="managing-fhir-resources-update"></a>

`update`Interaksi FHIR membuat versi baru saat ini untuk sumber daya yang ada atau membuat versi awal jika tidak ada sumber daya yang sudah ada untuk yang diberikan`id`. Untuk informasi tambahan, lihat [https://hl7.org/fhir/R4/http.html#update](https://hl7.org/fhir/R4/http.html#update)di dokumentasi **FHIR R4 RESTful API**.

**Untuk memperbarui sumber daya FHIR**  


1. Kumpulkan HealthLake `region` dan `datastoreId` nilai. Untuk informasi selengkapnya, lihat [Mendapatkan properti penyimpanan data](managing-data-stores-describe.md).

1. Tentukan jenis FHIR `Resource` untuk memperbarui dan mengumpulkan `id` nilai terkait. Untuk informasi selengkapnya, lihat [Jenis sumber daya](reference-fhir-resource-types.md). 

1. Buat URL untuk permintaan menggunakan nilai yang dikumpulkan untuk HealthLake `region` dan`datastoreId`. Juga termasuk `Resource` jenis FHIR dan yang terkait`id`. Untuk melihat seluruh jalur URL dalam contoh berikut, gulir ke atas tombol **Salin**.

   ```
   PUT https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Resource/id
   ```

1. Membangun `JSON` badan untuk permintaan, menentukan update data FHIR yang akan dibuat. Untuk tujuan prosedur ini, simpan file sebagai`update-patient.json`.

   ```
   {
       "id": "2de04858-ba65-44c1-8af1-f2fe69a977d9",
       "resourceType": "Patient",
       "active": true,
       "name": [
           {
               "use": "official",
               "family": "Doe",
               "given": [
                   "Jane"
               ]
           },
           {
               "use": "usual",
               "given": [
                   "Jane"
               ]
           }
       ],
       "gender": "female",
       "birthDate": "1985-12-31"
   }
   ```

1. Kirim permintaan . `update`Interaksi FHIR menggunakan `PUT` permintaan dengan [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) atau SMART pada otorisasi FHIR. `curl`Contoh berikut memperbarui sumber `Patient` daya di HealthLake. Untuk melihat seluruh contoh, gulir ke atas tombol **Salin**.

------
#### [ SigV4 ]

   Otorisasi SiGv4

   ```
   curl --request PUT \
     'https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient/id' \
     --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 @update-patient.json
   ```

   Permintaan Anda akan mengembalikan kode status `200` HTTP jika sumber daya yang ada *diperbarui* atau kode status `201` HTTP jika sumber daya baru dibuat.

------
#### [ SMART on FHIR ]

   SMART pada contoh otorisasi FHIR untuk tipe [https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html)data.

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

   Penelepon dapat menetapkan izin di lambda otorisasi. Untuk informasi selengkapnya, lihat [OAuth 2.0 cakupan](reference-smart-on-fhir-oauth-scopes.md).

------
#### [ AWS Console ]

   1. Masuk ke halaman [Jalankan kueri](https://console.aws.amazon.com/healthlake/home#/crud) di HealthLake Konsol.

   2. Di bawah bagian **Pengaturan kueri**, buat pilihan berikut.
   + **ID Penyimpanan Data** — pilih ID penyimpanan data untuk menghasilkan string kueri.
   + **Jenis kueri** - pilih`Update (PUT)`.
   + **Jenis sumber daya** - pilih [jenis sumber daya](reference-fhir-resource-types.md) FHIR untuk memperbarui atau membuat.
   + **Badan permintaan** - buat badan JSON untuk permintaan, menentukan data FHIR untuk memperbarui sumber daya dengan.

   3. Pilih **Run query** (Jalankan kueri).

------

## Memperbarui sumber daya FHIR berdasarkan kondisi
<a name="managing-fhir-resources-update-conditional"></a>

Pembaruan bersyarat memungkinkan Anda memperbarui sumber daya yang ada berdasarkan beberapa kriteria pencarian identifikasi, bukan oleh `id` FHIR logis. Ketika server memproses pembaruan, ia melakukan pencarian menggunakan kemampuan pencarian standar untuk jenis sumber daya, dengan tujuan menyelesaikan satu logis `id` untuk permintaan tersebut.

Tindakan yang diambil server tergantung pada berapa banyak kecocokan yang ditemukannya:
+ **Tidak ada kecocokan, tidak `id` disediakan di badan permintaan**: Server membuat sumber daya FHIR.
+ **Tidak ada kecocokan, `id` disediakan, dan sumber daya yang belum ada dengan `id`**: Server memperlakukan interaksi sebagai Pembaruan sebagai interaksi Buat.
+ **Tidak ada kecocokan, `id` disediakan dan sudah ada**: Server menolak pembaruan dengan `409 Conflict` kesalahan.
+ **One Match, tidak ada sumber daya yang `id` `id` disediakan ATAU (sumber daya yang disediakan dan cocok dengan sumber daya yang ditemukan)**: Server melakukan pembaruan terhadap sumber daya yang cocok seperti di atas di mana, jika sumber daya diperbarui, server HARUS mengembalikan file`200 OK`.
+ **One Match, sumber daya yang `id` disediakan tetapi tidak cocok dengan sumber daya yang ditemukan**: Server mengembalikan `409 Conflict` kesalahan yang menunjukkan spesifikasi id klien adalah masalah yang lebih disukai dengan `OperationOutcome`
+ **Beberapa kecocokan**: Server mengembalikan `412 Precondition Failed` kesalahan yang menunjukkan kriteria klien tidak cukup selektif lebih disukai dengan OperationOutcome

Contoh berikut memperbarui `Patient` sumber daya yang namanya peter, tanggal lahir 1 Jan 2000, dan nomor telepon 1234567890.

```
PUT https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient?name=peter&birthdate=2000-01-01&phone=1234567890
```

## Mengkonfigurasi tingkat validasi untuk pembaruan sumber daya
<a name="validation-level-resource-updates"></a>

Saat memperbarui sumber daya FHIR, Anda dapat menentukan header `x-amzn-healthlake-fhir-validation-level` HTTP secara opsional untuk mengonfigurasi tingkat validasi sumber daya. AWS HealthLake saat ini mendukung tingkat validasi berikut:
+ `strict`: Sumber daya divalidasi sesuai dengan elemen profil sumber daya, atau spesifikasi R4 jika tidak ada profil. Ini adalah tingkat validasi default untuk AWS HealthLake.
+ `structure-only`: Sumber daya divalidasi terhadap R4, mengabaikan profil yang direferensikan.
+ `minimal`: Sumber daya divalidasi minimal, mengabaikan aturan R4 tertentu. Sumber daya yang gagal dalam pemeriksaan struktur yang diperlukan search/analytics akan diperbarui untuk menyertakan peringatan untuk audit.

Sumber daya yang diperbarui dengan tingkat validasi minimal dapat dicerna ke dalam Datastore meskipun validasi gagal diperlukan untuk pengindeksan pencarian. Dalam hal ini, sumber daya akan diperbarui untuk menyertakan ekstensi khusus Healthlake untuk mendokumentasikan kegagalan tersebut:

```
{
    "url": "http://healthlake.amazonaws.com/fhir/StructureDefinition/validation-issue",
    "valueString": "{\"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.\"}]}"
}
```

Selain itu, header respons HTTP berikut akan disertakan dengan nilai “true”:

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

**catatan**  
Perhatikan bahwa data yang dicerna yang cacat menurut spesifikasi R4 mungkin tidak dapat dicari seperti yang diharapkan jika kesalahan ini ada.

# Memodifikasi Sumber Daya dengan Operasi PATCH
<a name="managing-fhir-resources-patch"></a>

AWS HealthLake mendukung operasi PATCH untuk sumber daya FHIR, memungkinkan Anda untuk memodifikasi sumber daya dengan menargetkan elemen tertentu untuk menambah, mengganti, atau menghapus tanpa memperbarui seluruh sumber daya. Operasi ini sangat berguna ketika Anda perlu:
+ Buat pembaruan yang ditargetkan ke sumber daya besar
+ Mengurangi penggunaan bandwidth jaringan
+ Lakukan modifikasi atom pada elemen sumber daya tertentu
+ Meminimalkan risiko penimpaan perubahan bersamaan
+ Perbarui sumber daya sebagai bagian dari alur kerja batch dan transaksi

## Format PATCH yang Didukung
<a name="patch-supported-formats"></a>

AWS HealthLake mendukung dua format PATCH standar:

### Tambalan JSON (RFC 6902)
<a name="patch-format-json"></a>

Menggunakan sintaks JSON Pointer untuk menargetkan elemen dengan posisi mereka dalam struktur sumber daya.

**Tipe Konten:** `application/json-patch+json`

### FHIRPath Patch (Spesifikasi FHIR R4)
<a name="patch-format-fhirpath"></a>

Menggunakan FHIRPath ekspresi untuk menargetkan elemen berdasarkan konten dan hubungannya, memberikan pendekatan asli FHIR untuk menambal.

**Tipe Konten:** `application/fhir+json`

## Penggunaan
<a name="patch-usage"></a>

### Operasi PATCH Langsung
<a name="patch-usage-direct"></a>

Operasi PATCH dapat dipanggil langsung pada sumber daya FHIR menggunakan metode PATCH HTTP:

```
PATCH [base]/[resource-type]/[id]{?_format=[mime-type]}
```

### PATCH dalam Bundel
<a name="patch-usage-bundles"></a>

Operasi PATCH dapat dimasukkan sebagai entri dalam FHIR Bundle jenis `batch` atau`transaction`, memungkinkan Anda untuk menggabungkan operasi patch dengan interaksi FHIR lainnya (membuat, membaca, memperbarui, menghapus) dalam satu permintaan.
+ **Bundel transaksi**: Semua entri berhasil atau gagal secara atom
+ **Bundel Batch**: Setiap entri diproses secara independen

## Format Patch JSON
<a name="patch-json-format"></a>

### Operasi yang Didukung
<a name="patch-json-supported-operations"></a>


| Operasi | Deskripsi | 
| --- | --- | 
| add | Tambahkan nilai baru ke sumber daya | 
| remove | Hapus nilai dari sumber daya | 
| replace | Ganti nilai yang ada di sumber daya | 
| move | Hapus nilai dari satu lokasi dan tambahkan ke lokasi lain | 
| copy | Salin nilai dari satu lokasi ke lokasi lain | 
| test | Uji bahwa nilai di lokasi target sama dengan nilai yang ditentukan | 

### Sintaks Path
<a name="patch-json-path-syntax"></a>

JSON Patch menggunakan sintaks JSON Pointer (RFC 6901):


| Contoh Jalur | Deskripsi | 
| --- | --- | 
| /name/0/family | Elemen keluarga nama depan | 
| /telecom/- | Tambahkan ke array telekomunikasi | 
| /active | Elemen aktif tingkat akar | 
| /address/0/line/1 | Baris kedua dari alamat pertama | 

### Contoh
<a name="patch-json-examples"></a>

**Permintaan Patch JSON Langsung dengan Beberapa Operasi**  


```
PATCH [base]/Patient/example
Content-Type: application/json-patch+json
If-Match: W/"1"

[
  {
    "op": "replace",
    "path": "/name/0/family",
    "value": "Smith"
  },
  {
    "op": "add",
    "path": "/telecom/-",
    "value": {
      "system": "phone",
      "value": "555-555-5555",
      "use": "home"
    }
  },
  {
    "op": "remove",
    "path": "/address/0"
  },
  {
    "op": "move",
    "from": "/name/0/family",
    "path": "/name/1/family"
  },
  {
    "op": "test",
    "path": "/gender",
    "value": "male"
  },
  {
    "op": "copy",
    "from": "/name/0",
    "path": "/name/1"
  }
]
```

**Permintaan Patch JSON Langsung dengan Operasi Tunggal**  


```
PATCH [base]/Patient/example
Content-Type: application/json-patch+json

[
  {
    "op": "replace",
    "path": "/active",
    "value": false
  }
]
```

**JSON Patch dalam Bundel**  
Gunakan sumber daya Biner yang berisi payload JSON Patch yang disandikan base64:

```
{
  "resourceType": "Bundle",
  "type": "transaction",
  "entry": [{
    "resource": {
      "resourceType": "Binary",
      "contentType": "application/json-patch+json",
      "data": "W3sib3AiOiJhZGQiLCJwYXRoIjoiL2JpcnRoRGF0ZSIsInZhbHVlIjoiMTk5MC0wMS0wMSJ9XQ=="
    },
    "request": {
      "method": "PATCH",
      "url": "Patient/123"
    }
  }]
}
```

## FHIRPath Format Patch
<a name="patch-fhirpath-format"></a>

### Operasi yang Didukung
<a name="patch-fhirpath-supported-operations"></a>


| Operasi | Deskripsi | 
| --- | --- | 
| add | Tambahkan elemen baru ke sumber daya | 
| insert | Menyisipkan elemen pada posisi tertentu dalam daftar | 
| delete | Hapus elemen dari sumber daya | 
| replace | Ganti nilai elemen yang ada | 
| move | Menyusun ulang elemen dalam daftar | 

### Sintaks Path
<a name="patch-fhirpath-path-syntax"></a>

FHIRPath Patch menggunakan FHIRPath ekspresi, mendukung:
+ Akses **berbasis indeks**: `Patient.name[0]`
+ **Penyaringan dengan `where()`**: `Patient.name.where(use = 'official')`
+ **Logika Boolean**: `Patient.telecom.where(system = 'phone' and use = 'work')`
+ **Fungsi subsetting**:`first()`, `last()`
+ **Pemeriksaan keberadaan**:`exists()`, `count()`
+ **Navigasi polimorfik**: `Observation.value`

### Contoh
<a name="patch-fhirpath-examples"></a>

**Permintaan FHIRPath Patch Langsung**  


```
PATCH [base]/Patient/123
Content-Type: application/fhir+json
Authorization: ...

{
  "resourceType": "Parameters",
  "parameter": [{
    "name": "operation",
    "part": [
      { "name": "type", "valueCode": "add" },
      { "name": "path", "valueString": "Patient" },
      { "name": "name", "valueString": "birthDate" },
      { "name": "value", "valueDate": "1990-01-01" }
    ]
  }]
}
```

**FHIRPath Patch dalam Bundel**  
Gunakan sumber daya Parameter sebagai sumber daya entri dengan`method: PATCH`:

```
{
  "resourceType": "Bundle",
  "type": "transaction",
  "entry": [{
    "resource": {
      "resourceType": "Parameters",
      "parameter": [{
        "name": "operation",
        "part": [
          { "name": "type", "valueCode": "add" },
          { "name": "path", "valueString": "Patient" },
          { "name": "name", "valueString": "birthDate" },
          { "name": "value", "valueDate": "1990-01-01" }
        ]
      }]
    },
    "request": {
      "method": "PATCH",
      "url": "Patient/123"
    }
  }]
}
```

## Header Permintaan
<a name="patch-request-headers"></a>


| Header | Diperlukan | Deskripsi | 
| --- | --- | --- | 
| Content-Type | Ya | application/json-patch\$1jsonuntuk JSON Patch atau application/fhir\$1json untuk FHIRPath Patch | 
| If-Match | Tidak | Pembaruan bersyarat khusus versi menggunakan ETag | 

## Contoh Respons
<a name="patch-sample-response"></a>

Operasi mengembalikan sumber daya yang diperbarui dengan informasi versi baru:

```
HTTP/1.1 200 OK
Content-Type: application/fhir+json
ETag: W/"2"
Last-Modified: Mon, 05 May 2025 10:10:10 GMT

{
  "resourceType": "Patient",
  "id": "example",
  "active": true,
  "name": [
    {
      "family": "Smith",
      "given": ["John"]
    }
  ],
  "telecom": [
    {
      "system": "phone",
      "value": "555-555-5555",
      "use": "home"
    }
  ],
  "meta": {
    "versionId": "2",
    "lastUpdated": "2025-05-05T10:10:10Z"
  }
}
```

## Perilaku
<a name="patch-behavior"></a>

Operasi PATCH:
+ Memvalidasi sintaks patch sesuai dengan spesifikasi yang sesuai (RFC 6902 untuk JSON Patch, FHIR R4 untuk Patch) FHIRPath 
+ Menerapkan operasi secara atom - semua operasi berhasil atau semuanya gagal
+ Memperbarui ID versi sumber daya dan membuat entri riwayat baru
+ Mempertahankan sumber daya asli dalam sejarah sebelum menerapkan perubahan
+ Memvalidasi kendala sumber daya FHIR setelah menerapkan tambalan
+ Mendukung pembaruan bersyarat menggunakan header If-Match dengan ETag

## Penanganan Kesalahan
<a name="patch-error-handling"></a>

Operasi menangani kondisi kesalahan berikut:
+ **400 Permintaan Buruk**: Sintaks tambalan tidak valid (permintaan tidak sesuai atau dokumen tambalan yang salah)
+ **404 Tidak Ditemukan**: Sumber daya tidak ditemukan (ID tertentu tidak ada)
+ **409 Konflik: Konflik** versi (pembaruan bersamaan atau ID versi tidak saat ini disediakan)
+ **422 Entitas yang Tidak Dapat Diproses**: Operasi tambalan tidak dapat diterapkan ke elemen sumber daya yang ditentukan

## Kesimpulan dari Capabilities
<a name="patch-summary-of-capabilities"></a>


| Kemampuan | Tambalan JSON | FHIRPath Patch | 
| --- | --- | --- | 
| Jenis Konten | application/json-patch\$1json | application/fhir\$1json | 
| Format Jalur | Penunjuk JSON (RFC 6901) | FHIRPath ekspresi | 
| API PATCH langsung | Didukung | Didukung | 
| Bundel Batch | Didukung (melalui Biner) | Didukung (melalui Parameter) | 
| Transaksi Bundel | Didukung (melalui Biner) | Didukung (melalui Parameter) | 
| Operasi | tambahkan, hapus, ganti, pindahkan, salin, uji | tambahkan, masukkan, hapus, ganti, pindahkan | 

## Batasan
<a name="patch-limitations"></a>
+ Operasi PATCH bersyarat menggunakan kondisi pencarian tidak didukung
+ JSON Patch dalam bundel harus menggunakan sumber daya Biner dengan konten yang disandikan base64
+ FHIRPath Patch dalam bundel harus menggunakan sumber daya Parameter

## Sumber Daya Tambahan
<a name="patch-additional-resources"></a>

Untuk informasi selengkapnya tentang operasi PATCH, lihat:
+ [Dokumentasi PATCH FHIR R4](https://hl7.org/fhir/http.html#patch)
+ [Spesifikasi Patch FHIR R4 FHIRPath ](https://hl7.org/fhir/fhirpatch.html)
+ [RFC 6902 - Patch JSON](https://datatracker.ietf.org/doc/html/rfc6902#section-4)
+ [RFC 6901 - Penunjuk JSON](https://datatracker.ietf.org/doc/html/rfc6901)

# Bundling sumber daya FHIR
<a name="managing-fhir-resources-bundle"></a>

FHIR `Bundle` adalah wadah untuk koleksi sumber daya FHIR di. AWS HealthLake AWS HealthLake mendukung dua jenis bundel dengan perilaku pemrosesan yang berbeda.

[https://hl7.org/fhir/R4/http.html#transaction](https://hl7.org/fhir/R4/http.html#transaction)bundel memproses setiap sumber daya secara independen. Jika satu sumber daya gagal, sumber daya yang tersisa masih bisa berhasil. Setiap operasi diproses secara individual, dan pemrosesan berlanjut bahkan ketika beberapa operasi gagal. Gunakan bundel batch untuk operasi massal di mana keberhasilan sebagian dapat diterima, seperti mengunggah beberapa catatan pasien yang tidak terkait.

[https://hl7.org/fhir/R4/http.html#transaction](https://hl7.org/fhir/R4/http.html#transaction)bundel memproses semua sumber daya secara atom sebagai satu unit. Entah semua operasi sumber daya berhasil, atau tidak AWS HealthLake melakukan satu pun dari mereka. Gunakan bundel transaksi saat Anda membutuhkan jaminan integritas referensial di seluruh sumber daya terkait, seperti membuat pasien dengan pengamatan dan kondisi terkait di mana semua data harus direkam bersama.


**Perbedaan antara batch dan bundel transaksi**  

| Fitur | Batch | Transaksi | 
| --- | --- | --- | 
| Model pengolahan | Setiap operasi berhasil atau gagal secara independen. | Semua operasi berhasil atau gagal sebagai satu unit atom. | 
| Penanganan kegagalan | Pemrosesan berlanjut bahkan jika operasi individu gagal. | Seluruh bundel gagal jika ada operasi tunggal yang gagal. | 
| Perintah eksekusi | Perintah eksekusi tidak dijamin. | Operasi diproses dalam urutan yang ditentukan. | 
| Integritas referensial | Tidak diberlakukan di seluruh operasi. | Ditegakkan untuk sumber daya yang direferensikan secara lokal dalam bundel. | 
| Paling baik digunakan untuk | Operasi massal di mana keberhasilan sebagian dapat diterima. | Sumber daya terkait yang harus dibuat atau diperbarui bersama. | 

Anda dapat menggabungkan sumber daya FHIR dari jenis yang sama atau berbeda, dan mereka dapat menyertakan campuran operasi FHIR, seperti,`create`,, `read` `update``delete`, dan. `patch` Untuk informasi tambahan, lihat [Resource Bundle](https://hl7.org/fhir/R4/Bundle) dalam dokumentasi **FHIR R4**.

Berikut ini adalah contoh kasus penggunaan untuk setiap jenis bundel.

Bundel Batch  
+ Unggah beberapa catatan pasien yang tidak terkait dari fasilitas yang berbeda selama sinkronisasi data malam hari.
+ Unggah massal catatan pengobatan historis di mana beberapa catatan mungkin memiliki masalah validasi.
+ Muat data referensi, seperti organisasi dan praktisi, di mana kegagalan individu tidak memengaruhi entri lain.

Bundel transaksi  
+ Buat pasien dengan pengamatan dan kondisi terkait selama penerimaan departemen gawat darurat di mana semua data harus direkam bersama.
+ Perbarui daftar obat pasien dan informasi alergi terkait yang harus tetap konsisten.
+ Catat pertemuan lengkap dengan pasien, pengamatan, prosedur, dan informasi penagihan sebagai satu unit atom.

**penting**  
Bundel batch dan transaksi menggunakan struktur `Bundle` sumber daya yang sama. Satu-satunya perbedaan adalah nilai `type` bidang.

Contoh berikut menunjukkan bundel transaksi dengan beberapa jenis sumber daya dan operasi.

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

## Menggabungkan sumber daya FHIR sebagai entitas independen
<a name="bundle-fhir-resources-batch-type"></a>

**Untuk menggabungkan sumber daya FHIR sebagai entitas independen**  


1. Kumpulkan HealthLake `region` dan `datastoreId` nilai. Untuk informasi selengkapnya, lihat [Mendapatkan properti penyimpanan data](managing-data-stores-describe.md).

1. Buat URL untuk permintaan menggunakan nilai yang dikumpulkan untuk HealthLake `region` dan`datastoreId`. *Jangan* tentukan jenis sumber daya FHIR di URL. Untuk melihat seluruh jalur URL dalam contoh berikut, gulir ke atas tombol **Salin**.

   ```
   POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/
   ```

1. Membangun badan JSON untuk permintaan, menentukan setiap kata kerja HTTP sebagai bagian dari elemen. `method` Contoh berikut menggunakan interaksi `batch` tipe dengan `Bundle` sumber daya untuk membuat baru `Patient` dan `Medication` sumber daya. Semua bagian yang diperlukan dikomentari sesuai. Untuk tujuan prosedur ini, simpan file sebagai`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"
               }
           }
       ]
   }
   ```

1. Kirim permintaan . Jenis `Bundle` batch FHIR menggunakan `POST` permintaan dengan [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) atau SMART pada otorisasi FHIR. Contoh kode berikut menggunakan alat baris `curl` perintah untuk tujuan demonstrasi.

------
#### [ SigV4 ]

   Otorisasi 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 ]

   SMART pada contoh otorisasi FHIR untuk tipe [https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html)data.

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

   Penelepon dapat menetapkan izin di lambda otorisasi. Untuk informasi selengkapnya, lihat [OAuth 2.0 cakupan](reference-smart-on-fhir-oauth-scopes.md).

------

   Server mengembalikan respons yang menunjukkan `Patient` dan `Medication` sumber daya yang dibuat sebagai hasil dari permintaan jenis `Bundle` batch.

## Bersyarat PUTs dalam bundel
<a name="bundle-conditional-PUTs"></a>

AWS HealthLake mendukung pembaruan bersyarat dalam bundel menggunakan parameter kueri berikut:
+ `_id`(mandiri)
+ `_id`dalam kombinasi dengan salah satu dari berikut ini:
  + `_tag`
  + `_createdAt`
  + `_lastUpdated`

Bila Anda menggunakan kondisional PUTs dalam bundel, AWS HealthLake mengevaluasi parameter kueri terhadap sumber daya yang ada dan mengambil tindakan berdasarkan hasil kecocokan.


**Perilaku pembaruan bersyarat**  

| Skenario | Status HTTP | Tindakan yang diambil | 
| --- | --- | --- | 
| Sumber daya tanpa ID yang disediakan | 201 Dibuat | Selalu menciptakan sumber daya baru. | 
| Sumber daya dengan ID baru (tidak cocok) | 201 Dibuat | Membuat sumber daya baru dengan ID yang ditentukan. | 
| Sumber daya dengan ID yang ada (kecocokan tunggal) | 200 OK | Memperbarui sumber daya yang cocok. | 
| Sumber daya dengan ID yang ada (konflik terdeteksi) | 409 Konflik | Mengembalikan kesalahan. Tidak ada perubahan yang dibuat. | 
| Sumber daya dengan ID yang ada (ketidakcocokan ID) | 400 Permintaan Buruk | Mengembalikan kesalahan. Tidak ada perubahan yang dibuat. | 
| Beberapa kondisi pencocokan sumber daya | 412 Prasyarat Gagal | Mengembalikan kesalahan. Tidak ada perubahan yang dibuat. | 

Dalam contoh bundel berikut dengan pembaruan bersyarat, `Patient` sumber daya dengan ID FHIR `476` diperbarui hanya jika kondisi `_lastUpdated=lt2025-04-20` terpenuhi.

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

## Menggabungkan sumber daya FHIR sebagai satu kesatuan
<a name="bundle-fhir-resources-document-type"></a>

**Untuk menggabungkan sumber daya FHIR sebagai satu kesatuan**  


1. Kumpulkan HealthLake `region` dan `datastoreId` nilai. Untuk informasi selengkapnya, lihat [Mendapatkan properti penyimpanan data](managing-data-stores-describe.md).

1. Buat URL untuk permintaan menggunakan nilai yang dikumpulkan untuk HealthLake `region` dan`datastoreId`. Sertakan jenis sumber daya FHIR `Bundle` sebagai bagian dari URL. Untuk melihat seluruh jalur URL dalam contoh berikut, gulir ke atas tombol **Salin**.

   ```
   POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Bundle
   ```

1. Membangun badan JSON untuk permintaan, menentukan sumber daya FHIR untuk dikelompokkan bersama. Contoh berikut mengelompokkan dua `Patient` sumber daya di HealthLake. Untuk tujuan prosedur ini, simpan file sebagai`batch-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"
                           ]
                       }
                   ]                
               }
           }
       ]
   }
   ```

1. Kirim permintaan . Jenis `Bundle` dokumen FHIR menggunakan `POST` permintaan dengan protokol penandatanganan [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html). Contoh kode berikut menggunakan alat baris `curl` perintah untuk tujuan demonstrasi.

------
#### [ SigV4 ]

   Otorisasi 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 ]

   SMART pada contoh otorisasi FHIR untuk tipe [https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html)data.

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

   Penelepon dapat menetapkan izin di lambda otorisasi. Untuk informasi selengkapnya, lihat [OAuth 2.0 cakupan](reference-smart-on-fhir-oauth-scopes.md).

------

   Server mengembalikan respons yang menunjukkan dua `Patient` sumber daya yang dibuat sebagai hasil dari permintaan jenis `Bundle` dokumen.

## Mengkonfigurasi tingkat validasi untuk bundel
<a name="validation-level-bundles"></a>

Saat menggabungkan sumber daya FHIR, Anda dapat menentukan header `x-amzn-healthlake-fhir-validation-level` HTTP secara opsional untuk mengonfigurasi tingkat validasi sumber daya. Tingkat validasi ini akan ditetapkan untuk semua permintaan buat dan perbarui dalam bundel. AWS HealthLake saat ini mendukung tingkat validasi berikut:
+ `strict`: Sumber daya divalidasi sesuai dengan elemen profil sumber daya, atau spesifikasi R4 jika tidak ada profil. Ini adalah tingkat validasi default untuk AWS HealthLake.
+ `structure-only`: Sumber daya divalidasi terhadap R4, mengabaikan profil yang direferensikan.
+ `minimal`: Sumber daya divalidasi minimal, mengabaikan aturan R4 tertentu. Sumber daya yang gagal dalam pemeriksaan struktur yang diperlukan search/analytics akan diperbarui untuk menyertakan peringatan untuk audit.

Sumber daya yang dibundel dengan tingkat validasi minimal dapat dicerna ke dalam Datastore meskipun validasi gagal diperlukan untuk pengindeksan pencarian. Dalam hal ini, sumber daya akan diperbarui untuk menyertakan ekstensi khusus Healthlake untuk mendokumentasikan kegagalan tersebut, dan entri dalam respons Bundel akan mencakup OperationOutcome sumber daya sebagai berikut:

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

Selain itu, header respons HTTP berikut akan disertakan dengan nilai “true”:

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

**catatan**  
Perhatikan bahwa data yang dicerna yang cacat menurut spesifikasi R4 mungkin tidak dapat dicari seperti yang diharapkan jika kesalahan ini ada.

## Dukungan terbatas untuk “pesan” tipe Bundle
<a name="bundle-message-type-limited-support"></a>

HealthLake memberikan dukungan terbatas untuk jenis FHIR Bundle `message` melalui proses konversi internal. Dukungan ini dirancang untuk skenario di mana bundel pesan tidak dapat diformat ulang di sumbernya, seperti menelan umpan ADT (Admission, Discharge, Transfer) dari sistem rumah sakit lama.

**Awas**  
Fitur ini memerlukan daftar izin AWS akun eksplisit dan tidak memberlakukan semantik pesan FHIR R4 atau integritas referensial. Hubungi AWS Support untuk meminta pengaktifan akun Anda sebelum menggunakan bundel pesan.

### Perbedaan utama dari pemrosesan pesan standar
<a name="bundle-message-key-differences"></a>
+ **Bundel Pesan** (spesifikasi FHIR): Entri pertama harus berupa referensi sumber `MessageHeader` daya lain. Sumber daya tidak memiliki `request` objek individu, dan MessageHeader acara menentukan tindakan pemrosesan.
+ **HealthLake Pemrosesan**: Mengonversi Bundel pesan ke Bundel batch dengan secara otomatis menetapkan operasi PUT ke setiap entri sumber daya. Sumber daya diproses secara independen tanpa menegakkan semantik pesan atau integritas referensial.

### Keterbatasan penting
<a name="bundle-message-limitations"></a>
+ Aturan pemrosesan khusus pesan FHIR R4 tidak diberlakukan
+ Tidak ada integritas transaksional di seluruh sumber daya
+ Referensi antar sumber daya tidak divalidasi
+ Memerlukan daftar izin akun eksplisit

### Contoh struktur Bundle pesan
<a name="bundle-message-example"></a>

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

**catatan**  
Setiap sumber daya disimpan secara independen seolah-olah diserahkan melalui operasi PUT individu. Jika semantik pesan FHIR lengkap atau validasi integritas referensial diperlukan, pra-proses Bundel pesan atau terapkan validasi tingkat aplikasi sebelum pengiriman.

## Transaksi bundel asinkron
<a name="managing-fhir-resources-async-transactions"></a>

AWS HealthLake mendukung `Bundle` tipe asinkron `transaction` yang memungkinkan Anda mengirimkan transaksi dengan hingga 500 sumber daya. Saat Anda mengirimkan transaksi asinkron, HealthLake antrean untuk diproses dan segera mengembalikan URL polling. Anda dapat menggunakan URL ini untuk memeriksa status dan mengambil respons. Ini mengikuti pola [bundel async FHIR](https://hl7.org/fhir/async-bundle.html). 

**Kapan menggunakan transaksi asinkron**  

+ Anda perlu mengirimkan lebih dari 100 sumber daya (batas sinkron) dalam satu transaksi.
+ Anda ingin menghindari pemblokiran aplikasi Anda sambil menunggu pemrosesan transaksi selesai.
+ Anda perlu memproses volume tinggi sumber daya terkait dengan throughput yang lebih baik.

**penting**  
Hasil polling tersedia selama 90 hari setelah transaksi selesai. Setelah periode 90 hari ini, URL polling tidak lagi mengembalikan hasil. Rancang integrasi Anda untuk mengambil dan menyimpan hasil dalam jendela ini.

**catatan**  
`Bundle`Tipe sinkron `transaction` terus mendukung hingga 100 sumber daya dan merupakan mode pemrosesan default. Jika Anda mengirimkan `Bundle` jenis `transaction` dengan lebih dari 100 sumber daya tanpa `Prefer: respond-async` header, HealthLake mengembalikan `422 Unprocessable Entity` kesalahan. Bundel dengan tipe tidak `batch` didukung untuk pemrosesan asinkron—hanya `Bundle` jenis yang `transaction` dapat dikirimkan secara asinkron (dengan hingga 500 operasi).

### Mengirimkan transaksi asinkron
<a name="async-transactions-submitting"></a>

Untuk mengirimkan transaksi asinkron, kirim `POST` permintaan ke titik akhir penyimpanan data dengan header. `Prefer: respond-async` Bundel harus memiliki tipe`transaction`. Bundel dengan tipe tidak `batch` didukung untuk pemrosesan bundel asinkron.

HealthLake melakukan validasi awal untuk bundel pada waktu pengiriman. Jika validasi berhasil, HealthLake mengembalikan HTTP 202 Diterima dengan header `content-location` respons yang berisi URL polling.

**Untuk mengirimkan tipe asinkron `Bundle` `transaction`**  


1. Kirim `POST` permintaan ke titik akhir penyimpanan HealthLake data.

   ```
   POST https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/
   ```

1. Buat badan JSON untuk permintaan dengan tipe bundel. `transaction` Untuk tujuan prosedur ini, simpan file sebagai`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"
               }
           }
       ]
   }
   ```

1. Kirim permintaan dengan `Prefer: respond-async` header. Jenis `Bundle` transaksi FHIR menggunakan `POST` permintaan dengan [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) atau SMART pada otorisasi FHIR. Contoh kode berikut menggunakan alat baris `curl` perintah untuk tujuan demonstrasi.

------
#### [ SigV4 ]

   Otorisasi 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 ]

   SMART pada contoh otorisasi FHIR untuk tipe [https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html)data.

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

   Penelepon dapat menetapkan izin di lambda otorisasi. Untuk informasi selengkapnya, lihat [OAuth 2.0 cakupan](reference-smart-on-fhir-oauth-scopes.md).

------

1. Pada pengiriman yang berhasil, server mengembalikan HTTP 202 Diterima. Header `content-location` respon berisi URL polling. Badan respons adalah sumber `OperationOutcome` daya.

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

### Polling untuk status transaksi
<a name="async-transactions-polling"></a>

Setelah Anda mengirimkan transaksi asinkron, gunakan URL polling dari header `content-location` respons untuk memeriksa status transaksi. Kirim `GET` permintaan ke URL polling.

**catatan**  
Untuk SMART pada penyimpanan data yang diaktifkan FHIR, token otorisasi harus menyertakan `read` izin pada jenis `Transaction` sumber daya untuk melakukan polling untuk status transaksi. Untuk informasi lebih lanjut tentang SMART pada cakupan FHIR, lihat. [SMART pada cakupan FHIR OAuth 2.0 didukung oleh HealthLake](reference-smart-on-fhir-oauth-scopes.md)

Kirim `GET` permintaan ke URL polling. Contoh berikut menggunakan alat baris `curl` perintah.

------
#### [ SigV4 ]

Otorisasi 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 ]

SMART pada otorisasi FHIR. Token otorisasi harus menyertakan `read` izin pada jenis `Transaction` sumber daya.

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

------

Tabel berikut menjelaskan kemungkinan tanggapan.


**Kode respons polling**  

| Status HTTP | Arti | Isi respons | 
| --- | --- | --- | 
| 202 Diterima | Transaksi antri | OperationOutcomedengan diagnostik “DISERAHKAN” | 
| 202 Diterima | Transaksi sedang diproses | OperationOutcomedengan diagnostik “IN\$1PROGRESS” | 
| 200 OK | Transaksi berhasil diselesaikan | Bundledengan tipe transaction-response | 
| 4xx/5xx | Transaksi gagal | OperationOutcomedengan detail kesalahan | 

Contoh berikut menunjukkan setiap jenis respons.

**Transaksi antri (202)**  


```
{
    "resourceType": "OperationOutcome",
    "id": "transactionId",
    "issue": [
        {
            "severity": "information",
            "code": "informational",
            "diagnostics": "SUBMITTED"
        }
    ]
}
```

**Pemrosesan transaksi (202)**  


```
{
    "resourceType": "OperationOutcome",
    "id": "transactionId",
    "issue": [
        {
            "severity": "information",
            "code": "informational",
            "diagnostics": "IN_PROGRESS"
        }
    ]
}
```

**Transaksi selesai (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"
            }
        }
    ]
}
```

**Transaksi gagal (4xx/5xx)**  


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

### Memproses pesanan
<a name="async-transactions-processing-order"></a>

Jenis bundel asinkron diantrian tetapi tidak `transaction` diproses dalam urutan pengiriman yang ketat. HealthLake mengoptimalkan pemrosesan berdasarkan kapasitas yang tersedia dan beban sistem.

**penting**  
Jangan bergantung pada transaksi yang diproses sesuai urutan yang diajukan. Misalnya, jika Anda mengirimkan Transaksi A pada pukul 10:00 dan Transaksi B pukul 10:01, Transaksi B mungkin selesai sebelum Transaksi A. Rancang aplikasi Anda ke:  
Menangani out-of-order penyelesaian.
Gunakan URL polling untuk melacak setiap transaksi secara independen.
Terapkan pengurutan tingkat aplikasi jika urutan penting untuk kasus penggunaan Anda.

### Kuota dan pelambatan
<a name="async-transactions-quotas"></a>

Kuota dan batas tarif berikut berlaku untuk transaksi asinkron.


**Kuota transaksi asinkron**  

| Kuota | Nilai | Dapat Disesuaikan | 
| --- | --- | --- | 
| Operasi maksimum per transaksi asinkron | 500 | Tidak | 
| Transaksi tertunda maksimum per penyimpanan data | 500 | Ya | 
+ Transaksi asinkron memiliki batas tarif API yang sama yang ditentukan di bawah. [Kuota layanan](reference-healthlake-endpoints-quotas.md#reference-healthlake-quotas)
+ Polling untuk status transaksi memiliki batas tarif API yang sama dengan operasi read (`GET`) pada sumber daya FHIR.
+ Jika batas transaksi yang tertunda tercapai, kiriman berikutnya mengembalikan kesalahan hingga transaksi yang ada selesai.

### Penanganan kesalahan
<a name="async-transactions-error-handling"></a>

Untuk bundel 'transaksi', semua sumber daya FHIR yang terkandung dalam bundel diproses sebagai operasi atom. Semua sumber daya dalam operasi harus berhasil, atau tidak ada operasi dalam bundel yang diproses. 

Kesalahan terbagi dalam dua kategori: kesalahan pengiriman yang HealthLake kembali secara sinkron, dan kesalahan pemrosesan yang Anda ambil melalui polling.

**Kesalahan pengiriman**  


HealthLake memvalidasi bundel pada waktu pengiriman dan mengembalikan kesalahan secara serempak sebelum transaksi antri. Kesalahan pengiriman mencakup kesalahan validasi sumber daya FHIR yang tidak valid, jenis sumber daya yang tidak didukung, melebihi batas operasi 500, dan menggunakan header dengan bundel batch. `Prefer: respond-async` Jika batas transaksi yang tertunda untuk penyimpanan data telah tercapai, HealthLake kembalikan a`ThrottlingException`. Ketika kesalahan pengiriman terjadi, transaksi tidak akan antri.

**Kesalahan pemrosesan**  


Kesalahan pemrosesan terjadi setelah transaksi telah antri dan dikembalikan melalui URL polling. Ini termasuk konflik transaksi, di mana operasi lain memodifikasi sumber daya yang merupakan bagian dari transaksi, dan kesalahan server selama pemrosesan. Ketika kesalahan pemrosesan terjadi, tidak ada mutasi sumber daya yang dilakukan untuk sumber daya dalam transaksi. URL polling akan mengembalikan `OperationOutcome` dengan rincian kesalahan.

# Menghapus sumber daya FHIR
<a name="managing-fhir-resources-delete"></a>

`delete`Interaksi FHIR menghapus sumber daya FHIR yang ada dari penyimpanan HealthLake data. Untuk informasi tambahan, lihat [https://hl7.org/fhir/R4/http.html#delete](https://hl7.org/fhir/R4/http.html#delete)di dokumentasi **FHIR R4 RESTful API**.

**Untuk menghapus sumber daya FHIR**  


1. Kumpulkan HealthLake `region` dan `datastoreId` nilai. Untuk informasi selengkapnya, lihat [Mendapatkan properti penyimpanan data](managing-data-stores-describe.md).

1. Tentukan jenis FHIR `Resource` untuk menghapus dan mengumpulkan `id` nilai terkait. Untuk informasi selengkapnya, lihat [Jenis sumber daya](reference-fhir-resource-types.md).

1. Buat URL untuk permintaan menggunakan nilai yang dikumpulkan untuk HealthLake `region` dan`datastoreId`. Juga termasuk `Resource` jenis FHIR dan yang terkait`id`. Untuk melihat seluruh jalur URL dalam contoh berikut, gulir ke atas tombol **Salin**.

   ```
   DELETE https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Resource/id
   ```

1. Kirim permintaan . `delete`Interaksi FHIR menggunakan `DELETE` permintaan dengan [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) atau SMART pada otorisasi FHIR. `curl`Contoh berikut menghapus `Patient` sumber daya FHIR yang ada dari penyimpanan HealthLake data. Untuk melihat seluruh contoh, gulir ke atas tombol **Salin**.

------
#### [ SigV4 ]

   Otorisasi SiGv4

   ```
   curl --request DELETE \
     'https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient/id' \
     --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'
   ```

   Server mengembalikan kode status `204` HTTP yang mengonfirmasi sumber daya telah dihapus dari penyimpanan HealthLake data. Jika permintaan penghapusan gagal, Anda akan menerima kode status HTTP `400` seri yang menunjukkan mengapa permintaan gagal.

------
#### [ SMART on FHIR ]

   SMART pada contoh otorisasi FHIR untuk tipe [https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html](https://docs.aws.amazon.com/healthlake/latest/APIReference/API_IdentityProviderConfiguration.html)data.

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

   Penelepon dapat menetapkan izin di lambda otorisasi. Untuk informasi selengkapnya, lihat [OAuth 2.0 cakupan](reference-smart-on-fhir-oauth-scopes.md).

------
#### [ AWS Console ]

   1. Masuk ke halaman [Jalankan kueri](https://console.aws.amazon.com/healthlake/home#/crud) di HealthLake Konsol.

   2. Di bawah bagian **Pengaturan kueri**, buat pilihan berikut.
   + **ID Penyimpanan Data** — pilih ID penyimpanan data untuk menghasilkan string kueri.
   + **Jenis kueri** - pilih`Delete`.
   + **Jenis sumber daya** - pilih [jenis sumber daya](reference-fhir-resource-types.md) FHIR untuk dihapus.
   + **ID Sumber Daya** — masukkan ID sumber daya FHIR.

   3. Pilih **Run query** (Jalankan kueri).

------

## Menghapus sumber daya FHIR berdasarkan kondisi
<a name="conditional-delete-fhir"></a>

Penghapusan bersyarat sangat berguna ketika Anda tidak mengetahui ID sumber daya FHIR tertentu tetapi memiliki informasi pengenal lain tentang sumber daya yang ingin Anda hapus.

Penghapusan bersyarat memungkinkan Anda untuk menghapus sumber daya yang ada berdasarkan kriteria pencarian, bukan dengan ID FHIR logis. Saat server memproses permintaan penghapusan, server melakukan pencarian menggunakan kemampuan pencarian standar untuk jenis sumber daya untuk menyelesaikan satu ID logis untuk permintaan tersebut.

### Cara kerja penghapusan bersyarat
<a name="conditional-delete-works"></a>

**Tindakan server tergantung pada berapa banyak kecocokan yang ditemukannya:**  


1. **Tidak ada kecocokan**: Server mencoba menghapus biasa dan merespons dengan tepat (404 Tidak Ditemukan untuk sumber daya yang tidak ada, 204 Tidak Ada Konten untuk sumber daya yang sudah dihapus)

1. **Satu kecocokan**: Server melakukan penghapusan biasa pada sumber daya yang cocok

1. **Beberapa kecocokan**: Mengembalikan kesalahan 412 Prasyarat Gagal yang menunjukkan kriteria klien tidak cukup selektif

### Skenario respons
<a name="response-scenerios"></a>

AWS HealthLake menangani operasi penghapusan bersyarat dengan pola respons berikut:

**Operasi yang Sukses**  

+ Ketika kriteria pencarian Anda berhasil mengidentifikasi satu sumber daya aktif, sistem mengembalikan **204 Tanpa Konten** setelah menyelesaikan penghapusan, seperti operasi penghapusan standar.

**Penghapusan Bersyarat Berbasis ID**  
Saat melakukan penghapusan bersyarat berdasarkan `id` parameter tambahan (`createdAt`,`tag`, atau`_lastUpdated`):
+ **204 Tidak Ada Konten**: Sumber daya sudah dihapus
+ **404 Tidak Ditemukan**: Sumber daya tidak ada
+ **409 Konflik**: ID cocok tetapi parameter lain tidak cocok

**Non-ID-Based Hapus Bersyarat**  
Kapan tidak `id` disediakan atau saat menggunakan parameter selain`createdAt`,`tag`, atau`_lastUpdated`:
+ **404 Not Found: Tidak ditemukan** kecocokan

**Situasi Konflik**  
Beberapa skenario menghasilkan 412 tanggapan Prasyarat Gagal:
+ Beberapa sumber daya cocok dengan kriteria pencarian Anda (kriteria tidak cukup spesifik)
+ Konflik versi saat menggunakan ETag header dengan `If-Match`
+ Pembaruan sumber daya yang terjadi antara operasi pencarian dan penghapusan

**Contoh Penghapusan Bersyarat yang Berhasil**  
Contoh berikut menghapus sumber daya Pasien berdasarkan kriteria tertentu:

```
DELETE https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient?name=peter&birthdate=2000-01-01&phone=1234567890
```

Permintaan ini menghapus sumber daya Pasien di mana:
+ Nama adalah “Peter”
+ Tanggal lahir adalah 1 Januari 2000
+ Nomor telepon adalah 1234567890

**Praktik Terbaik**  


1. Gunakan kriteria pencarian khusus untuk menghindari beberapa kecocokan dan mencegah 412 kesalahan.

1. Pertimbangkan ETag header untuk kontrol versi bila diperlukan untuk menangani modifikasi bersamaan.

1. Tangani respons kesalahan dengan tepat:
   + Untuk 404: Perbaiki kriteria pencarian Anda
   + Untuk 412: Buat kriteria lebih spesifik atau selesaikan konflik versi

1. Bersiaplah untuk konflik waktu di lingkungan konkurensi tinggi di mana sumber daya dapat dimodifikasi antara operasi pencarian dan penghapusan.

# Idempotensi dan Konkurensi
<a name="managing-fhir-resources-idempotency"></a>

## Kunci Idempotensi
<a name="idempotency-keys"></a>

AWS HealthLake mendukung kunci idempotensi untuk `POST` operasi FHIR, menyediakan mekanisme yang kuat untuk memastikan integritas data selama pembuatan sumber daya. Dengan memasukkan UUID unik sebagai kunci idempotensi di header permintaan, aplikasi perawatan kesehatan dapat menjamin bahwa setiap sumber daya FHIR dibuat tepat sekali, bahkan dalam skenario yang melibatkan ketidakstabilan jaringan atau percobaan ulang otomatis.

Fitur ini sangat penting untuk sistem perawatan kesehatan di mana rekam medis duplikat dapat memiliki konsekuensi serius. Ketika permintaan diterima dengan kunci idempotensi yang sama dengan permintaan sebelumnya, HealthLake akan mengembalikan sumber daya asli alih-alih membuat duplikat. Misalnya, ini dapat terjadi selama loop coba lagi atau karena pipeline permintaan yang berlebihan. Menggunakan kunci idempotensi memungkinkan HealthLake untuk menjaga konsistensi data sambil memberikan pengalaman yang mulus untuk aplikasi klien yang menangani masalah konektivitas intermiten.

### Implementasi
<a name="implementation"></a>

```
POST /<baseURL>/Patient
x-amz-fhir-idempotency-key: 123e4567-e89b-12d3-a456-426614174000
{
    "resourceType": "Patient",
    "name": [...]
}
```

### Skenario Respons
<a name="response-scenarios"></a>

Permintaan Pertama (201 Dibuat)  
+ Sumber daya baru berhasil dibuat
+ Respons termasuk ID sumber daya

Permintaan Duplikat (409 Konflik)  
+ Kunci idempotensi yang sama terdeteksi
+ Sumber daya asli dikembalikan
+ Tidak ada sumber daya baru yang dibuat

Permintaan Tidak Valid (400 Permintaan Buruk)  
+ UUID cacat
+ Kolom wajib hilang

### Praktik Terbaik
<a name="best-practices"></a>
+ Hasilkan UUID unik untuk setiap pembuatan sumber daya baru
+ Simpan kunci idempotensi untuk logika coba lagi
+ Gunakan format kunci yang konsisten: UUID v4 direkomendasikan
+ Implementasikan dalam aplikasi klien yang menangani pembuatan sumber daya

**catatan**  
Fitur ini sangat berharga untuk sistem perawatan kesehatan yang membutuhkan akurasi data yang ketat dan mencegah duplikat rekam medis.

## ETag di AWS HealthLake
<a name="healthlake-etag"></a>

AWS HealthLake digunakan ETags untuk kontrol konkurensi optimis dalam sumber daya FHIR, menyediakan mekanisme yang andal untuk mengelola modifikasi bersamaan dan menjaga konsistensi data. An ETag adalah pengidentifikasi unik yang mewakili versi tertentu dari sumber daya, berfungsi sebagai sistem kontrol versi melalui header HTTP. Saat membaca atau memodifikasi sumber daya, aplikasi dapat digunakan ETags untuk mencegah penimpaan yang tidak diinginkan dan memastikan integritas data, terutama dalam skenario dengan potensi pembaruan bersamaan.

### Contoh Implementasi
<a name="healthlake-etag-implementation"></a>

```
// Initial Read
GET /fhir/Patient/123
Response: 
ETag: W/"1"

// Update with If-Match
PUT /fhir/Patient/123
If-Match: W/"1"
{resource content}

// Create with If-None-Match
PUT /fhir/Patient/123
If-None-Match: *
{resource content}
// Succeeds only if resource doesn't exist
// Fails with 412 if resource exists
```

### Skenario Respons
<a name="healthlake-etag-scenarios"></a>

Operasi yang Berhasil (200 OK atau 204 Tanpa Konten)  
+ ETag cocok dengan versi saat ini
+ Operasi berlangsung sebagaimana dimaksud

Konflik Versi (412 Prasyarat Gagal)  
+ ETag tidak cocok dengan versi saat ini
+ Pembaruan ditolak untuk mencegah kehilangan data

### Praktik Terbaik
<a name="healthlake-etag-practices"></a>
+ Sertakan ETags dalam semua operasi pembaruan dan hapus
+ Menerapkan logika coba lagi untuk menangani konflik versi
+ Gunakan If-None-Match: \$1 untuk create-if-not-exists skenario
+ Selalu verifikasi ETag kesegaran sebelum modifikasi

Sistem kontrol konkurensi ini sangat penting untuk menjaga integritas data perawatan kesehatan, terutama di lingkungan dengan banyak pengguna atau sistem yang mengakses dan memodifikasi sumber daya yang sama.