> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://api-docs.nilo.services/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://api-docs.nilo.services/_mcp/server.

# Procedimento

> Registrar e consultar procedimentos cirúrgicos do paciente no padrão FHIR Procedure.

Um **procedimento** aqui é uma cirurgia do paciente: o que foi feito, por quem, onde e em que
período. No Nilo Care ele aparece na linha de eventos da ficha do paciente, ao lado das
hospitalizações e dos atendimentos; o card da linha mostra **Procedimento**, **Profissional**
e as datas, e o detalhe da cirurgia mostra também **Lateralidade**, **Endereço**, **Data de
entrada**, **Data de saída**, **Horário**, **Duração** e **Informações adicionais**.

No FHIR o recurso é o [`Procedure`](https://hl7.org/fhir/R4/procedure.html), e esta
integração o usa nas duas pontas: registrar uma cirurgia e consultar as que o paciente tem.

> **Note**
>
> O procedimento é identificado por um **código de tabela** — TUSS ou Tabela SUS —, e o código
> enviado precisa existir no catálogo da plataforma. É a recusa mais comum deste recurso; veja
> [Valores aceitos](#valores-aceitos).

## Campos

A coluna **No Nilo Care** traz o rótulo com que o dado aparece para a equipe; são rótulos, não
caminhos de navegação.

| Campo                           | Obrigatório | O que significa                                                                                         | No Nilo Care                                                                  |
| ------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| `resourceType`                  | **sim**     | Constante `Procedure`                                                                                   | —                                                                             |
| `identifier`                    | **sim**     | Suas chaves do procedimento. É por elas que a API decide entre criar e atualizar                        | —                                                                             |
| `status`                        | **sim**     | Exigido pelo FHIR. É gravado como você enviar e **não é conferido contra o período**. Envie `completed` | —                                                                             |
| `code.coding[0].system`         | **sim**     | A tabela do código: TUSS ou Tabela SUS                                                                  | **Sistema de codificação**                                                    |
| `code.coding[0].code`           | **sim**     | O código do procedimento na tabela informada                                                            | **Procedimento**                                                              |
| `subject.identifier`            | **sim**     | O paciente, por um identificador dele                                                                   | **Paciente**                                                                  |
| `performer[0].actor.identifier` | **sim**     | O profissional que realizou o procedimento                                                              | **Profissional do procedimento**, no formulário; **Profissional**, no detalhe |
| `location.display`              | **sim**     | Onde foi feito, em texto livre, com no máximo 500 caracteres                                            | **Endereço**                                                                  |
| `performedPeriod.start`         | **sim**     | Início do procedimento                                                                                  | **Data de entrada** · **Horário**                                             |
| `performedPeriod.end`           | **sim**     | Fim do procedimento                                                                                     | **Data de saída** · **Duração**                                               |
| `bodySite[0].coding[0].code`    | não         | Lateralidade, num dos três códigos aceitos                                                              | **Lateralidade**                                                              |
| `note[]`                        | não         | Informações adicionais                                                                                  | **Informações adicionais**                                                    |
| `id` · `meta`                   | não         | Só resposta: identificador Nilo FHIR do procedimento e metadados da gravação                            | —                                                                             |

> **Warning**
>
> **Nove campos são obrigatórios**: `resourceType`, `identifier`, `status`, `code`, `subject`,
> `performer`, `location` e os dois extremos de `performedPeriod`. Confira a lista acima antes de
> enviar.
>
> Os dois que o próprio FHIR exige — `status` e `subject` — são recusados com o caminho do campo
> em `expression`. **Os outros sete não**: a recusa vem com uma mensagem genérica, em inglês, sem
> apontar o campo. Veja [Erros](#erros).

### `status` não é conferido contra o período

O `status` que você envia é **gravado e devolvido como veio** — a plataforma não o valida
contra o `performedPeriod`. Mandando `completed` num procedimento marcado para o mês que vem, é
`completed` que a leitura devolve.

A plataforma tem o seu próprio cálculo, a partir do período: `preparation` antes do início,
`in-progress` durante, `completed` depois do fim. Mas ele só vale **do lado dela**, e só chega
ao recurso quando a equipe edita o procedimento no Nilo Care — nesse momento o valor calculado
substitui o seu.

> **Warning**
>
> Consequência prática: **`status` não é uma fonte confiável para saber se o procedimento já
> aconteceu.** Num procedimento vindo de integração ele é o que você mandou; num editado pela
> equipe é o que valia no momento daquela edição, e nunca é recalculado depois.
>
> Para saber se já aconteceu, **compare o `performedPeriod` com a data de hoje** do seu lado.

> **Note**
>
> Se você mandar `not-done`, `on-hold`, `stopped` ou `entered-in-error`, o valor é gravado e
> devolvido — mas ele **não significa nada** para a plataforma: o procedimento aparece na ficha
> do paciente do mesmo jeito, e a equipe não vê nenhuma marca de cancelamento. **Não há como
> registrar um procedimento cancelado** por esta API.

### Campos que a Nilo não usa

O `Procedure` canônico traz muito mais do que esta integração lê: `basedOn`, `partOf`,
`statusReason`, `category`, `encounter`, `performedDateTime`, `recorder`, `asserter`,
`reasonCode`, `reasonReference`, `outcome`, `report`, `complication`, `followUp`,
`focalDevice`, `usedReference` e `usedCode`. Dentro de `performer`, também `function` e
`onBehalfOf`. Nenhum deles é lido, e por isso nenhum aparece na referência do recurso.

> **Note**
>
> Dois merecem aviso, porque é natural mandá-los:
>
> * **`category`** — o `Procedure` do FHIR costuma vir com uma categoria SNOMED (*Surgical
>   procedure*). Aqui ela é aceita e **não significa nada**: quem classifica o procedimento é o
>   `code`.
> * **`performedDateTime`** — só o `performedPeriod` é lido. Um procedimento enviado com
>   `performedDateTime` é recusado por falta de período.

> **Note**
>
> A referência lista só os campos suportados, e é assim que ela deve ser lida: **o que mandar na
> escrita**. A API em si é mais tolerante — o que você mandar a mais fica guardado no recurso e
> volta nas leituras seguintes, sem nunca ter significado nada para a plataforma. Se o seu
> validador for estrito contra a referência, uma resposta assim vai parecer inválida; o remédio é
> não enviá-los.

## Cadastrar ou atualizar

### Request

POST [https://landing-zone-api.nilo.services/fhir/resources/Procedure](https://landing-zone-api.nilo.services/fhir/resources/Procedure)

**`Cadastrar com código TUSS`**

```curl Cadastrar com código TUSS
curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Procedure \
     -H "x-api-key: <apiKey>" \
     -H "Content-Type: application/json" \
     -d '{
  "resourceType": "Procedure",
  "identifier": [
    {
      "system": "https://www.acmesaude.com.br/integracao/procedimento/",
      "value": "55162",
      "use": "usual"
    }
  ],
  "status": "completed",
  "code": {
    "coding": [
      {
        "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
        "code": "20103182"
      }
    ]
  },
  "subject": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    },
    "type": "Patient"
  },
  "performer": [
    {
      "actor": {
        "identifier": {
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "5032932",
          "use": "usual"
        },
        "type": "Practitioner"
      }
    }
  ],
  "location": {
    "display": "Hospital Central Acme"
  },
  "performedPeriod": {
    "end": "2026-04-16T20:30:00+00:00",
    "start": "2026-04-16T17:00:00+00:00"
  },
  "bodySite": [
    {
      "coding": [
        {
          "code": "24028007",
          "system": "http://snomed.info/sct"
        }
      ]
    }
  ],
  "note": [
    {
      "text": "Paciente em jejum desde as 22h."
    }
  ]
}'
```

**`Cadastrar com código TUSS`**

```python Cadastrar com código TUSS
import requests

url = "https://landing-zone-api.nilo.services/fhir/resources/Procedure"

payload = {
    "resourceType": "Procedure",
    "identifier": [
        {
            "system": "https://www.acmesaude.com.br/integracao/procedimento/",
            "value": "55162",
            "use": "usual"
        }
    ],
    "status": "completed",
    "code": { "coding": [
            {
                "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
                "code": "20103182"
            }
        ] },
    "subject": {
        "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
        },
        "type": "Patient"
    },
    "performer": [{ "actor": {
                "identifier": {
                    "system": "https://www.acmesaude.com.br/integracao/profissional/",
                    "value": "5032932",
                    "use": "usual"
                },
                "type": "Practitioner"
            } }],
    "location": { "display": "Hospital Central Acme" },
    "performedPeriod": {
        "end": "2026-04-16T20:30:00+00:00",
        "start": "2026-04-16T17:00:00+00:00"
    },
    "bodySite": [{ "coding": [
                {
                    "code": "24028007",
                    "system": "http://snomed.info/sct"
                }
            ] }],
    "note": [{ "text": "Paciente em jejum desde as 22h." }]
}
headers = {
    "x-api-key": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

**`Cadastrar com código TUSS`**

```javascript Cadastrar com código TUSS
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Procedure';
const options = {
  method: 'POST',
  headers: {'x-api-key': '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"resourceType":"Procedure","identifier":[{"system":"https://www.acmesaude.com.br/integracao/procedimento/","value":"55162","use":"usual"}],"status":"completed","code":{"coding":[{"system":"https://fhir.ans.gov.br/CodeSystem/tuss-63","code":"20103182"}]},"subject":{"identifier":{"system":"https://www.acmesaude.com.br/integracao/paciente/","value":"507823709","use":"usual"},"type":"Patient"},"performer":[{"actor":{"identifier":{"system":"https://www.acmesaude.com.br/integracao/profissional/","value":"5032932","use":"usual"},"type":"Practitioner"}}],"location":{"display":"Hospital Central Acme"},"performedPeriod":{"end":"2026-04-16T20:30:00+00:00","start":"2026-04-16T17:00:00+00:00"},"bodySite":[{"coding":[{"code":"24028007","system":"http://snomed.info/sct"}]}],"note":[{"text":"Paciente em jejum desde as 22h."}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`Cadastrar com código TUSS`**

```go Cadastrar com código TUSS
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/Procedure"

	payload := strings.NewReader("{\n  \"resourceType\": \"Procedure\",\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/procedimento/\",\n      \"value\": \"55162\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"status\": \"completed\",\n  \"code\": {\n    \"coding\": [\n      {\n        \"system\": \"https://fhir.ans.gov.br/CodeSystem/tuss-63\",\n        \"code\": \"20103182\"\n      }\n    ]\n  },\n  \"subject\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/paciente/\",\n      \"value\": \"507823709\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Patient\"\n  },\n  \"performer\": [\n    {\n      \"actor\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"5032932\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      }\n    }\n  ],\n  \"location\": {\n    \"display\": \"Hospital Central Acme\"\n  },\n  \"performedPeriod\": {\n    \"end\": \"2026-04-16T20:30:00+00:00\",\n    \"start\": \"2026-04-16T17:00:00+00:00\"\n  },\n  \"bodySite\": [\n    {\n      \"coding\": [\n        {\n          \"code\": \"24028007\",\n          \"system\": \"http://snomed.info/sct\"\n        }\n      ]\n    }\n  ],\n  \"note\": [\n    {\n      \"text\": \"Paciente em jejum desde as 22h.\"\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("x-api-key", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`Cadastrar com código TUSS`**

```ruby Cadastrar com código TUSS
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/Procedure")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"resourceType\": \"Procedure\",\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/procedimento/\",\n      \"value\": \"55162\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"status\": \"completed\",\n  \"code\": {\n    \"coding\": [\n      {\n        \"system\": \"https://fhir.ans.gov.br/CodeSystem/tuss-63\",\n        \"code\": \"20103182\"\n      }\n    ]\n  },\n  \"subject\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/paciente/\",\n      \"value\": \"507823709\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Patient\"\n  },\n  \"performer\": [\n    {\n      \"actor\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"5032932\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      }\n    }\n  ],\n  \"location\": {\n    \"display\": \"Hospital Central Acme\"\n  },\n  \"performedPeriod\": {\n    \"end\": \"2026-04-16T20:30:00+00:00\",\n    \"start\": \"2026-04-16T17:00:00+00:00\"\n  },\n  \"bodySite\": [\n    {\n      \"coding\": [\n        {\n          \"code\": \"24028007\",\n          \"system\": \"http://snomed.info/sct\"\n        }\n      ]\n    }\n  ],\n  \"note\": [\n    {\n      \"text\": \"Paciente em jejum desde as 22h.\"\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

**`Cadastrar com código TUSS`**

```java Cadastrar com código TUSS
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://landing-zone-api.nilo.services/fhir/resources/Procedure")
  .header("x-api-key", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"resourceType\": \"Procedure\",\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/procedimento/\",\n      \"value\": \"55162\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"status\": \"completed\",\n  \"code\": {\n    \"coding\": [\n      {\n        \"system\": \"https://fhir.ans.gov.br/CodeSystem/tuss-63\",\n        \"code\": \"20103182\"\n      }\n    ]\n  },\n  \"subject\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/paciente/\",\n      \"value\": \"507823709\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Patient\"\n  },\n  \"performer\": [\n    {\n      \"actor\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"5032932\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      }\n    }\n  ],\n  \"location\": {\n    \"display\": \"Hospital Central Acme\"\n  },\n  \"performedPeriod\": {\n    \"end\": \"2026-04-16T20:30:00+00:00\",\n    \"start\": \"2026-04-16T17:00:00+00:00\"\n  },\n  \"bodySite\": [\n    {\n      \"coding\": [\n        {\n          \"code\": \"24028007\",\n          \"system\": \"http://snomed.info/sct\"\n        }\n      ]\n    }\n  ],\n  \"note\": [\n    {\n      \"text\": \"Paciente em jejum desde as 22h.\"\n    }\n  ]\n}")
  .asString();
```

**`Cadastrar com código TUSS`**

```php Cadastrar com código TUSS
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://landing-zone-api.nilo.services/fhir/resources/Procedure', [
  'body' => '{
  "resourceType": "Procedure",
  "identifier": [
    {
      "system": "https://www.acmesaude.com.br/integracao/procedimento/",
      "value": "55162",
      "use": "usual"
    }
  ],
  "status": "completed",
  "code": {
    "coding": [
      {
        "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
        "code": "20103182"
      }
    ]
  },
  "subject": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    },
    "type": "Patient"
  },
  "performer": [
    {
      "actor": {
        "identifier": {
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "5032932",
          "use": "usual"
        },
        "type": "Practitioner"
      }
    }
  ],
  "location": {
    "display": "Hospital Central Acme"
  },
  "performedPeriod": {
    "end": "2026-04-16T20:30:00+00:00",
    "start": "2026-04-16T17:00:00+00:00"
  },
  "bodySite": [
    {
      "coding": [
        {
          "code": "24028007",
          "system": "http://snomed.info/sct"
        }
      ]
    }
  ],
  "note": [
    {
      "text": "Paciente em jejum desde as 22h."
    }
  ]
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`Cadastrar com código TUSS`**

```csharp Cadastrar com código TUSS
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/Procedure");
var request = new RestRequest(Method.POST);
request.AddHeader("x-api-key", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"resourceType\": \"Procedure\",\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/procedimento/\",\n      \"value\": \"55162\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"status\": \"completed\",\n  \"code\": {\n    \"coding\": [\n      {\n        \"system\": \"https://fhir.ans.gov.br/CodeSystem/tuss-63\",\n        \"code\": \"20103182\"\n      }\n    ]\n  },\n  \"subject\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/paciente/\",\n      \"value\": \"507823709\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Patient\"\n  },\n  \"performer\": [\n    {\n      \"actor\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"5032932\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      }\n    }\n  ],\n  \"location\": {\n    \"display\": \"Hospital Central Acme\"\n  },\n  \"performedPeriod\": {\n    \"end\": \"2026-04-16T20:30:00+00:00\",\n    \"start\": \"2026-04-16T17:00:00+00:00\"\n  },\n  \"bodySite\": [\n    {\n      \"coding\": [\n        {\n          \"code\": \"24028007\",\n          \"system\": \"http://snomed.info/sct\"\n        }\n      ]\n    }\n  ],\n  \"note\": [\n    {\n      \"text\": \"Paciente em jejum desde as 22h.\"\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

**`Cadastrar com código TUSS`**

```swift Cadastrar com código TUSS
import Foundation

let headers = [
  "x-api-key": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "resourceType": "Procedure",
  "identifier": [
    [
      "system": "https://www.acmesaude.com.br/integracao/procedimento/",
      "value": "55162",
      "use": "usual"
    ]
  ],
  "status": "completed",
  "code": ["coding": [
      [
        "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
        "code": "20103182"
      ]
    ]],
  "subject": [
    "identifier": [
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    ],
    "type": "Patient"
  ],
  "performer": [["actor": [
        "identifier": [
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "5032932",
          "use": "usual"
        ],
        "type": "Practitioner"
      ]]],
  "location": ["display": "Hospital Central Acme"],
  "performedPeriod": [
    "end": "2026-04-16T20:30:00+00:00",
    "start": "2026-04-16T17:00:00+00:00"
  ],
  "bodySite": [["coding": [
        [
          "code": "24028007",
          "system": "http://snomed.info/sct"
        ]
      ]]],
  "note": [["text": "Paciente em jejum desde as 22h."]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/Procedure")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

A resposta é o recurso gravado, sem envelope:

### Response (200)

```json
{
  "resourceType": "Procedure",
  "identifier": [
    {
      "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--patient-surgery",
      "value": "31805",
      "use": "usual"
    },
    {
      "system": "https://www.acmesaude.com.br/integracao/procedimento/",
      "value": "55162",
      "use": "usual"
    }
  ],
  "status": "completed",
  "code": {
    "coding": [
      {
        "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
        "code": "20103182"
      }
    ]
  },
  "subject": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    },
    "type": "Patient"
  },
  "performer": [
    {
      "actor": {
        "identifier": {
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "5032932",
          "use": "usual"
        },
        "type": "Practitioner"
      }
    }
  ],
  "location": {
    "display": "Hospital Central Acme"
  },
  "performedPeriod": {
    "end": "2026-04-16T20:30:00+00:00",
    "start": "2026-04-16T17:00:00+00:00"
  },
  "id": "72c4e0a8-3f95-4b17-8d63-01ae9c528f4b",
  "meta": {
    "lastUpdated": "2026-04-16T20:35:12.441000Z",
    "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
  },
  "bodySite": [
    {
      "coding": [
        {
          "code": "24028007",
          "system": "http://snomed.info/sct"
        }
      ]
    }
  ],
  "note": [
    {
      "text": "Paciente em jejum desde as 22h."
    }
  ]
}
```

Guarde o `id`: é por ele que se faz a leitura direta. Ao lado do seu `identifier`, a resposta
traz o identificador Nilo do procedimento, no `system`
`…/NamingSystem/hippocrates-api--patient-surgery`.

O mesmo `POST` cria e atualiza. Reenviando um `identifier` que já corresponde a um
procedimento, ele é atualizado.

> **Warning**
>
> **Reenvie o recurso inteiro em toda atualização.** O que você omitir é **apagado do Nilo Care**:
> um `POST` de atualização sem `note` limpa as informações adicionais na ficha, e sem `bodySite`
> limpa a lateralidade.
>
> E o pior é que **você não vê isso na leitura**: do lado FHIR, o campo omitido é preservado, e a
> consulta continua devolvendo o valor antigo — um valor que a equipe já não vê. Depois de uma
> atualização parcial, o recurso e a ficha do paciente ficam divergentes, e a API mostra a versão
> desatualizada.

### O procedimento

O código vai em `code.coding[0]`, e só o primeiro item da lista é lido:

```json
"code": {
  "coding": [
    {
      "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
      "code": "20103182"
    }
  ]
}
```

### Request

POST [https://landing-zone-api.nilo.services/fhir/resources/Procedure](https://landing-zone-api.nilo.services/fhir/resources/Procedure)

**`Cadastrar com código da Tabela SUS`**

```curl Cadastrar com código da Tabela SUS
curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Procedure \
     -H "x-api-key: <apiKey>" \
     -H "Content-Type: application/json" \
     -d '{
  "resourceType": "Procedure",
  "identifier": [
    {
      "system": "https://www.acmesaude.com.br/integracao/procedimento/",
      "value": "55163",
      "use": "usual"
    }
  ],
  "status": "completed",
  "code": {
    "coding": [
      {
        "system": "https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS",
        "code": "0301010032"
      }
    ]
  },
  "subject": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    },
    "type": "Patient"
  },
  "performer": [
    {
      "actor": {
        "identifier": {
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "5032932",
          "use": "usual"
        },
        "type": "Practitioner"
      }
    }
  ],
  "location": {
    "display": "Hospital Público Municipal"
  },
  "performedPeriod": {
    "end": "2026-05-04T15:20:00+00:00",
    "start": "2026-05-04T12:00:00+00:00"
  }
}'
```

**`Cadastrar com código da Tabela SUS`**

```python Cadastrar com código da Tabela SUS
import requests

