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

# Tipos y configuración de campos

> Propiedades requeridas y opcionales para definir cada tipo de campo.

Esta página describe el esquema que envías al [crear](/tableros/crear-campo) o [actualizar](/tableros/actualizar-campo) un campo. Para escribir datos, consulta [Valores por tipo de campo](/tableros/valores-por-tipo).

## Referencia rápida

| `type`                              | Configuración requerida                                      | Configuración opcional                            |
| ----------------------------------- | ------------------------------------------------------------ | ------------------------------------------------- |
| `string`                            | —                                                            | —                                                 |
| `number`                            | —                                                            | `numberFormat`                                    |
| `boolean`                           | —                                                            | —                                                 |
| `date`                              | —                                                            | `dateConfig`                                      |
| `enum`, `enum_multi`                | `options`                                                    | —                                                 |
| `relation_single`, `relation_multi` | `toDatabaseId`                                               | `displayFieldId`, `bidirectional`, `inverseField` |
| `contact_single`, `contact_multi`   | —                                                            | `displayFieldId`                                  |
| `lookup`                            | `relationFieldId`, `targetFieldId`, `multipleValuesBehavior` | —                                                 |
| `files`                             | —                                                            | `maxFiles`, `accept`                              |

`string` y `boolean` no tienen configuración específica.

## Número

`numberFormat` cambia la presentación, no el valor almacenado.

| Propiedad            | Requerido            | Valores                                                               |
| -------------------- | -------------------- | --------------------------------------------------------------------- |
| `type`               | Sí                   | `none`, `currency` o `percent`                                        |
| `currencyCode`       | Solo para `currency` | `USD`, `EUR`, `MXN`, `BRL`, `ARS`, `COP`, `CLP`, `PEN`, `UYU` o `GTQ` |
| `decimalPlaces`      | No                   | Entero de `0` a `6`; default: `2`                                     |
| `thousandsSeparator` | No                   | `boolean`; default: `true`                                            |

<Tabs>
  <Tab title="Número">
    ```json theme={null}
    {
      "name": "Cantidad",
      "key": "cantidad",
      "type": "number",
      "numberFormat": {
        "type": "none",
        "decimalPlaces": 0,
        "thousandsSeparator": true
      }
    }
    ```
  </Tab>

  <Tab title="Moneda">
    ```json theme={null}
    {
      "name": "Prima",
      "key": "prima",
      "type": "number",
      "numberFormat": {
        "type": "currency",
        "currencyCode": "MXN",
        "decimalPlaces": 2,
        "thousandsSeparator": true
      }
    }
    ```
  </Tab>

  <Tab title="Porcentaje">
    ```json theme={null}
    {
      "name": "Comisión",
      "key": "comision",
      "type": "number",
      "numberFormat": {
        "type": "percent",
        "decimalPlaces": 2,
        "thousandsSeparator": false
      }
    }
    ```
  </Tab>
</Tabs>

## Fecha y fecha con hora

Usa `type: "date"` en ambos casos. No existe un `type: "datetime"`.

| Presentación | Configuración                            |
| ------------ | ---------------------------------------- |
| Solo fecha   | `"dateConfig": { "includeTime": false }` |
| Fecha y hora | `"dateConfig": { "includeTime": true }`  |

<Tabs>
  <Tab title="Solo fecha">
    ```json theme={null}
    {
      "name": "Fecha de emisión",
      "key": "fechaEmision",
      "type": "date",
      "dateConfig": {
        "includeTime": false
      }
    }
    ```
  </Tab>

  <Tab title="Fecha y hora">
    ```json theme={null}
    {
      "name": "Inicio de vigencia",
      "key": "inicioVigencia",
      "type": "date",
      "dateConfig": {
        "includeTime": true
      }
    }
    ```
  </Tab>
</Tabs>

