KEPLIN Docs

Validación

Las dos líneas de defensa de los datos — lo que el modelo garantiza y las reglas que los formularios de las pantallas verifican antes de guardar.

Los datos erróneos entran por descuido, no por maldad: un NIF con ocho dígitos, un correo sin arroba, un descuento del 300 %, un registro guardado sin el campo que el resto del proceso necesita. Validar es cerrar esas puertas — y en Keplin se cierran en dos capas, que conviene no confundir.

Capa Dónde se define Cuándo actúa Qué atrapa
El modelo En el editor de la tabla (ver Tablas y campos) En cualquier escritura, venga de donde venga Lo que nunca puede pasarles a los datos.
Las reglas de los campos En el inspector de cada campo de formulario, categoría Validación Cuando el usuario guarda un formulario Lo que la persona está escribiendo, con el mensaje correcto junto al campo.

La regla práctica: lo que es verdad sobre los datos vive en el modelo; lo que es ayuda al usuario vive en el formulario. Un campo obligatorio es las dos cosas — se desactiva Permite NULL en el modelo y se activa Obligatorio en el campo de la pantalla.

Lo que el modelo garantiza

Estas no son «reglas de validación» con ese nombre, pero son la única defensa que no se esquiva: valen para las pantallas, para las APIs, para los scripts y para quien escriba directamente en la base de datos.

Pieza Qué impide
Permite NULL desactivado Un registro sin valor en esa columna.
Tipo de la columna Texto en un campo de fecha, letras en un número.
Tamaño / Precisión · Escala Texto mayor que la columna, o dinero con decimales de más.
Clave primaria (PK) Registros duplicados y registros que no se pueden identificar.
Índice unique Dos clientes con el mismo NIF, dos usuarios con el mismo correo.
Columna de tipo enum Un estado que no existe en la lista.
Relación física + Al eliminar el padre Hijos huérfanos, o eliminaciones que arrastran lo que no deben.

La columna estado en el editor de estructura: el tipo, el Nombre amigable (apps) y el interruptor Permite NULL son la primera defensa de los datos.
La columna estado en el editor de estructura: el tipo, el Nombre amigable (apps) y el interruptor Permite NULL son la primera defensa de los datos.

Consejo

Antes de escribir una regla en un formulario, pregunta: ¿esto puede ser verdad en algún registro, alguna vez? Si la respuesta es no, el sitio es el modelo — porque el formulario es solo una de las puertas por las que los datos entran.

Las reglas de los campos de formulario

Todos los campos de formulario — Caja de texto, Área de texto, Número, Sí/No, Lista, Fecha, Color, Archivo — tienen en el inspector la categoría Validación. Ahí se declara lo que ese campo acepta.

Para llegar:

  1. Abre la pantalla en el diseñador.
  2. Selecciona el campo — en el canvas, o por la pestaña Estructura del inspector.
  3. En la pestaña Propiedades, abre la categoría Validación.

La categoría Validación de una Caja de texto: Obligatorio, Máscara, límites de caracteres, Patrón (regex), Formato e Igual al campo.
La categoría Validación de una Caja de texto: Obligatorio, Máscara, límites de caracteres, Patrón (regex), Formato e Igual al campo.

Obligatorio

El interruptor Obligatorio es la primera y más usada de las reglas: el campo tiene que venir relleno. Es también la única que habla del vacío — todas las demás dejan pasar un campo vacío, porque el vacío es asunto del Obligatorio.

El interruptor Obligatorio del campo Telefone — la primera regla en correr, y la única que habla del vacío.
El interruptor Obligatorio del campo Telefone — la primera regla en correr, y la única que habla del vacío.

Las reglas estándar

Según el tipo de campo, la categoría muestra las reglas que tienen sentido:

Regla Dónde aparece Qué verifica
Máscara Caja de texto El formato mientras se escribe: # dígito, A letra, N alfanumérico, * cualquiera — el resto es texto fijo. Ej.: +351 ### ### ###.
Mín. caracteres Caja de texto, Área de texto Longitud mínima del texto.
Máx. caracteres Caja de texto, Área de texto Longitud máxima del texto.
Patrón (regex) Caja de texto, Área de texto Una expresión regular que el valor tiene que cumplir. Ej.: ^[A-Z]{2}\d{4}$.
Formato Caja de texto Ninguno, Es email, Es teléfono o Es número. Son exclusivos: un valor no puede ser email y teléfono al mismo tiempo.
Valor mín. Número El menor valor aceptado.
Valor máx. Número El mayor valor aceptado.
Igual al campo Todos los campos El valor tiene que ser igual al de otro campo de la pantalla — la confirmación de contraseña, el correo repetido.

