> 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

> Consultar os questionários do seu ambiente, com as perguntas e as opções de resposta, no padrão FHIR Questionnaire.

Um **questionário** é o formulário que a equipe monta no Nilo Care e aplica ao paciente: a
lista de perguntas, o tipo de cada uma e as opções de resposta. É o molde; o que o paciente
respondeu é o [questionário respondido](/guia/recursos/questionnaireresponse).

No FHIR o recurso é o
[`Questionnaire`](https://hl7.org/fhir/R4/questionnaire.html), e ele existe aqui sobretudo
para uma coisa: **resolver a canônica** que cada resposta carrega em `questionnaire`, e assim
descobrir o enunciado de cada pergunta.

> **Warning**
>
> **Este recurso é somente leitura.** Não existe `POST /fhir/resources/Questionnaire` — os
> questionários são montados pela equipe no Nilo Care, e não há como criá-los ou alterá-los por
> esta API.

## Campos

A coluna **No Nilo Care** traz o rótulo com que o dado aparece para a equipe; são rótulos, não
caminhos de navegação. Todos os campos são de resposta — nenhum deles é enviado por você.

| Campo            | Sempre presente | O que significa                                                                                 | No Nilo Care                                                |
| ---------------- | --------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
| `resourceType`   | sim             | Constante `Questionnaire`                                                                       | —                                                           |
| `identifier`     | sim             | Identificador Nilo do questionário, no `system` `…/NamingSystem/inquisition-api--questionnaire` | —                                                           |
| `status`         | sim             | `draft`, `active`, `retired` ou `unknown`                                                       | a situação do questionário                                  |
| `name`           | sim             | Nome do questionário                                                                            | **Nome**, na lista; **Nome do questionário**, no construtor |
| `title`          | sim             | Repete o `name`                                                                                 | idem                                                        |
| `description`    | não             | Descrição do questionário                                                                       | **Descrição**                                               |
| `date`           | sim             | Data e hora da última alteração                                                                 | **Data atualização**                                        |
| `lastReviewDate` | sim             | A mesma data da última alteração, **sem a hora**                                                | **Data atualização**                                        |
| `approvalDate`   | não             | Data em que o questionário foi publicado, **sem a hora**                                        | **Data publicação**                                         |
| `subjectType`    | sim             | Constante — e **errada**; veja o aviso                                                          | —                                                           |
| `item[]`         | não             | Uma entrada por pergunta                                                                        | as perguntas do formulário                                  |
| `id` · `meta`    | sim             | Identificador Nilo FHIR do recurso e metadados da gravação                                      | —                                                           |

> **Note**
>
> `name` e `title` trazem **o mesmo texto**. O FHIR distingue nome técnico de título de
> exibição; a plataforma tem só um nome, e ele é copiado para os dois campos.
>
> `date` e `lastReviewDate` vêm da mesma data — a da última alteração do questionário —, mas
> **não no mesmo formato**: o FHIR tipa `lastReviewDate` como data pura, então a hora se perde
> ali e fica só em `date`. `approvalDate` também é data pura. Não há revisão registrada à parte.

> **Warning**
>
> **`subjectType` vem com o valor `Questionnaire`, e isso não faz sentido.** No FHIR o campo diz
> a que tipo de recurso o questionário se aplica — o valor correto seria `Patient`. Ignore este
> campo: ele não carrega informação e não deve ser usado para nada.

### `status`

| Valor     | Situação na plataforma                                |
| --------- | ----------------------------------------------------- |
| `draft`   | Rascunho, ainda não publicado                         |
| `active`  | Publicado e disponível para aplicação                 |
| `retired` | Despublicado, ou substituído por uma versão mais nova |
| `unknown` | Valor de reserva do FHIR — na prática não ocorre      |

Na tela, os quatro estados aparecem como **Rascunho**, **Publicado**, **Não publicado** e
**Desatualizado** — ou, numa implantação que ainda usa a lista antiga, **Rascunho**, **Ativo**,
**Inativo** e **Desatualizado**.

> **Note**
>
> `retired` junta duas coisas diferentes — o questionário que a equipe tirou do ar (*Não
> publicado*) e o que foi substituído por uma versão mais nova (*Desatualizado*). Não há campo
> que distinga um do outro, nem que aponte para a versão que substituiu.

## As perguntas

Cada pergunta do questionário vira um item de `item[]`, com três campos — o `linkId`, o
enunciado em `text` e o tipo em `type` — mais as opções, nas perguntas de escolha.

> **Note**
>
> **`linkId` é a chave para casar pergunta e resposta.** É o mesmo valor que aparece em
> `item[].linkId` do [questionário respondido](/guia/recursos/questionnaireresponse). Lendo os
> dois recursos, é por ele que você liga o enunciado à resposta do paciente.

### Tipos de pergunta

| `type`   | Tipo na plataforma                        |
| -------- | ----------------------------------------- |
| `choice` | Escolha única, escolha múltipla e sim/não |
| `string` | Texto curto                               |
| `text`   | Texto longo                               |

> **Warning**
>
> **`choice` não distingue escolha única de escolha múltipla.** Os dois tipos saem iguais, e não
> há campo que diga quantas opções o paciente podia marcar. Se isso importa para a sua
> integração, o dado não está nesta API.

> **Warning**
>
> **Seis outros tipos de pergunta caem todos em `text`.** Escala, data, numérica, e-mail,
> telefone e os blocos de texto informativo — que nem aceitam resposta — saem todos com
> `type: text`, indistinguíveis de uma pergunta de texto longo.
>
> A pergunta de **escala** é o caso mais confuso: ela tem opções, e elas vêm em `answerOption`.
> Ou seja, um `type: text` **com** `answerOption` é sinal de que o tipo original se perdeu; um
> sem opções pode ser texto longo ou qualquer um dos demais.

### As opções de resposta

Nas perguntas de escolha, cada opção vira um item de `answerOption`, com o rótulo em
`valueString`.

> **Warning**
>
> **Opções de campo aberto não entram na lista.** Uma pergunta com a opção *Outro (especifique)*
> aparece aqui **sem** ela: o `answerOption` traz só as opções fechadas, e o total de opções que
> você lê é menor do que o que o paciente viu.
>
> É o outro lado de um comportamento do [questionário respondido](/guia/recursos/questionnaireresponse): quando o paciente escolhe uma opção aberta
> e digita algo, a resposta traz o texto digitado, e não um rótulo que exista aqui. Não trate a
> resposta como um valor que tem de estar em `answerOption`.

> **Note**
>
> `answerOption` traz só o rótulo. A **pontuação** de cada opção, que a plataforma usa para
> calcular o resultado do questionário, não é exposta — nem aqui nem no questionário respondido.

### O que `item[]` não representa

A lista de perguntas é **plana**: as **seções** do formulário não existem no recurso, e
perguntas de seções diferentes vêm num nível só. Não há como reconstruir onde uma seção termina
e a outra começa.

> **Note**
>
> A **ordem**, essa sim, é a da tela: as perguntas vêm na ordem das seções e, dentro de cada
> seção, na ordem em que foram montadas. É por isso que dá para ordenar as respostas de um
> paciente por aqui — veja
> [Questionário respondido](/guia/recursos/questionnaireresponse).

> **Warning**
>
> Num questionário que veio de uma **sincronização externa** e já foi ressincronizado, `item[]`
> pode trazer perguntas de versões anteriores junto com as atuais — enunciados repetidos, com
> `linkId` diferentes. Case sempre pelo `linkId` que veio na resposta do paciente, e não conte os
> itens para saber o tamanho do formulário.

Também não têm campo aqui: se a pergunta é **obrigatória**, a **descrição** dela, a
**pontuação** das opções e a **escala** de resultado do questionário.

## Buscar

### Request

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

**`Busca com resultados`**

```curl Busca com resultados
curl -G https://landing-zone-api.nilo.services/fhir/resources/Questionnaire \
     -H "x-api-key: <apiKey>" \
     -d _count=50 \
     -d _lastUpdated=eq2013-01-14 \
     -d date=ge2026-01-01 \
     --data-urlencode "description=saúde mental" \
     --data-urlencode identifier=https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/inquisition-api--questionnaire|2071 \
     -d status=active \
     -d title=Rastreio
```

**`Busca com resultados`**

```python Busca com resultados
import requests

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

querystring = {"_count":"50","_lastUpdated":"[\"eq2013-01-14\"]","date":"ge2026-01-01","description":"saúde mental","identifier":"https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/inquisition-api--questionnaire|2071","status":"active","title":"Rastreio"}

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

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

print(response.json())
```

**`Busca com resultados`**

```javascript Busca com resultados
const url = 'https://landing-zone-api.nilo.services/fhir/resources/Questionnaire?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=ge2026-01-01&description=sa%C3%BAde+mental&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--questionnaire%7C2071&status=active&title=Rastreio';
const options = {method: 'GET', headers: {'x-api-key': '<apiKey>'}};

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

**`Busca com resultados`**

```go Busca com resultados
package main

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

func main() {

	url := "https://landing-zone-api.nilo.services/fhir/resources/Questionnaire?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=ge2026-01-01&description=sa%C3%BAde+mental&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--questionnaire%7C2071&status=active&title=Rastreio"

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

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

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

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

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

}
```

**`Busca com resultados`**

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

url = URI("https://landing-zone-api.nilo.services/fhir/resources/Questionnaire?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=ge2026-01-01&description=sa%C3%BAde+mental&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--questionnaire%7C2071&status=active&title=Rastreio")

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

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

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

**`Busca com resultados`**

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

HttpResponse<String> response = Unirest.get("https://landing-zone-api.nilo.services/fhir/resources/Questionnaire?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=ge2026-01-01&description=sa%C3%BAde+mental&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--questionnaire%7C2071&status=active&title=Rastreio")
  .header("x-api-key", "<apiKey>")
  .asString();
```

**`Busca com resultados`**

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://landing-zone-api.nilo.services/fhir/resources/Questionnaire?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=ge2026-01-01&description=sa%C3%BAde+mental&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--questionnaire%7C2071&status=active&title=Rastreio', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

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

**`Busca com resultados`**

```csharp Busca com resultados
using RestSharp;

var client = new RestClient("https://landing-zone-api.nilo.services/fhir/resources/Questionnaire?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=ge2026-01-01&description=sa%C3%BAde+mental&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--questionnaire%7C2071&status=active&title=Rastreio");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

**`Busca com resultados`**

```swift Busca com resultados
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://landing-zone-api.nilo.services/fhir/resources/Questionnaire?_count=50&_lastUpdated=%5B%22eq2013-01-14%22%5D&date=ge2026-01-01&description=sa%C3%BAde+mental&identifier=https%3A%2F%2Flanding-zone-api.nilo.services%2Ffhir%2Fresources%2FNamingSystem%2Finquisition-api--questionnaire%7C2071&status=active&title=Rastreio")! 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/Questionnaire/1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41",
      "resource": {
        "resourceType": "Questionnaire",
        "identifier": [
          {
            "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/inquisition-api--questionnaire",
            "value": "2071",
            "use": "usual"
          }
        ],
        "name": "Rastreio de sintomas depressivos",
        "title": "Rastreio de sintomas depressivos",
        "status": "active",
        "subjectType": [
          "Questionnaire"
        ],
        "date": "2026-02-11T14:07:32+00:00",
        "id": "1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41",
        "meta": {
          "lastUpdated": "2026-02-11T14:07:33.201000Z",
          "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
        },
        "description": "Aplicado a cada três meses aos pacientes da linha de saúde mental.",
        "lastReviewDate": "2026-02-11",
        "approvalDate": "2025-11-04",
        "item": [
          {
            "linkId": "80431",
            "type": "choice",
            "text": "Nas últimas duas semanas, com que frequência você se sentiu para baixo?",
            "answerOption": [
              {
                "valueString": "Nenhuma vez"
              },
              {
                "valueString": "Vários dias"
              },
              {
                "valueString": "Mais da metade dos dias"
              },
              {
                "valueString": "Quase todos os dias"
              }
            ]
          },
          {
            "linkId": "80432",
            "type": "text",
            "text": "Você gostaria de comentar alguma coisa?"
          }
        ]
      },
      "search": {
        "mode": "match"
      }
    }
  ],
  "link": []
}
```

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

### Response (200)

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

### 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, em `system\|value`                  | `Questionnaire.identifier`  |
| `status`       | [token](https://hl7.org/fhir/R4/search.html#token)   | `draft`, `active`, `retired` ou `unknown`                          | `Questionnaire.status`      |
| `title`        | [string](https://hl7.org/fhir/R4/search.html#string) | Nome do questionário, casando pelo **início**                      | `Questionnaire.title`       |
| `description`  | [string](https://hl7.org/fhir/R4/search.html#string) | Descrição do questionário                                          | `Questionnaire.description` |
| `date`         | [date](https://hl7.org/fhir/R4/search.html#date)     | Data da última alteração, com os prefixos `eq`, `ge`, `le`         | `Questionnaire.date`        |
| `_lastUpdated` | [date](https://hl7.org/fhir/R4/search.html#date)     | Data da última gravação no store, com os prefixos `eq`, `ge`, `le` | —                           |

> **Note**
>
> `name` também é um parâmetro canônico do `Questionnaire`, e aqui ele encontra o mesmo que
> `title` — os dois campos trazem o mesmo texto.
>
> Os demais parâmetros canônicos existem e **não encontram nada**, porque a plataforma não
> preenche o campo correspondente: `version`, `url`, `publisher`, `context`, `jurisdiction`,
> `code`, `definition` e `effective`. Repare em `url`: este recurso **não tem** `url` canônica —
> a canônica que a resposta do paciente carrega é montada a partir do `id`.

> **Note**
>
> `subject-type` é a exceção: ele **encontra**, e encontra errado. Como o campo é sempre a
> constante `Questionnaire`, `subject-type=Questionnaire` devolve tudo e `subject-type=Patient`
> não devolve nada. Não é filtro útil.

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

> **Note**
>
> Há um segundo caminho para chegar a um questionário: a [Tarefa](/guia/recursos/task). O item
> `questionnaire` de `output[]` traz o **identificador** do questionário, não a canônica — então
> o caminho é buscar por `identifier=…|{valor}`, e não ler por `id`.

## Ler por ID

É este o caminho que a canônica do
[questionário respondido](/guia/recursos/questionnaireresponse) aponta. Use a URL que veio no
campo `questionnaire` da resposta, tal como ela veio.

### 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()
```

