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

# Condição

> Registrar e consultar diagnósticos, condições crônicas e condutas do paciente no padrão FHIR Condition.

Uma condição é qualquer problema de saúde que a equipe registra sobre o paciente: o
diagnóstico fechado num atendimento, uma doença crônica que o acompanha há anos, ou a conduta
que o profissional orientou ao encerrar a consulta.

No FHIR todos esses casos são o mesmo recurso, a
[`Condition`](https://hl7.org/fhir/R4/condition.html) — e é aqui que este recurso pede
atenção. **Dois campos do payload decidem qual dos três registros a Nilo cria**, e eles não
parecem campos de decisão: passam por descrição.

| No payload                                          | O que a Nilo registra             | No NiloCare                               |
| --------------------------------------------------- | --------------------------------- | ----------------------------------------- |
| `verificationStatus` com o código `provisional`     | Uma **conduta** do atendimento    | **Condutas e orientações** do atendimento |
| `category` com o código `event` no `system` da Nilo | Um **evento clínico** do paciente | Condição do evento na linha do tempo      |
| qualquer outro caso                                 | Um **diagnóstico de atendimento** | **Diagnósticos** do atendimento           |

A ordem é essa: `provisional` é conferido primeiro e ganha de tudo. Um payload com
`verificationStatus` `provisional` **e** `category` `event` grava uma conduta, não um evento.

> **Warning**
>
> A consequência mais séria dessa regra aparece num ida-e-volta. Um diagnóstico marcado como
> **Hipótese** na plataforma é **lido** com `verificationStatus` `provisional`. Reenviar esse
> mesmo recurso de volta não atualiza o diagnóstico **nem grava a conduta**: a escrita falha com
> `400` e uma mensagem genérica de recurso não localizado, porque o `identifier` enviado já
> pertence a uma condição de outro destino. Se o seu integrador lê condições e as reescreve,
> filtre os `provisional` antes de reenviar.

Os três destinos compartilham um endpoint, um schema e uma busca. O que muda é quais campos
são lidos, quais são obrigatórios e o que acontece de efeito colateral — e é isso que o resto
desta página detalha.

## Campos

A coluna **No NiloCare** traz o rótulo com que o dado aparece para a equipe; são rótulos, não
caminhos de navegação: a tela pode ser reorganizada, o rótulo é o que permite conferir se o
dado chegou onde você esperava.

| Campo                | Obrigatório                                       | O que significa                                                                                                    | No NiloCare                                       |
| -------------------- | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------- |
| `subject`            | **sim**                                           | O paciente, por um identificador dele já cadastrado                                                                | **Paciente**                                      |
| `identifier`         | **sim** na conduta, **sim** na prática nos outros | Chaves da condição. É por aqui que a API decide entre criar e atualizar                                            | —                                                 |
| `code`               | **sim** no diagnóstico e no evento                | O diagnóstico, pelo código de um dos três catálogos aceitos                                                        | **Diagnóstico**                                   |
| `recorder`           | **sim** no diagnóstico e no evento                | O profissional que registrou, por um identificador dele                                                            | **Diagnosticado por**                             |
| `encounter`          | não                                               | O atendimento a que a condição pertence                                                                            | **Atendimento**                                   |
| `note[]`             | **sim** na conduta                                | Na conduta, o conteúdo dela. No diagnóstico, só resposta                                                           | **Condutas e orientações** · notas do diagnóstico |
| `onsetDateTime`      | não                                               | Início da condição. Só tem efeito no evento clínico                                                                | —                                                 |
| `abatementDateTime`  | não                                               | Fim da condição. Só tem efeito no evento clínico                                                                   | —                                                 |
| `category`           | não                                               | Roteia a escrita. O código `event` no `system` da Nilo escolhe o evento clínico                                    | —                                                 |
| `verificationStatus` | não                                               | Roteia a escrita. Só `provisional` tem efeito. Nas leituras é derivado                                             | **Alterar verificação**                           |
| `clinicalStatus`     | não                                               | Só resposta, e derivado do registro. `resolved` no diagnóstico encerrado; `active` ou `resolved` no evento clínico | **Alterar status clínico**                        |
| `recordedDate`       | não                                               | Só resposta. O que ele traz depende do destino — veja [Datas](#datas)                                              | —                                                 |
| `id`                 | não                                               | Só resposta: o identificador Nilo FHIR do recurso                                                                  | —                                                 |
| `meta`               | não                                               | Só resposta: metadados da gravação                                                                                 | —                                                 |

### O que muda de destino para destino

| Campo                           | Diagnóstico de atendimento                        | Evento clínico                       | Conduta                        |
| ------------------------------- | ------------------------------------------------- | ------------------------------------ | ------------------------------ |
| `code`                          | obrigatório                                       | obrigatório                          | **não é lido**                 |
| `recorder`                      | obrigatório                                       | obrigatório                          | **não é lido**                 |
| `identifier`                    | opcional na validação                             | opcional na validação                | **obrigatório**                |
| `note[]`                        | só leitura                                        | não existe                           | obrigatório, escrita e leitura |
| `onsetDateTime`                 | sem efeito                                        | início da condição                   | sem efeito                     |
| `abatementDateTime`             | sem efeito                                        | fim da condição                      | sem efeito                     |
| `encounter`                     | atendimento do prontuário                         | hospitalização ou pronto atendimento | atendimento do prontuário      |
| `verificationStatus` na leitura | o status do diagnóstico, em três dos seis estados | sempre `confirmed`                   | sempre `provisional`           |
| `clinicalStatus` na leitura     | só `resolved`, e só no estado Encerrado           | derivado do fim da condição          | não vem                        |

### Campos que a Nilo não usa

A `Condition` canônica tem campos que esta integração não lê nem grava: `asserter`,
`severity`, `bodySite`, `stage`, `evidence`, `onsetPeriod`, `onsetAge`, `onsetString`,
`abatementPeriod`, `abatementAge`, `abatementString`, `abatementBoolean` e `encounter` como
lista. Ficam fora da referência de propósito. Como esta referência descreve só o que é
suportado, eles não aparecem no schema do recurso. O servidor os aceita, guarda no recurso
FHIR e devolve nas leituras seguintes, mas nada no NiloCare passa a exibi-los.

E dois dados que o NiloCare mostra **não têm campo nesta API**: a cor e o ícone com que a
condição é destacada na ficha, e o autor de cada nota de diagnóstico — a nota volta com
`authorReference`, mas ele é da plataforma, não do seu payload.

## Cadastrar ou atualizar

Não há endpoint separado para criar e atualizar. O mesmo `POST` faz os dois, e quem decide é
o `identifier`: se já existir uma condição com aquele par `system` + `value`, ela é
atualizada; se não existir, é criada.

### Request

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

**`Diagnóstico de atendimento`**

```curl Diagnóstico de atendimento
curl -X POST https://landing-zone-api.nilo.services/fhir/resources/Condition \
     -H "x-api-key: <apiKey>" \
     -H "Content-Type: application/json" \
     -d '{
  "resourceType": "Condition",
  "subject": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    },
    "type": "Patient"
  },
  "code": {
    "coding": [
      {
        "code": "J06.9",
        "display": "Infecção aguda das vias aéreas superiores não especificada",
        "system": "http://hl7.org/fhir/sid/icd-10"
      }
    ]
  },
  "encounter": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/atendimento/",
      "value": "55162",
      "use": "usual"
    },
    "type": "Encounter"
  },
  "identifier": [
    {
      "system": "https://www.acmesaude.com.br/integracao/diagnostico/",
      "value": "78901",
      "use": "usual"
    }
  ],
  "recorder": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/profissional/",
      "value": "5032932",
      "use": "usual"
    },
    "type": "Practitioner"
  }
}'
```

**`Diagnóstico de atendimento`**

```python Diagnóstico de atendimento
import requests

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

payload = {
    "resourceType": "Condition",
    "subject": {
        "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
        },
        "type": "Patient"
    },
    "code": { "coding": [
            {
                "code": "J06.9",
                "display": "Infecção aguda das vias aéreas superiores não especificada",
                "system": "http://hl7.org/fhir/sid/icd-10"
            }
        ] },
    "encounter": {
        "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/atendimento/",
            "value": "55162",
            "use": "usual"
        },
        "type": "Encounter"
    },
    "identifier": [
        {
            "system": "https://www.acmesaude.com.br/integracao/diagnostico/",
            "value": "78901",
            "use": "usual"
        }
    ],
    "recorder": {
        "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/profissional/",
            "value": "5032932",
            "use": "usual"
        },
        "type": "Practitioner"
    }
}
headers = {
    "x-api-key": "<apiKey>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

**`Diagnóstico de atendimento`**

```javascript Diagnóstico de atendimento
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Condition';
const options = {
  method: 'POST',
  headers: {'x-api-key': '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"resourceType":"Condition","subject":{"identifier":{"system":"https://www.acmesaude.com.br/integracao/paciente/","value":"507823709","use":"usual"},"type":"Patient"},"code":{"coding":[{"code":"J06.9","display":"Infecção aguda das vias aéreas superiores não especificada","system":"http://hl7.org/fhir/sid/icd-10"}]},"encounter":{"identifier":{"system":"https://www.acmesaude.com.br/integracao/atendimento/","value":"55162","use":"usual"},"type":"Encounter"},"identifier":[{"system":"https://www.acmesaude.com.br/integracao/diagnostico/","value":"78901","use":"usual"}],"recorder":{"identifier":{"system":"https://www.acmesaude.com.br/integracao/profissional/","value":"5032932","use":"usual"},"type":"Practitioner"}}'
};

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

**`Diagnóstico de atendimento`**

```go Diagnóstico de atendimento
package main

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

func main() {

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

	payload := strings.NewReader("{\n  \"resourceType\": \"Condition\",\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  \"code\": {\n    \"coding\": [\n      {\n        \"code\": \"J06.9\",\n        \"display\": \"Infecção aguda das vias aéreas superiores não especificada\",\n        \"system\": \"http://hl7.org/fhir/sid/icd-10\"\n      }\n    ]\n  },\n  \"encounter\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/atendimento/\",\n      \"value\": \"55162\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Encounter\"\n  },\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/diagnostico/\",\n      \"value\": \"78901\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"recorder\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n      \"value\": \"5032932\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Practitioner\"\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))

}
```

**`Diagnóstico de atendimento`**

```ruby Diagnóstico de atendimento
require 'uri'
require 'net/http'

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

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\": \"Condition\",\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  \"code\": {\n    \"coding\": [\n      {\n        \"code\": \"J06.9\",\n        \"display\": \"Infecção aguda das vias aéreas superiores não especificada\",\n        \"system\": \"http://hl7.org/fhir/sid/icd-10\"\n      }\n    ]\n  },\n  \"encounter\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/atendimento/\",\n      \"value\": \"55162\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Encounter\"\n  },\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/diagnostico/\",\n      \"value\": \"78901\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"recorder\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n      \"value\": \"5032932\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Practitioner\"\n  }\n}"

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

**`Diagnóstico de atendimento`**

```java Diagnóstico de atendimento
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/Condition")
  .header("x-api-key", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"resourceType\": \"Condition\",\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  \"code\": {\n    \"coding\": [\n      {\n        \"code\": \"J06.9\",\n        \"display\": \"Infecção aguda das vias aéreas superiores não especificada\",\n        \"system\": \"http://hl7.org/fhir/sid/icd-10\"\n      }\n    ]\n  },\n  \"encounter\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/atendimento/\",\n      \"value\": \"55162\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Encounter\"\n  },\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/diagnostico/\",\n      \"value\": \"78901\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"recorder\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n      \"value\": \"5032932\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Practitioner\"\n  }\n}")
  .asString();
```

**`Diagnóstico de atendimento`**

```php Diagnóstico de atendimento
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://landing-zone-api.nilo.services/fhir/resources/Condition', [
  'body' => '{
  "resourceType": "Condition",
  "subject": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    },
    "type": "Patient"
  },
  "code": {
    "coding": [
      {
        "code": "J06.9",
        "display": "Infecção aguda das vias aéreas superiores não especificada",
        "system": "http://hl7.org/fhir/sid/icd-10"
      }
    ]
  },
  "encounter": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/atendimento/",
      "value": "55162",
      "use": "usual"
    },
    "type": "Encounter"
  },
  "identifier": [
    {
      "system": "https://www.acmesaude.com.br/integracao/diagnostico/",
      "value": "78901",
      "use": "usual"
    }
  ],
  "recorder": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/profissional/",
      "value": "5032932",
      "use": "usual"
    },
    "type": "Practitioner"
  }
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'x-api-key' => '<apiKey>',
  ],
]);

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