Nota

La Máscara es ayuda de escritura, no validación: guía lo que la persona escribe, pero quien garantiza el formato es el Patrón (regex) o el Formato. Un teléfono con máscara puede quedarse a medias.

Validación por código

Bajo las reglas estándar está la línea Validación, que dice Sin validación — definir o Definida — editar. El botón … abre un editor de código para las reglas que los campos no cubren: un NIF con dígito de control, un IBAN, una fecha que tiene que ser posterior a otra, una regla de negocio que solo tu empresa tiene.

El código recibe value — el valor actual del campo — y devuelve:

  • true (o nada) si el valor es válido;
  • una string con el mensaje de error a mostrar, si no lo es.
const s = String(value ?? "").replace(/\D/g, "");
if (s.length !== 9) return "O NIF tem de ter 9 dígitos";
return true;

Dentro de este código tienes también el keplin disponible — se puede comparar con otro campo, con un valor de la sesión o con datos ya cargados en la pantalla. Es TypeScript, con sugerencias mientras escribes (Ctrl+Espacio); el editor rechaza guardar código que no sea ejecutable.

El editor de la validación por código: recibe el valor del campo y devuelve true, o el mensaje de error a mostrar.
El editor de la validación por código: recibe el valor del campo y devuelve true, o el mensaje de error a mostrar.

Cuándo corre la validación

La validación de un formulario corre al guardar — cuando el botón de guardar manda guardar el datastore del registro. El orden es siempre el mismo, por campo:

  1. Obligatorio — ¿el campo está relleno?
  2. Las reglas estándar — longitud, formato, mínimo, máximo, patrón, igualdad.
  3. La validación por código — tu regla.

El primer error gana: en cuanto una regla falla, es el mensaje de esa regla el que aparece bajo el campo y las siguientes no llegan a correr. Si algún campo falla, nada se guarda — el registro queda como estaba y la persona sigue en el formulario, con los errores a la vista.

También se puede validar un campo a mano, desde el código de un evento — por ejemplo, para verificar un campo en cuanto cambia en vez de esperar al final. Eso es asunto de Eventos y el SDK.

Los mensajes

Los mensajes de las reglas estándar son los de la plataforma, escritos en el idioma de la app: Campo obligatorio., Email inválido., Mínimo {min} caracteres., Valor máximo: {max}., Los valores no coinciden., Formato inválido. No se editan uno a uno — si necesitas decir las cosas de otra manera, el sitio es la validación por código, donde el mensaje es la string que devuelves.

El idioma sale de los ajustes de la app (Ajustes de la app ▸ Traducciones): la misma app en portugués y en inglés muestra los errores en el idioma de quien la está usando.

Lo que la validación NO es

Atención

La validación de un formulario es conveniencia, no seguridad. Corre en el navegador de quien está usando la app y sirve para evitar errores honestos. Quien quiera de verdad escribir un valor inválido no pasa por el formulario — pasa por la API. La defensa en serio es la del modelo (tipos, obligatoriedad, claves, índices únicos, enums) y la de los permisos de quién puede escribir qué.

¿Por qué no…?

  • ¿Por qué no veo la categoría Validación en este widget? Solo los campos de formulario validan. Un Botón, una Etiqueta o una Tabla no tienen valor que validar.
  • ¿Por qué la regla no se dispara con el campo vacío? Es a propósito: las reglas estándar ignoran el vacío, que es el territorio del Obligatorio. Actívalo.
  • ¿Por qué se guardó igualmente un registro inválido? O el campo no estaba conectado al datastore (sin conexión, no entra en la validación), o el valor se escribió por otra vía — una API, un script, una importación. Mira lo que el modelo garantiza, arriba en esta página.
  • ¿Por qué el Patrón (regex) no coincide? Es una expresión regular en la sintaxis habitual, y cada carácter cuenta: ^[A-Z]{2}\d{4}$ acepta PT1234 y rechaza pt1234. Prueba la expresión antes de pegarla.
  • ¿Por qué no se guardó mi validación por código? El editor rechaza código que no sea ejecutable — corrige el error señalado y guarda otra vez.
  • ¿Por qué el mensaje aparece en inglés? El idioma de la app está en inglés. Cámbialo en Ajustes de la app ▸ Traducciones.