Guía para el usuario del panel de control
Documento orientado al usuario final. Describe el propósito del agente y el uso de cada sección principal del panel de control.
La interfaz web sirve para supervisar el estado del servicio, ver historial de ejecuciones, consultar auditoría por ticket, lanzar sincronizaciones manuales, revisar reintentos, descargar o enviar reportes, editar archivos de reglas ERP, gestionar múltiples perfiles y administrar la configuración (API Key, zona horaria, email de reportes, conexiones y perfiles) desde el panel.
Propósito: crear la cuenta inicial que protege el acceso al panel.
La primera vez que abres la interfaz web del agente —una vez completados la instalación y la configuración inicial del servicio— el sistema comprueba si ya existe algún usuario registrado. Si no hay ningún usuario, aparece un modal sobre el panel para registrar un primer usuario.
Primer registro del administrador
| Campo | Qué debes indicar |
|---|---|
| Usuario | Nombre de acceso al panel (entre 2 y 64 caracteres). |
| Contraseña | Contraseña de la cuenta (mínimo 8 caracteres, máximo 64). |
| Confirmar contraseña | Debe coincidir exactamente con la contraseña anterior. |
Uso: define una cuenta segura para el responsable técnico o administrador que gestionará el agente. Los accesos posteriores se harán con la pantalla «Acceso al panel»; desde Configuración podrás dar de alta usuarios adicionales cuando lo necesites.
En la navegación verás las opciones de:
| Elemento | Significado |
|---|---|
| DEV / PROD (insignia) | Ambiente en el que está corriendo el agente. El valor viene del estado del servicio (por ejemplo PROD en producción). |
| Nombre de usuario | Usuario con el que iniciaste sesión en el panel (por ejemplo admin). Solo visible cuando hay una sesión activa. |
| Cerrar sesión | Cierra la sesión actual en el servidor. Se mostrará la pantalla «Acceso al panel» para iniciar sesión de nuevo. |
| Oscuro / Claro | Botón para alternar tema (claro u oscuro). La preferencia se guarda en el navegador cuando es posible. La etiqueta indica el modo al que pasarás al hacer clic (en tema claro verás «Oscuro»; en tema oscuro, «Claro»). |
| idle, running, etc. | Estado del planificador tal como lo reporta el agente (por ejemplo en reposo o ejecutando trabajo). |
| Actualizado: … | Hora local de la última actualización del estado mostrado en pantalla. Esa información se refresca de forma periódica automáticamente (aprox. cada 10 segundos). |
Cabecera del panel
Propósito: iniciar sesión en el panel con una cuenta ya registrada.
Una vez creado al menos un usuario del panel, cada visita a la interfaz web exige autenticación.
Acceso al panel
| Campo | Qué debes indicar |
|---|---|
| Usuario | Nombre de acceso registrado en el panel. |
| Contraseña | Contraseña de esa cuenta (mínimo 8 caracteres). |
Uso: accede con la cuenta que te hayan asignado. Si es la primera vez que usas el panel y aún no existe ningún usuario, verás en su lugar la pantalla «Crear primer usuario» descrita al inicio de esta guía.
Propósito: vista general rápida.
Uso: comprobar de un vistazo si los perfiles están activos y si hubo ejecuciones recientes sin abrir el detalle completo.
Dashboard — tema claro
Dashboard — tema oscuro
Propósito: historial de sincronizaciones (runs).
Ejecuciones
| Columna | Qué muestra |
|---|---|
| Run ID | Identificador único de la ejecución (en pantalla se acorta; el valor completo aparece al pasar el cursor o en auditoría). |
| Perfil | Nombre legible del perfil de configuración (si está definido); si no, verás el ID. |
| Período | Período contable o de cierre que se procesó (por ejemplo 2026-03-3). |
| Estado | Resultado global del run (por ejemplo success, failed, running). |
| Inicio | Fecha y hora local en que comenzó la ejecución. |
| Duración | Tiempo transcurrido en segundos con un decimal (por ejemplo 12.3s), o — si no hay dato. |
| Tickets | Resumen numérico por tipo de resultado; ver símbolos abajo. |
| Error | Texto breve del fallo si lo hubo, o — si no hubo error. El mensaje completo suele mostrarse al pasar el cursor sobre la celda. |
| Reporte | Acciones sobre el reporte de la ejecución: 📄 descarga un PDF; 📧 envía el reporte por email al destinatario configurado en Configuración → Email de reportes. |
En una sola celda verás cinco contadores juntos, en este orden:
| Símbolo | Significado |
|---|---|
| ✅ | Aplicados: tickets escritos correctamente en el destino según las reglas del perfil. |
| ⏭ | Omitidos: tickets que el agente no volvió a aplicar (por ejemplo ya procesados o fuera de alcance en esa corrida). |
| ⚠ | Conflicto: tickets donde hubo conflicto de negocio (por ejemplo duplicado o política alert_only), sin tratarlos siempre como error técnico fatal del run. |
| ❌ | Fallidos: tickets que no se pudieron aplicar por error al procesarlos. |
| 📋 | Sin coincidencia: tickets para los que no hubo fila o regla coincidente en el destino según la lógica del perfil (no_match). |
— (guión): no se registró mensaje de error para esa ejecución (típico en runs exitosos).Ejemplos del tipo de mensajes que pueden aparecer (el texto exacto depende del fallo real):
Uso: auditar qué se sincronizó, cuándo y con qué resultado; localizar errores o períodos problemáticos; saltar a Auditoría con un clic.
Propósito: dos funciones en la misma pantalla.
Permite forzar una sincronización sin esperar al ciclo automático del planificador.
Lista los trabajos que el agente reintentará tras fallos (perfil, período, estado, número de intentos, próximo intento, último error).
Uso: disparar una corrida puntual (por ejemplo tras corregir datos en destino) y vigilar colas de reintento.
Reintentos
Propósito: revisar ticket por ticket qué ocurrió en las sincronizaciones: acción aplicada, motivo, fechas y vínculo con la ejecución (run).
Auditoría
También puedes llegar aquí desde Ejecuciones haciendo clic en una fila; el panel seleccionará perfil y run y ejecutará la búsqueda.
Auditoría — filtros de búsqueda
Debajo de los filtros y de la tabla aparece un resumen del tipo «X–Y de Z», botones Anterior / Siguiente e indicación de página actual. Cambiar Resultados por página con un perfil ya seleccionado puede relanzar la búsqueda desde la primera página.
| Columna | Qué muestra |
|---|---|
| Run | Inicio del ID de la ejecución (acortado); el identificador completo suele verse al pasar el cursor. |
| Período | Período del ticket en esa corrida. |
| Estación | Identificador de estación (acortado en pantalla). |
| Folio | Folio del ticket. |
| UUID | UUID del ticket facturado (acortado en pantalla). |
| Facturado | Fecha/hora de facturación. |
| Acción | Resultado para ese ticket: por ejemplo applied, skipped, conflict, failed, no_match. |
| Razón | Texto explicativo o técnico (puede truncarse en la tabla; ver detalle en el modal). |
| Fecha | Cuándo se registró la entrada de auditoría. |
Auditoría — listado de tickets
Haz clic en una fila para abrir Detalle del ticket. Ahí verás, entre otros datos, el nombre del perfil, período, run completo, estación, folio, fechas y la razón completa. Junto a la acción aparece una leyenda en español (por ejemplo: aplicado correctamente, omitido, conflicto, error, sin coincidencia).
Cierra el modal con Cerrar, clic fuera del cuadro o la tecla Escape.
Auditoría — detalle de ticket
Uso: investigar discrepancias entre UFUL y el destino, entender por qué un ticket fue omitido o marcado en conflicto, y cruzar información con el run y el período.
Propósito: definir y editar los archivos de reglas de integración que el agente aplica al escribir en la base de datos del cliente. Cada perfil referencia un archivo de reglas por su identificador.
Si aún no has cargado ni creado un archivo, verás el mensaje: «Selecciona un archivo de reglas para editarlo o crea uno nuevo con el botón Crear.»
Al cambiar de archivo o pulsar Crear con cambios sin guardar, el panel muestra un aviso «Cambios sin guardar» para confirmar si deseas descartarlos.
Reglas ERP — sin reglas cargadas
Reglas ERP — reglas cargadas
Bloque superior del editor (Nombre del archivo de reglas, Descripción del archivo de reglas e ID de reglas).
| Componente | Función |
|---|---|
| Nombre del archivo de reglas | Etiqueta legible del conjunto (máximo 128 caracteres). Obligatoria al guardar. Aparece en selectores de perfiles y en el listado de archivos. |
| Descripción del archivo de reglas | Texto libre que describe qué perfil o proceso cubren las reglas. Se guarda con el archivo. |
ID de reglas: identificador |
Identificador único y permanente del archivo en el servidor (solo lectura). Se genera automáticamente al crear el archivo; los perfiles lo referencian internamente. Los datos persisten en config/rules/<id>.json. |
Reglas ERP — cabecera de las reglas
Bloque 📋 Parámetros de Binding Disponibles con botón ▶ / ▼ para expandir o contraer.
:stationId, :folio, :uuid, etc.) que puedes usar en las sentencias SQL de match y apply, más columnas devueltas por tu match.sql (bindings dinámicos).match.sql.
Reglas ERP — parámetros de binding
Cada regla es una tarjeta numerada (#1, #2, …) con varios bloques.
| Elemento | Función |
|---|---|
| #N | Orden de la regla en la lista (la ejecución respeta el orden definido por el motor). |
| Nombre de la regla | Campo con identificador técnico (por ejemplo update_ticket_invoice_refs). Requerido al guardar; debe ser único dentro del archivo. |
| ✕ | Elimina esta regla del conjunto (pide confirmación). |
Campo Descripción con texto legible que explica qué hace la regla (para quien mantenga la configuración).
match — Consulta de búsquedaPrimera fase: localizar la fila o el contexto en la base ERP antes de escribir.
| Campo | Función |
|---|---|
| SQL | Consulta SELECT que usa bindings (:stationId, :folio, etc.). Las columnas devueltas alimentan el resto de la regla (bindings dinámicos para idempotencia y apply). |
expectsRow (casilla) |
Si está marcada, el match debe devolver al menos una fila; si no hay filas, se considera error según la política. Si no está marcada, «no hay fila» puede ser un caso válido y el selector whenNoMatch no aplica (el motor continúa hacia apply). |
whenNoMatch (lista) |
Qué hacer cuando el SELECT no devuelve filas (solo si expectsRow está marcada). Opciones en pantalla: por defecto (según expectsRow), apply (continuar hacia idempotencia/apply, por ejemplo INSERT), skip, fail, alert (no-match inesperado; log.warn en el servidor), notify (no-match esperado; log.info en el servidor). |
Reglas ERP — regla de búsqueda
Estas reglas indican al agente cómo actuar al validar si un campo específico tiene o no un valor registrado en la tabla del cliente.
Si el campo está vacío o si el valor coincide con el valor entrante, la regla se considera válida y no falla.
En cambio, si el campo en la tabla del cliente contiene un valor y este es diferente al valor entrante, la regla falla y se aplica la política correspondiente.
Esto evita que el agente realice cambios no deseados en campos donde el cliente ya cuenta con datos previamente establecidos.
Aunque todo dependerá de los campos a modificar definidos en la regla de aplicación (apply).
La regla de idempotencia y la política ante conflicto se configuran como una o más sub-reglas dentro del bloque Reglas de idempotencia.
Para cada regla de idempotencia puedes definir:
| Campo | Función |
|---|---|
| Campo a verificar | Nombre de columna del resultado del match (por ejemplo existing_uuid). Si ese campo ya tiene valor, se considera que el dato «ya está» y se aplica la política indicada. |
| Campo entrante | Binding del valor entrante a comparar (por ejemplo uuid); puedes dejarlo vacío según cómo esté definida la regla en tu archivo. |
| Política de conflicto | alert_only: registra el conflicto en auditoría pero no bloquea el run. block: detiene el run y lo marca como fallido. |
Puedes añadir varias reglas con + Agregar regla de idempotencia y eliminar cada una con ✕.
Reglas ERP — reglas de idempotencia
apply — Pasos de escrituraEn esta sección se define la consulta de escritura que el agente ejecutará para aplicar los datos de cada ticket recibido.
Además, aquí también se pueden configurar los parámetros de enlace (binding params) para utilizar los valores de los tickets provenientes de UFUL.
| Campo | Función |
|---|---|
| Paso N + ✕ | Identifica el paso y permite eliminarlo. |
| SQL | Sentencia que modifica datos (por ejemplo UPDATE … SET uuid = :uuid WHERE folio = :folio). |
Se esperan filas afectadas |
Validación de filas afectadas: sin validación, ≥1, =1, =0, ≥2. Ayuda a detectar errores silenciosos (por ejemplo un UPDATE que no tocó ninguna fila cuando debía). |
+ Agregar paso añade otro bloque de paso dentro de la misma regla.
transactionalCasilla transactional — envolver los pasos apply en una transacción.
| Botón | Función |
|---|---|
| + Agregar regla | Añade una regla nueva al final con valores por defecto. |
| Guardar | Persiste el archivo en el servidor (nombre, descripción y reglas). Los cambios en archivos existentes se aplican en la próxima sincronización. |
| Eliminar Reglas | Elimina todo el archivo de reglas del servidor (pide confirmación). No está permitido si algún perfil sigue referenciando ese archivo; en ese caso el panel muestra un aviso con el motivo. |
Reglas ERP — escritura de datos
Uso: mantener uno o varios conjuntos de reglas reutilizables, asignarlos a distintos perfiles desde Configuración → Perfiles, y ajustar SQL, validaciones e idempotencia sin editar JSON en disco manualmente.
Propósito: consultar identificadores del despliegue y editar parámetros clave del agente desde el panel (API key, zona horaria, email de reportes, conexiones a base de datos, perfiles y usuarios del panel).
Configuración
| Elemento | Función |
|---|---|
| Client ID | Identificador del cliente. Puedes hacer clic en la fila para copiar el valor. |
| Instance ID | Identificador de instancia de la aplicación. También es copiable al clic. |
| Ambiente | Muestra el ambiente de configuración (por ejemplo DEV). |
| Versión | Versión del agente desplegado. |
| Exportar configuración | Descarga un archivo JSON con la configuración (nombre típico config-AAAA-MM-DD.json). Útil para respaldo o revisión. |
Configuración — datos del agente
Configuración — API Key
Configuración — zona horaria
Configuración — email de reportes
mssql, mysql2, pg).mssql.
Configuración — listado de conexiones
Configuración — nueva conexión
El agente puede operar con varios perfiles en paralelo. Cada perfil define su propia conexión de BD, archivo de reglas ERP y conjunto de estaciones. No existe un «perfil activo» global: en otras pestañas eliges el perfil al filtrar o al ejecutar sync manual.
| Campo | Qué debes indicar |
|---|---|
| Nombre del perfil | Obligatorio; máximo 64 caracteres. Debe ser único (sin distinguir mayúsculas/minúsculas). |
| Conexión de BD | Obligatoria; elige una de las conexiones ya dadas de alta en esta misma sección. |
| Archivo de reglas ERP | Obligatorio. Puedes Seleccionar archivo existente… (archivos creados en Reglas ERP o subidos previamente) o pulsar Subir nuevo para cargar un .json con un array rules. Tras subir, el panel muestra el nombre del archivo y el número de reglas detectadas. |
| Estaciones asociadas | Lista de checkboxes con las estaciones disponibles para la API Key actual. Debes marcar al menos una. |
Restricciones al guardar:
Configuración — listado de perfiles
Configuración — editar perfil
Propósito: gestionar las cuentas de acceso al panel y asignar el rol de cada una.
Esta sección solo es visible para usuarios con rol admin. Los permisos efectivos los calcula el servidor según el rol; no se pueden definir permisos personalizados por usuario.
Configuración — usuarios del panel
Tabla con las cuentas registradas:
| Columna / control | Comportamiento |
|---|---|
| Usuario | Nombre de acceso al panel. |
| Rol | Selector con los valores viewer, operator o admin. Al cambiar el valor, el rol se guarda de inmediato en el servidor. |
| Eliminar | Pide confirmación y elimina la cuenta. No puedes eliminar tu propio usuario mientras tienes la sesión abierta. |
Formulario para dar de alta otra cuenta:
| Campo | Qué debes indicar |
|---|---|
| Usuario | Nombre de acceso (entre 2 y 64 caracteres). |
| Contraseña | Contraseña de la cuenta (mínimo 8 caracteres). |
| Rol | Rol inicial: viewer, operator o admin. Por defecto aparece viewer. |
Cada rol tiene un conjunto fijo de permisos. La interfaz oculta pestañas y acciones que tu rol no permite; el servidor también rechaza operaciones no autorizadas aunque se intenten por API.
| Área del panel | viewer | operator | admin |
|---|---|---|---|
| Dashboard (estado y perfiles) | Sí | Sí | Sí |
| Ejecuciones (historial) | Sí | Sí | Sí |
| Reintentos (cola pendiente) | Sí | Sí | Sí |
| Sync manual (bloque «Ejecutar sync manual» en Reintentos) | No | Sí | Sí |
| Auditoría | Sí | Sí | Sí |
| Reglas ERP (consulta y edición) | No | Sí (lectura y escritura) | Sí (lectura y escritura) |
| Descarga de reportes PDF (columna Reporte en Ejecuciones) | Sí | Sí | Sí |
| Envío de reportes por email (Ejecuciones o sync manual) | Sí | Sí | Sí |
| Configuración (API key, zona horaria, email de reportes, conexiones, perfiles) | No | No | Sí |
| Usuarios del panel (esta sección) | No | No | Sí |
Uso: operar el agente sin acceder al servidor solo por terminal: rotar API key, alinear zona horaria, configurar destino de reportes, añadir o corregir conexiones, crear y mantener varios perfiles y gestionar usuarios del panel (solo administradores). Para delegar acceso, asigna viewer a perfiles de consulta, operator a operación diaria y admin únicamente a quien deba modificar la configuración o las cuentas.