

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

# Modifica delle risorse con l'operazione PATCH
<a name="managing-fhir-resources-patch"></a>

AWS HealthLake supporta l'operazione PATCH per le risorse FHIR, che consente di modificare le risorse prendendo di mira elementi specifici da aggiungere, sostituire o eliminare senza aggiornare l'intera risorsa. Questa operazione è particolarmente utile quando è necessario:
+ Effettuare aggiornamenti mirati a risorse di grandi dimensioni
+ Riduci l'utilizzo della larghezza di banda di rete
+ Esegui modifiche atomiche su elementi di risorse specifici
+ Riduci al minimo il rischio di sovrascrivere le modifiche simultanee
+ Aggiorna le risorse come parte dei flussi di lavoro in batch e delle transazioni

## Formati PATCH supportati
<a name="patch-supported-formats"></a>

AWS HealthLake supporta due formati PATCH standard:

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

Utilizza la sintassi JSON Pointer per indirizzare gli elementi in base alla loro posizione nella struttura delle risorse.

**Tipo di contenuto:** `application/json-patch+json`

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

Utilizza FHIRPath le espressioni per indirizzare gli elementi in base al loro contenuto e alle loro relazioni, fornendo un approccio nativo FHIR all'applicazione delle patch.

**Tipo di contenuto:** `application/fhir+json`

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

### Operazioni PATCH dirette
<a name="patch-usage-direct"></a>

L'operazione PATCH può essere richiamata direttamente sulle risorse FHIR utilizzando il metodo HTTP PATCH:

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

### PATCH in pacchetti
<a name="patch-usage-bundles"></a>

Le operazioni PATCH possono essere incluse come voci all'interno di pacchetti FHIR di tipo `batch` oppure `transaction` consentono di combinare le operazioni di patch con altre interazioni FHIR (creazione, lettura, aggiornamento, eliminazione) in un'unica richiesta.
+ **Pacchetti di transazioni: tutte le** voci hanno esito positivo o negativo in modo atomico
+ **Pacchetti Batch**: ogni voce viene elaborata in modo indipendente

## Formato di patch JSON
<a name="patch-json-format"></a>

### Operazioni supportate
<a name="patch-json-supported-operations"></a>


| Operation | Description | 
| --- | --- | 
| add | Aggiungi un nuovo valore alla risorsa | 
| remove | Rimuove un valore dalla risorsa | 
| replace | Sostituisci un valore esistente nella risorsa | 
| move | Rimuovi un valore da una posizione e aggiungilo a un'altra | 
| copy | Copia un valore da una posizione all'altra | 
| test | Verifica che un valore nella posizione di destinazione sia uguale a un valore specificato | 

### Sintassi del percorso
<a name="patch-json-path-syntax"></a>

JSON Patch utilizza la sintassi JSON Pointer (RFC 6901):


| Esempio di percorso | Description | 
| --- | --- | 
| /name/0/family | Elemento della famiglia del nome | 
| /telecom/- | Aggiungi all'array di telecomunicazioni | 
| /active | Elemento attivo a livello di root | 
| /address/0/line/1 | Seconda riga del primo indirizzo | 

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

**Richiesta diretta di patch JSON con più operazioni**  


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

**Richiesta diretta di patch JSON con singola operazione**  


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

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

**Patch JSON in bundle**  
Usa una risorsa binaria contenente il payload della patch JSON con codifica base64:

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

## FHIRPath Formato della patch
<a name="patch-fhirpath-format"></a>

### Operazioni supportate
<a name="patch-fhirpath-supported-operations"></a>


| Operation | Description | 
| --- | --- | 
| add | Aggiungere un nuovo elemento a una risorsa | 
| insert | Inserisce un elemento in una posizione specifica in un elenco | 
| delete | Rimuove un elemento da una risorsa | 
| replace | Sostituisci il valore di un elemento esistente | 
| move | Riordina gli elementi all'interno di un elenco | 