url = "https://landing-zone-api.nilo.services/fhir/resources/Procedure"

payload = {
    "resourceType": "Procedure",
    "identifier": [
        {
            "system": "https://www.acmesaude.com.br/integracao/procedimento/",
            "value": "55163",
            "use": "usual"
        }
    ],
    "status": "completed",
    "code": { "coding": [
            {
                "system": "https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS",
                "code": "0301010032"
            }
        ] },
    "subject": {
        "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
        },
        "type": "Patient"
    },
    "performer": [{ "actor": {
                "identifier": {
                    "system": "https://www.acmesaude.com.br/integracao/profissional/",
                    "value": "5032932",
                    "use": "usual"
                },
                "type": "Practitioner"
            } }],
    "location": { "display": "Hospital Público Municipal" },
    "performedPeriod": {
        "end": "2026-05-04T15:20:00+00:00",
        "start": "2026-05-04T12:00:00+00:00"
    }
}
headers = {
    "x-api-key": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

**`Cadastrar com código da Tabela SUS`**

```javascript Cadastrar com código da Tabela SUS
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Procedure';
const options = {
  method: 'POST',
  headers: {'x-api-key': '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"resourceType":"Procedure","identifier":[{"system":"https://www.acmesaude.com.br/integracao/procedimento/","value":"55163","use":"usual"}],"status":"completed","code":{"coding":[{"system":"https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS","code":"0301010032"}]},"subject":{"identifier":{"system":"https://www.acmesaude.com.br/integracao/paciente/","value":"507823709","use":"usual"},"type":"Patient"},"performer":[{"actor":{"identifier":{"system":"https://www.acmesaude.com.br/integracao/profissional/","value":"5032932","use":"usual"},"type":"Practitioner"}}],"location":{"display":"Hospital Público Municipal"},"performedPeriod":{"end":"2026-05-04T15:20:00+00:00","start":"2026-05-04T12:00:00+00:00"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`Cadastrar com código da Tabela SUS`**

```go Cadastrar com código da Tabela SUS
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/Procedure"

	payload := strings.NewReader("{\n  \"resourceType\": \"Procedure\",\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/procedimento/\",\n      \"value\": \"55163\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"status\": \"completed\",\n  \"code\": {\n    \"coding\": [\n      {\n        \"system\": \"https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS\",\n        \"code\": \"0301010032\"\n      }\n    ]\n  },\n  \"subject\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/paciente/\",\n      \"value\": \"507823709\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Patient\"\n  },\n  \"performer\": [\n    {\n      \"actor\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"5032932\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      }\n    }\n  ],\n  \"location\": {\n    \"display\": \"Hospital Público Municipal\"\n  },\n  \"performedPeriod\": {\n    \"end\": \"2026-05-04T15:20:00+00:00\",\n    \"start\": \"2026-05-04T12:00:00+00:00\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("x-api-key", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`Cadastrar com código da Tabela SUS`**

