

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

# 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)