> **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 está em
> `resource`. Ler `item` na raiz da resposta não encontra nada.

### Response (200)

```json
{
  "fullUrl": "https://landing-zone-api.nilo.services/fhir/resources/Questionnaire/1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41",
  "resource": {
    "resourceType": "Questionnaire",
    "identifier": [
      {
        "system": "https://landing-zone-api.nilo.services/fhir/resources/NamingSystem/inquisition-api--questionnaire",
        "value": "2071",
        "use": "usual"
      }
    ],
    "name": "Rastreio de sintomas depressivos",
    "title": "Rastreio de sintomas depressivos",
    "status": "active",
    "subjectType": [
      "Questionnaire"
    ],
    "date": "2026-02-11T14:07:32+00:00",
    "id": "1c8b34a7-6e02-4f95-a3d1-b7c5e0286f41",
    "meta": {
      "lastUpdated": "2026-02-11T14:07:33.201000Z",
      "versionId": "MTc4NjAyMTQ1MjkwNTAwMDM2Nw"
    },
    "lastReviewDate": "2026-02-11",
    "approvalDate": "2025-11-04",
    "item": [
      {
        "linkId": "80431",
        "type": "choice",
        "text": "Nas últimas duas semanas, com que frequência você se sentiu para baixo?",
        "answerOption": [
          {
            "valueString": "Nenhuma vez"
          },
          {
            "valueString": "Vários dias"
          },
          {
            "valueString": "Mais da metade dos dias"
          },
          {
            "valueString": "Quase todos os dias"
          }
        ]
      }
    ]
  },
  "search": {
    "mode": "match"
  }
}
```