**`Diagnóstico de atendimento`**

```csharp Diagnóstico de atendimento
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/Condition");
var request = new RestRequest(Method.POST);
request.AddHeader("x-api-key", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"resourceType\": \"Condition\",\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  \"code\": {\n    \"coding\": [\n      {\n        \"code\": \"J06.9\",\n        \"display\": \"Infecção aguda das vias aéreas superiores não especificada\",\n        \"system\": \"http://hl7.org/fhir/sid/icd-10\"\n      }\n    ]\n  },\n  \"encounter\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/atendimento/\",\n      \"value\": \"55162\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Encounter\"\n  },\n  \"identifier\": [\n    {\n      \"system\": \"https://www.acmesaude.com.br/integracao/diagnostico/\",\n      \"value\": \"78901\",\n      \"use\": \"usual\"\n    }\n  ],\n  \"recorder\": {\n    \"identifier\": {\n      \"system\": \"https://www.acmesaude.com.br/integracao/profissional/\",\n      \"value\": \"5032932\",\n      \"use\": \"usual\"\n    },\n    \"type\": \"Practitioner\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

**`Diagnóstico de atendimento`**

```swift Diagnóstico de atendimento
import Foundation

let headers = [
  "x-api-key": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "resourceType": "Condition",
  "subject": [
    "identifier": [
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    ],
    "type": "Patient"
  ],
  "code": ["coding": [
      [
        "code": "J06.9",
        "display": "Infecção aguda das vias aéreas superiores não especificada",
        "system": "http://hl7.org/fhir/sid/icd-10"
      ]
    ]],
  "encounter": [
    "identifier": [
      "system": "https://www.acmesaude.com.br/integracao/atendimento/",
      "value": "55162",
      "use": "usual"
    ],
    "type": "Encounter"
  ],
  "identifier": [
    [
      "system": "https://www.acmesaude.com.br/integracao/diagnostico/",
      "value": "78901",
      "use": "usual"
    ]
  ],
  "recorder": [
    "identifier": [
      "system": "https://www.acmesaude.com.br/integracao/profissional/",
      "value": "5032932",
      "use": "usual"
    ],
    "type": "Practitioner"
  ]
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/Condition")! 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 devolve o recurso como ficou gravado, sem envelope:

### Response (200)

```json
{
  "resourceType": "Condition",
  "subject": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709",
      "use": "usual"
    },
    "type": "Patient",
    "reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"
  },
  "category": [
    {
      "coding": [
        {
          "code": "encounter-diagnosis",
          "display": "Encounter Diagnosis",
          "system": "http://terminology.hl7.org/CodeSystem/condition-category"
        }
      ],
      "text": "Encounter Diagnosis"
    },
    {
      "coding": [
        {
          "code": "patient-diagnosis",
          "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/condition-category"
        }
      ]
    }
  ],
  "code": {
    "coding": [
      {
        "code": "J06.9",
        "display": "Infecção aguda das vias aéreas superiores não especificada",
        "system": "http://hl7.org/fhir/sid/icd-10"
      }
    ],
    "text": "Infecção aguda das vias aéreas superiores não especificada"
  },
  "encounter": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/atendimento/",
      "value": "55162",
      "use": "usual"
    },
    "type": "Encounter",
    "reference": "Encounter/7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294"
  },
  "id": "c61b5f58-32b0-477b-b75a-54e306952082",
  "identifier": [
    {
      "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--patient-diagnosis-v3",
      "value": "412885",
      "use": "usual"
    },
    {
      "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--patient-diagnosis",
      "value": "412885",
      "use": "usual"
    },
    {
      "system": "https://www.acmesaude.com.br/integracao/diagnostico/",
      "value": "78901",
      "use": "usual"
    }
  ],
  "recordedDate": "2026-04-16",
  "recorder": {
    "identifier": {
      "system": "https://www.acmesaude.com.br/integracao/profissional/",
      "value": "5032932",
      "use": "usual"
    },
    "type": "Practitioner",
    "reference": "Practitioner/1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38"
  }
}
```

O reconhecimento é **por destino**: a busca pelo seu `identifier` é restrita às condições
daquele mesmo destino. Um `identifier` já usado num diagnóstico não atualiza um evento clínico
com o mesmo valor — e reenviá-lo apontando para outro destino falha, como no aviso acima.

Guarde o `id`: é por ele que se faz a leitura direta. A resposta traz também o identificador
Nilo da condição ao lado do seu, e o `system` dele diz qual dos três destinos gravou:

| `system` do identificador Nilo                  | Destino                    |
| ----------------------------------------------- | -------------------------- |
| `…/NamingSystem/care-api--patient-diagnosis-v3` | Diagnóstico de atendimento |
| `…/NamingSystem/hippocrates-api--condition`     | Evento clínico             |
| `…/NamingSystem/care-api--conduct-v2`           | Conduta                    |

> **Note**
>
> Diagnósticos de atendimento carregam **também** um identificador no `system`
> `…/NamingSystem/care-api--patient-diagnosis`, sem o `-v3`. É o mesmo diagnóstico: o `system`
> antigo é preservado para não partir o histórico dos registros anteriores.

> **Warning**
>
> Nas duas variantes de diagnóstico o `identifier` **não** é exigido pela validação, e é por
> isso que ele é obrigatório na prática: sem identificador nenhum a API não tem como reconhecer
> a condição, e **cada `POST` cria uma condição nova**. Mande sempre a sua chave.
>
> Na conduta é diferente: a validação recusa o payload sem `identifier`, com o `code`
> `required`. E o `identifier` não é a única chave que decide entre criar e atualizar — quando
> você manda um `encounter`, é o atendimento que manda. Veja
> [O atendimento](#o-atendimento).

> **Warning**
>
> **Na conduta, `use: old` num identificador quer dizer "remova esta chave".** Como a conduta
> acumula os identificadores de cada escrita que chegou nela, marcar um com `use: old` é o jeito
> de tirar uma chave errada — ela sai do recurso, e para de resolver.
>
> Duas recusas vêm daí, as duas com `code` `business-rule`: um payload em que **todos** os
> identificadores estão `use: old` (não sobra como reconhecer a conduta), e um que deixaria algum
> `system` sem identificador nenhum. Trocar um valor pelo outro no **mesmo** payload — o antigo
> com `use: old`, o novo sem — é permitido.
>
> Se você não pretende remover nada, não mande `use: old`.

> **Warning**
>
> A atualização **substitui**, não complementa. Assim como no `Coverage`, no `Practitioner` e no
> `Encounter`, e diferente do `Patient`, um campo omitido **não** preserva o valor atual **na
> plataforma**: num evento clínico, omitir `abatementDateTime` reabre a condição, e omitir
> `onsetDateTime` apaga o início. Para mudar um campo só, reenvie a condição inteira com o valor
> novo.
>
> Uma exceção nos três destinos: **`encounter` é preservado**. Omiti-lo não desvincula a
> condição do atendimento — o vínculo atual continua valendo. Não há como desfazer um vínculo por
> esta API.

> **Warning**
>
> E o recurso FHIR que você lê depois **não** reflete o apagamento. Na regravação, o valor que já
> estava guardado sobrevive onde a plataforma não gera um novo: omitir `onsetDateTime` zera o
> início na plataforma, mas a leitura seguinte continua devolvendo o `onsetDateTime` anterior. Se
> você precisa confirmar que um campo foi apagado, não confie na releitura do recurso.

### O diagnóstico

`code` é como você diz qual é o diagnóstico, e o `coding[0].system` tem de ser um dos três
catálogos que a plataforma mantém:

| Catálogo | `system`                                      |
| -------- | --------------------------------------------- |
| CID-10   | `http://hl7.org/fhir/sid/icd-10`              |
| CIAP-2   | `http://hl7.org/fhir/sid/icpc-2`              |
| NANDA    | `http://terminology.hl7.org/CodeSystem/nanda` |

> **Warning**
>
> Só o **primeiro** `coding` de `code` é lido. Mandar o CID-10 em `coding[1]` e outra
> terminologia em `coding[0]` faz a escrita ser recusada pelo `coding[0]`, e o CID-10 nunca é
> considerado. Ponha o código que vale na primeira posição.

O código precisa existir no catálogo — não há criação de diagnóstico por esta API. Um `system`
fora dos três e um código inexistente têm mensagens diferentes: `Unknown diagnosis system: …`
com o `code` `not-supported`, e `Unknown … with code: …` com o `code` `not-found`. Os dois
payloads completos estão na aba **Referência**, em `POST /fhir/resources/Condition`.

> **Note**
>
> Na leitura, `code.text` e `code.coding[0].display` vêm preenchidos com a descrição oficial do
> item do catálogo, não com o que você enviou. No envio esses dois campos não são necessários.

`code` não é lido na conduta, e mandá-lo lá não é erro — a conduta simplesmente o ignora.

### O profissional

`recorder` é o profissional que registrou a condição, e é obrigatório nas duas variantes de
diagnóstico. O profissional precisa já estar cadastrado; veja
[Profissional](/guia/recursos/practitioner).

Faltando o campo, a recusa vem com o `code` `required` e o `expression` `Condition.recorder`.
Havendo o campo com um identificador que não resolve, vem `Professional does not exist` com o
`code` `not-found`.

Na conduta, `recorder` não é lido: a conduta gravada não tem autor, mesmo que você mande um.

### O paciente

`subject` é obrigatório nos três destinos, e o paciente tem de **existir** — uma condição não
cria paciente. Cadastre o [Paciente](/guia/recursos/patient) primeiro.

A mesma recusa cobre os dois casos: `subject` ausente e `subject` com um identificador que não
resolve saem os dois como `not-found` com `Patient does not exist`, não como `required`.

**`Resposta 400 — Paciente não encontrado`**

```json title="Resposta 400 — Paciente não encontrado"
{
  "resourceType": "OperationOutcome",
  "issue": [
    {
      "severity": "error",
      "code": "not-found",
      "expression": [
        "Condition.subject"
      ],
      "details": {
        "text": "Patient does not exist"
      }
    }
  ]
}
```

### O atendimento

`encounter` liga a condição a um atendimento, e o que ele aceita depende do destino.

Nas duas variantes de diagnóstico e na conduta, é um atendimento do prontuário — veja
[Atendimentos](/guia/recursos/encounter). O campo é opcional: sem ele, o diagnóstico é
registrado sem vínculo.

No evento clínico, `encounter` só aceita uma **hospitalização** ou um **pronto atendimento**.
Apontar para um atendimento do prontuário é recusado com `… is not an event`.

> **Warning**
>
> **Num atendimento de hipótese diagnóstica, a conduta é uma só.** Na plataforma a conduta é o
> campo **Condutas e orientações** do atendimento, e ele é único — a integração segue a mesma
> regra, mas só nos atendimentos cujo desfecho é a hipótese diagnóstica. São eles os que a
> própria API cria quando você grava uma conduta sem `encounter`.
>
> Nesses atendimentos, mandar um `encounter` que já tem conduta **atualiza** a que está lá, mesmo
> que o `identifier` do payload seja um que a API nunca viu. O conteúdo enviado substitui o
> anterior; ele não é acrescentado embaixo. Os identificadores, esses sim, se acumulam: depois de
> duas escritas com chaves diferentes, as duas continuam resolvendo para a mesma conduta.
>
> Se o atendimento tiver mais de uma conduta — de integrações feitas antes desta regra —, a
> escrita mantém só o que você acabou de mandar e **descarta as outras**. A conduta preservada é
> a que o seu `identifier` aponta; sem essa correspondência, é a mais recente. Não há como
> desfazer, então confira o atendimento antes se você usa mais de uma conduta por lá.
>
> Em atendimento com qualquer outro desfecho — inclusive sem desfecho registrado, e nos de
> sugestão terapêutica ou resultado de exame, que se leem como
> [Solicitação de serviço](/guia/recursos/servicerequest) e
> [Procedimento](/guia/recursos/procedure) — a `Condition` **não** mexe no que já está lá:
> grava uma conduta nova, como antes. É de propósito. Como apagar conduta não tem volta, a
> limpeza só age onde a API sabe que a conduta é dela.

**`Requisição — Evento clínico vinculado a uma internação`**

```json title="Requisição — Evento clínico vinculado a uma internação"
{
  "resourceType": "Condition",
  "identifier": [
    {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/condicao/",
      "value": "55124"
    }
  ],
  "category": [
    {
      "coding": [
        {
          "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/condition-category",
          "code": "event"
        }
      ]
    }
  ],
  "subject": {
    "type": "Patient",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709"
    }
  },
  "recorder": {
    "type": "Practitioner",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/profissional/",
      "value": "5032932"
    }
  },
  "encounter": {
    "type": "Encounter",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/evento/",
      "value": "1126"
    }
  },
  "code": {
    "coding": [
      {
        "system": "http://hl7.org/fhir/sid/icd-10",
        "code": "J18.9",
        "display": "Pneumonia não especificada"
      }
    ]
  },
  "onsetDateTime": "2026-01-15",
  "abatementDateTime": "2026-01-22"
}
```

> **Note**
>
> A referência é sempre por `identifier`, não pelo `id` do store. É o identificador do seu
> sistema que você usou ao criar o atendimento — a API resolve a partir dele.

### Datas

O evento clínico é o único destino que lê datas do payload: `onsetDateTime` é o início da
condição e `abatementDateTime` é o fim. Nos outros dois, os dois campos são aceitos e não
gravam nada.

> **Warning**
>
> No evento clínico, o que você manda em `onsetDateTime` **volta em `recordedDate`**, não em
> `onsetDateTime`. Enviar e reler não devolve o mesmo payload: o `onsetDateTime` que aparece na
> leitura é o que ficou guardado do seu próprio envio, não o valor que a plataforma registrou.
> Para saber o início da condição de verdade, leia `recordedDate`.

Nos outros dois destinos `recordedDate` é outra coisa: no diagnóstico de atendimento é a data
em que o diagnóstico foi registrado, sem hora; na conduta é o instante em que a conduta foi
criada. Nenhum dos dois aceita o campo na escrita.

### Situação da condição

`clinicalStatus` e `verificationStatus` aparecem no NiloCare como dois seletores no mesmo menu
de status da condição — **Alterar status clínico** e **Alterar verificação** — e é assim que a
equipe muda o status de um diagnóstico. Pela API eles funcionam de outra forma.

| Status no NiloCare | Como vem na leitura                |
| ------------------ | ---------------------------------- |
| Hipótese           | `verificationStatus` `provisional` |
| Referido           | `verificationStatus` `unconfirmed` |
| Confirmado         | `verificationStatus` `confirmed`   |
| Encerrado          | `clinicalStatus` `resolved`        |
| Agudo · Crônico    | **não vem em campo nenhum**        |

> **Note**
>
> **Agudo** e **Crônico** são estados de verificação que a plataforma reconhece e que esta
> integração não representa: um diagnóstico nesses dois estados volta **sem**
> `verificationStatus` e sem `clinicalStatus`, indistinguível de um diagnóstico sem status. Não
> conclua "sem status" a partir da ausência dos dois campos.
>
> O eixo **Ativo** / **Inativo** que a aba de condições oferece também não sai nesta API: num
> diagnóstico de atendimento, o único valor que `clinicalStatus` assume é o `resolved` da tabela
> acima. Uma condição marcada como Inativa na tela continua sem `clinicalStatus`.

> **Warning**
>
> Essa tabela descreve a **leitura**. Na escrita, **não há como definir o status de um
> diagnóstico por esta API**: `clinicalStatus` é ignorado, e `verificationStatus` só serve para
> rotear — mandar `confirmed` ou `unconfirmed` não grava nada, e mandar `provisional` troca o
> destino: com um `identifier` novo grava uma conduta, e com o `identifier` de um diagnóstico que
> já existe falha com `400`. Um diagnóstico criado por aqui nasce sem status, e quem o define é a
> equipe na tela.

> **Note**
>
> Como o valor que você enviou continua no recurso FHIR, ele volta na leitura imediatamente
> seguinte ao `POST` — mesmo sem ter sido gravado na plataforma. O valor real aparece na próxima
> vez que o diagnóstico mudar por lá, e aí **substitui** o seu. Reler o recurso logo depois do
> `POST` não confirma o que a Nilo registrou.
>
> Vale para a maioria dos campos que a Nilo não lê. `note` num diagnóstico de atendimento é a
> exceção: ele não é apenas ignorado, é **descartado** — a resposta traz as notas da plataforma,
> que num diagnóstico recém-criado é uma lista vazia, e não as suas.
>
> E um reenvio em que **nada** do que a plataforma usa mudou pode não regravar o recurso FHIR:
> nesse caso a resposta traz o recurso como ele estava antes.

No evento clínico os dois campos são derivados e não há o que enviar: `verificationStatus` é
sempre `confirmed`, e `clinicalStatus` é `resolved` quando há `abatementDateTime` e `active`
quando não há.

### Evento clínico

O evento clínico é a condição que não pertence a um atendimento: a doença crônica, o
histórico que o paciente já traz. Ele é escolhido por um `coding` no `system`
`{host}/fhir/resources/CodeSystem/condition-category` com o código `event`:

**`Requisição — Evento clínico`**

```json title="Requisição — Evento clínico"
{
  "resourceType": "Condition",
  "identifier": [
    {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/condicao/",
      "value": "55123"
    }
  ],
  "category": [
    {
      "coding": [
        {
          "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/condition-category",
          "code": "event"
        }
      ]
    }
  ],
  "subject": {
    "type": "Patient",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709"
    }
  },
  "recorder": {
    "type": "Practitioner",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/profissional/",
      "value": "5032932"
    }
  },
  "code": {
    "coding": [
      {
        "system": "http://hl7.org/fhir/sid/icd-10",
        "code": "I10",
        "display": "Hipertensão essencial"
      }
    ]
  },
  "onsetDateTime": "2026-01-15"
}
```

> **Note**
>
> O `system` desse `coding` é conferido. Um `coding` com o código `event` em outro `system` — no
> `system` do FHIR, por exemplo — **não** roteia: a condição vira um diagnóstico de atendimento.
> O mesmo acontece com um `category` que traga vários `coding` no `system` da Nilo com códigos
> diferentes: a ambiguidade não é recusada, é descartada, e o destino vira o padrão.

> **Warning**
>
> Um evento clínico só aparece no NiloCare quando está **associado a uma hospitalização ou a um
> pronto atendimento**. A associação é feita de duas formas: pelo `encounter` da própria
> condição, ou pelo `diagnosis[].condition` do evento — veja
> [Hospitalização](/guia/recursos/encounter-hospitalization) e
> [Pronto atendimento](/guia/recursos/encounter-emergency). Um evento clínico sem
> nenhuma das duas fica gravado e **não é exibido**.

Para criar a condição e o evento numa chamada só, use um `Bundle` do tipo `transaction`: o
`diagnosis[].condition` do evento referencia o `fullUrl` da condição criada na mesma
requisição. Fora do `Bundle`, a condição precisa já existir e a referência é pelo `identifier`
dela. Uma condição pertence a **um** evento — vincular a mesma condição a um segundo é
recusado.

> **Note**
>
> Vincular várias condições ao mesmo evento é aceito, mas o evento na linha do tempo mostra
> **uma** delas — a alterada mais recentemente. As outras ficam gravadas e vinculadas, e são
> alcançáveis pela busca; elas só não aparecem todas no evento.

### Conduta do atendimento

A conduta é o que o profissional orientou ao encerrar o atendimento. Ela é escolhida por
`verificationStatus` `provisional`, e nela o conteúdo é o `note`: cada item da lista é uma
linha da conduta.

> **Note**
>
> Há um segundo caminho para gravar conduta, pela
> [Solicitação de serviço](/guia/recursos/servicerequest) com `intent: proposal`.
> **Escolha um dos dois:** gravar a mesma conduta pelos dois cria registros diferentes.

**`Requisição — Conduta do atendimento`**

```json title="Requisição — Conduta do atendimento"
{
  "resourceType": "Condition",
  "identifier": [
    {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/conduta/",
      "value": "4471"
    }
  ],
  "verificationStatus": {
    "coding": [
      {
        "system": "http://terminology.hl7.org/CodeSystem/condition-ver-status",
        "code": "provisional",
        "display": "Provisional"
      }
    ]
  },
  "subject": {
    "type": "Patient",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/paciente/",
      "value": "507823709"
    }
  },
  "encounter": {
    "type": "Encounter",
    "identifier": {
      "use": "usual",
      "system": "https://www.acmesaude.com.br/integracao/atendimento/",
      "value": "55162"
    }
  },
  "note": [
    {
      "text": "Manter hidratação e repouso."
    },
    {
      "text": "Retornar em 7 dias se não houver melhora."
    }
  ]
}
```

Nesse destino, `code` e `recorder` não são lidos, `identifier` é obrigatório e `note` também:
uma conduta sem `note` falha com um erro genérico, não com `required`.

> **Warning**
>
> E falha **depois** de o atendimento de suporte ter sido criado. Uma conduta sem `encounter` e
> sem `note` devolve `400` e deixa um atendimento vazio no prontuário do paciente. Confira que
> `note` está preenchido antes de enviar.

> **Note**
>
> Na leitura, a conduta vem com um `note` por linha; na escrita, as linhas que você manda são
> juntadas numa só anotação do lado da plataforma. Enviar duas notas e reler devolve duas
> notas — mas uma nota que **contenha** uma quebra de linha volta partida em duas.

> **Warning**
>
> **Uma conduta sem `encounter` cria um atendimento.** A API precisa de um atendimento onde
> pendurar a conduta, e não achando um, cria um atendimento já finalizado para servir de
> suporte. Uma carga de condutas sem `encounter`, portanto, popula o prontuário do paciente com
> um atendimento por conduta.

> **Note**
>
> Numa **atualização** de conduta, o atendimento já vinculado é mantido — o `encounter` do
> payload não o troca, e nenhum atendimento novo é criado. A troca de atendimento de uma
> conduta existente não é possível por esta API.

Na **criação**, o paciente do atendimento referenciado tem de ser o mesmo de `subject`; não
sendo, a escrita é recusada com `Encounter's patient does not match the resource's patient`. Na
atualização essa conferência não acontece, porque o `encounter` do payload não é nem resolvido.

Um `encounter` que não resolve, na conduta, também não sai como `not-found`: sai com o `code`
genérico `exception`.

## Buscar

### Request

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

**`Busca de condições com resultados`**

```curl Busca de condições com resultados
curl -G https://landing-zone-api.nilo.services/fhir/resources/Condition \
     -H "x-api-key: <apiKey>" \
     -d _count=50 \
     -d _lastUpdated=eq2013-01-14 \
     -d abatement-date=ge2026-01-01 \
     --data-urlencode category=https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/condition-category|event \
     --data-urlencode clinical-status=http://terminology.hl7.org/CodeSystem/condition-clinical|resolved \
     --data-urlencode code=http://hl7.org/fhir/sid/icd-10|J06.9 \
     --data-urlencode encounter=Encounter/7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294 \
     --data-urlencode identifier=https://www.acmesaude.com.br/integracao/diagnostico/|78901 \
     --data-urlencode patient=Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4 \
     --data-urlencode patient:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709 \
     -d recorded-date=ge2026-01-01 \
     --data-urlencode recorder=Practitioner/1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38 \
     --data-urlencode subject=Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4 \
     --data-urlencode verification-status=http://terminology.hl7.org/CodeSystem/condition-ver-status|confirmed
```

**`Busca de condições com resultados`**

```python Busca de condições com resultados
import requests

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

querystring = {"_count":"50","_lastUpdated":"[\"eq2013-01-14\"]","abatement-date":"[\"ge2026-01-01\"]","category":"https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/condition-category|event","clinical-status":"http://terminology.hl7.org/CodeSystem/condition-clinical|resolved","code":"http://hl7.org/fhir/sid/icd-10|J06.9","encounter":"Encounter/7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294","identifier":"https://www.acmesaude.com.br/integracao/diagnostico/|78901","patient":"Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4","patient:identifier":"https://www.acmesaude.com.br/integracao/paciente/|507823709","recorded-date":"[\"ge2026-01-01\"]","recorder":"Practitioner/1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38","subject":"Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4","verification-status":"http://terminology.hl7.org/CodeSystem/condition-ver-status|confirmed"}

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

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

print(response.json())
```

**`Busca de condições com resultados`**

```javascript Busca de condições com resultados
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Condition?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&abatement-date=%5B%22ge2026-01-01%22%5D&category=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fcondition-category%7Cevent&clinical-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-clinical%7Cresolved&code=http%3A%2F%2Fhl7.org%2Ffhir%2Fsid%2Ficd-10%7CJ06.9&encounter=Encounter%2F7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fdiagnostico%2F%7C78901&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&recorded-date=%5B%22ge2026-01-01%22%5D&recorder=Practitioner%2F1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&verification-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-ver-status%7Cconfirmed';
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 de condições com resultados`**

```go Busca de condições com resultados
package main

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

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/Condition?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&abatement-date=%5B%22ge2026-01-01%22%5D&category=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fcondition-category%7Cevent&clinical-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-clinical%7Cresolved&code=http%3A%2F%2Fhl7.org%2Ffhir%2Fsid%2Ficd-10%7CJ06.9&encounter=Encounter%2F7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fdiagnostico%2F%7C78901&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&recorded-date=%5B%22ge2026-01-01%22%5D&recorder=Practitioner%2F1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&verification-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-ver-status%7Cconfirmed"

	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 de condições com resultados`**

```ruby Busca de condições com resultados
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/Condition?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&abatement-date=%5B%22ge2026-01-01%22%5D&category=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fcondition-category%7Cevent&clinical-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-clinical%7Cresolved&code=http%3A%2F%2Fhl7.org%2Ffhir%2Fsid%2Ficd-10%7CJ06.9&encounter=Encounter%2F7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fdiagnostico%2F%7C78901&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&recorded-date=%5B%22ge2026-01-01%22%5D&recorder=Practitioner%2F1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&verification-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-ver-status%7Cconfirmed")

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 de condições com resultados`**

```java Busca de condições 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/Condition?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&abatement-date=%5B%22ge2026-01-01%22%5D&category=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fcondition-category%7Cevent&clinical-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-clinical%7Cresolved&code=http%3A%2F%2Fhl7.org%2Ffhir%2Fsid%2Ficd-10%7CJ06.9&encounter=Encounter%2F7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fdiagnostico%2F%7C78901&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&recorded-date=%5B%22ge2026-01-01%22%5D&recorder=Practitioner%2F1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&verification-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-ver-status%7Cconfirmed")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Busca de condições com resultados`**

```php Busca de condições com resultados
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://landing-zone-api.nilo.services/fhir/resources/Condition?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&abatement-date=%5B%22ge2026-01-01%22%5D&category=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fcondition-category%7Cevent&clinical-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-clinical%7Cresolved&code=http%3A%2F%2Fhl7.org%2Ffhir%2Fsid%2Ficd-10%7CJ06.9&encounter=Encounter%2F7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fdiagnostico%2F%7C78901&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&recorded-date=%5B%22ge2026-01-01%22%5D&recorder=Practitioner%2F1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&verification-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-ver-status%7Cconfirmed', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

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

**`Busca de condições com resultados`**

```csharp Busca de condições com resultados
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/Condition?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&abatement-date=%5B%22ge2026-01-01%22%5D&category=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fcondition-category%7Cevent&clinical-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-clinical%7Cresolved&code=http%3A%2F%2Fhl7.org%2Ffhir%2Fsid%2Ficd-10%7CJ06.9&encounter=Encounter%2F7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fdiagnostico%2F%7C78901&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&recorded-date=%5B%22ge2026-01-01%22%5D&recorder=Practitioner%2F1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&verification-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-ver-status%7Cconfirmed");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

**`Busca de condições com resultados`**

```swift Busca de condições com resultados
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/Condition?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&abatement-date=%5B%22ge2026-01-01%22%5D&category=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FCodeSystem%2Fcondition-category%7Cevent&clinical-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-clinical%7Cresolved&code=http%3A%2F%2Fhl7.org%2Ffhir%2Fsid%2Ficd-10%7CJ06.9&encounter=Encounter%2F7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294&identifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fdiagnostico%2F%7C78901&patient=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&recorded-date=%5B%22ge2026-01-01%22%5D&recorder=Practitioner%2F1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38&subject=Patient%2Fba200cfa-dae0-46cf-81a0-008e3f7414b4&verification-status=http%3A%2F%2Fterminology.hl7.org%2FCodeSystem%2Fcondition-ver-status%7Cconfirmed")! 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 busca é a mesma para os três destinos, porque são o mesmo recurso FHIR. Para trazer só um
deles, filtre por `category` ou por `verification-status`:

```bash
# só os eventos clínicos de um paciente
curl --request GET \
  --url 'https://landing-zone-api.nilo.services/fhir/resources/Condition?patient:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709&category=https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/condition-category|event' \
  --header 'x-api-key: SUA_API_KEY'
```

A resposta é sempre um `Bundle` do tipo `searchset`, mesmo quando há um único resultado:

### Response (200)

```json
{
  "resourceType": "Bundle",
  "type": "searchset",
  "entry": [
    {
      "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Condition/c61b5f58-32b0-477b-b75a-54e306952082",
      "resource": {
        "resourceType": "Condition",
        "subject": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
          },
          "type": "Patient",
          "reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"
        },
        "category": [
          {
            "coding": [
              {
                "code": "encounter-diagnosis",
                "display": "Encounter Diagnosis",
                "system": "http://terminology.hl7.org/CodeSystem/condition-category"
              }
            ],
            "text": "Encounter Diagnosis"
          },
          {
            "coding": [
              {
                "code": "patient-diagnosis",
                "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/condition-category"
              }
            ]
          }
        ],
        "code": {
          "coding": [
            {
              "code": "J06.9",
              "display": "Infecção aguda das vias aéreas superiores não especificada",
              "system": "http://hl7.org/fhir/sid/icd-10"
            }
          ],
          "text": "Infecção aguda das vias aéreas superiores não especificada"
        },
        "encounter": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/atendimento/",
            "value": "55162",
            "use": "usual"
          },
          "type": "Encounter",
          "reference": "Encounter/7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294"
        },
        "id": "c61b5f58-32b0-477b-b75a-54e306952082",
        "identifier": [
          {
            "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--patient-diagnosis-v3",
            "value": "412885",
            "use": "usual"
          },
          {
            "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--patient-diagnosis",
            "value": "412885",
            "use": "usual"
          },
          {
            "system": "https://www.acmesaude.com.br/integracao/diagnostico/",
            "value": "78901",
            "use": "usual"
          }
        ],
        "note": [
          {
            "authorReference": {
              "identifier": {
                "system": "https://www.acmesaude.com.br/integracao/profissional/",
                "value": "5032932",
                "use": "usual"
              },
              "type": "Practitioner",
              "reference": "Practitioner/1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38"
            },
            "text": "Paciente relata melhora após 48 h."
          }
        ],
        "recordedDate": "2026-04-16",
        "recorder": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/profissional/",
            "value": "5032932",
            "use": "usual"
          },
          "type": "Practitioner",
          "reference": "Practitioner/1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38"
        },
        "verificationStatus": {
          "coding": [
            {
              "code": "confirmed",
              "display": "Confirmed",
              "system": "http://terminology.hl7.org/CodeSystem/condition-ver-status"
            }
          ],
          "text": "Confirmed"
        }
      },
      "search": {
        "mode": "match"
      }
    },
    {
      "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Condition/2f8b6d31-0c47-4ae9-95d2-6a1e3f70bc84",
      "resource": {
        "resourceType": "Condition",
        "subject": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
          },
          "type": "Patient",
          "reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"
        },
        "encounter": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/atendimento/",
            "value": "55162",
            "use": "usual"
          },
          "type": "Encounter",
          "reference": "Encounter/7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294"
        },
        "id": "2f8b6d31-0c47-4ae9-95d2-6a1e3f70bc84",
        "identifier": [
          {
            "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--conduct-v2",
            "value": "90233",
            "use": "usual"
          },
          {
            "system": "https://www.acmesaude.com.br/integracao/conduta/",
            "value": "4471",
            "use": "usual"
          }
        ],
        "note": [
          {
            "text": "Manter hidratação e repouso."
          },
          {
            "text": "Retornar em 7 dias se não houver melhora."
          }
        ],
        "recordedDate": "2026-04-16T20:04:31+00:00",
        "verificationStatus": {
          "coding": [
            {
              "code": "provisional",
              "display": "Provisional",
              "system": "http://terminology.hl7.org/CodeSystem/condition-ver-status"
            }
          ],
          "text": "Provisional"
        }
      },
      "search": {
        "mode": "match"
      }
    }
  ],
  "link": []
}
```

> **Note**
>
> 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": []
}
```