```ruby Cadastrar com código da Tabela SUS
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/Procedure")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"resourceType\": \"Procedure\",\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/procedimento/\",\n      \"value\": \"55163\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"status\": \"completed\",\n  \"code\": {\n    \"coding\": [\n      {\n        \"system\": \"https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS\",\n        \"code\": \"0301010032\"\n      }\n    ]\n  },\n  \"subject\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/paciente/\",\n      \"value\": \"507823709\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Patient\"\n  },\n  \"performer\": [\n    {\n      \"actor\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"5032932\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      }\n    }\n  ],\n  \"location\": {\n    \"display\": \"Hospital Público Municipal\"\n  },\n  \"performedPeriod\": {\n    \"end\": \"2026-05-04T15:20:00+00:00\",\n    \"start\": \"2026-05-04T12:00:00+00:00\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

**`Cadastrar com código da Tabela SUS`**

```java Cadastrar com código da Tabela SUS
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://landing-zone-api.nilo.services/fhir/resources/Procedure")
  .header("x-api-key", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"resourceType\": \"Procedure\",\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/procedimento/\",\n      \"value\": \"55163\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"status\": \"completed\",\n  \"code\": {\n    \"coding\": [\n      {\n        \"system\": \"https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS\",\n        \"code\": \"0301010032\"\n      }\n    ]\n  },\n  \"subject\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/paciente/\",\n      \"value\": \"507823709\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Patient\"\n  },\n  \"performer\": [\n    {\n      \"actor\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"5032932\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      }\n    }\n  ],\n  \"location\": {\n    \"display\": \"Hospital Público Municipal\"\n  },\n  \"performedPeriod\": {\n    \"end\": \"2026-05-04T15:20:00+00:00\",\n    \"start\": \"2026-05-04T12:00:00+00:00\"\n  }\n}")
  .asString();
