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

# Receituário de campos

> Traduza cada campo do formulário do EMR para JSON de Smart Template e construa um template campo a campo

Você já conhece sua tela do EMR como um conjunto de **campos de formulário** — uma caixa de texto, um número, um dropdown, um checkbox. Um Smart Template é essa mesma tela expressa como JSON: cada campo vira uma propriedade no [`OutputSchema`](/scribe-api/smart-templates-output-schema) de uma seção. Esta página dá o JSON de cada tipo de campo e depois te guia a montar um template completo.

<Tip>
  Todo campo precisa de `instructions` — esse é o prompt que o modelo usa para preencher o slot. Escreva como se estivesse instruindo um escriba: *"o motivo principal da consulta, nas palavras do paciente"*.
</Tip>

## Receituário de campos

### Texto

Uma entrada de texto livre ou textarea.

```html theme={null}
<input type="text" name="chiefComplaint" />
```

```jsonc theme={null}
{
  "type": "string",
  "instructions": "Chief complaint in the patient's own words",
  "maxLength": 500
}
```

### Número

Uma entrada numérica. Use `integer` para inteiros, `number` para decimais; limite com `minimum` / `maximum`.

```html theme={null}
<input type="number" name="weightKg" min="0" max="500" />
```

```jsonc theme={null}
{
  "type": "number",
  "instructions": "Body weight in kilograms",
  "minimum": 0,
  "maximum": 500
}
```

### Seleção única (dropdown / radio)

Um `<select>` ou um grupo de radio buttons — escolha exatamente uma opção. Use `{ label, value }` para armazenar um código estável e poder renomear ou traduzir o label livremente. A geração retorna o **`value`**.

```html theme={null}
<select name="visitType">
  <option value="FIRST_VISIT">First visit</option>
  <option value="FOLLOW_UP">Follow-up</option>
</select>
```

```jsonc theme={null}
{
  "type": "string",
  "instructions": "Type of visit",
  "enum": [
    { "label": "First visit", "value": "FIRST_VISIT" },
    { "label": "Follow-up",   "value": "FOLLOW_UP" }
  ]
}
```

### Seleção múltipla (grupo de checkboxes)

Um grupo de checkboxes onde várias opções podem ser selecionadas ao mesmo tempo — um `array` cujos `items` carregam o `enum`.

```html theme={null}
<input type="checkbox" name="symptoms" value="FEVER" /> Fever
<input type="checkbox" name="symptoms" value="COUGH" /> Cough
```

```jsonc theme={null}
{
  "type": "array",
  "instructions": "All symptoms the patient reports",
  "items": {
    "type": "string",
    "enum": [
      { "label": "Fever", "value": "FEVER" },
      { "label": "Cough", "value": "COUGH" }
    ]
  }
}
```

### Sim / Não (checkbox)

Um checkbox único é um `boolean`.

```html theme={null}
<input type="checkbox" name="followUpNeeded" /> Follow-up needed
```

```jsonc theme={null}
{
  "type": "boolean",
  "instructions": "Whether a follow-up appointment is needed"
}
```

### Data e hora

Uma entrada de data ou hora — uma `string` com um `format`. O valor é retornado como ISO 8601.

```html theme={null}
<input type="date" name="visitDate" />
```

```jsonc theme={null}
{
  "type": "string",
  "instructions": "Date of the visit",
  "format": "date"
}
```

### Campo opcional

Por padrão todo campo é `required: true` (o modelo sempre produz um valor). Defina `required: false` para que retorne `null` quando o encontro não o menciona.

```jsonc theme={null}
{
  "type": "string",
  "instructions": "Secondary diagnosis, if any",
  "required": false
}
```

### Valor padrão

Combine `required: false` com `default` para garantir um fallback. Para um `enum`, o `default` deve ser um dos `value`.

