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, editar reglas ERP y gestionar la configuración (API Key, zona horaria, 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:
erp_rules.| 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.
bridge_table o erp_rules) y el estado que reporta el planificador para ese perfil. Si aplica, muestra el período actual que el agente está considerando.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. |
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 las reglas de integración que el agente aplica al escribir en el base de datos, solo para perfiles cuyo modo de mapeo sea erp_rules.
mappingMode erp_rules).Si aún no has elegido perfil o no hay reglas cargadas, verás un mensaje indicando que debes seleccionar un perfil con modo erp_rules. Tras cargar correctamente, se muestra el editor completo.
Reglas ERP — sin reglas cargadas
Reglas ERP — reglas cargadas
Bloque superior del editor (Descripción del archivo de reglas + Archivo:).
| Componente | Función |
|---|---|
| Descripción del archivo de reglas | Texto libre que describe el conjunto de reglas (qué perfil o proceso cubren). Se guarda con el archivo. |
Archivo: ruta |
Ruta del archivo de reglas en el servidor (solo lectura informativa; indica dónde persisten los datos, por ejemplo ./config/erpRules.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 opcional con identificador técnico (por ejemplo update_ticket_invoice_refs). Útil para documentar y localizar la regla en logs o revisiones. |
| ✕ | Elimina esta regla del conjunto. |
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. |
whenNoMatch (lista) |
Qué hacer cuando el SELECT no devuelve filas. Opciones en pantalla incluyen: por defecto (según expectsRow), apply (continuar hacia idempotencia/apply, por ejemplo INSERT), skip, fail, alert (no-match inesperado, advertencia en log), notify (no-match esperado, información en log). |
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. |
| Valor 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). |
expectsAffected |
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 y hace scroll hasta la nueva tarjeta. |
| Guardar | Envía al servidor el archivo de reglas (descripción global + todas las reglas editadas). El resultado (éxito o detalle del error) aparece brevemente en un cuadro bajo los botones. |
Reglas ERP — escritura de datos
Uso: ajustar cómo se buscan, validan y escriben los tickets en el ERP desde el panel, sin editar a mano el JSON en disco salvo que tu proceso lo requiera; los cambios efectivos dependen de permisos y de cómo esté desplegado el agente.
Propósito: consultar identificadores del despliegue y editar parámetros clave del agente desde el panel (API key, zona horaria, conexiones a base de datos y perfiles).
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). |
| 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
mssql, mysql2, pg).mssql.
Configuración — listado de conexiones
Configuración — nueva conexión
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í |
| Configuración (API key, zona horaria, 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, añadir o corregir conexiones, revisar 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.