Referencia
Tipos de campo Cada tipo de campo que puedes declarar en un objeto — qué almacena, qué opciones acepta y cómo se manifiesta en REST, Console y el AI Builder.
48 tipos de campo integrados, agrupados por familia. El esquema Zod completo está en
packages/spec/src/data/field.zod.ts — esta página es un resumen práctico.
Propiedad Tipo Predeterminado Propósito namestring (snake_case) — Identificador de máquina — segmento de ruta REST, columna SQL labelstring — Etiqueta de visualización en Console typeFieldType — Consulta las tablas de tipos a continuación requiredboolean falseRestricción NOT NULL uniqueboolean falseÍndice único searchableboolean falseIndexado para /api/v1/search multipleboolean falseAlmacena un arreglo de valores defaultValueunknown — Valor inicial (literal o CEL) columnNamestring = name Sobrescribe la columna física de la BD hiddenboolean falseOculta de las vistas predeterminadas de Console readonlyboolean falseDeshabilita en formularios systemboolean falseInyectado automáticamente (id, created_at, …) indexboolean falseCrea un índice en la BD externalIdboolean falseApto para upsert mediante clave externa inlineHelpTextstring — Texto de información sobre herramientas / ayuda conditionalRequiredpredicado P — Obligatorio cuando el CEL es verdadero trackHistoryboolean falseMuestra los cambios de valor como entradas legibles en la línea de tiempo de actividad del registro (ADR-0052)
Tipo Para qué usarlo Opciones clave textcadenas cortas maxLength, minLengthtextareavarias líneas maxLengthemailcorreo electrónico validado por formato; en minúsculas urlURL validado por formato phoneteléfono E.164 passwordsecretos de un solo sentido con hash por el subsistema de autenticación; nunca devuelto por GET secretsecretos reversibles (claves de API, tokens, contraseñas de BD) cifrado en reposo mediante el proveedor de criptografía, almacenado como una referencia opaca, enmascarado al leer. Fail-closed: sin un proveedor configurado, las escrituras lanzan un error en lugar de persistir texto plano markdowncuerpo markdown renderizado en la vista previa de Console htmlHTML saneado DOMPurify al escribir richtextWYSIWYG editor de Console + JSON serializado
Tipo Para qué usarlo Opciones clave numberflotantes min, max, precision, scalecurrencydinero currencyConfig: { precision, currencyMode: 'fixed' | 'dynamic', defaultCurrency }percent0–100 % min, max, scale
integer y decimal no son tipos separados — usa number con
scale: 0 para enteros, precision+scale para decimales fijos.
Tipo Almacena Notas datefecha de calendario sin zona horaria datetimeinstante UTC timehora del reloj sin fecha
Tipo Notas booleanCasilla de verificación toggleIgual que boolean, con interfaz de interruptor
Tipo Notas selectOpción única — opciones declaradas en línea o referenciadas desde una lista de selección multiselectVarias opciones, almacenadas como un arreglo radioAlias de interfaz para select con renderizado de botones de opción checkboxesAlias de interfaz para multiselect con renderizado de casillas de verificación
Estructura de las opciones:
options : [
{ value: 'low' , label: 'Low' },
{ value: 'high' , label: 'High' , color: '#e02' },
{ value: 'urgent' , label: 'Urgent' , color: '#c00' }
]
Tipo Cardinalidad Semántica lookupmuchos a uno Referencia laxa; eliminar el padre no elimina el hijo de forma predeterminada master_detailmuchos a uno, en cascada El hijo no puede existir sin el padre; los permisos se heredan del padre treeautorreferencia Jerárquico (parent_id en el mismo objeto)
Opciones comunes:
{
type : 'lookup' ,
reference : 'account' , // target object name
referenceFilters : [ 'status:active' ], // narrow the lookup picker
deleteBehavior : 'set_null' // 'set_null' | 'cascade' | 'restrict'
}
Tipo Qué hace Opción clave formulaValor derivado, evaluado al leer o al recalcular expression: F\record.qty * record.unit_price`` — consulta CEL summaryAcumulación sobre una relación hija summaryOperations: { object, field, function } (count | sum | avg | min | max)autonumberNúmero de visualización autoincremental format (p. ej. TKT-{0000}), startAt
Ejemplo de fórmula:
{
name : 'profit_margin' ,
type : 'formula' ,
expression : F `(record.revenue - record.cost) / record.revenue * 100`
}
Tipo Para qué usarlo Opción clave imageadjuntos de imagen fileAttachmentConfig (ver abajo)filecualquier archivo igual avatarfotos de perfil recorte cuadrado, valores predeterminados sensatos videosubidas de video captura de duración + miniatura audioaudio vista previa de forma de onda
fileAttachmentConfig : {
maxSize : 10_000_000 , // bytes
allowedTypes : [ 'image/png' , 'image/jpeg' ],
virusScan : true ,
storageProvider : 's3' , // see Configure → Storage
imageValidation : { minWidth : 200 , maxWidth : 4096 , generateThumbnails : [ 'sm' , 'md' , 'lg' ] }
}
Tipo Almacena Notas jsonJSON arbitrario Almacenado como JSONB en Postgres compositesubregistro con campos nombrados Estructura en línea, no una tabla separada repeaterarreglo de valores compuestos Uno a muchos sin un objeto hijo
Tipo Notas locationlatitud/longitud + precisión addresscalle / ciudad / región / código postal / país codecampo de código fuente — language, theme, lineNumbers colorcolorFormat: 'hex' | 'rgb' | 'rgba' | 'hsl', presetColors[]rating1–N estrellas — max, icon slidernúmero acotado con interfaz de control deslizante signaturefirma dibujada, almacenada como imagen qrcoderenderiza el valor como un código QR o de barras (EAN / UPC / Code128) progressporcentaje derivado renderizado como una barra tagsarreglo de etiquetas de formato libre con autocompletado vectorcolumna de embedding — vectorConfig: { dimensions, distanceMetric: 'cosine' | 'euclidean', indexed, indexType: 'hnsw' | 'ivfflat' }
Campo Tipo Notas idtext (ULID) clave primaria created_atdatetime hora de inserción UTC updated_atdatetime hora de última escritura UTC created_bylookup → user quién insertó updated_bylookup → user quién escribió por última vez versioninteger token de concurrencia optimista
No declaras estos campos — desactívalos por objeto con
ObjectSpec.systemFields: false (rara vez es buena idea).
*.object.ts (field spec)
│
├─► Postgres / MySQL / SQLite column + index + constraint
├─► REST: validated on POST/PATCH, exposed on GET
├─► Console: form widget + list column
├─► AI Builder: tool argument schema (so the AI knows what to ask)
└─► Audit: change-tracked if `trackHistory: true`