`dateConfig` controla cómo el tablero captura y muestra el dato; no cambia la validación de la API. Si lo omites, el tablero usa solo fecha. Consulta los [formatos de fecha aceptados](/tableros/valores-por-tipo#fechas).

## Selección única y múltiple

Los tipos `enum` y `enum_multi` requieren `options` con al menos una opción.

| Propiedad de `options[]` | Requerido | Descripción                                    |
| ------------------------ | --------- | ---------------------------------------------- |
| `label`                  | Sí        | Texto visible.                                 |
| `id`                     | No        | Identificador estable; se genera si lo omites. |
| `color`                  | No        | Nombre o código de color.                      |
| `order`                  | No        | Posición desde `0`; se genera si la omites.    |

Al actualizar `options`, envía la lista completa que debe conservar el campo.

<Tabs>
  <Tab title="Selección única">
    ```json theme={null}
    {
      "name": "Estado",
      "key": "estado",
      "type": "enum",
      "options": [
        { "label": "Vigente", "color": "green" },
        { "label": "Cancelada", "color": "red" }
      ]
    }
    ```
  </Tab>

  <Tab title="Selección múltiple">
    ```json theme={null}
    {
      "name": "Coberturas",
      "key": "coberturas",
      "type": "enum_multi",
      "options": [
        { "label": "Responsabilidad civil" },
        { "label": "Daños materiales" }
      ]
    }
    ```
  </Tab>
</Tabs>

## Relaciones

Aplica a `relation_single` y `relation_multi`.

| Propiedad        | Requerido                 | Descripción                                                                  |
| ---------------- | ------------------------- | ---------------------------------------------------------------------------- |
| `toDatabaseId`   | Sí                        | ID del tablero relacionado.                                                  |
| `displayFieldId` | No                        | Campo del tablero destino que se muestra como etiqueta.                      |
| `bidirectional`  | No                        | Crea o vincula una relación inversa cuando es `true`.                        |
| `inverseField`   | Con `bidirectional: true` | Usa `id` para vincular un campo existente, o `name` y `type` para crear uno. |

<Tabs>
  <Tab title="Relación única">
    ```json theme={null}
    {
      "name": "Cliente",
      "key": "cliente",
      "type": "relation_single",
      "toDatabaseId": "<database-id-clientes>",
      "displayFieldId": "<field-id-nombre>"
    }
    ```
  </Tab>

  <Tab title="Relación múltiple">
    ```json theme={null}
    {
      "name": "Beneficiarios",
      "key": "beneficiarios",
      "type": "relation_multi",
      "toDatabaseId": "<database-id-personas>",
      "displayFieldId": "<field-id-nombre>"
    }
    ```
  </Tab>

  <Tab title="Bidireccional">
    ```json theme={null}
    {
      "name": "Cliente",
      "key": "cliente",
      "type": "relation_single",
      "toDatabaseId": "<database-id-clientes>",
      "bidirectional": true,
      "inverseField": {
        "name": "Pólizas",
        "type": "relation_multi"
      }
    }
    ```
  </Tab>
</Tabs>

Para vincular campos existentes después de crearlos, usa [Vincular relación](/tableros/vincular-relacion).

## Contactos

Aplica a `contact_single` y `contact_multi`. Usa `displayFieldId` para seleccionar el campo del contacto que se muestra como etiqueta. Si lo omites, el tablero elige una etiqueta automáticamente.

<Tabs>
  <Tab title="Contacto único">
    ```json theme={null}
    {
      "name": "Asegurado",
      "key": "asegurado",
      "type": "contact_single",
      "displayFieldId": "<contact-field-id>"
    }
    ```
  </Tab>

  <Tab title="Contactos múltiples">
    ```json theme={null}
    {
      "name": "Asegurados",
      "key": "asegurados",
      "type": "contact_multi",
      "displayFieldId": "<contact-field-id>"
    }
    ```
  </Tab>
</Tabs>

## Campo reflejado

Un `lookup` obtiene un dato mediante un campo de relación o contacto del mismo tablero.

| Propiedad                | Requerido | Descripción                                    |
| ------------------------ | --------- | ---------------------------------------------- |
| `relationFieldId`        | Sí        | ID del campo de relación o contacto de origen. |
| `targetFieldId`          | Sí        | ID del campo cuyo valor se muestra.            |
| `multipleValuesBehavior` | Sí        | Cómo resolver varios valores.                  |

`multipleValuesBehavior` acepta:

* `allValues`: devuelve todos los valores.
* `uniqueValues`: elimina duplicados.
* `firstValue`: devuelve el primero.
* `lastValue`: devuelve el último.

No puedes usar otro `lookup`, `enum_multi` ni `files` como campo destino. Los campos `lookup` son de solo lectura.

<Tabs>
  <Tab title="Un valor">
    ```json theme={null}
    {
      "name": "Correo del cliente",
      "key": "correoCliente",
      "type": "lookup",
      "relationFieldId": "<relation-field-id>",
      "targetFieldId": "<target-field-id>",
      "multipleValuesBehavior": "firstValue"
    }
    ```
  </Tab>

  <Tab title="Valores únicos">
    ```json theme={null}
    {
      "name": "Correos de beneficiarios",
      "key": "correosBeneficiarios",
      "type": "lookup",
      "relationFieldId": "<relation-field-id>",
      "targetFieldId": "<target-field-id>",
      "multipleValuesBehavior": "uniqueValues"
    }
    ```
  </Tab>
</Tabs>

## Archivos

| Propiedad  | Requerido | Descripción                                                       |
| ---------- | --------- | ----------------------------------------------------------------- |
| `maxFiles` | No        | Entero mayor o igual a `1`.                                       |
| `accept`   | No        | Tipos MIME permitidos, por ejemplo `image/*` o `application/pdf`. |

<Tabs>
  <Tab title="Configuración predeterminada">
    ```json theme={null}
    {
      "name": "Adjuntos",
      "key": "adjuntos",
      "type": "files"
    }
    ```
  </Tab>

  <Tab title="PDF e imágenes">
    ```json theme={null}
    {
      "name": "Documentos",
      "key": "documentos",
      "type": "files",
      "maxFiles": 5,
      "accept": ["application/pdf", "image/*"]
    }
    ```
  </Tab>
</Tabs>

La configuración limita la carga. Para adjuntar contenido usa [Subir archivo](/tableros/subir-archivo).
