Versiones de Septiembre 2026 (v1.25.0 - v1.26.0)
Bienvenido a las notas de lanzamiento de Septiembre 2026 de Axol Systems. Este mes incluye importantes entregas (v1.25.0 y v1.26.0) acompañadas del nuevo Motor de Automatizaciones v2 (ECA) con ejecución atómica en base de datos y diseñador visual interactivo, Formularios Personalizables con grilla responsiva de 1 a 6 columnas y vinculación dinámica a vistas, enriquecimiento en propiedades de Referencia con existencias en tiempo real (foreign_virtual, from_form, filtros reactivos when), nuevos comandos en propiedades (only_read, visible_in_create, sequence, default, snapshot), mejoras integrales en sub-tablas 1:N (column_show, filters, inherit), evaluación matemática integrada en sum_from, previsualización en vivo de PDFs al descargar, editor visual de plantillas PDF con vista previa interactiva, personalización centralizada de marca (Branding), el flujo de captura continua con el switch “Continuar creando” y la regla de auto-creación de existencias en el motor Kardex.
Nuevas Funcionalidades y Mejoras
Section titled “Nuevas Funcionalidades y Mejoras”Motor de Automatizaciones v2 (ECA - Event-Condition-Action)
Section titled “Motor de Automatizaciones v2 (ECA - Event-Condition-Action)”Se implementó el nuevo Motor de Automatizaciones v2, basado en la arquitectura declarativa Evento-Condición-Acción (ECA). Este motor sustituye los flujos rígidos anteriores por un sistema desacoplado, modular y extensible que se ejecuta a nivel transaccional en PostgreSQL:
- Disparadores (Triggers): Se activan ante mutaciones de datos en tablas públicas (
on_record_create,on_record_update,on_record_delete) o ejecuciones manuales (on_manual_execution). - Evaluación de Condiciones (Conditions): Valida árboles lógicos (
all,any) con operadores relacionales (eq,neq,gt,gte,lt,lte,in,is_null) y operadores de detección delta (changed,changed_to,changed_from). Si las condiciones no se satisfacen, la automatización finaliza inmediatamente sin errores. - Pipeline de Acciones Atómicas (Actions):
insert_record: Inserción de filas en tablas destino con resolución de campos por valor literal, campo origen (field) o metadatos de sesión (meta).update_record: Actualización de filas destino bajo coincidencia de claves (match).adjust_field: Incremento o decremento numérico seguro (increment,decrement) con bloqueo de fila (FOR UPDATE), control de saldo negativo (allow_negative: false) y auto-creación si el registro destino no existe (auto_create_if_missing: true).delete_record: Eliminación controlada de filas coincidentes.set_field: Modificación directa de columnas en el registro origen en tiempo de ejecución.for_each_child: Iteración secuencial sobre listas de objetos o registros vinculados.
- Transaccionalidad Atómica: Configurable con
"atomic": truey"timeout_ms": 5000. Si alguna acción falla o viola una restricción de integridad, toda la transacción efectúaROLLBACKprotegiendo la base de datos. - Diseñador Visual en Ajustes (
AutomationsConfigView): Nueva interfaz para componer reglas paso a paso (trigger, condiciones, pipeline de acciones) con formularios especializados para cada tipo de acción, o alternar con el editor de código JSON con validación en vivo.
{ "version": 2, "trigger": { "type": "on_record_create", "source_table": "table20", "description": "Al registrar un traspaso autorizado" }, "conditions": [ { "field": "t20c3", "op": "eq", "value": "APROBADO" }, { "field": "t20c4", "op": "gt", "value": 0 } ], "actions": [ { "id": "kardex_salida", "type": "insert_record", "target_table": "table15", "fields": { "t15c1": { "type": "field", "source": "t20c1" }, "t15c2": { "type": "field", "source": "t20c2" }, "t15c3": { "type": "literal", "value": "SALIDA_TRASPASO" }, "t15c4": { "type": "field", "source": "t20c4" }, "t15c5": { "type": "meta", "source": "user.name" }, "t15c6": { "type": "meta", "source": "now" } } }, { "id": "stock_origen", "type": "adjust_field", "target_table": "table10", "match": [ { "target": "t10c1", "source": "t20c1" }, { "target": "t10c2", "source": "t20c2" } ], "operation": "decrement", "field": "t10c3", "amount": { "type": "field", "source": "t20c4" }, "allow_negative": false }, { "id": "stock_destino", "type": "adjust_field", "target_table": "table10", "match": [ { "target": "t10c1", "source": "t20c1" }, { "target": "t10c2", "source": "t20c5" } ], "operation": "increment", "field": "t10c3", "amount": { "type": "field", "source": "t20c4" }, "auto_create_if_missing": true, "default_values": { "t10c1": { "type": "field", "source": "t20c1" }, "t10c2": { "type": "field", "source": "t20c5" }, "t10c3": { "type": "literal", "value": 0 } } } ]}Formularios Personalizables y Diseñador Visual
Section titled “Formularios Personalizables y Diseñador Visual”Se introduce la infraestructura de Formularios Dinámicos (forms y view_forms), permitiendo a las organizaciones crear múltiples diseños de captura y edición para una misma entidad de negocio:
- Grilla Responsiva (1 a 6 Columnas): Parámetro
columns_countpara maquetar el formulario en columnas adaptables. - Control del Ancho del Drawer: Parámetro
drawer_width_factor(de0.2a1.0), permitiendo expandir el panel lateral según la densidad de datos requerida. - Distribución de Campos (
layout_config): Cada campo puede abarcar un número variable de columnas mediantecol_span:
{ "fields": [ { "column": "t1c1", "col_span": 2 }, { "column": "t1c2", "col_span": 2 }, { "column": "t1c3", "col_span": 4 } ]}- Vinculación Flexible a Vistas (
view_forms):- Botón Primario (
is_primary): Botón principal de creación en la barra de herramientas de la tabla. - Formularios Secundarios: Agrupados elegantemente en un menú desplegable accesible junto al botón principal para crear variantes del objeto (ej. “Recepción Rápida”, “Entrada Detallada”).
- Formulario de Edición por Defecto (
is_edit_default): Formulario asignado automáticamente al abrir un registro para modificación o consulta.
- Botón Primario (
- Sección de Configuración (
FormsConfigView): Nuevo módulo en Ajustes con previsualizador de cuadrícula, control deslizante de ancho de drawer y reordenamiento de campos.
Propiedades de Referencia: foreign_virtual, from_form, filters y when
Section titled “Propiedades de Referencia: foreign_virtual, from_form, filters y when”Las propiedades de tipo referencia foránea (ReferenceSelectDialog / multi_reference_view) fueron potenciadas para actuar como selectores dinámicos enriquecidos en tiempo de captura:
- Inyección de Propiedades Virtuales (
foreign_virtual): Inyecta columnas calculadas en el modal de selección de catálogo (como existencias en vivo mediantesum_from) sin persistirlas en la tabla foránea. - Contexto de Formulario (
from_form): En la secciónmatchdesum_from, permite vincular una columna de la tabla foránea con un campo del formulario actual (ej. filtrar el stock del producto tomando el almacén actualmente seleccionado en la cabecera). - Filtros Persistentes con Condición Reactiva (
when): Permite filtrar los registros del selector foráneo únicamente cuando el formulario cumple una condición específica (por ejemplo, filtrar solo artículos con existencias disponibles si el tipo de movimiento es"SALIDA"):
{ "reference_table": "table_productos", "foreign_virtual": { "column": "v_stock_actual", "name": "Stock Disponible", "type": 2, "dynamic_values": { "virtual": { "is": true }, "sum_from": { "table": "table_movimientos", "column": "t3c5", "sign_by": { "column": "t3c4", "positive": ["ENTRADA", "COMPRA"], "negative": ["SALIDA", "VENTA", "MERMA"] }, "match": [ { "local": "id_table_productos", "foreign": "t3c1" }, { "foreign": "t3c2", "from_form": "t5c2" } ] } } }, "filters": [ { "column": "v_stock_actual", "op": "gt", "value": 0, "when": { "column": "t5c1", "op": "eq", "value": "SALIDA" } } ]}Nuevos Controles y Comandos en Propiedades
Section titled “Nuevos Controles y Comandos en Propiedades”Se incorporaron nuevas directivas en dynamic_values para regular el comportamiento de los campos en formularios y vistas:
1. only_read (o only_view)
Section titled “1. only_read (o only_view)”Bloquea la edición del campo en formularios manteniéndolo como solo lectura, protegiendo campos generados por el sistema, cálculos o folios:
{ "only_read": true}2. visible_in_create
Section titled “2. visible_in_create”Cuando se establece en false, oculta el campo durante el alta de un nuevo objeto (ctxFormCreate), pero lo conserva visible al editar el registro existente o consultar su vista de detalles:
{ "visible_in_create": false}3. sequence
Section titled “3. sequence”Asigna de forma automática valores correlativos secuenciales (números de folio) calculados desde el backend al registrar nuevos objetos:
{ "sequence": true}4. default (Valores por Defecto y Tokens Dinámicos)
Section titled “4. default (Valores por Defecto y Tokens Dinámicos)”Permite precargar valores iniciales literales o resolver variables contextuales de usuario y fecha en el momento de crear el objeto:
- Tokens de Usuario:
{user.name},{user.id},{user.rol},{user.role}. - Tokens de Fecha y Hora:
{today}(YYYY-MM-DD),{now}(YYYY-MM-DD HH:mm:ss). - Expresiones Compuestas: Soporta combinaciones de texto con tokens dinámicos.
{ "default": "Registrado por {user.name} el {today}"}5. snapshot (Persistencia Inmutable de Valores Calculados)
Section titled “5. snapshot (Persistencia Inmutable de Valores Calculados)”Por defecto, las propiedades con sum_from o formula se recalculan en tiempo de ejecución. Al agregar "snapshot": true, el valor calculado al guardar se estampa físicamente en la columna de la base de datos, manteniéndolo inmutable ante futuros movimientos:
{ "snapshot": { "update_on_edit": false }}update_on_edit: Si esfalse(por defecto), el valor congelado se preserva intacto incluso si el registro se vuelve a abrir y editar; si estrue, recalcula el valor al guardar cambios.
Sub-tablas y Listas de Objetos 1:N: column_show, filters e inherit
Section titled “Sub-tablas y Listas de Objetos 1:N: column_show, filters e inherit”Las propiedades de tipo lista de objetos (obj_list) recibieron optimizaciones clave para flujos operacionales padre-hijo (maestro-detalle):
- Soporte Nativo para Relaciones 1:N: En colecciones estrictamente 1 a N, el botón “Agregar” (asociar registro existente) se oculta automáticamente, restringiendo la captura a la creación de nuevos registros dependientes.
- Comando
column_show: Permite definir de forma explícita qué columnas de la entidad foránea se muestran en la sub-tabla o vista, ocultando automáticamente el resto sin tener que enumerarlas encolumn_hide:
{ "column_show": ["t3c1", "t3c5", "t3c7"]}- Filtros Persistentes (
filters): Filtra los registros que se muestran en la sub-tabla basándose en condiciones fijas:
{ "filters": [ { "column": "t3c4", "op": "eq", "value": "ACTIVO" } ]}- Herencia Automática de Valores (
inherit): Sincroniza campos del objeto padre hacia las filas de la sub-tabla al agregarlas, evitando capturas duplicadas (por ejemplo, heredando el almacén o folio del documento principal):
{ "inherit": { "columna_partida_almacen": "columna_padre_almacen", "columna_partida_folio": "columna_padre_folio" }}Expresiones Matemáticas Integradas en sum_from
Section titled “Expresiones Matemáticas Integradas en sum_from”Las funciones de agregación sum_from ahora aceptan el parámetro formula, permitiendo operar directamente sobre el resultado obtenido mediante la variable reservada this:
{ "sum_from": { "table": "table10_stock", "column": "existencia", "match": [ { "local": "t3c1", "foreign": "id_producto" } ], "formula": "this - t3c5" }}En este ejemplo, this representa la suma acumulada de existencias, a la cual se le resta la cantidad t3c5 de la fila actual para obtener el saldo remanente previsto en tiempo real.
Previsualización de Documentos PDF al Descargar
Section titled “Previsualización de Documentos PDF al Descargar”Al solicitar la descarga o impresión de un documento desde la vista de detalles de un objeto, el nuevo modal DownloadTemplateDialog ofrece:
- Selector interactivo de plantilla asignada.
- Campo de edición para personalizar el nombre del archivo de salida.
- Previsualizador Interactivo en Tiempo Real (
PdfPreview): Renderiza el PDF compilado con los datos reales del registro en pantalla, permitiendo revisar el documento antes de confirmar la descarga.
Estandarización de Ajustes y Editor JSON
Section titled “Estandarización de Ajustes y Editor JSON”- Estandarización de Vistas de Configuración: Se uniformaron los paneles de Identidad, Automatizaciones, Formularios y Plantillas con componentes reutilizables (
AxolConfigActions,SettingRow,AxolConfirmDialogyAxolSnackBar). - Expansor a Pantalla Completa en Editor JSON: El componente
JsonCodeEditorahora incluye un botón de expansión a pantalla completa para facilitar la edición de reglas complejas, reduciendo errores tipográficos y mejorando la legibilidad.
Editor Visual de Plantillas PDF y Reportes
Section titled “Editor Visual de Plantillas PDF y Reportes”Se incorpora la sección Plantillas en el panel de Configuración (TemplatesConfigView), ofreciendo a administradores y diseñadores un entorno dedicado para crear y mantener documentos impresos (facturas, remisiones, vales, recibos):
- Editor con Asistente de Sintaxis: Cuenta con un indicador visual de validez del JSON (verde/rojo). En caso de errores, un diálogo describe la línea exacta y la causa del problema.
- Botón de Auto-formateo: Reorganiza e indenta el código con un solo clic.
- Menú de Snippets: Inserción rápida de bloques prediseñados (texto, filas, columnas, tablas, divisores, imágenes y bloques de repetición).
- Paleta de Variables: Catálogo de propiedades de la entidad para copiar o insertar columnas directamente.
- Pestaña de Vista Previa: Renderizado interactivo del PDF utilizando registros reales de la base de datos o datos simulados (mock), con soporte para refrescar cambios al instante.
- Asignación de Vistas: Ventana modal para definir en qué pantallas de la aplicación estará disponible cada plantilla.
Ancho Fijo en Columnas de Tablas PDF
Section titled “Ancho Fijo en Columnas de Tablas PDF”Las tablas de reportes PDF (type: "table") ahora permiten fijar anchos personalizados para evitar que columnas con descripciones largas compriman datos numéricos o códigos:
- Directo en la columna (
width):
{ "column": "t1c1", "alterName": "Código", "width": 80.0}- A nivel de tabla (
columnWidths):
{ "type": "table", "attributes": { "dataColumn": "t0c5", "columns": [ { "column": "t1c1" }, { "column": "t1c2" } ], "columnWidths": { "0": 100.0, "1": 250.0 } }}Centro de Identidad y Marca (Branding)
Section titled “Centro de Identidad y Marca (Branding)”Se añadió el módulo Identidad en el menú de Configuración (BrandingConfigView), centralizando la imagen visual corporativa de la organización:
- Logotipos Multi-tema: Gestión de Logo Predeterminado, Logo para Tema Claro y Logo para Tema Oscuro, con soporte para carga de archivos y URLs públicas.
- Control Proporcional: Deslizador para regular de forma proporcional el tamaño del logo en la barra superior.
- Simulador en Vivo: Previsualización instantánea de la barra superior en modo oscuro y claro.
- Personalización del Portal de Acceso (Login):
- Configuración del nombre comercial de la empresa (si se deja en blanco, no muestra texto sustituto).
- Selector de fondos de pantalla (Wallpapers) de muestra o vía URL personalizada en alta resolución.
- Previsualizador interactivo de la pantalla de bienvenida.
Captura Continua: Switch “Continuar Creando”
Section titled “Captura Continua: Switch “Continuar Creando””En el formulario de alta de nuevos objetos (ListEditView / DrawerBox), se incorporó el interruptor “Continuar creando” en la esquina inferior izquierda:
- Al activar el interruptor y guardar (o presionar
Ctrl + Enter), el registro se almacena en la base de datos y el formulario permanece abierto con los campos limpios y el interruptor activo, permitiendo registrar decenas de elementos en serie sin tener que pulsar “Nuevo objeto” cada vez.
Filtros Interactivos por Columna y Atajo Ctrl + Enter
Section titled “Filtros Interactivos por Columna y Atajo Ctrl + Enter”- Botón Interactivo en Encabezados: El icono morado que indica un filtro activo en una columna de la tabla ahora es clickeable. Al presionarlo, abre directamente el diálogo
ColumnFilterDialogde esa columna, permitiendo inspeccionar la condición, modificarla o eliminarla con un clic. - Atajo
Ctrl + Enteren Filtros: En el panel lateral de filtros y en el diálogo por columna, presionarCtrl + Enteraplica los filtros inmediatamente desde el teclado sin requerir el cursor.
Regla auto_create_target en Automatización Kardex
Section titled “Regla auto_create_target en Automatización Kardex”Se incorporó la regla auto_create_target en la automatización Kardex para crear automáticamente filas en la tabla física de existencias destino:
- Al registrar una entrada o movimiento, el sistema valida si la combinación de producto y almacén ya existe en la tabla de inventario acumulado. Si no existe, la crea automáticamente con valores predeterminados opcionales, sin requerir triggers ni funciones en PostgreSQL.
{ "auto_create_target": { "target_table": "tabla_existencias", "match_columns": [ { "source": "t10c1", "target": "id_producto" }, { "source": "t10c2", "target": "id_almacen" } ], "default_values": { "estado": "ACTIVO" }, "only_positive": true }}Tabla de Correcciones y Optimizaciones
Section titled “Tabla de Correcciones y Optimizaciones”| Componente | Versión | Tipo | Descripción |
| :--- | :---: | :---: | :--- |
| Carga de Archivos (file_picker) | v1.26.0 | Corrección | Solucionado el problema con el plugin de selección de archivos que impedía cargar llaves de acceso, firmas y logotipos corporativos. |
| Diálogos Modales (AxolDialog) | v1.26.0 | Corrección | Corregido el cálculo de escalamiento y dimensiones al anidar diálogos en la exportación CSV y drawers laterales. |
| Consultas SQL de Agregación | v1.26.0 | Optimización | Las propiedades configuradas con snapshot se excluyen de la recalculación en sentencias sumFromByTable durante la consulta (fetch), preservando los valores físicos congelados. |
| Vistas de Configuración | v1.26.0 | Optimización | Estandarización de colores, márgenes y soporte consistente entre tema claro y tema oscuro. |
| Sub-tablas Expandidas | v1.25.0 | Corrección | Solucionada la visualización y funcionamiento de los botones de edición y eliminación rápida en objetos dentro de la vista expandida de una sub-tabla al abrirse desde el drawer de edición. |
| Tablas Paginadas | v1.25.0 | Corrección | Corregido el error de aserción del scroll que se disparaba ocasionalmente al cambiar de página en tablas con paginación activa. |
| Colecciones y Etiquetas | v1.25.0 | Corrección | Solucionado el problema que impedía mostrar adecuadamente los valores de colecciones y etiquetas en campos de sub-tablas. |
| Arquitectura de Metadatos | v1.25.0 | Optimización | Migración interna para utilizar column_name como clave primaria en la tabla del sistema properties. |
Historial de Versiones del Mes
Section titled “Historial de Versiones del Mes”[1.26.0] 2026-09-30
Section titled “[1.26.0] 2026-09-30”Agregado
- Comando
only_readpara impedir edición en propiedades. - Comando
visible_in_createpara impedir visualización de propiedad al crear objeto. - Comando
sequencepara asignar valores numéricos secuenciales a una propiedad. - Comando
column_showpara listas de objetos. - Comando
filterspara filtros persistentes en listas de objetos. - Comando
snapshotpara guardar valores aunque este mantenga formulas. - Comando
inheritpara heredar valores del objeto padre en listas de objetos y propiedades. - Comando
defaultpara asignar valores por defecto literales o dinámicos a una propiedad. - Comando
foreign_virtualpara inyectar propiedades virtuales en diálogos de selección de referencia. - Soporte de
filtersy condición reactivawhenen propiedades de referencia. - Clave
from_formensum_from.matchpara vincular valores contextuales del formulario en propiedades virtuales de referencias. - Listas de objetos para 1:N.
- Motor de automatizaciones versión 2. Ahora los usuarios pueden crear sus propias automatizaciones mediante la vista de edición de automatizaciones.
- Formularios personalizables con grilla responsiva (1 a 6 columnas), ancho de drawer dinámico y diseñador visual en Ajustes.
- Vinculación de formularios a vistas con soporte para botón de creación primario y botones secundarios en menú desplegable.
- Previsualización de pdf al descargar.
Mejora
- Formulas dentro de
sum_from. - Diseño de vistas de configuraciones.
Corregido
- Error en carga de archivos como llaves de acceso o logos.
[1.25.0] 2026-09-20
Section titled “[1.25.0] 2026-09-20”Agregado
- Soporte para ancho fijo en columnas de plantillas PDF (
widthycolumnWidths). - Atajo
Ctrl + Enteren ventanas de filtros para aplicarlos. - Switch para continuar creando en el formulario de creación de objeto.
- Editor de plantillas de PDF con vista previa en configuraciones.
- Editor de logos y marca en configuraciones.
- Regla
auto_create_targeten automatización Kardex para crear automáticamente filas en tablas de existencias.
Mejora
- Ahora el icono que indica si existe un filtro en una columna es interactivo y permite abrir el diálogo de filtros.
Corregido
- Visualización de botones de edición y eliminación en objetos dentro de la vista expandida de una sub-tabla al abrirse desde el drawer de edición.
- Error de aserción del scroll al cambiar de página en la vista de tabla con paginación.
- Error que impedía mostrar los valores de colecciones y etiquetas en los campos de sub-tablas.