> ## 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 la forma de la salida de cada campo del Smart Template

`OutputSchema` es una estructura recursiva tipo JSON-Schema que describe lo que debe retornar cada campo. Todo esquema **requiere** un campo `instructions` — así el modelo sabe qué extraer para ese slot.

<Note>
  Esta página describe el formato de **autoría** que envías al crear una plantilla. Cuando lees una
  plantilla de vuelta con `GET /v1/medical-record-configurations/{id}`, cada esquema `object` retorna
  sus `properties` como un array ordenado de entradas `{ "key": ..., "schema": ... }` — no el formato
  de mapa mostrado aquí. El contenido es idéntico; solo cambia la serialización.
</Note>

## Tipos

Estas son las **únicas** keywords que la API persiste. Cualquier otra se descarta silenciosamente — ver [No soportado](#no-soportado).

| Tipo                 | Requerido                                | 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 `format` soportados para `string`: `date-time`, `date`, `time`, `duration`, `email`, `uuid`, `ipv4`, `ipv6`. Un `string` con `format` `date`, `time` o `date-time` se retorna como un valor ISO 8601.

## Required y default

* `required` (booleano, por defecto `true`) — cuando es `false`, el campo es opcional: el modelo puede retornar `null`.
* `default` (solo campos hoja) — se sustituye cuando el modelo no extrae nada (retorna `null`). Su tipo debe coincidir con el `type` del campo; para un campo `enum` debe ser uno de los valores del enum.

**Interacción:** `default` solo aplica cuando `required` es `false`. Un campo `required: true` siempre se genera, por lo que su `default` nunca se usa. Combine `required: false` con `default` para garantizar un valor de respaldo cuando el encuentro no menciona el campo.

## No soportado

Las siguientes keywords de JSON-Schema son **aceptadas por el parser de la petición pero descartadas silenciosamente** — nunca se persisten ni afectan la generación. No dependas de ellas.

| Keyword                                                         | Usa en su lugar                                                                       |
| --------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| `anyOf`, `oneOf`, `allOf`, `not`                                | Un campo opcional: `required: false` (el modelo puede retornar `null`)                |
| `if` / `then` / `else`, `dependentRequired`, `dependentSchemas` | No hay lógica condicional. La ramificación va en la capa RPA, no en un Smart Template |
| `const`                                                         | `enum` con un único `{ label, value }`                                                |
| `pattern`, `examples`, `template`                               | Describe el formato en `instructions`                                                 |
| `exclusiveMinimum`, `exclusiveMaximum`                          | `minimum` / `maximum`                                                                 |
| `minItems`, `maxItems`                                          | — (sin límite de longitud de array)                                                   |

## Opciones de enum

`enum` (en campos `string`, incluidos los `items` de un `array` de selección múltiple) acepta dos formas:

* **Cadenas planas** — el texto mostrado *es* el valor almacenado: `"enum": ["Low", "Medium", "High"]`.
* **Objetos `{ label, value }`** — desacoplan la visualización del almacenamiento: se muestra `label`, se almacena `value` (un código estable como un id de catálogo, ICD-10 o SNOMED). La generación retorna el **`value`**; el `label` es solo para visualización, por lo que se pueden renombrar o traducir las etiquetas sin cambiar lo que recibe tu integración.

`value` debe ser único dentro de un campo. Las dos formas pueden mezclarse en una misma lista (una cadena plana se trata como `label == value`).

```jsonc theme={null}
{
  "type": "string",
  "instructions": "Tipo de visita",
  "enum": [
    { "label": "Primera visita", "value": "FIRST_VISIT" },
    { "label": "Seguimiento",    "value": "FOLLOW_UP" }
  ]
}
// el registro generado almacena "FIRST_VISIT" / "FOLLOW_UP"
```

## Límites

| Límite                                                 | Valor   |
| ------------------------------------------------------ | ------- |
| Profundidad máxima de anidación                        | 10      |
| Total máximo de propiedades                            | 5,000   |
| Caracteres máximos (nombres + valores enum combinados) | 120,000 |
| Valores enum máximos en todas las propiedades          | 1,000   |

## Ejemplo — sección 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
    }
  }
}
```

## Ejemplo — campo opcional con 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
    }
  }
}
```

## Ejemplo — arreglo de items estructurados

```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" }
    }
  }
}
```
