

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Modification des ressources à l'aide de l'opération PATCH
<a name="managing-fhir-resources-patch"></a>

AWS HealthLake prend en charge l'opération PATCH pour les ressources FHIR, vous permettant de modifier les ressources en ciblant des éléments spécifiques à ajouter, remplacer ou supprimer sans mettre à jour l'intégralité de la ressource. Cette opération est particulièrement utile lorsque vous devez :
+ Procéder à des mises à jour ciblées à des ressources importantes
+ Réduire l'utilisation de la bande passante du réseau
+ Effectuer des modifications atomiques sur des éléments de ressources spécifiques
+ Minimisez le risque de remplacer des modifications simultanées
+ Mettre à jour les ressources dans le cadre des flux de travail par lots et par transactions

## Formats PATCH pris en charge
<a name="patch-supported-formats"></a>

AWS HealthLake prend en charge deux formats PATCH standard :

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

Utilise la syntaxe du pointeur JSON pour cibler les éléments en fonction de leur position dans la structure des ressources.

**Type de contenu :** `application/json-patch+json`

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

Utilise des FHIRPath expressions pour cibler les éléments en fonction de leur contenu et de leurs relations, offrant ainsi une approche native du FHIR pour l'application de correctifs.

**Type de contenu :** `application/fhir+json`

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

### Opérations PATCH directes
<a name="patch-usage-direct"></a>

L'opération PATCH peut être invoquée directement sur les ressources FHIR à l'aide de la méthode HTTP PATCH :

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

### PATCH en packs
<a name="patch-usage-bundles"></a>

Les opérations PATCH peuvent être incluses sous forme d'entrées dans des ensembles FHIR de type `batch` ou`transaction`, ce qui vous permet de combiner des opérations de correctif avec d'autres interactions FHIR (création, lecture, mise à jour, suppression) dans une seule demande.
+ **Packs de transactions** : toutes les entrées réussissent ou échouent de manière atomique
+ **Batch bundles** : chaque entrée est traitée indépendamment

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

### Opérations prises en charge
<a name="patch-json-supported-operations"></a>


| Opération | Description | 
| --- | --- | 
| add | Ajouter une nouvelle valeur à la ressource | 
| remove | Supprimer une valeur de la ressource | 
| replace | Remplacer une valeur existante dans la ressource | 
| move | Supprimer une valeur d'un emplacement et l'ajouter à un autre | 
| copy | Copier une valeur d'un emplacement à un autre | 
| test | Vérifiez qu'une valeur à l'emplacement cible est égale à une valeur spécifiée | 

### Syntaxe du chemin
<a name="patch-json-path-syntax"></a>

Le patch JSON utilise la syntaxe du pointeur JSON (RFC 6901) :


| Exemple de chemin | Description | 
| --- | --- | 
| /name/0/family | Élément de famille du prénom | 
| /telecom/- | Ajouter au réseau de télécommunications | 
| /active | Élément actif au niveau de la racine | 
| /address/0/line/1 | Deuxième ligne de la première adresse | 

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

**Demande de correctif JSON directe avec plusieurs opérations**  


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

**Demande de correctif JSON directe avec une seule opération**  


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

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

**Patch JSON dans le bundle**  
Utilisez une ressource binaire contenant la charge utile du patch JSON codé en base64 :

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

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

### Opérations prises en charge
<a name="patch-fhirpath-supported-operations"></a>


| Opération | Description | 
| --- | --- | 
| add | Ajouter un nouvel élément à une ressource | 
| insert | Insérer un élément à un endroit précis dans une liste | 
| delete | Supprimer un élément d'une ressource | 
| replace | Remplacer la valeur d'un élément existant | 
| move | Réorganiser les éléments d'une liste | 

### Syntaxe du chemin
<a name="patch-fhirpath-path-syntax"></a>