```

**`Cadastrar com código da Tabela SUS`**

```php Cadastrar com código da Tabela SUS
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://landing-zone-api.nilo.services/fhir/resources/Procedure', [
  'body' => '{
  "resourceType": "Procedure",
  "identifier": [
    {
      "system": "https://www.acmesaude.com.br/integracao/procedimento/",
      "value": "55163",
      "use": "usual"
    }
  ],
  "status": "completed",
  "code": {
    "coding": [
      {
        "system": "https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS",
        "code": "0301010032"
      }
    ]
  },
  "subject": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    },
    "type": "Patient"
  },
  "performer": [
    {
      "actor": {
        "identifier": {
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "5032932",
          "use": "usual"
        },
        "type": "Practitioner"
      }
    }
  ],
  "location": {
    "display": "Hospital Público Municipal"
  },
  "performedPeriod": {
    "end": "2026-05-04T15:20:00+00:00",
    "start": "2026-05-04T12:00:00+00:00"
  }
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`Cadastrar com código da Tabela SUS`**

```csharp Cadastrar com código da Tabela SUS
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/Procedure");
var request = new RestRequest(Method.POST);
request.AddHeader("x-api-key", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"resourceType\": \"Procedure\",\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/procedimento/\",\n      \"value\": \"55163\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"status\": \"completed\",\n  \"code\": {\n    \"coding\": [\n      {\n        \"system\": \"https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS\",\n        \"code\": \"0301010032\"\n      }\n    ]\n  },\n  \"subject\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/paciente/\",\n      \"value\": \"507823709\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Patient\"\n  },\n  \"performer\": [\n    {\n      \"actor\": {\n        \"identifier\": {\n          \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n          \"value\": \"5032932\",\n          \"use\": \"usual\"\n        },\n        \"type\": \"Practitioner\"\n      }\n    }\n  ],\n  \"location\": {\n    \"display\": \"Hospital Público Municipal\"\n  },\n  \"performedPeriod\": {\n    \"end\": \"2026-05-04T15:20:00+00:00\",\n    \"start\": \"2026-05-04T12:00:00+00:00\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

**`Cadastrar com código da Tabela SUS`**

```swift Cadastrar com código da Tabela SUS
import Foundation

