

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Modificación de recursos con la operación PATCH
<a name="managing-fhir-resources-patch"></a>

AWS HealthLake admite la operación PATCH para los recursos del FHIR, lo que le permite modificar los recursos seleccionando elementos específicos para añadirlos, sustituirlos o eliminarlos sin necesidad de actualizar todo el recurso. Esta operación resulta especialmente útil cuando se necesita:
+ Realice actualizaciones específicas en recursos de gran tamaño
+ Reduzca el uso del ancho de banda de
+ Realice modificaciones atómicas en elementos de recursos específicos
+ Minimice el riesgo de sobrescribir los cambios simultáneos
+ Actualice los recursos como parte de los flujos de trabajo por lotes y transacciones

## Formatos PATCH compatibles
<a name="patch-supported-formats"></a>

AWS HealthLake admite dos formatos PATCH estándar:

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

Utiliza la sintaxis JSON Pointer para seleccionar los elementos según su posición en la estructura de recursos.

**Tipo de contenido:** `application/json-patch+json`

### FHIRPath Parche (especificación FHIR R4)
<a name="patch-format-fhirpath"></a>

Utiliza FHIRPath expresiones para seleccionar los elementos según su contenido y sus relaciones, lo que proporciona un enfoque de aplicación de parches nativo del FHIR.

**Tipo de contenido:** `application/fhir+json`

## De uso
<a name="patch-usage"></a>

### Operaciones directas de PATCH
<a name="patch-usage-direct"></a>

La operación PATCH se puede invocar directamente en los recursos del FHIR mediante el método HTTP PATCH:

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

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

Las operaciones PATCH se pueden incluir como entradas en los paquetes del FHIR `batch` o bien`transaction`, lo que permite combinar las operaciones de parche con otras interacciones del FHIR (crear, leer, actualizar, eliminar) en una sola solicitud.
+ **Paquetes de transacciones**: todas las entradas se realizan correctamente o fallan de forma atómica
+ **Paquetes de lotes**: cada entrada se procesa de forma independiente

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

### Operaciones admitidas
<a name="patch-json-supported-operations"></a>


| Operación | Description (Descripción) | 
| --- | --- | 
| add | Agregue un nuevo valor al recurso | 
| remove | Eliminar un valor del recurso | 
| replace | Reemplace un valor existente en el recurso | 
| move | Elimine un valor de una ubicación y agréguelo a otra | 
| copy | Copie un valor de una ubicación a otra | 
| test | Compruebe que un valor en la ubicación de destino es igual a un valor especificado | 

### Sintaxis de ruta
<a name="patch-json-path-syntax"></a>

El parche JSON utiliza la sintaxis JSON Pointer (RFC 6901):


| Ejemplo de ruta | Description (Descripción) | 
| --- | --- | 
| /name/0/family | Elemento familiar del nombre | 
| /telecom/- | Añadir a la matriz de telecomunicaciones | 
| /active | Elemento activo a nivel de raíz | 
| /address/0/line/1 | Segunda línea de la primera dirección | 

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

**Solicitud directa de parches JSON con múltiples operaciones**  


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

**Solicitud directa de parches JSON con una sola operación**  


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

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

**Parche JSON en paquete**  
Utilice un recurso binario que contenga la carga útil del parche JSON codificada en base64:

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

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

### Operaciones admitidas
<a name="patch-fhirpath-supported-operations"></a>


| Operación | Description (Descripción) | 
| --- | --- | 
| add | Añadir un elemento nuevo a un recurso | 
| insert | Inserte un elemento en una posición específica de una lista | 
| delete | Eliminar un elemento de un recurso | 
| replace | Reemplace el valor de un elemento existente | 
| move | Reordenar los elementos de una lista | 

### Sintaxis de ruta
<a name="patch-fhirpath-path-syntax"></a>

