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

# Questionário respondido

> Consultar as respostas dos questionários aplicados a um paciente no padrão FHIR QuestionnaireResponse.

Um questionário aplicado a um paciente — de adesão ao tratamento, de sintomas, de triagem —
gera, quando respondido, um registro com as perguntas e as respostas dadas. É esse registro que
este recurso devolve: o conteúdo do que foi respondido, não o formulário em si.

No FHIR isso é a
[`QuestionnaireResponse`](https://hl7.org/fhir/R4/questionnaireresponse.html). O questionário
que serviu de base é um recurso separado, apontado pelo campo `questionnaire`.

> **Warning**
>
> **Este recurso é somente leitura.** Não existe `POST /fhir/resources/QuestionnaireResponse` —
> questionários são aplicados e respondidos dentro do NiloCare, ou pelo link que o paciente
> recebe. Veja [O que a integração não cobre](#o-que-a-integração-não-cobre) para o que acontece
> se você tentar enviá-lo mesmo assim.

## Só existe quando há resposta

> **Warning**
>
> **Um questionário sem nenhuma resposta preenchida não existe neste recurso.** Não é um recurso
> vazio, nem um `404` explicado: ele simplesmente nunca é criado, e a criação é abandonada em
> silêncio, sem erro em lugar nenhum.
>
> Vale para o questionário que ninguém abriu, para o que expirou sem resposta, e para o que só
> tem respostas em branco — resposta vazia ou composta apenas de espaços é **descartada** antes
> da contagem. Uma resposta cuja pergunta não é mais localizável é descartada do mesmo jeito, e
> também em silêncio. Se você espera um registro por questionário aplicado, vai contar menos do
> que a tela mostra.
>
> Para saber quais questionários foram **atribuídos** a um paciente, incluindo os que ele não
> respondeu, o recurso é [Tarefa](/guia/recursos/task).

## 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
é o que você esperava. São os rótulos da tela atual de questionários do paciente — uma
implantação que ainda não a recebeu mostra outra tela, com outros rótulos.

Todos os campos são de resposta — nenhum deles é enviado por você.

| Campo                         | Sempre presente     | O que significa                                                           | No NiloCare                                                                  |
| ----------------------------- | ------------------- | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| `identifier`                  | sim                 | Identificador Nilo do questionário respondido. É **um só**, não uma lista | —                                                                            |
| `status`                      | sim                 | A situação do questionário                                                | **Status** — *Pendente* · *Enviado* · *Iniciado* · *Finalizado* · *Expirado* |
| `questionnaire`               | sim                 | A URL canônica do questionário respondido. É uma URL, não o nome dele     | a URL não aparece; o nome do questionário é a coluna **Nome**                |
| `subject`                     | sim                 | A quem o questionário foi aplicado                                        | — (a tela já é a do paciente)                                                |
| `author`                      | quase sempre        | Quem registrou as respostas                                               | —                                                                            |
| `source`                      | quase sempre        | Repete o `author`, sempre com o mesmo valor                               | —                                                                            |
| `authored`                    | só quando concluído | Momento em que o questionário foi concluído                               | **Respondido em** · coluna **Data**                                          |
| `item[]`                      | sim                 | Uma entrada por pergunta respondida                                       | **Respostas**                                                                |
| `item[].linkId`               | sim                 | O identificador da pergunta — o elo com o questionário                    | —                                                                            |
| `item[].text`                 | sim                 | O enunciado da pergunta                                                   | o título da pergunta em **Respostas**                                        |
| `item[].answer[].valueString` | sim                 | A resposta dada, sempre como texto                                        | o valor em **Respostas**                                                     |
| `id`                          | sim                 | O identificador Nilo FHIR do recurso, usado na leitura por ID             | —                                                                            |
| `meta`                        | sim                 | Metadados da gravação: versão e data da última alteração                  | —                                                                            |

### Situação

`status` só assume três dos valores do FHIR, e a redução perde informação:

| No NiloCare                                            | `status`      |
| ------------------------------------------------------ | ------------- |
| **Pendente** — aplicado, ainda não enviado ao paciente | `in-progress` |
| **Enviado** — enviado, ainda não aberto                | `in-progress` |
| **Iniciado** — em preenchimento                        | `in-progress` |
| **Finalizado**                                         | `completed`   |
| **Expirado** — prazo vencido sem conclusão             | `stopped`     |

> **Warning**
>
> **`in-progress` reúne três situações diferentes**, e a API não distingue entre elas: não há como
> saber se o questionário ainda não foi enviado ao paciente, se foi enviado e não aberto, ou se
> está em preenchimento. Não trate `in-progress` como "o paciente está respondendo".
>
> Na prática você raramente verá as duas primeiras: um questionário que ninguém começou a
> responder [não existe neste recurso](#só-existe-quando-há-resposta).

> **Warning**
>
> **Um questionário concluído fora do prazo aparece como `completed`, não como `stopped`.** A
> conclusão vence o vencimento do prazo na plataforma, e é a conclusão que chega aqui. `stopped`
> descreve o questionário que expirou **sem** ser concluído.
>
> E `stopped` pode nunca aparecer: a situação de expirado é calculada pela passagem do prazo, não
> por alguém alterar o registro, e este recurso só é reescrito
> [quando o questionário respondido muda](#quando-o-registro-muda-e-quando-não-muda). Um
> questionário parcialmente respondido cujo prazo venceu continua sendo devolvido como
> `in-progress` até que algo mais aconteça com ele — e mesmo então, uma gravação em que nada do que
> esta API expõe mudou pode não ser reescrita.
>
> **Não conte com `stopped` para detectar vencimento.** E não há como calcular o vencimento por
> aqui: o prazo de resposta **não é exposto em nenhum recurso desta API** — nem neste, nem na
> [Tarefa](/guia/recursos/task), cuja origem de questionário vem sem `restriction`.

### Quem respondeu e a quem foi aplicado

São dois campos diferentes, e confundi-los é o erro mais comum deste recurso:

* **`subject`** é a quem o questionário foi aplicado.
* **`author`** é quem registrou as respostas — o próprio paciente, quando ele respondeu pelo
  link que recebeu, ou o profissional que as preencheu por ele. `type` na referência diz qual
  dos dois é.

> **Note**
>
> Sem registro de quem submeteu, `author` **repete o `subject`**: a leitura fica com os dois
> campos iguais. Isso não significa que o paciente respondeu sozinho — significa que a plataforma
> não guardou quem submeteu.
>
> `source` traz sempre o mesmo valor de `author`. Ele existe porque o FHIR o prevê, e não
> acrescenta informação nenhuma.

> **Note**
>
> `subject` é normalmente o paciente, mas nem sempre: um questionário aplicado dentro de um
> atendimento pode ter o **atendimento** como `subject`, e nesse caso a referência vem com
> `type: Encounter`. Confira o `type` antes de tratar `subject` como paciente — e veja
> [Buscar](#buscar), porque isso muda qual parâmetro encontra o registro.

### As respostas

Cada pergunta respondida vira um item de `item[]`, com o enunciado em `text`, o identificador da
pergunta em `linkId` e as respostas em `answer[]`. Uma pergunta de múltipla escolha traz uma
entrada de `answer` por opção marcada.

> **Note**
>
> **`linkId` é o elo com o questionário.** É o mesmo identificador que o item correspondente
> carrega no recurso do questionário — é por ele que você liga a resposta à pergunta original,
> com o tipo dela e as opções possíveis.

> **Warning**
>
> **Toda resposta chega como texto.** `answer[].valueString` é o único campo de valor produzido:
> data, número e sim/não saem como a mesma string que a tela mostra. Não há `valueDate`,
> `valueInteger`, `valueBoolean` nem `valueCoding` — e também não há `code` nem `system` na opção
> marcada, só o rótulo dela. Para tipar a resposta, o caminho é o tipo da pergunta no questionário,
> alcançado pelo `linkId`.

> **Note**
>
> **Opção marcada e texto digitado na mesma resposta:** quando os dois chegam gravados juntos, só o
> texto vem em `valueString` — a tela mostra os dois, separados por `·`, e aqui aparece um. Uma
> resposta do tipo *Outros — dor no ombro esquerdo* chega então apenas como
> `dor no ombro esquerdo`.
>
> Não é o caso comum. Normalmente o rótulo e o texto são duas respostas distintas, e viram **duas
> entradas de `answer[]`** no mesmo item, sem perda. O caso acima aparece em registros gravados pelo
> fluxo de resposta mais antigo — se você compara o que lê aqui com o que a tela mostra, é o
> primeiro lugar onde os dois divergem.

> **Note**
>
> **A lista de itens é plana e não está na ordem do questionário.** As seções em que as perguntas
> estão organizadas não são representadas, e a ordem de `item[]` acompanha a ordem em que a
> plataforma devolve as respostas — não a ordem das perguntas. Para exibir na ordem original,
> ordene pelo questionário, casando os `linkId`.
>
> Perguntas não respondidas não aparecem. A ausência de um `linkId` em `item[]` significa "sem
> resposta", não "pergunta inexistente".

### O questionário respondido

`questionnaire` traz a URL canônica do questionário, no formato
`{host}/fhir/resources/Questionnaire/{id}`.

> **Warning**
>
> **A canônica não é versionada.** Ela vem sem sufixo `|versão`, então aponta para o questionário
> como ele está **hoje** — e o questionário pode ter mudado depois de o paciente responder:
> perguntas reescritas, opções acrescentadas, perguntas removidas.
>
> **E `item[].text` também não é uma cópia congelada.** Ele é o enunciado lido do questionário na
> última vez que este recurso foi gravado — a plataforma permite reescrever o enunciado de uma
> pergunta **já respondida**, e a reescrita chega aqui na gravação seguinte. O mesmo vale para o
> rótulo de uma opção, que é o `valueString` das respostas de escolha.
>
> Na prática o texto fica estável enquanto o questionário respondido não muda, mas **não trate
> `item[].text` como registro do que o paciente viu.** Esta API não tem esse dado.

Para ler o questionário em si — os enunciados, os tipos de pergunta e as opções —, use a URL
que veio em `questionnaire`, tal como ela veio; não monte o caminho a partir de outro
identificador. Veja [Questionário](/guia/recursos/questionnaire):

### Request

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

**`Questionário encontrado`**

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

**`Questionário encontrado`**

```python Questionário encontrado
import requests

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

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

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

print(response.json())
```

**`Questionário encontrado`**

```javascript Questionário encontrado
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Questionnaire/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);
}
```

**`Questionário encontrado`**

```go Questionário encontrado
package main

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

func main() {

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

}
```

**`Questionário encontrado`**

```ruby Questionário encontrado
require 'uri'
require 'net/http'

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

**`Questionário encontrado`**

```java Questionário 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/Questionnaire/id")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Questionário encontrado`**

```php Questionário encontrado
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

**`Questionário encontrado`**

```csharp Questionário encontrado
using RestSharp;

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

**`Questionário encontrado`**

```swift Questionário encontrado
import Foundation

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

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

## Cadastrar ou atualizar

**Não existe.** Este recurso não tem caminho de escrita nesta API — nem para criar, nem para
atualizar, nem para apagar. Respostas de questionário nascem no NiloCare, ou no link que o
paciente recebe, e chegam aqui já prontas.

> **Warning**
>
> Um `POST /fhir/resources/QuestionnaireResponse` **não é uma operação suportada** e não devolve
> um erro de validação tratável: com um corpo válido, a chamada falha com erro inesperado do
> servidor (`500`). Não escreva tratamento em cima desse comportamento — ele não é contrato, e
> nada é gravado na plataforma de qualquer forma. Um corpo malformado responde `400` antes disso,
> pela validação do recurso — não conclua daí que a operação existe.
>
> Dentro de uma [carga em lote](https://hl7.org/fhir/R4/http.html#transaction) o erro é limpo, e
> igualmente definitivo: a entrada é recusada com
> `Resource QuestionnaireResponse not supported`.

## Buscar

### Request

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

**`Busca de questionários respondidos com resultados`**

```curl Busca de questionários respondidos com resultados
curl -G https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse \
     -H "x-api-key: <apiKey>" \
     -d _count=50 \
     -d _lastUpdated=eq2013-01-14 \
     --data-urlencode author=Practitioner/6d92f7c1-84be-4a03-91d7-5fe28b6c04a9 \
     --data-urlencode author:identifier=https://www.acmesaude.com.br/integracao/profissional/|5032932 \
     -d authored=ge2026-05-01 \
     --data-urlencode identifier=https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/inquisition-api--submission|884120 \
     --data-urlencode patient=Patient/8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13 \
     --data-urlencode patient:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709 \
     --data-urlencode questionnaire=https://landing-zone-api.nilo.services/fhir/resources/Questionnaire/1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41 \
     --data-urlencode source=Practitioner/6d92f7c1-84be-4a03-91d7-5fe28b6c04a9 \
     --data-urlencode source:identifier=https://www.acmesaude.com.br/integracao/profissional/|5032932 \
     -d status=completed \
     --data-urlencode subject=Patient/8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13 \
     --data-urlencode subject:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709
```

**`Busca de questionários respondidos com resultados`**

```python Busca de questionários respondidos com resultados
import requests

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

querystring = {"_count":"50","_lastUpdated":"[\"eq2013-01-14\"]","author":"Practitioner/6d92f7c1-84be-4a03-91d7-5fe28b6c04a9","author:identifier":"https://www.acmesaude.com.br/integracao/profissional/|5032932","authored":"ge2026-05-01","identifier":"https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/inquisition-api--submission|884120","patient":"Patient/8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13","patient:identifier":"https://www.acmesaude.com.br/integracao/paciente/|507823709","questionnaire":"https://landing-zone-api.nilo.services/fhir/resources/Questionnaire/1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41","source":"Practitioner/6d92f7c1-84be-4a03-91d7-5fe28b6c04a9","source:identifier":"https://www.acmesaude.com.br/integracao/profissional/|5032932","status":"completed","subject":"Patient/8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13","subject:identifier":"https://www.acmesaude.com.br/integracao/paciente/|507823709"}

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

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

print(response.json())
```

**`Busca de questionários respondidos com resultados`**

```javascript Busca de questionários respondidos com resultados
const url = 'https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&author=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&author%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&authored=ge2026-05-01&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--submission%7C884120&patient=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&questionnaire=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FQuestionnaire%2F1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41&source=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&source%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709';
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 questionários respondidos com resultados`**

```go Busca de questionários respondidos com resultados
package main

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

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&author=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&author%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&authored=ge2026-05-01&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--submission%7C884120&patient=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&questionnaire=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FQuestionnaire%2F1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41&source=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&source%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709"

	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 questionários respondidos com resultados`**

```ruby Busca de questionários respondidos com resultados
require 'uri'
require 'net/http'

url = URI("https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&author=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&author%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&authored=ge2026-05-01&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--submission%7C884120&patient=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&questionnaire=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FQuestionnaire%2F1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41&source=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&source%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709")

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 questionários respondidos com resultados`**

```java Busca de questionários respondidos 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/QuestionnaireResponse?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&author=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&author%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&authored=ge2026-05-01&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--submission%7C884120&patient=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&questionnaire=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FQuestionnaire%2F1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41&source=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&source%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Busca de questionários respondidos com resultados`**

```php Busca de questionários respondidos com resultados
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&author=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&author%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&authored=ge2026-05-01&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--submission%7C884120&patient=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&questionnaire=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FQuestionnaire%2F1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41&source=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&source%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

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

**`Busca de questionários respondidos com resultados`**

```csharp Busca de questionários respondidos com resultados
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&author=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&author%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&authored=ge2026-05-01&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--submission%7C884120&patient=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&questionnaire=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FQuestionnaire%2F1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41&source=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&source%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

**`Busca de questionários respondidos com resultados`**

```swift Busca de questionários respondidos com resultados
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&author=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&author%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&authored=ge2026-05-01&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--submission%7C884120&patient=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&patient%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709&questionnaire=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FQuestionnaire%2F1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41&source=Practitioner%2F6d92f7c1-84be-4a03-91d7-5fe28b6c04a9&source%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fprofissional%2F%7C5032932&status=completed&subject=Patient%2F8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13&subject%3Aidentifier=https%3A%2F%2Fwww.acmesaude.com.br%2Fintegracao%2Fpaciente%2F%7C507823709")! 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/QuestionnaireResponse/9f2c47b8-05de-4a61-b3f7-8c1e0d945a62",
      "resource": {
        "identifier": {
          "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/inquisition-api--submission",
          "value": "884120",
          "use": "usual"
        },
        "item": [
          {
            "answer": [
              {
                "valueString": "Não"
              }
            ],
            "linkId": "48219",
            "text": "Você já esqueceu de tomar o remédio para a pressão?"
          },
          {
            "answer": [
              {
                "valueString": "Sim"
              }
            ],
            "linkId": "48220",
            "text": "Quando você se sente mal, com a medicação, você deixa de tomá-la?"
          },
          {
            "answer": [
              {
                "valueString": "Tontura ao levantar"
              },
              {
                "valueString": "Cansaço no fim do dia"
              }
            ],
            "linkId": "48221",
            "text": "Quais sintomas você percebeu na última semana?"
          }
        ],
        "questionnaire": "https://landing-zone-api.nilo.services/fhir/resources/Questionnaire/1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41",
        "resourceType": "QuestionnaireResponse",
        "status": "completed",
        "subject": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
          },
          "type": "Patient",
          "reference": "Patient/8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13"
        },
        "author": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
          },
          "type": "Patient",
          "reference": "Patient/8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13"
        },
        "authored": "2026-05-30T08:58:12+00:00",
        "id": "9f2c47b8-05de-4a61-b3f7-8c1e0d945a62",
        "meta": {
          "lastUpdated": "2026-05-30T08:58:14.207000Z",
          "versionId": "MTc4NjAyMTQ1MjkwNTAwNTQxMg"
        },
        "source": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
          },
          "type": "Patient",
          "reference": "Patient/8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13"
        }
      },
      "search": {
        "mode": "match"
      }
    },
    {
      "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse/3e07b5a1-9c4d-42f8-8016-7ba2fd53c9e4",
      "resource": {
        "identifier": {
          "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/inquisition-api--submission",
          "value": "891744",
          "use": "usual"
        },
        "item": [
          {
            "answer": [
              {
                "valueString": "Ruim"
              }
            ],
            "linkId": "50143",
            "text": "Como você avalia seu sono nas últimas duas semanas?"
          }
        ],
        "questionnaire": "https://landing-zone-api.nilo.services/fhir/resources/Questionnaire/4d61e2f8-9b07-4c53-a812-6f0e5b9d327c",
        "resourceType": "QuestionnaireResponse",
        "status": "in-progress",
        "subject": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/paciente/",
            "value": "507823709",
            "use": "usual"
          },
          "type": "Patient",
          "reference": "Patient/8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13"
        },
        "author": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/profissional/",
            "value": "5032932",
            "use": "usual"
          },
          "type": "Practitioner",
          "reference": "Practitioner/6d92f7c1-84be-4a03-91d7-5fe28b6c04a9"
        },
        "id": "3e07b5a1-9c4d-42f8-8016-7ba2fd53c9e4",
        "meta": {
          "lastUpdated": "2026-06-11T17:22:41.663000Z",
          "versionId": "MTc4NjAyMTQ1MjkwNTAwNTUwMw"
        },
        "source": {
          "identifier": {
            "system": "https://www.acmesaude.com.br/integracao/profissional/",
            "value": "5032932",
            "use": "usual"
          },
          "type": "Practitioner",
          "reference": "Practitioner/6d92f7c1-84be-4a03-91d7-5fe28b6c04a9"
        }
      },
      "search": {
        "mode": "match"
      }
    }
  ],
  "link": []
}
```

> **Note**
>
> Busca sem resultados não é erro: volta `200` com um `Bundle` cujo `entry` é uma lista vazia — a
> chave vem sempre, e `link` também. 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 do questionário respondido, em `system\|value` | `QuestionnaireResponse.identifier`         |
| `patient`            | [reference](https://hl7.org/fhir/R4/search.html#reference) | Paciente, pelo `id` Nilo FHIR                                | `QuestionnaireResponse.subject`            |
| `subject`            | [reference](https://hl7.org/fhir/R4/search.html#reference) | O mesmo campo, sem restringir ao paciente                    | `QuestionnaireResponse.subject`            |
| `patient:identifier` | [reference](https://hl7.org/fhir/R4/search.html#reference) | Paciente, pelo identificador dele                            | `QuestionnaireResponse.subject.identifier` |
| `subject:identifier` | [reference](https://hl7.org/fhir/R4/search.html#reference) | O mesmo campo, sem restringir ao paciente                    | `QuestionnaireResponse.subject.identifier` |
| `author`             | [reference](https://hl7.org/fhir/R4/search.html#reference) | Quem registrou as respostas, pelo `id` Nilo FHIR             | `QuestionnaireResponse.author`             |
| `source`             | [reference](https://hl7.org/fhir/R4/search.html#reference) | O mesmo campo que `author`                                   | `QuestionnaireResponse.source`             |
| `author:identifier`  | [reference](https://hl7.org/fhir/R4/search.html#reference) | Quem registrou as respostas, pelo identificador              | `QuestionnaireResponse.author.identifier`  |
| `source:identifier`  | [reference](https://hl7.org/fhir/R4/search.html#reference) | O mesmo campo que `author:identifier`                        | `QuestionnaireResponse.source.identifier`  |
| `status`             | [token](https://hl7.org/fhir/R4/search.html#token)         | Situação. Aceita vários valores separados por vírgula        | `QuestionnaireResponse.status`             |
| `authored`           | [date](https://hl7.org/fhir/R4/search.html#date)           | Data de conclusão, com os prefixos `eq`, `ge`, `le`          | `QuestionnaireResponse.authored`           |
| `questionnaire`      | [reference](https://hl7.org/fhir/R4/search.html#reference) | Questionário respondido, pela URL canônica dele              | `QuestionnaireResponse.questionnaire`      |
| `_lastUpdated`       | [date](https://hl7.org/fhir/R4/search.html#date)           | Data da última gravação no store, com os mesmos prefixos     | —                                          |

Os questionários respondidos de um paciente pelo identificador dele — a busca mais usada deste
recurso:

```bash
curl --request GET \
  --url 'https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse?patient:identifier=https://www.acmesaude.com.br/integracao/paciente/|507823709&status=completed' \
  --header 'x-api-key: SUA_API_KEY'
