

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Modificando recursos com a operação PATCH
<a name="managing-fhir-resources-patch"></a>

AWS HealthLake suporta a operação PATCH para recursos do FHIR, permitindo que você modifique recursos direcionando elementos específicos para adicionar, substituir ou excluir sem atualizar o recurso inteiro. Essa operação é particularmente útil quando você precisa:
+ Faça atualizações direcionadas para grandes recursos
+ Reduza o uso da largura de banda da rede
+ Execute modificações atômicas em elementos de recursos específicos
+ Minimize o risco de sobrescrever alterações simultâneas
+ Atualize recursos como parte dos fluxos de trabalho em lotes e transações

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

AWS HealthLake suporta dois formatos PATCH padrão:

### Correção JSON (RFC 6902)
<a name="patch-format-json"></a>

Usa a sintaxe JSON Pointer para direcionar elementos de acordo com sua posição na estrutura do recurso.

**Tipo de conteúdo:** `application/json-patch+json`

### FHIRPath Patch (especificação FHIR R4)
<a name="patch-format-fhirpath"></a>

Usa FHIRPath expressões para direcionar elementos de acordo com seu conteúdo e relacionamentos, fornecendo uma abordagem nativa do FHIR para a aplicação de patches.

**Tipo de conteúdo:** `application/fhir+json`

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

### Operações diretas de PATCH
<a name="patch-usage-direct"></a>

A operação PATCH pode ser invocada diretamente nos recursos do FHIR usando o método PATCH HTTP:

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

### PATCH em pacotes
<a name="patch-usage-bundles"></a>

As operações PATCH podem ser incluídas como entradas em pacotes FHIR do tipo `batch` ou`transaction`, permitindo que você combine operações de patch com outras interações FHIR (criar, ler, atualizar, excluir) em uma única solicitação.
+ **Pacotes de transações**: todas as entradas são bem-sucedidas ou falham atomicamente
+ **Pacotes em lote**: cada entrada é processada de forma independente

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

### Operações com Suporte
<a name="patch-json-supported-operations"></a>


| Operation | Description | 
| --- | --- | 
| add | Adicione um novo valor ao recurso | 
| remove | Remover um valor do recurso | 
| replace | Substituir um valor existente no recurso | 
| move | Remover um valor de um local e adicioná-lo a outro | 
| copy | Copiar um valor de um local para outro | 
| test | Teste se um valor no local de destino é igual a um valor especificado | 

### Sintaxe do caminho
<a name="patch-json-path-syntax"></a>

O JSON Patch usa a sintaxe JSON Pointer (RFC 6901):


| Exemplo de caminho | Description | 
| --- | --- | 
| /name/0/family | Elemento familiar do primeiro nome | 
| /telecom/- | Anexar à matriz de telecomunicações | 
| /active | Elemento ativo no nível da raiz | 
| /address/0/line/1 | Segunda linha do primeiro endereço | 

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

**Solicitação direta de patch JSON com várias operações**  


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

**Solicitação direta de patch JSON com operação única**  


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

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

**Patch JSON no pacote**  
Use um recurso binário contendo a carga útil do patch JSON codificada em base64:

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

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

### Operações com Suporte
<a name="patch-fhirpath-supported-operations"></a>


| Operation | Description | 
| --- | --- | 
| add | Adicionar um novo elemento a um recurso | 
| insert | Inserir um elemento em uma posição específica em uma lista | 
| delete | Remover um elemento de um recurso | 
| replace | Substituir o valor de um elemento existente | 
| move | Reordenar elementos em uma lista | 

### Sintaxe do caminho
<a name="patch-fhirpath-path-syntax"></a>

FHIRPath O patch usa FHIRPath expressões, oferecendo suporte a:
+ Acesso **baseado em índices**: `Patient.name[0]`
+ **Filtrando com `where()`**: `Patient.name.where(use = 'official')`
+ **Lógica booleana**: `Patient.telecom.where(system = 'phone' and use = 'work')`
+ **Funções de subconfiguração**:`first()`, `last()`
+ **Verificações de existência**:`exists()`, `count()`
+ **Navegação polimórfica**: `Observation.value`

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

**Solicitação direta FHIRPath de patch**  


```
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 no pacote**  
Use um recurso de Parâmetros como recurso de entrada com`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"
    }
  }]
}
```

## Cabeçalhos de solicitação
<a name="patch-request-headers"></a>


| Cabeçalho | Obrigatório | Descrição | 
| --- | --- | --- | 
| Content-Type | Sim | application/json-patch\$1jsonpara JSON Patch ou application/fhir\$1json para FHIRPath Patch | 
| If-Match | Não | Atualização condicional específica da versão usando ETag | 

## Resposta da amostra
<a name="patch-sample-response"></a>

A operação retorna o recurso atualizado com as informações da nova versão:

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

A operação PATCH:
+ Valida a sintaxe do patch de acordo com a especificação apropriada (RFC 6902 para JSON Patch, FHIR R4 para Patch) FHIRPath 
+ Aplica operações atomicamente - todas as operações são bem-sucedidas ou todas falham
+ Atualiza o ID da versão do recurso e cria uma nova entrada no histórico
+ Preserva o recurso original no histórico antes de aplicar as alterações
+ Valida as restrições de recursos do FHIR após a aplicação de patches
+ Suporta atualizações condicionais usando o cabeçalho If-Match com ETag

## Tratamento de erros
<a name="patch-error-handling"></a>

A operação trata das seguintes condições de erro:
+ **400 Solicitação incorreta**: sintaxe de patch inválida (solicitação não conforme ou documento de patch malformado)
+ **404 Não encontrado**: recurso não encontrado (o ID especificado não existe)
+ **409 Conflito**: conflito de versão (atualizações simultâneas ou ID de versão não atual fornecida)
+ **422 Entidade não processável**: as operações de patch não podem ser aplicadas aos elementos de recursos especificados

## Resumo dos recursos
<a name="patch-summary-of-capabilities"></a>


| Recurso | Patch JSON | FHIRPath Patch | 
| --- | --- | --- | 
| Tipo de conteúdo | application/json-patch\$1json | application/fhir\$1json | 
| Formato do caminho | Ponteiro JSON (RFC 6901) | FHIRPath expressões | 
| API PATCH direta | Compatível | Compatível | 
| Bundle Batch | Compatível (via binário) | Suportado (por meio de parâmetros) | 
| Transação de pacote | Compatível (via binário) | Suportado (por meio de parâmetros) | 
| Operações | adicionar, remover, substituir, mover, copiar, testar | adicionar, inserir, excluir, substituir, mover | 

## Limitações
<a name="patch-limitations"></a>
+ Operações PATCH condicionais usando condições de pesquisa não são suportadas
+ O patch JSON em pacotes deve usar recursos binários com conteúdo codificado em base64
+ FHIRPath O patch em pacotes deve usar recursos de parâmetros

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

Para obter mais informações sobre as operações PATCH, consulte:
+ [Documentação do FHIR R4 PATCH](https://hl7.org/fhir/http.html#patch)
+ [Especificação do patch FHIR R4 FHIRPath ](https://hl7.org/fhir/fhirpatch.html)
+ [RFC 6902 - Correção JSON](https://datatracker.ietf.org/doc/html/rfc6902#section-4)
+ [RFC 6901 - Ponteiro JSON](https://datatracker.ietf.org/doc/html/rfc6901)