# Campos

Los **campos** son las columnas de una sección. Definen qué datos se almacenan en cada registro y cómo se comportan: tipo de dato, validaciones, valores por defecto, cálculos automáticos y relaciones con otras secciones.

***

## Tipos de campo

| Tipo             | Formato PostgreSQL            | Ejemplo de uso                            |
| ---------------- | ----------------------------- | ----------------------------------------- |
| **Texto**        | `text`                        | Nombres, descripciones, emails, NIFs      |
| **Entero**       | `numeric`                     | Cantidades, contadores, porcentajes       |
| **Decimal**      | `numeric`                     | Importes, precios, pesos                  |
| **Sí/No**        | `int` (0/1)                   | Flags: activo, pagado, enviado            |
| **Fecha**        | `date`                        | Fecha de nacimiento, fecha de vencimiento |
| **Fecha y Hora** | `timestamp without time zone` | Timestamps de eventos (siempre UTC)       |
| **Hora**         | `time`                        | Hora de inicio, hora de fichaje           |
| **Relación**     | `varchar(36)`                 | Enlace a un registro de otra sección      |

{% hint style="info" %}
Los campos de tipo **Fecha y Hora** se almacenan siempre en **UTC**. La conversión a la zona horaria del usuario se realiza automáticamente en la interfaz.
{% endhint %}

{% hint style="info" %}
Cuando una **Relación** está vacía, se almacena como cadena vacía `''` (no como NULL).
{% endhint %}

***

## Roles de campo

Los roles especializan el comportamiento de un tipo base. Por ejemplo, un campo de tipo Texto puede tener el rol "Email" (valida formato de email), "Teléfono" (formatea como teléfono) o "HTML" (muestra un editor enriquecido).

### Roles de Texto

| Rol                  | Comportamiento                         |
| -------------------- | -------------------------------------- |
| Genérico             | Texto libre sin restricciones          |
| Email                | Valida formato de email                |
| Teléfono             | Formato y enlace de teléfono           |
| Web                  | Valida y enlaza URLs                   |
| NIF/CIF              | Validación de documento fiscal español |
| HTML / HTML (Editor) | Editor de texto enriquecido            |
| Multilínea (1-5)     | Área de texto con diferente altura     |
| Archivo              | Referencia a un archivo adjunto        |
| Color                | Selector de color                      |
| Código Cuenta IBAN   | Validación de IBAN                     |
| Código Subcuenta     | Código contable                        |
| KeyWord              | Identificador único legible            |

### Roles de Entero

| Rol                        | Comportamiento                |
| -------------------------- | ----------------------------- |
| Genérico                   | Número entero                 |
| Porcentaje                 | Muestra con formato %         |
| Moneda                     | Muestra con formato de divisa |
| Segundos / Minutos / Horas | Unidades de tiempo            |
| Bytes                      | Formato de tamaño de archivo  |
| Año                        | Validación de año             |

### Roles de Decimal

| Rol                | Comportamiento          |
| ------------------ | ----------------------- |
| Genérico           | Número con decimales    |
| Porcentaje         | Formato %               |
| Moneda             | Formato de divisa       |
| Latitud / Longitud | Coordenadas geográficas |

***

## Configuración de campos

### Atributos principales

| Atributo           | Icono | Descripción                                             |
| ------------------ | ----- | ------------------------------------------------------- |
| **Obligatorio**    | 🔴    | El registro no se puede guardar sin este campo          |
| **Bloqueado**      | 🔒    | Solo lectura. Calculado por el sistema o por scripts    |
| **Oculto**         | 👁    | No visible en la interfaz por defecto                   |
| **Auto-calculado** | ⚙️    | Su valor se calcula automáticamente mediante algoritmos |

### Valores por defecto

Los campos pueden tener un valor por defecto que se aplica al crear un nuevo registro:

* **Valor fijo**: un texto, número o fecha concreto
* **Valor dinámico**: basado en el usuario actual, la fecha actual u otros campos del registro

### Autorrellenado

Los campos de tipo Relación pueden configurarse para autorrellenar otros campos cuando se selecciona un registro relacionado. Por ejemplo, al seleccionar un Cliente en una Factura, se pueden autorrellenar el NIF, la dirección fiscal y las condiciones de pago.

***

## Relaciones entre secciones

Los campos de tipo **Relación** enlazan registros de una sección con otra. Esto permite:

* Navegar de una Factura al Cliente asociado
* Sumar las líneas de una Factura usando algoritmos cruzados
* Crear informes que combinan datos de múltiples secciones

Una relación almacena el UUID del registro relacionado como `varchar(36)`.

***

## Columnas PostgreSQL (`pr_*`)

Cada campo personalizado tiene una columna en PostgreSQL con nombre técnico en formato `pr_XXXXXXXXX`. Puedes consultar el nombre de columna de cada campo desde:

| Herramienta             | Acceso                                    |
| ----------------------- | ----------------------------------------- |
| **Play Dinaup**         | Módulo Desarrollo → Esquema               |
| **Dinaup Desktop**      | Configuración de la sección               |
| **doc-flex.dinaup.com** | Referencia técnica de todas las secciones |
| **SDK .NET (MyDinaup)** | Nombres de campo tipados con IntelliSense |

***

## Referencia completa

La documentación técnica de todos los campos de todas las secciones (tipo, rol, columna PostgreSQL, atributos y notas) está disponible en:

→ [doc-flex.dinaup.com](https://doc-flex.dinaup.com/) → [Tipos de campo detallados](https://doc-flex.dinaup.com/referencia/tipos-de-campo/) → [Roles de campo detallados](https://doc-flex.dinaup.com/referencia/roles-de-campo/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.dinaup.com/desarrollo/flex/campos.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
