> ## Documentation Index
> Fetch the complete documentation index at: https://docs.telepatia.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# OutputSchema

> Defina o formato da saída de cada campo de um Smart Template

`OutputSchema` é uma estrutura recursiva tipo JSON-Schema que descreve o que cada campo deve retornar. Todo schema **exige** o campo `instructions` — é assim que o modelo sabe o que extrair para aquele slot.

<Note>
  Esta página descreve o formato de **autoria** que você envia ao criar um template. Quando você lê um
  template de volta com `GET /v1/medical-record-configurations/{id}`, cada schema `object` retorna suas
  `properties` como um array ordenado de entradas `{ "key": ..., "schema": ... }` — não o formato de
  mapa mostrado aqui. O conteúdo é idêntico; só muda a serialização.
</Note>

## Tipos

Estas são as **únicas** keywords que a API persiste. Qualquer outra é descartada silenciosamente — veja [Não suportado](#não-suportado).

| Tipo                 | Obrigatório                              | Opcional                                                          |
| -------------------- | ---------------------------------------- | ----------------------------------------------------------------- |
| `string`             | `instructions`                           | `enum`, `format`, `minLength`, `maxLength`, `required`, `default` |
| `number` / `integer` | `instructions`                           | `minimum`, `maximum`, `enum`, `required`, `default`               |
| `boolean`            | `instructions`                           | `required`, `default`                                             |
| `object`             | `instructions`, `properties` (recursivo) | `required`                                                        |
| `array`              | `instructions`, `items` (recursivo)      | `required`                                                        |

Valores de `format` suportados para `string`: `date-time`, `date`, `time`, `duration`, `email`, `uuid`, `ipv4`, `ipv6`. Uma `string` com `format` `date`, `time` ou `date-time` é retornada como um valor ISO 8601.

## Required e default

* `required` (booleano, padrão `true`) — quando `false`, o campo é opcional: o modelo pode retornar `null`.
* `default` (apenas campos folha) — substituído quando o modelo não extrai nada (retorna `null`). Seu tipo deve corresponder ao `type` do campo; para um campo `enum` deve ser um dos valores do enum.

**Interação:** `default` só tem efeito quando `required` é `false`. Um campo `required: true` é sempre gerado, então seu `default` nunca é aplicado. Combine `required: false` com `default` para garantir um valor de fallback quando o encontro não menciona o campo.

## Não suportado

As seguintes keywords de JSON-Schema são **aceitas pelo parser da requisição mas descartadas silenciosamente** — nunca são persistidas nem afetam a geração. Não dependa delas.

| Keyword                                                         | Use no lugar                                                                       |
| --------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| `anyOf`, `oneOf`, `allOf`, `not`                                | Um campo opcional: `required: false` (o modelo pode retornar `null`)               |
| `if` / `then` / `else`, `dependentRequired`, `dependentSchemas` | Sem lógica condicional. A ramificação fica na camada RPA, não em um Smart Template |
| `const`                                                         | `enum` com um único `{ label, value }`                                             |
| `pattern`, `examples`, `template`                               | Descreva o formato em `instructions`                                               |
| `exclusiveMinimum`, `exclusiveMaximum`                          | `minimum` / `maximum`                                                              |
| `minItems`, `maxItems`                                          | — (sem limite de tamanho de array)                                                 |

## Opções de enum

`enum` (em campos `string`, incluindo os `items` de um `array` de seleção múltipla) aceita duas formas:

* **Strings simples** — o texto exibido *é* o valor armazenado: `"enum": ["Low", "Medium", "High"]`.
* **Objetos `{ label, value }`** — desacoplam a exibição do armazenamento: mostra-se `label`, armazena-se `value` (um código estável como um id de catálogo, ICD-10 ou SNOMED). A geração retorna o **`value`**; o `label` é apenas para exibição, então os rótulos podem ser renomeados ou traduzidos sem alterar o que sua integração recebe.

`value` deve ser único dentro de um campo. As duas formas podem ser misturadas em uma mesma lista (uma string simples é tratada como `label == value`).

```jsonc theme={null}
{
  "type": "string",
  "instructions": "Tipo de consulta",
  "enum": [
    { "label": "Primeira consulta", "value": "FIRST_VISIT" },
    { "label": "Retorno",           "value": "FOLLOW_UP" }
  ]
}
// o registro gerado armazena "FIRST_VISIT" / "FOLLOW_UP"
```

## Limites

| Limite                                               | Valor   |
| ---------------------------------------------------- | ------- |
| Profundidade máxima de aninhamento                   | 10      |
| Total máximo de propriedades                         | 5.000   |
| Caracteres máximos (nomes + valores enum combinados) | 120.000 |
| Valores enum máximos somando todas as propriedades   | 1.000   |

## Exemplo — seção objeto

```jsonc theme={null}
{
  "type": "object",
  "instructions": "Patient vitals",
  "properties": {
    "bloodPressure": {
      "type": "string",
      "instructions": "Systolic/diastolic in mmHg, e.g. 120/80",
      "maxLength": 7
    },
    "heartRate": {
      "type": "integer",
      "instructions": "Beats per minute",
      "minimum": 20,
      "maximum": 300
    }
  }
}
```

## Exemplo — campo opcional com default

```jsonc theme={null}
{
  "type": "object",
  "instructions": "Symptoms",
  "properties": {
    "fever": {
      "type": "number",
      "instructions": "Maximum measured temperature in °C",
      "minimum": 30,
      "maximum": 45,
      "required": false,
      "default": 37
    }
  }
}
```

## Exemplo — array de itens estruturados

```jsonc theme={null}
{
  "type": "array",
  "instructions": "List of medications mentioned",
  "items": {
    "type": "object",
    "instructions": "One medication entry",
    "properties": {
      "name": { "type": "string", "instructions": "Generic or brand name" },
      "dose": { "type": "string", "instructions": "Dose with unit, e.g. 500 mg" }
    }
  }
}
```