```jsonc theme={null}
{
  "type": "string",
  "instructions": "Triage priority",
  "enum": [
    { "label": "Routine", "value": "ROUTINE" },
    { "label": "Urgent",  "value": "URGENT" }
  ],
  "required": false,
  "default": "ROUTINE"
}
```

## Não suportado

**Não há lógica condicional** em um Smart Template — nada de "mostrar o campo B só se o campo A for X". Keywords como `anyOf`, `if/then/else`, `pattern` e `minItems` são descartadas silenciosamente. Modele a opcionalidade com `required: false` + `default`; coloque a ramificação na camada RPA. Lista completa: [OutputSchema → Não suportado](/scribe-api/smart-templates-output-schema#não-suportado).

## Construa um template, campo a campo

<Steps>
  <Step title="Liste os campos da sua tela">
    Anote cada campo do formulário e seu tipo (texto, número, seleção, checkbox, data).
  </Step>

  <Step title="Escolha o JSON de cada um">
    Use o [receituário](#receituário-de-campos) acima para converter cada campo em um `OutputSchema`.
  </Step>

  <Step title="Agrupe-os em uma seção">
    Uma seção é um `object` cujas `properties` são seus campos — uma seção por parte do registro.

    ```jsonc theme={null}
    {
      "type": "object",
      "instructions": "Consultation summary",
      "properties": {
        "chiefComplaint": { "type": "string", "instructions": "Main complaint" },
        "followUpNeeded": { "type": "boolean", "instructions": "Follow-up needed" }
      }
    }
    ```
  </Step>

  <Step title="Anexe uma estratégia de prompt">
    Dê à seção um `telepatiaPromptId` curado, ou seu próprio `systemPrompt`. Veja [Seções](/scribe-api/smart-templates-nodes).
  </Step>

  <Step title="Crie-o e depois referencie">
    `POST /v1/medical-record-configurations` (idempotente — conteúdo idêntico retorna o mesmo `id`), depois passe `medicalRecordConfigurationId` em [`set-consultation-context`](/scribe-api/consultations).
  </Step>
</Steps>

## Receita completa: um template de prescrição

Um template completo cobrindo cada tipo de campo — texto, número, seleção única, seleção múltipla, boolean e uma data opcional com default:

```bash theme={null}
curl -X POST https://scribe-api.telepatia.ai/v1/medical-record-configurations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Prescription",
    "configuration": {
      "prescription": {
        "systemPrompt": "Extract the prescription details from the consultation.",
        "schema": {
          "type": "object",
          "instructions": "Prescription issued during the visit",
          "properties": {
            "patientName": {
              "type": "string",
              "instructions": "Full name of the patient",
              "maxLength": 200
            },
            "itemCount": {
              "type": "integer",
              "instructions": "Number of medications prescribed",
              "minimum": 0,
              "maximum": 50
            },
            "visitType": {
              "type": "string",
              "instructions": "Type of visit",
              "enum": [
                { "label": "First visit", "value": "FIRST_VISIT" },
                { "label": "Follow-up",   "value": "FOLLOW_UP" }
              ]
            },
            "medications": {
              "type": "array",
              "instructions": "Medications prescribed, with dose",
              "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" }
                }
              }
            },
            "followUpNeeded": {
              "type": "boolean",
              "instructions": "Whether a follow-up is needed"
            },
            "visitDate": {
              "type": "string",
              "instructions": "Date of the visit",
              "format": "date",
              "required": false,
              "default": "1970-01-01"
            }
          }
        }
      }
    }
  }'
```

## Próximos passos

<CardGroup cols={2}>
  <Card title="Referência do OutputSchema" icon="brackets-curly" href="/scribe-api/smart-templates-output-schema">
    Cada campo suportado, tipo por tipo.
  </Card>

  <Card title="Seções" icon="diagram-project" href="/scribe-api/smart-templates-nodes">
    Como os prompts são resolvidos por seção.
  </Card>
</CardGroup>