FHIRPath El parche usa FHIRPath expresiones que admiten:
+ Acceso **basado en índices**: `Patient.name[0]`
+ **Filtrar** con: `where()` `Patient.name.where(use = 'official')`
+ **Lógica booleana**: `Patient.telecom.where(system = 'phone' and use = 'work')`
+ **Funciones de subconjuntos:,** `first()` `last()`
+ **Comprobaciones de existencia**:`exists()`, `count()`
+ **Navegación polimórfica**: `Observation.value`

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

**Solicitud de parche directa 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 Parche en paquete**  
Utilice un recurso de parámetros como recurso de entrada 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"
    }
  }]
}
```

## Encabezados de solicitud
<a name="patch-request-headers"></a>


| Encabezado | Obligatorio | Descripción | 
| --- | --- | --- | 
| Content-Type | Sí | application/json-patch\$1jsonpara JSON Patch o application/fhir\$1json para FHIRPath Patch | 
| If-Match | No | Actualización condicional específica de la versión mediante ETag | 

## Respuesta de ejemplo
<a name="patch-sample-response"></a>

La operación devuelve el recurso actualizado con la información de la nueva versión:

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

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

La operación PATCH:
+ Valida la sintaxis del parche según la especificación correspondiente (RFC 6902 para JSON Patch, FHIR R4 para Patch) FHIRPath 
+ Aplica las operaciones de forma atómica: todas las operaciones se realizan correctamente o todas fallan
+ Actualiza el ID de versión del recurso y crea una nueva entrada en el historial
+ Conserva el recurso original en el historial antes de aplicar los cambios
+ Valida las restricciones de recursos del FHIR después de aplicar los parches
+ Admite actualizaciones condicionales mediante el encabezado If-Match con ETag

## Gestión de errores
<a name="patch-error-handling"></a>

La operación gestiona las siguientes condiciones de error:
+ **400 Solicitud errónea**: sintaxis de parche no válida (solicitud no conforme o documento de parche mal formado)
+ **404 No encontrado: no se encontró** el recurso (el ID especificado no existe)
+ **409 Conflicto**: conflicto de versiones (se proporciona un identificador de versión no actualizado o actualizaciones simultáneas)
+ **422 Entidad inprocesable**: las operaciones de parche no se pueden aplicar a los elementos de recursos especificados

## Resumen de capacidades
<a name="patch-summary-of-capabilities"></a>


| Funcionalidad | Parche JSON | FHIRPath Parche | 
| --- | --- | --- | 
| Tipo de contenido | application/json-patch\$1json | application/fhir\$1json | 
| Formato de ruta | Puntero JSON (RFC 6901) | FHIRPath expresiones | 
| API DIRECT PATCH | Soportado |  compatible | 
| Batch de paquetes | Compatible (mediante binario) | Compatible (mediante parámetros) | 
| Transacción de paquete | Compatible (mediante binario) | Compatible (mediante parámetros) | 
| Operaciones | añadir, eliminar, reemplazar, mover, copiar, probar | añadir, insertar, eliminar, reemplazar, mover | 

## Limitaciones
<a name="patch-limitations"></a>
+ No se admiten las operaciones PATCH condicionales que utilizan condiciones de búsqueda
+ Los paquetes de parches JSON deben utilizar recursos binarios con contenido codificado en base64
+ FHIRPath Los parches incluidos en los paquetes deben usar recursos de parámetros

## Recursos adicionales
<a name="patch-additional-resources"></a>

Para obtener más información sobre las operaciones PATCH, consulte:
+ [Documentación del PARCHE FHIR R4](https://hl7.org/fhir/http.html#patch)
+ [Especificación del parche FHIR R4 FHIRPath ](https://hl7.org/fhir/fhirpatch.html)
+ [RFC 6902: parche JSON](https://datatracker.ietf.org/doc/html/rfc6902#section-4)
+ [RFC 6901: puntero JSON](https://datatracker.ietf.org/doc/html/rfc6901)