```

> **Note**
>
> **As quatro referências deste recurso** — `subject`, `patient`, `author` e `source` — trazem
> `reference` **e** `identifier`, então as duas formas de busca por referência estão disponíveis em
> todas: `patient=Patient/{id}`, com o `id` Nilo FHIR, e `patient:identifier=system|valor`, com o
> identificador do paciente. A segunda é a prática, porque dispensa conhecer o `id` do store.
>
> Isso não vale para todos os recursos desta API — em
> [Avaliação clínica](/guia/recursos/clinicalimpression), por exemplo, as referências saem sem
> `reference` e só a forma com `:identifier` encontra algo.

> **Warning**
>
> **`patient` e `subject` não são intercambiáveis aqui.** No FHIR, `patient` é o mesmo campo
> `subject` restrito a pacientes — e o `subject` deste recurso
> [nem sempre é um paciente](#quem-respondeu-e-a-quem-foi-aplicado). Um questionário cujo
> `subject` é o atendimento não é encontrado por `patient`, e é por `subject` que ele aparece. Se a
> sua contagem por paciente vem menor do que a tela mostra, é o primeiro lugar a conferir.

> **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 `author` e `source`.
>
> E quando o `subject` é um **atendimento**, o identificador é o do atendimento, com o `system`
> correspondente — nem o do seu sistema nem o do paciente. Filtrar esses registros por identificador
> de paciente não os encontra de forma nenhuma.

> **Note**
>
> Alguns parâmetros canônicos da `QuestionnaireResponse` existem e **não encontram nada** aqui,
> porque a plataforma não preenche o campo correspondente: `based-on`, `part-of` e `encounter`.
>
> Repare em `encounter`: mesmo o questionário aplicado dentro de um atendimento não preenche esse
> campo — o atendimento, quando aparece, aparece em `subject`.
>
> Não há parâmetro que procure dentro das respostas: nem pelo texto de `item[].text`, nem pelo
> valor de `answer[].valueString`, nem pelo `linkId`. Filtrar por conteúdo respondido é trabalho
> do seu lado, depois de ler o recurso.

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

**`Questionário respondido encontrado`**

```curl Questionário respondido encontrado
curl https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse/id \
     -H "x-api-key: <apiKey>"
