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

# Reglas de validación

> Declara las condiciones que debe cumplir un registro antes de poder guardarse.

## Resumen

Una regla de validación es una condición aplicada a un registro. Cuando se evalúa como falsa, Twenty rechaza el registro y muestra el mensaje de la regla.

> [!NOTE]
>
> Las reglas de validación solo se aplican en espacios de trabajo donde la función está disponible.

Define una regla con `defineValidationRule` de `twenty-sdk/define`:

```ts filename="src/validation-rules/invoice-has-amount.ts" theme={null}
import { defineValidationRule, ruleExpression } from 'twenty-sdk/define';

import { INVOICE_UNIVERSAL_IDENTIFIER } from '../objects/invoice.object';

const { and, field, gt, isNonEmptyString } = ruleExpression;

export default defineValidationRule({
  universalIdentifier: '8d3f2c6e-1b7a-4f0e-9c52-6a1e0d4b7f31',
  objectUniversalIdentifier: INVOICE_UNIVERSAL_IDENTIFIER,
  name: 'Invoice has an amount',
  expression: and(gt(field('amount'), 0), isNonEmptyString(field('reference'))),
  message: 'An invoice needs an amount and a reference',
});
```

También puedes generar una con la CLI:

```bash theme={null}
twenty app add validation-rule --name invoice-has-amount --object <object-uuid>
```

| Propiedad | Obligatorio | Descripción |
| - | - | - |
| `universalIdentifier` | Sí | Identificador estable de la regla |
| `objectUniversalIdentifier` | Sí | El objeto al que se aplica la regla. Puede ser un objeto de tu aplicación o un objeto estándar. |
| `name` | Sí | Nombre mostrado en la configuración |
| `expresión` | Sí | Una `ruleExpression` o una cadena |
| `mensaje` | Sí | Mensaje mostrado cuando falla la regla |
| `errorFieldUniversalIdentifier` | No | Campo al que está asociado el mensaje. Debe pertenecer al objeto de la regla. |
| `description` | No | Descripción más larga |
| `icon` | No | Nombre del icono |

## Escribir expresiones

`ruleExpression` proporciona:

* `field('name')` lee un campo y `field('company.employees')` lee un campo a través de una relación de muchos a uno.
* `now` es la fecha y hora actuales.
* `and`, `or` y `not` combinan condiciones.
* `eq`, `notEq`, `gt`, `gte`, `lt` y `lte` comparan valores.
* `add`, `subtract`, `multiply` y `divide` calculan valores.
* `isIn(field('stage'), ['NEW', 'WON'])` compara un valor con una lista.
* Funciones como `isNonEmptyString` y `isDefined`.

El generador produce una cadena simple, que es lo que [`twenty app pull`](https://docs.twenty.com/es/developers/extend/apps/operations/cli) escribe de vuelta. Puedes escribir esa cadena directamente:

```ts theme={null}
expression: 'amount > 0 and isNonEmptyString(reference)',
```

Las cadenas usan `and`, `or`, `not`, `==`, `!=`, `\<`, `\<=`, `>`, `>=`, `+`, `-`, `*`, `/` e `in [...]`, no `&&` ni `||`. El texto va entre comillas simples o dobles.

Una regla puede leer los campos que declaras y los [campos del sistema](https://docs.twenty.com/es/developers/extend/apps/data/system-fields.md) que proporciona Twenty, como `createdAt`. La CLI comprueba las expresiones con los objetos propios de tu aplicación. En un objeto fuera de tu aplicación, solo comprueba la sintaxis y el servidor comprueba los campos durante la sincronización.

## Campos que dejan de estar disponibles

| Situación | Resultado |
| - | - |
| Tu aplicación elimina un campo que lee su regla | La sincronización falla con un error que indica la regla y el campo |
| Un espacio de trabajo desactiva un campo fuera de tu aplicación | La sincronización se realiza correctamente y la regla permanece desactivada |
| Un espacio de trabajo elimina un campo fuera de tu aplicación y la expresión de tu regla no cambia | La sincronización se realiza correctamente y la regla permanece desactivada |
| Un espacio de trabajo cambia el nombre de un campo fuera de tu aplicación | La sincronización se realiza correctamente y mantiene la regla con el nuevo nombre, que `twenty app pull` escribe de vuelta |
| Una regla nueva o editada indica un campo que no existe | La sincronización falla |
| Un espacio de trabajo elimina el campo de error de la regla | La sincronización se realiza correctamente y la regla ya no está asociada a ese campo |

Una sincronización mantiene el `isActive` de una regla existente, por lo que una regla que un administrador del espacio de trabajo desactivó permanece desactivada. Solo las reglas nuevas comienzan activadas.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.