### Sintassi del percorso
<a name="patch-fhirpath-path-syntax"></a>

FHIRPath La patch utilizza FHIRPath espressioni che supportano:
+ Accesso **basato su indici**: `Patient.name[0]`
+ **Filtraggio** con: `where()` `Patient.name.where(use = 'official')`
+ **Logica booleana:** `Patient.telecom.where(system = 'phone' and use = 'work')`
+ **Funzioni di sottoimpostazione**:, `first()` `last()`
+ **Controlli di esistenza**:`exists()`, `count()`
+ Navigazione **polimorfa:** `Observation.value`

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

**Richiesta diretta di patch FHIRPath**  


```
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 inclusa nel pacchetto**  
Usa una risorsa Parameters come risorsa di ingresso con`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"
    }
  }]
}
```

## Intestazioni di richiesta
<a name="patch-request-headers"></a>


| Header | Richiesto | Descrizione | 
| --- | --- | --- | 
| Content-Type | Sì | application/json-patch\$1jsonper JSON Patch o application/fhir\$1json per FHIRPath Patch | 
| If-Match | No | Aggiornamento condizionale specifico della versione utilizzando ETag | 

## Risposta di esempio
<a name="patch-sample-response"></a>

L'operazione restituisce la risorsa aggiornata con le informazioni sulla nuova versione:

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

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

L'operazione PATCH:
+ Convalida la sintassi della patch in base alle specifiche appropriate (RFC 6902 per JSON Patch, FHIR R4 per Patch) FHIRPath 
+ Applica le operazioni in modo atomico: tutte le operazioni hanno esito positivo o negativo
+ Aggiorna l'ID della versione della risorsa e crea una nuova voce della cronologia
+ Conserva la risorsa originale nella cronologia prima di applicare le modifiche
+ Convalida i vincoli delle risorse FHIR dopo l'applicazione delle patch
+ Supporta gli aggiornamenti condizionali utilizzando l'intestazione If-Match con ETag

## Gestione errori
<a name="patch-error-handling"></a>

L'operazione gestisce le seguenti condizioni di errore:
+ **400 Bad Request**: sintassi della patch non valida (richiesta non conforme o documento di patch non valido)
+ **404 Not Found: risorsa non trovata** (l'ID specificato non esiste)
+ **409 Conflitto: conflitto** di versione (vengono forniti aggiornamenti simultanei o ID di versione non corrente)
+ **422 Entità non processabile**: le operazioni di patch non possono essere applicate agli elementi di risorsa specificati

## Riepilogo delle capacità
<a name="patch-summary-of-capabilities"></a>


| Funzionalità | Patch JSON | FHIRPath Patch | 
| --- | --- | --- | 
| Tipo di contenuto | application/json-patch\$1json | application/fhir\$1json | 
| Formato del percorso | Puntatore JSON (RFC 6901) | FHIRPath espressioni | 
| API Patch diretta | Supportata | Supportata | 
| Batch del pacchetto | Supportato (tramite binario) | Supportato (tramite parametri) | 
| Transazione in bundle | Supportato (tramite binario) | Supportato (tramite parametri) | 
| Operazioni | aggiungere, rimuovere, sostituire, spostare, copiare, testare | aggiungere, inserire, eliminare, sostituire, spostare | 

## Limitazioni
<a name="patch-limitations"></a>
+ Le operazioni PATCH condizionali che utilizzano condizioni di ricerca non sono supportate
+ La patch JSON nei bundle deve utilizzare risorse binarie con contenuto codificato in base64
+ FHIRPath Le patch nei bundle devono utilizzare risorse Parameters

## Risorse aggiuntive
<a name="patch-additional-resources"></a>

Per ulteriori informazioni sulle operazioni PATCH, consulta:
+ [Documentazione FHIR R4 PATCH](https://hl7.org/fhir/http.html#patch)
+ [Specifiche della 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 - Puntatore JSON](https://datatracker.ietf.org/doc/html/rfc6901)