```

**`Questionário respondido encontrado`**

```python Questionário respondido encontrado
import requests

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

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

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

print(response.json())
```

**`Questionário respondido encontrado`**

```javascript Questionário respondido encontrado
const url = 'https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse/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);
}
```

**`Questionário respondido encontrado`**

```go Questionário respondido encontrado
package main

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

func main() {

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

}
```

**`Questionário respondido encontrado`**

```ruby Questionário respondido encontrado
require 'uri'
require 'net/http'

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

**`Questionário respondido encontrado`**

```java Questionário respondido 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/QuestionnaireResponse/id")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Questionário respondido encontrado`**

```php Questionário respondido encontrado
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

**`Questionário respondido encontrado`**

```csharp Questionário respondido encontrado
using RestSharp;

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

**`Questionário respondido encontrado`**

```swift Questionário respondido encontrado
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse/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 questionário respondido
> está em `resource`. Ler `status` ou `item` na raiz da resposta não encontra nada.

### Response (200)

```json
{
  "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/QuestionnaireResponse/9f2c47b8-05de-4a61-b3f7-8c1e0d945a62",
  "resource": {
    "identifier": {
      "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/inquisition-api--submission",
      "value": "884120",
      "use": "usual"
    },
    "item": [
      {
        "answer": [
          {
            "valueString": "Não"
          }
        ],
        "linkId": "48219",
        "text": "Você já esqueceu de tomar o remédio para a pressão?"
      },
      {
        "answer": [
          {
            "valueString": "Sim"
          }
        ],
        "linkId": "48220",
        "text": "Quando você se sente mal, com a medicação, você deixa de tomá-la?"
      },
      {
        "answer": [
          {
            "valueString": "Tontura ao levantar"
          },
          {
            "valueString": "Cansaço no fim do dia"
          }
        ],
        "linkId": "48221",
        "text": "Quais sintomas você percebeu na última semana?"
      }
    ],
    "questionnaire": "https://landing-zone-api.nilo.services/fhir/resources/Questionnaire/1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41",
    "resourceType": "QuestionnaireResponse",
    "status": "completed",
    "subject": {
      "identifier": {
        "system": "https://www.acmesaude.com.br/integracao/paciente/",
        "value": "507823709",
        "use": "usual"
      },
      "type": "Patient",
      "reference": "Patient/8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13"
    },
    "author": {
      "identifier": {
        "system": "https://www.acmesaude.com.br/integracao/paciente/",
        "value": "507823709",
        "use": "usual"
      },
      "type": "Patient",
      "reference": "Patient/8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13"
    },
    "authored": "2026-05-30T08:58:12+00:00",
    "id": "9f2c47b8-05de-4a61-b3f7-8c1e0d945a62",
    "meta": {
      "lastUpdated": "2026-05-30T08:58:14.207000Z",
      "versionId": "MTc4NjAyMTQ1MjkwNTAwNTQxMg"
    },
    "source": {
      "identifier": {
        "system": "https://www.acmesaude.com.br/integracao/paciente/",
        "value": "507823709",
        "use": "usual"
      },
      "type": "Patient",
      "reference": "Patient/8b1d0e94-6a37-4c52-9f81-2ad7e6c40b13"
    }
  },
  "search": {
    "mode": "match"
  }
}
```

A leitura por ID responde `404` quando o `id` não existe — inclusive quando o registro existia e
foi apagado na plataforma.

## Quando o registro muda, e quando não muda

É a seção mais importante desta página depois da primeira, porque o que se lê aqui pode estar
atrasado em relação à plataforma — e o motivo não é latência.

> **Warning**
>
> **Este recurso é reescrito quando o *questionário respondido* muda — não quando uma resposta
> muda.** O que dispara a regravação são os acontecimentos do questionário como um todo: ele ser
> enviado ao paciente, ser iniciado, ser concluído, ser apagado. Editar ou apagar **respostas** sem
> que nada disso aconteça não reescreve nada aqui.
>
> Consequência prática: entre duas dessas mudanças, o conteúdo de `item[]` é o da **última
> gravação**, não o que está na plataforma agora. Uma correção feita numa resposta já dada só
> aparece quando o questionário respondido mudar de novo — o que, num questionário já concluído,
> pode ser nunca.

> **Note**
>
> Nem toda mudança do questionário respondido chega a reescrever o recurso: uma gravação em que
> nada do que esta API expõe mudou é dispensada. Você não precisa fazer nada com isso — é a razão
> pela qual `meta.lastUpdated` pode ficar para trás da última alteração feita na plataforma.

> **Warning**
>
> **Apagar o questionário respondido no NiloCare remove o recurso do store.** Não há mudança de
> `status` nem marca de exclusão: o `id` que você leu com sucesso passa a responder `404`, sem
> aviso. Se você guarda o conteúdo de uma resposta, guarde o conteúdo — não o `id`.

> **Warning**
>
> **Esvaziar todas as respostas nunca apaga o que já foi gravado.** Se uma regravação chegar a
> acontecer com todas as respostas em branco, ela é abandonada — um questionário sem resposta válida
> [não é sincronizado](#só-existe-quando-há-resposta) — e o que estava gravado **permanece**, com as
> respostas antigas. Para fazer o registro desaparecer, o caminho é apagar o questionário
> respondido, não esvaziá-lo.
>
> Isso vale para o conjunto vazio, não para uma resposta a menos: numa regravação em que sobrou pelo
> menos uma resposta, `item[]` é substituído inteiro e o item apagado desaparece.

> **Note**
>
> Nos campos fora de `item[]`, a gravação preserva o valor anterior quando o novo é vazio — então
> `author`, `source` e `authored` **não voltam a ficar em branco** depois de preenchidos uma vez.
> Removido o registro de quem submeteu, a leitura continua devolvendo o `author` antigo
> indefinidamente.

## Erros

Este recurso só tem leitura, então a lista é curta:

| Situação                           | Código | O que fazer                                                                   |
| ---------------------------------- | ------ | ----------------------------------------------------------------------------- |
| `id` inexistente na leitura por ID | `404`  | O registro não existe, ou foi apagado na plataforma                           |
| Parâmetro de busca inválido        | `400`  | Confira o nome do parâmetro e o formato do valor                              |
| `POST` neste recurso               | `500`  | A operação não existe. Veja [Cadastrar ou atualizar](#cadastrar-ou-atualizar) |

> **Note**
>
> Os erros de busca deste recurso vêm do store, não de validação de negócio: não há regra de
> domínio a violar numa leitura. Uma busca bem formada que não encontra nada responde `200` com
> `Bundle` vazio, nunca um erro.

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

Não há escrita: nem criar, nem atualizar, nem apagar uma resposta, nem responder um questionário
por integração.

E vários dados que a plataforma guarda **não têm campo aqui**:

* a **pontuação** e a **classificação** do questionário respondido — o que a tela mostra em
  **Classificação** é calculado pela plataforma e não é exposto, nem por resposta nem no total;
* os **resultados e condutas** derivados das respostas, que a tela mostra em *Resultados e
  condutas*;
* quem **aplicou** o questionário, que a tela mostra em **Aplicado por**. Não confunda com
  `author`, que é quem *registrou as respostas*;
* a data em que o questionário foi **aplicado** (a tela mostra **Aplicado em**), o momento em que
  o paciente **começou** a responder, e o **prazo** de resposta. Só a conclusão é exposta, em
  `authored`;
* a **versão** do questionário que o paciente respondeu — a canônica em `questionnaire` aponta
  para a versão atual;
* as **seções** do questionário, e a ordem original das perguntas;
* o **tipo** de cada pergunta e as **opções possíveis** — isso está no questionário, alcançável
  pelo `linkId`;
* o **código** da opção marcada: só o rótulo dela chega, em texto.

Para saber quais questionários foram atribuídos a um paciente — inclusive os não respondidos — o
recurso é [Tarefa](/guia/recursos/task): o `output[]` dela aponta para o questionário e para a
resposta dele. O **prazo** de resposta não está lá tampouco: a origem de questionário da `Task`
vem sem `restriction`.