### Parâmetros de busca suportados

| Nome                  | Tipo                                                       | Descrição                                                              | Expressão                      |
| --------------------- | ---------------------------------------------------------- | ---------------------------------------------------------------------- | ------------------------------ |
| `identifier`          | [token](https://hl7.org/fhir/R4/search.html#token)         | Identificador da condição, em `system\|value`                          | `Condition.identifier`         |
| `patient:identifier`  | [reference](https://hl7.org/fhir/R4/search.html#reference) | Paciente, pelo identificador dele                                      | `Condition.subject.identifier` |
| `patient`             | [reference](https://hl7.org/fhir/R4/search.html#reference) | Paciente, pelo `id` Nilo FHIR                                          | `Condition.subject`            |
| `subject`             | [reference](https://hl7.org/fhir/R4/search.html#reference) | O mesmo campo que `patient`, e aceita o mesmo `:identifier`            | `Condition.subject`            |
| `category`            | [token](https://hl7.org/fhir/R4/search.html#token)         | Separa os destinos: `event` ou `patient-diagnosis` no `system` da Nilo | `Condition.category`           |
| `code`                | [token](https://hl7.org/fhir/R4/search.html#token)         | Código do diagnóstico, num dos três catálogos                          | `Condition.code`               |
| `encounter`           | [reference](https://hl7.org/fhir/R4/search.html#reference) | Atendimento da condição. Aceita `:identifier`                          | `Condition.encounter`          |
| `recorder`            | [reference](https://hl7.org/fhir/R4/search.html#reference) | Profissional que registrou. Aceita `:identifier`                       | `Condition.recorder`           |
| `verification-status` | [token](https://hl7.org/fhir/R4/search.html#token)         | `provisional` traz as condutas; nos diagnósticos, o status             | `Condition.verificationStatus` |
| `clinical-status`     | [token](https://hl7.org/fhir/R4/search.html#token)         | `resolved` traz as condições encerradas                                | `Condition.clinicalStatus`     |
| `recorded-date`       | [date](https://hl7.org/fhir/R4/search.html#date)           | Data de registro, com os prefixos `eq`, `ge`, `le`                     | `Condition.recordedDate`       |
| `abatement-date`      | [date](https://hl7.org/fhir/R4/search.html#date)           | Data de encerramento. A plataforma só a produz nos eventos clínicos    | `Condition.abatementDateTime`  |
| `_lastUpdated`        | [date](https://hl7.org/fhir/R4/search.html#date)           | Data da última gravação no store, com os mesmos prefixos               | —                              |

> **Warning**
>
> Qual identificador do paciente o `subject` carrega **depende da sua implantação**. Na
> configuração que usa identificadores externos nas referências, é o identificador do seu
> sistema — e o filtro acima funciona como está. Sem ela, o `subject` traz o identificador Nilo
> do paciente (`…/NamingSystem/hippocrates-api--patient`), e é esse `system` que você tem de
> usar no filtro. Confira numa resposta de leitura qual dos dois está lá antes de montar a
> busca em volume. O mesmo vale para `recorder` e `encounter`.

> **Note**
>
> Vários parâmetros canônicos da `Condition` existem e **não encontram nada** aqui, porque a
> Nilo não preenche o campo correspondente: `asserter`, `severity`, `body-site`, `evidence`,
> `evidence-detail`, `stage`, `abatement-string`, `onset-info` e `onset-age`.
>
> `onset-date` é um caso à parte: ele só encontra as condições em que **você** enviou
> `onsetDateTime`, porque a plataforma não produz esse campo — nem nos eventos clínicos, onde o
> início da condição sai em `recordedDate`. `abatement-date` tem meia ressalva do mesmo tipo:
> fora dos eventos clínicos, ele encontra apenas as condições em que você enviou
> `abatementDateTime`.
>
> E `recorder` não encontra condutas, que são gravadas sem profissional.

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/Condition/\{id}](https://landing-zone-api.nilo.services/fhir/resources/Condition/\{id})

**`Condição encontrada`**

```curl Condição encontrada
curl https://landing-zone-api.nilo.services/fhir/resources/Condition/id \
     -H "x-api-key: <apiKey>"
```

**`Condição encontrada`**

```python Condição encontrada
import requests

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

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

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

print(response.json())
```

**`Condição encontrada`**

```javascript Condição encontrada
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Condition/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);
}
```

**`Condição encontrada`**

```go Condição encontrada
package main

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

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/Condition/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))

}
```

**`Condição encontrada`**

```ruby Condição encontrada
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/Condition/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
```

**`Condição encontrada`**

```java Condição encontrada
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/Condition/id")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Condição encontrada`**

```php Condição encontrada
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

**`Condição encontrada`**

```csharp Condição encontrada
using RestSharp;

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

**`Condição encontrada`**

```swift Condição encontrada
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/Condition/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()
```

A leitura por ID responde `404` quando o `id` não existe.

> **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 a condição está em
> `resource`. Ler `code` ou `identifier` na raiz da resposta não encontra nada.

### Response (200)

```json
{
  "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Condition/c61b5f58-32b0-477b-b75a-54e306952082",
  "resource": {
    "resourceType": "Condition",
    "subject": {
      "identifier": {
        "system": "https://www.acmesaude.com.br/integracao/paciente/",
        "value": "507823709",
        "use": "usual"
      },
      "type": "Patient",
      "reference": "Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4"
    },
    "category": [
      {
        "coding": [
          {
            "code": "encounter-diagnosis",
            "display": "Encounter Diagnosis",
            "system": "http://terminology.hl7.org/CodeSystem/condition-category"
          }
        ],
        "text": "Encounter Diagnosis"
      },
      {
        "coding": [
          {
            "code": "patient-diagnosis",
            "system": "https://landing-zone-api.nilo.services/fhir/resources/CodeSystem/condition-category"
          }
        ]
      }
    ],
    "code": {
      "coding": [
        {
          "code": "J06.9",
          "display": "Infecção aguda das vias aéreas superiores não especificada",
          "system": "http://hl7.org/fhir/sid/icd-10"
        }
      ],
      "text": "Infecção aguda das vias aéreas superiores não especificada"
    },
    "encounter": {
      "identifier": {
        "system": "https://www.acmesaude.com.br/integracao/atendimento/",
        "value": "55162",
        "use": "usual"
      },
      "type": "Encounter",
      "reference": "Encounter/7c1d4e08-52ba-4f37-9e6a-3b0d81f5c294"
    },
    "id": "c61b5f58-32b0-477b-b75a-54e306952082",
    "identifier": [
      {
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/care-api--patient-diagnosis-v3",
        "value": "412885",
        "use": "usual"
      },
      {
        "system": "https://www.acmesaude.com.br/integracao/diagnostico/",
        "value": "78901",
        "use": "usual"
      }
    ],
    "meta": {
      "lastUpdated": "2026-04-16T20:05:03.118000Z",
      "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
    },
    "recordedDate": "2026-04-16",
    "recorder": {
      "identifier": {
        "system": "https://www.acmesaude.com.br/integracao/profissional/",
        "value": "5032932",
        "use": "usual"
      },
      "type": "Practitioner",
      "reference": "Practitioner/1a9c7f52-64b8-4a3e-8d21-9f0b7c4e6d38"
    },
    "verificationStatus": {
      "coding": [
        {
          "code": "confirmed",
          "display": "Confirmed",
          "system": "http://terminology.hl7.org/CodeSystem/condition-ver-status"
        }
      ],
      "text": "Confirmed"
    }
  },
  "search": {
    "mode": "match"
  }
}
```

> **Note**
>
> Nem tudo o que você lê foi escrito por esta API. Diagnósticos, condições e condutas
> registradas pela equipe no NiloCare aparecem aqui do mesmo jeito — e são eles que trazem
> `verificationStatus` e `clinicalStatus` com o status real, e as notas de diagnóstico com
> `authorReference`.

## Valores aceitos

### Catálogos de diagnóstico

Três terminologias, e o `code` é o código do item nela: CID-10
(`http://hl7.org/fhir/sid/icd-10`), CIAP-2 (`http://hl7.org/fhir/sid/icpc-2`) e NANDA
(`http://terminology.hl7.org/CodeSystem/nanda`). Qualquer outro `system` no `coding[0]` é
recusado.

Os três são catálogos da plataforma, e o código tem de existir neles. Para descobrir o código
de um diagnóstico, leia uma condição já registrada pela plataforma e aproveite o `code` que
vier — ou peça a lista ao Suporte.

### Classificação

`category` usa dois `system`. O do FHIR,
[`condition-category`](http://terminology.hl7.org/CodeSystem/condition-category), aparece nas
leituras com o código `encounter-diagnosis` e é constante. O da Nilo,
`{host}/fhir/resources/CodeSystem/condition-category`, é o que roteia e o que identifica o
destino na leitura:

| Código              | Destino                    |
| ------------------- | -------------------------- |
| `event`             | Evento clínico             |
| `patient-diagnosis` | Diagnóstico de atendimento |

`patient-diagnosis` é devolvido nas leituras, mas **não é preciso enviá-lo**: o diagnóstico de
atendimento é o destino padrão, e um payload sem `category` nenhum chega lá.

### Situação e verificação

`clinicalStatus` usa
[`condition-clinical`](http://terminology.hl7.org/CodeSystem/condition-clinical) e
`verificationStatus` usa
[`condition-ver-status`](http://terminology.hl7.org/CodeSystem/condition-ver-status). Dos
valores do padrão, a plataforma devolve `active` e `resolved` no primeiro e `unconfirmed`,
`provisional` e `confirmed` no segundo. Na escrita, o único valor com efeito é o `provisional`
que roteia para a conduta.

## Efeitos colaterais

> **Warning**
>
> Uma conduta sem `encounter` **cria um atendimento** já finalizado no prontuário do paciente,
> para servir de suporte à conduta.

> **Warning**
>
> `verificationStatus` `provisional` **muda o tipo de registro**, não só o status. É o efeito
> colateral mais fácil de disparar sem querer: basta reenviar um diagnóstico provável que foi
> lido desta API.

> **Note**
>
> Vincular uma condição a uma hospitalização ou pronto atendimento pelo `diagnosis` do evento
> altera a condição: ela passa a pertencer àquele evento. Uma condição pertence a um evento só,
> e a segunda tentativa é recusada — veja o aviso em
> [Hospitalização](/guia/recursos/encounter-hospitalization).

> **Note**
>
> Este endpoint não remove condições: a escrita nunca responde `204`. A remoção acontece do lado
> da plataforma e é propagada para o store FHIR pela sincronização.

## Erros

Recusa é `400`, e o corpo é um `OperationOutcome`: `issue[].expression` aponta o campo culpado
e `issue[].details.text` explica o motivo. O outro código que este endpoint devolve é `409`,
quando a condição conflita com um registro já existente na plataforma.

| `code`          | `expression`           | Mensagem                                                    | Quando                                                                                                                                |
| --------------- | ---------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `not-found`     | `Condition.subject`    | `Patient does not exist`                                    | O identificador do paciente não resolve                                                                                               |
| `required`      | `Condition.recorder`   | `Field is required`                                         | Diagnóstico ou evento sem `recorder`                                                                                                  |
| `not-found`     | `Condition.recorder`   | `Professional does not exist`                               | O identificador do profissional não resolve                                                                                           |
| `not-supported` | `Condition.code`       | `Unknown diagnosis system: …`                               | `code.coding[0].system` fora dos três catálogos                                                                                       |
| `not-found`     | `Condition.code`       | `Unknown … with code: …`                                    | O código não existe no catálogo                                                                                                       |
| `not-found`     | `Condition.encounter`  | `Encounter does not exist`                                  | O identificador do atendimento não resolve, no diagnóstico ou no evento                                                               |
| `structure`     | `Condition.encounter`  | `… is not an event`                                         | Evento clínico apontando para atendimento do prontuário                                                                               |
| `invalid`       | `Condition.encounter`  | `Encounter's patient does not match the resource's patient` | Conduta nova com atendimento de outro paciente                                                                                        |
| `required`      | `Condition.identifier` | `Field is required`                                         | Conduta sem `identifier`                                                                                                              |
| `exception`     | —                      | mensagem genérica                                           | Diagnóstico ou evento sem `code`; conduta sem `note`; conduta com `encounter` que não resolve; `identifier` já usado em outro destino |

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

> **Warning**
>
> A última linha da tabela agrupa quatro situações que **não** saem como `required` nem como
> `not-found`, e sim com o `code` genérico `exception` e sem `expression`. São elas que um
> integrador tende a tratar errado: não espere um erro de campo obrigatório para `code` ausente
> nem para `note` ausente, e não espere `not-found` para um `encounter` de conduta que não
> resolve. Confira o payload antes de enviar.

## O que a integração não cobre

O status de um diagnóstico não é definível por esta API — nem na criação, nem depois. Também
não há como registrar a gravidade, o local do corpo, o estadiamento ou a evidência de uma
condição, nem adicionar uma nota a um diagnóstico já criado, nem desfazer o vínculo de uma
condição com o atendimento dela.

O diagnóstico de atendimento tem início e fim na plataforma, e esta API **não os escreve nem
os lê**: `onsetDateTime` e `abatementDateTime` só chegam ao registro no evento clínico. Um
diagnóstico com período definido pela equipe volta sem nenhuma data além do `recordedDate`.

A avaliação clínica e o exame físico do atendimento estão em
[Avaliação clínica](/guia/recursos/clinicalimpression), e a leitura consolidada das condutas de
um atendimento está em [Conduta](/guia/recursos/requestgroup). Os medicamentos e os pedidos de
exame de um atendimento têm recursos próprios.