let headers = [
  "x-api-key": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "resourceType": "Procedure",
  "identifier": [
    [
      "system": "https://www.acmesaude.com.br/integracao/procedimento/",
      "value": "55163",
      "use": "usual"
    ]
  ],
  "status": "completed",
  "code": ["coding": [
      [
        "system": "https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS",
        "code": "0301010032"
      ]
    ]],
  "subject": [
    "identifier": [
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    ],
    "type": "Patient"
  ],
  "performer": [["actor": [
        "identifier": [
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "5032932",
          "use": "usual"
        ],
        "type": "Practitioner"
      ]]],
  "location": ["display": "Hospital Público Municipal"],
  "performedPeriod": [
    "end": "2026-05-04T15:20:00+00:00",
    "start": "2026-05-04T12:00:00+00:00"
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/Procedure")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

> **Note**
>
> O `display` que você mandar é **guardado e devolvido como veio** — mas não significa nada: quem
> identifica o procedimento é o par `system` + `code`. O nome do catálogo é o que a equipe vê na
> tela, e ele só aparece no recurso quando o procedimento é criado ou editado dentro do Nilo Care.
>
> Ou seja: o `display` de um procedimento que você criou é o **seu** texto, não o da plataforma.
> Não o use para conferir se o código foi entendido — para isso, olhe se a chamada foi aceita.

### O local

O local é **texto livre**, em `location.display`:

```json
"location": { "display": "Hospital Central Acme" }
```

> **Note**
>
> Por compatibilidade, um `location.identifier` apontando para um
> [local de atendimento](/guia/recursos/location) já cadastrado também é aceito, e o
> **nome** daquele local é o que a equipe passa a ver na ficha. Não há vínculo: alterar o local
> depois não muda o que ficou no procedimento.
>
> Mas atenção: mandando `identifier`, é `identifier` que a leitura devolve — o `display` **não**
> é preenchido a partir dele. Quem consome o recurso não encontra o nome do local em lugar nenhum.
> Por isso, prefira `display`; ou mande os dois.

> **Warning**
>
> Ao contrário do que acontece nos [eventos](/guia/recursos/encounter-hospitalization), aqui o
> `location` é **obrigatório**. Um procedimento sem local é recusado.

### As informações adicionais

> **Note**
>
> Os itens de `note[]` voltam na leitura **como você os enviou**: três notas enviadas, três notas
> lidas.
>
> Do lado do Nilo Care, porém, elas viram **um texto só**, com quebras de linha entre os itens —
> é assim que a equipe as vê no campo **Informações adicionais**. A separação em itens existe no
> recurso, não na ficha.

> **Note**
>
> Na tela, o rótulo do campo é **Informações adicionais (uso interno da equipe de cuidado)**. O
> texto não é mostrado ao paciente.

## Buscar

### Request

GET [https://landing-zone-api.nilo.services/fhir/resources/Procedure](https://landing-zone-api.nilo.services/fhir/resources/Procedure)

**`Busca com resultados`**

```curl Busca com resultados
curl -G https://landing-zone-api.nilo.services/fhir/resources/Procedure \
     -H "x-api-key: <apiKey>" \
     -d _count=50 \
     -d _lastUpdated=eq2013-01-14 \
     --data-urlencode code=https://fhir.ans.gov.br/CodeSystem/tuss-63|20103182 \
     -d date=ge2026-01-01 \
     --data-urlencode identifier=https://www.acmesaude.com.br/integracao/procedimento/|55162 \
     --data-urlencode patient=Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4 \
     --data-urlencode patient:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709 \
     --data-urlencode performer=Practitioner/1f30c8b7-45ad-4e62-9c81-73b0e5f24a19 \
     --data-urlencode performer:identifier=https://www.acmesaude.com.br/integracao/profissional/|5032932 \
     -d status=completed \
     --data-urlencode subject=Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4
```

**`Busca com resultados`**

```python Busca com resultados
import requests

url = "https://landing-zone-api.nilo.services/fhir/resources/Procedure"

querystring = {"_count":"50","_lastUpdated":"[\"eq2013-01-14\"]","code":"https://fhir.ans.gov.br/CodeSystem/tuss-63|20103182","date":"ge2026-01-01","identifier":"https://www.acmesaude.com.br/integracao/procedimento/|55162","patient":"Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4","patient:identifier":"https://www.acmesaude.com.br/integracao/paciente/|507823709","performer":"Practitioner/1f30c8b7-45ad-4e62-9c81-73b0e5f24a19","performer:identifier":"https://www.acmesaude.com.br/integracao/profissional/|5032932","status":"completed","subject":"Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"}

headers = {"x-api-key": "<apiKey>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

**`Busca com resultados`**

```javascript Busca com resultados
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Procedure?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=https%3A%2F%2Ffhir.ans.gov.br%2FCodeSystem%2Ftuss-63%7C20103182&date=ge2026-01-01&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprocedimento%2F%7C55162&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&performer=Practitioner%2F1f30c8b7-45ad-4e62-9c81-73b0e5f24a19&performer%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4';
const options = {method: 'GET', headers: {'x-api-key': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`Busca com resultados`**

```go Busca com resultados
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/Procedure?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=https%3A%2F%2Ffhir.ans.gov.br%2FCodeSystem%2Ftuss-63%7C20103182&date=ge2026-01-01&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprocedimento%2F%7C55162&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&performer=Practitioner%2F1f30c8b7-45ad-4e62-9c81-73b0e5f24a19&performer%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-api-key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`Busca com resultados`**

```ruby Busca com resultados
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/Procedure?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=https%3A%2F%2Ffhir.ans.gov.br%2FCodeSystem%2Ftuss-63%7C20103182&date=ge2026-01-01&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprocedimento%2F%7C55162&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&performer=Practitioner%2F1f30c8b7-45ad-4e62-9c81-73b0e5f24a19&performer%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

**`Busca com resultados`**

```java Busca com resultados
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://landing-zone-api.nilo.services/fhir/resources/Procedure?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=https%3A%2F%2Ffhir.ans.gov.br%2FCodeSystem%2Ftuss-63%7C20103182&date=ge2026-01-01&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprocedimento%2F%7C55162&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&performer=Practitioner%2F1f30c8b7-45ad-4e62-9c81-73b0e5f24a19&performer%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Busca com resultados`**

```php Busca com resultados
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://landing-zone-api.nilo.services/fhir/resources/Procedure?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=https%3A%2F%2Ffhir.ans.gov.br%2FCodeSystem%2Ftuss-63%7C20103182&date=ge2026-01-01&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprocedimento%2F%7C55162&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&performer=Practitioner%2F1f30c8b7-45ad-4e62-9c81-73b0e5f24a19&performer%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`Busca com resultados`**

```csharp Busca com resultados
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/Procedure?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=https%3A%2F%2Ffhir.ans.gov.br%2FCodeSystem%2Ftuss-63%7C20103182&date=ge2026-01-01&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprocedimento%2F%7C55162&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&performer=Practitioner%2F1f30c8b7-45ad-4e62-9c81-73b0e5f24a19&performer%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

**`Busca com resultados`**

```swift Busca com resultados
import Foundation

let headers = ["x-api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/Procedure?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&code=https%3A%2F%2Ffhir.ans.gov.br%2FCodeSystem%2Ftuss-63%7C20103182&date=ge2026-01-01&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprocedimento%2F%7C55162&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&performer=Practitioner%2F1f30c8b7-45ad-4e62-9c81-73b0e5f24a19&performer%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

A resposta é sempre um `Bundle` do tipo `searchset`:

### Response (200)

```json
{
  "resourceType": "Bundle",
  "type": "searchset",
  "entry": [
    {
      "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Procedure/72c4e0a8-3f95-4b17-8d63-01ae9c528f4b",
      "resource": {
        "resourceType": "Procedure",
        "identifier": [
          {
            "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--patient-surgery",
            "value": "31805",
            "use": "usual"
          },
          {
            "system": "https://www.acmesaude.com.br/integracao/procedimento/",
            "value": "55162",
            "use": "usual"
          }
        ],
        "status": "completed",
        "code": {
          "coding": [
            {
              "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
              "code": "20103182"
            }
          ]
        },
        "subject": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
          },
          "type": "Patient"
        },
        "performer": [
          {
            "actor": {
              "identifier": {
                "system": "https://www.acmesaude.com.br/integracao/profissional/",
                "value": "5032932",
                "use": "usual"
              },
              "type": "Practitioner"
            }
          }
        ],
        "location": {
          "display": "Hospital Central Acme"
        },
        "performedPeriod": {
          "end": "2026-04-16T20:30:00+00:00",
          "start": "2026-04-16T17:00:00+00:00"
        },
        "id": "72c4e0a8-3f95-4b17-8d63-01ae9c528f4b",
        "meta": {
          "lastUpdated": "2026-04-16T20:35:12.441000Z",
          "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
        },
        "bodySite": [
          {
            "coding": [
              {
                "code": "24028007",
                "system": "http://snomed.info/sct"
              }
            ]
          }
        ],
        "note": [
          {
            "text": "Paciente em jejum desde as 22h."
          }
        ]
      },
      "search": {
        "mode": "match"
      }
    },
    {
      "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Procedure/e0416b93-8c27-4fd5-a1b6-25907dc4e83f",
      "resource": {
        "resourceType": "Procedure",
        "identifier": [
          {
            "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--patient-surgery",
            "value": "31806",
            "use": "usual"
          }
        ],
        "status": "completed",
        "code": {
          "coding": [
            {
              "system": "https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS",
              "code": "0301010032",
              "display": "Procedimento cirúrgico"
            }
          ]
        },
        "subject": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
          },
          "reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4",
          "type": "Patient"
        },
        "performer": [
          {
            "actor": {
              "identifier": {
                "system": "https://www.acmesaude.com.br/integracao/profissional/",
                "value": "5032932",
                "use": "usual"
              },
              "reference": "Practitioner/1f30c8b7-45ad-4e62-9c81-73b0e5f24a19",
              "type": "Practitioner"
            }
          }
        ],
        "location": {
          "display": "Hospital Público Municipal"
        },
        "performedPeriod": {
          "end": "2026-05-02T11:00:00+00:00",
          "start": "2026-05-02T08:00:00+00:00"
        },
        "id": "e0416b93-8c27-4fd5-a1b6-25907dc4e83f",
        "meta": {
          "lastUpdated": "2026-05-02T11:14:38.207000Z",
          "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM3Mg"
        },
        "note": [
          {
            "text": "Paciente em jejum desde as 22h.\nAcompanhante presente."
          }
        ]
      },
      "search": {
        "mode": "match"
      }
    }
  ],
  "link": []
}
```

Busca sem resultados não é erro: volta `200` com um `Bundle` cujo `entry` é uma lista vazia.
Trate a ausência de resultados pela lista vazia, não esperando um `404`.

### Response (200)

```json
{
  "resourceType": "Bundle",
  "type": "searchset",
  "entry": [],
  "link": []
}
```

### A busca devolve mais do que cirurgias

> **Warning**
>
> `GET /fhir/resources/Procedure` **não devolve só cirurgias**. Uma conduta registrada num
> atendimento cujo desfecho seja *resultado de exame* também é gravada como `Procedure`, e
> aparece na mesma busca — inclusive num filtro por paciente.
>
> Esses recursos são fáceis de reconhecer: eles **não têm** `code`, `performer`, `location` nem
> `performedPeriod`, trazem um `category` SNOMED e o identificador deles está num `system`
> próprio de conduta. Se a sua integração só trata cirurgias, filtre pela presença de
> `performedPeriod`.

> **Warning**
>
> E há uma armadilha na escrita: se o `identifier` que você enviar casar com um desses recursos,
> o `POST` **falha** com uma mensagem sobre não encontrar o identificador de cirurgia. Use chaves
> suas, num `system` seu, e o problema não aparece.

### Parâmetros de busca suportados

| Nome                                        | Tipo                                                       | Descrição                                                          | Expressão                              |
| ------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------ | -------------------------------------- |
| `identifier`                                | [token](https://hl7.org/fhir/R4/search.html#token)         | Identificador do procedimento, em `system\|value`                  | `Procedure.identifier`                 |
| `patient` · `subject`                       | [reference](https://hl7.org/fhir/R4/search.html#reference) | Paciente, pelo `id` Nilo FHIR dele                                 | `Procedure.subject`                    |
| `patient:identifier` · `subject:identifier` | [reference](https://hl7.org/fhir/R4/search.html#reference) | Paciente, pelo identificador dele                                  | `Procedure.subject.identifier`         |
| `performer`                                 | [reference](https://hl7.org/fhir/R4/search.html#reference) | Profissional, pelo `id` Nilo FHIR dele                             | `Procedure.performer.actor`            |
| `performer:identifier`                      | [reference](https://hl7.org/fhir/R4/search.html#reference) | Profissional, pelo identificador dele                              | `Procedure.performer.actor.identifier` |
| `code`                                      | [token](https://hl7.org/fhir/R4/search.html#token)         | Código do procedimento, em `system\|code`                          | `Procedure.code`                       |
| `date`                                      | [date](https://hl7.org/fhir/R4/search.html#date)           | Data do procedimento, com os prefixos `eq`, `ge`, `le`             | `Procedure.performed`                  |
| `status`                                    | [token](https://hl7.org/fhir/R4/search.html#token)         | Situação **calculada** — veja o aviso abaixo                       | `Procedure.status`                     |
| `_lastUpdated`                              | [date](https://hl7.org/fhir/R4/search.html#date)           | Data da última gravação no store, com os prefixos `eq`, `ge`, `le` | —                                      |

> **Warning**
>
> **Prefira as formas `:identifier`.** Um procedimento criado por integração guarda a referência
> do paciente e a do profissional **como você as mandou** — só com `identifier`, sem o campo
> `reference`. E é justamente em `reference` que `patient=Patient/{id}` e
> `performer=Practitioner/{id}` procuram.
>
> Essas duas formas só encontram os procedimentos originados no Nilo Care, ou os que já foram
> editados por lá depois de criados por você. Para uma busca previsível, use
> `patient:identifier` e `performer:identifier`.

> **Warning**
>
> **Buscar por `status` não recorta por tempo.** O valor gravado é o que você mandou — ou, nos
> procedimentos vindos do Nilo Care, o que valia quando a equipe os editou. Ele não é
> recalculado. Para recortar por tempo, use `date`.

> **Note**
>
> Os demais parâmetros canônicos do `Procedure` existem e **não encontram nada** aqui, porque a
> Nilo não preenche o campo correspondente: `based-on`, `encounter`, `instantiates-canonical`,
> `instantiates-uri`, `part-of`, `reason-code`, `reason-reference` e `subject:Group`.
>
> `location` é o caso curioso: o parâmetro canônico procura por **referência**, e o local
> recomendado é texto em `display` — que não é encontrável. Se você mandou `location.identifier`,
> aí sim `location:identifier` encontra o procedimento. Não há como buscar pelo **nome** do local.
>
> E `category` **encontra** algo, mas não o que você espera — veja o aviso logo abaixo.

A paginação é por `_count` e `_page_token`; havendo página seguinte, o `Bundle` traz a URL
pronta em `link`.

## Ler por ID

### Request

GET [https://landing-zone-api.nilo.services/fhir/resources/Procedure/\{id}](https://landing-zone-api.nilo.services/fhir/resources/Procedure/\{id})

**`Procedimento encontrado`**

```curl Procedimento encontrado
curl https://landing-zone-api.nilo.services/fhir/resources/Procedure/id \
     -H "x-api-key: <apiKey>"
```

**`Procedimento encontrado`**

```python Procedimento encontrado
import requests

url = "https://landing-zone-api.nilo.services/fhir/resources/Procedure/id"

headers = {"x-api-key": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

**`Procedimento encontrado`**

```javascript Procedimento encontrado
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Procedure/id';
const options = {method: 'GET', headers: {'x-api-key': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`Procedimento encontrado`**

```go Procedimento encontrado
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/Procedure/id"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-api-key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`Procedimento encontrado`**

```ruby Procedimento encontrado
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/Procedure/id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

**`Procedimento encontrado`**

```java Procedimento encontrado
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://landing-zone-api.nilo.services/fhir/resources/Procedure/id")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Procedimento encontrado`**

```php Procedimento encontrado
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://landing-zone-api.nilo.services/fhir/resources/Procedure/id', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`Procedimento encontrado`**

```csharp Procedimento encontrado
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/Procedure/id");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

**`Procedimento encontrado`**

```swift Procedimento encontrado
import Foundation

let headers = ["x-api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/Procedure/id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

> **Warning**
>
> Diferente da busca, esta leitura não devolve um `Bundle` — mas também **não devolve o recurso
> nu**. A resposta é um envelope com `fullUrl`, `search` e `resource`, e o procedimento está em
> `resource`. Ler `code` ou `subject` na raiz da resposta não encontra nada.

### Response (200)

```json
{
  "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Procedure/72c4e0a8-3f95-4b17-8d63-01ae9c528f4b",
  "resource": {
    "resourceType": "Procedure",
    "identifier": [
      {
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--patient-surgery",
        "value": "31805",
        "use": "usual"
      },
      {
        "system": "https://www.acmesaude.com.br/integracao/procedimento/",
        "value": "55162",
        "use": "usual"
      }
    ],
    "status": "completed",
    "code": {
      "coding": [
        {
          "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
          "code": "20103182"
        }
      ]
    },
    "subject": {
      "identifier": {
        "system": "https://www.acmesaude.com.br/integracao/paciente/",
        "value": "507823709",
        "use": "usual"
      },
      "type": "Patient"
    },
    "performer": [
      {
        "actor": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/profissional/",
            "value": "5032932",
            "use": "usual"
          },
          "type": "Practitioner"
        }
      }
    ],
    "location": {
      "display": "Hospital Central Acme"
    },
    "performedPeriod": {
      "end": "2026-04-16T20:30:00+00:00",
      "start": "2026-04-16T17:00:00+00:00"
    },
    "id": "72c4e0a8-3f95-4b17-8d63-01ae9c528f4b",
    "meta": {
      "lastUpdated": "2026-04-16T20:35:12.441000Z",
      "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
    },
    "note": [
      {
        "text": "Paciente em jejum desde as 22h."
      }
    ]
  },
  "search": {
    "mode": "match"
  }
}
```

## Valores aceitos

### `code.coding[0].system`

Dois, e só dois:

| Tabela                                                                           | `system`                                                        | Exemplo de `code` |
| -------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- |
| TUSS                                                                             | `https://fhir.ans.gov.br/CodeSystem/tuss-63`                    | `20103182`        |
| [Tabela SUS](https://terminologia.saude.gov.br/fhir/CodeSystem-BRTabelaSUS.html) | `https://terminologia.saude.gov.br/fhir/CodeSystem/BRTabelaSUS` | `0301010032`      |

Qualquer outro `system` recusa a chamada. E o `code` precisa **existir no catálogo da
plataforma** naquela tabela: um código TUSS válido mas não cadastrado é recusado do mesmo
jeito.

> **Note**
>
> O catálogo de procedimentos é único da plataforma, não do seu ambiente, e não é publicado por
> esta API. Se um código que você usa não é aceito, ele não consta desse catálogo — fale com o
> **Suporte**.

### `bodySite[0].coding[0].code`

Três códigos SNOMED, e o campo guarda **lateralidade**, não sítio anatômico:

| Código     | Lateralidade |
| ---------- | ------------ |
| `24028007` | Direito      |
| `7771000`  | Esquerdo     |
| `51440002` | Bilateral    |

Qualquer outro código recusa a chamada — inclusive um código SNOMED de sítio anatômico
legítimo. Não há como registrar onde no corpo o procedimento foi feito.

### `status`

A plataforma só produz três: `preparation`, `in-progress` e `completed`. Mas o valor que você
manda é gravado como veio, qualquer que seja — e sem efeito. Veja
[`status` não é conferido contra o período](#status-não-é-conferido-contra-o-período).

## Efeitos colaterais

> **Note**
>
> Registrar um procedimento **não cria atendimento nem notifica o paciente**. Ele entra apenas na
> linha de eventos da ficha.

> **Note**
>
> Dois campos da ficha são preenchidos pela integração e **não podem ser escolhidos por você**:
> o procedimento entra sempre marcado como referido por *outros*, e com **todas** as atividades
> de diretriz habilitadas — a pergunta que o formulário do Nilo Care faz sobre quais atividades
> serão necessárias. Para mudar qualquer um dos dois, a equipe precisa editar o procedimento na
> tela.

> **Note**
>
> Este endpoint nunca responde `204`: não há remoção de procedimento por integração. Apagar uma
> cirurgia é ação da equipe no Nilo Care — e, feita por lá, o `id` que você já leu passa a
> responder `404`.

## Erros

Recusa é `400`, e o corpo é um `OperationOutcome`.

As recusas vêm de dois lugares, e têm formas diferentes:

* **Forma do payload** — campo que o próprio FHIR exige (`status`, `subject`), tipo inválido,
  valor fora do formato. Vem com `code: structure` e o caminho do campo em `expression`.
* **Regra de negócio** — tudo o mais desta página. Vem com `code: exception`, **sem**
  `expression`, e a única pista é a mensagem em `details.text`.

> **Warning**
>
> As mensagens da segunda lista são texto de erro de linguagem, em inglês, e **não são
> contrato**. Não as interprete programaticamente: trate `code: exception` como "payload
> recusado" e confira a lista de obrigatórios.

| Mensagem em `details.text`                                                     | Quando                                                                                                                                              |
| ------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ValueError: Identifier is mandatory`                                          | O payload não tem `identifier`                                                                                                                      |
| `ValueError: Could not find Patient in subject`                                | O `subject.identifier` não resolve para um paciente do seu ambiente                                                                                 |
| `ValueError: performer.actor is mandatory`                                     | Não há `performer`, ou o primeiro item não tem `actor`                                                                                              |
| `ValueError: Could not find Professional in performer`                         | O `performer[0].actor.identifier` não resolve para um profissional do seu ambiente                                                                  |
| `ValueError: location is mandatory`                                            | O payload não tem `location`                                                                                                                        |
| `ValueError: Could not find HealthFacility in location`                        | O `location` veio só com `identifier`, e ele não resolveu                                                                                           |
| `ValueError: code.coding is mandatory`                                         | Não há `code`, ou ele não tem `coding`                                                                                                              |
| `ValueError: code.coding.system must be …`                                     | O `system` do código não é TUSS nem Tabela SUS                                                                                                      |
| `ValueError: Could not find MedicalProcedure with code …`                      | O código não existe no catálogo da plataforma                                                                                                       |
| `ValueError: Unsupported laterality code …`                                    | O `bodySite` traz um código fora dos três aceitos                                                                                                   |
| `ValueError: performedPeriod is mandatory`                                     | O payload não tem `performedPeriod`                                                                                                                 |
| `ValueError: Both performedPeriod.start and performedPeriod.end are mandatory` | O período veio sem início ou sem fim                                                                                                                |
| `ValueError: Too many matches for …`                                           | Os identificadores enviados casam com mais de um procedimento já gravado                                                                            |
| `ValueError: Could not find … identifier for Procedure …`                      | O `identifier` enviado casa com um recurso que não é uma cirurgia — veja o aviso sobre condutas em [Buscar](#a-busca-devolve-mais-do-que-cirurgias) |

### Response (200)

```json
{
  "resourceType": "Procedure",
  "identifier": [
    {
      "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/hippocrates-api--patient-surgery",
      "value": "31805",
      "use": "usual"
    },
    {
      "system": "https://www.acmesaude.com.br/integracao/procedimento/",
      "value": "55162",
      "use": "usual"
    }
  ],
  "status": "completed",
  "code": {
    "coding": [
      {
        "system": "https://fhir.ans.gov.br/CodeSystem/tuss-63",
        "code": "20103182"
      }
    ]
  },
  "subject": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    },
    "type": "Patient"
  },
  "performer": [
    {
      "actor": {
        "identifier": {
          "system": "https://www.acmesaude.com.br/integracao/profissional/",
          "value": "5032932",
          "use": "usual"
        },
        "type": "Practitioner"
      }
    }
  ],
  "location": {
    "display": "Hospital Central Acme"
  },
  "performedPeriod": {
    "end": "2026-04-16T20:30:00+00:00",
    "start": "2026-04-16T17:00:00+00:00"
  },
  "id": "72c4e0a8-3f95-4b17-8d63-01ae9c528f4b",
  "meta": {
    "lastUpdated": "2026-04-16T20:35:12.441000Z",
    "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
  },
  "bodySite": [
    {
      "coding": [
        {
          "code": "24028007",
          "system": "http://snomed.info/sct"
        }
      ]
    }
  ],
  "note": [
    {
      "text": "Paciente em jejum desde as 22h."
    }
  ]
}
```

Os payloads completos estão na aba **Referência**, em `POST /fhir/resources/Procedure`.

### `429`

Este recurso **pode ter** limite de escrita, conforme a configuração do ambiente. Havendo
limite e estourando-o, a chamada responde `429` com `code: throttled`, e a mensagem informa
quantos segundos esperar. Repita depois desse tempo — nada foi gravado.