FHIRPath Le correctif utilise des FHIRPath expressions prenant en charge :
+ **Accès basé sur un index** : `Patient.name[0]`
+ **Filtrer avec `where()`** : `Patient.name.where(use = 'official')`
+ **Logique booléenne** : `Patient.telecom.where(system = 'phone' and use = 'work')`
+ **Fonctions de sous-définition** :`first()`, `last()`
+ **Contrôles d'existence** :`exists()`, `count()`
+ **Navigation polymorphe** : `Observation.value`

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

**Demande de FHIRPath correctif directe**  


```
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 dans le bundle**  
Utilisez une ressource Parameters comme ressource d'entrée avec `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"
    }
  }]
}
```

## En-têtes de demande
<a name="patch-request-headers"></a>


| En-tête | Obligatoire | Description | 
| --- | --- | --- | 
| Content-Type | Oui | application/json-patch\$1jsonpour JSON Patch ou application/fhir\$1json pour FHIRPath Patch | 
| If-Match | Non | Mise à jour conditionnelle spécifique à la version à l'aide de ETag | 

## Exemple de réponse
<a name="patch-sample-response"></a>

L'opération renvoie la ressource mise à jour avec les nouvelles informations de version :

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

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

L'opération PATCH :
+ Valide la syntaxe du correctif conformément à la spécification appropriée (RFC 6902 pour le correctif JSON, FHIR R4 pour le correctif) FHIRPath 
+ Applique les opérations de manière atomique : toutes les opérations réussissent ou échouent
+ Met à jour l'ID de version de la ressource et crée une nouvelle entrée d'historique
+ Préserve la ressource d'origine dans l'historique avant d'appliquer les modifications
+ Valide les contraintes de ressources FHIR après l'application des correctifs
+ Supporte les mises à jour conditionnelles à l'aide de l'en-tête If-Match avec ETag

## Gestion des erreurs
<a name="patch-error-handling"></a>

L'opération gère les conditions d'erreur suivantes :
+ **400 Mauvaise demande** : syntaxe de correctif non valide (demande non conforme ou document de correctif mal formé)
+ **404 Introuvable** : ressource introuvable (l'ID spécifié n'existe pas)
+ **409 Conflit : conflit** de version (mises à jour simultanées ou identifiant de version non actuel fourni)
+ **422 Entité non traitable** : les opérations de correctif ne peuvent pas être appliquées aux éléments de ressource spécifiés

## Résumé des capacités
<a name="patch-summary-of-capabilities"></a>


| Capacité | Correctif JSON | FHIRPath Patch | 
| --- | --- | --- | 
| Type de contenu | application/json-patch\$1json | application/fhir\$1json | 
| Format du chemin | Pointeur JSON (RFC 6901) | FHIRPath expressions | 
| API PATCH directe | Pris en charge | Pris en charge | 
| Bundle Batch | Pris en charge (via le binaire) | Pris en charge (via les paramètres) | 
| Transaction groupée | Pris en charge (via le binaire) | Pris en charge (via les paramètres) | 
| Opérations | ajouter, supprimer, remplacer, déplacer, copier, tester | ajouter, insérer, supprimer, remplacer, déplacer | 

## Limitations
<a name="patch-limitations"></a>
+ Les opérations PATCH conditionnelles utilisant des conditions de recherche ne sont pas prises en charge
+ Les patchs JSON intégrés aux bundles doivent utiliser des ressources binaires avec un contenu codé en base64
+ FHIRPath Les packs de patchs doivent utiliser les ressources de paramètres

## Ressources supplémentaires
<a name="patch-additional-resources"></a>

Pour plus d'informations sur les opérations PATCH, voir :
+ [Documentation du PATCH FHIR R4](https://hl7.org/fhir/http.html#patch)
+ [Spécification du patch FHIR R4 FHIRPath ](https://hl7.org/fhir/fhirpatch.html)
+ [RFC 6902 - Correctif JSON](https://datatracker.ietf.org/doc/html/rfc6902#section-4)
+ [RFC 6901 - Pointeur JSON](https://datatracker.ietf.org/doc/html/rfc6901)