> **Warning**
>
> **A canônica não é versionada.** O que você lê por aqui é o questionário como ele está
> **hoje** — perguntas podem ter sido reescritas, acrescentadas ou removidas depois de o paciente
> responder.
>
> Casando `linkId` entre o questionário e uma resposta antiga, pode não haver correspondência:
> uma pergunta removida some daqui e continua na resposta. Trate a ausência como "pergunta que
> não existe mais", não como erro.

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

> **Warning**
>
> Um `POST /fhir/resources/Questionnaire` **não é uma operação suportada** e não devolve um erro
> de validação tratável: a chamada falha com erro inesperado do servidor (`500`). Não escreva
> tratamento em cima desse comportamento — ele não é contrato, e nada é gravado de qualquer
> forma.
>
> 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 Questionnaire not supported`.

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

Além da escrita, vários dados que a plataforma guarda **não têm campo aqui**:

* as **seções** do formulário (a ordem das perguntas, essa, é preservada);
* se a pergunta é **obrigatória**, e a **descrição** dela;
* a **pontuação** de cada opção e a **escala** de resultado do questionário;
* as opções de **campo aberto**;
* a distinção entre **escolha única** e **escolha múltipla**, e os seis tipos de pergunta que
  caem em `text`;
* a **versão** do questionário — não há histórico de versões deste recurso, e a canônica aponta
  sempre para o estado atual.

Para o que o paciente respondeu, veja
[Questionário respondido](/guia/recursos/questionnaireresponse); para o questionário
atribuído a um paciente como tarefa, [Tarefa](/guia/recursos/task).