Appliance Local Flexor Gas
Guía técnica y operativa para la instalación, configuración y monitoreo del micro-servidor de estación, integración con sondas de tanques Veeder-Root, protocolo de dispensarios Transactor y balance volumétrico fiscal.
1. Arquitectura del Appliance Local
El Flexor Gas Appliance es un micro-servidor de borde (Edge Computing) que opera de forma ininterrumpida (24/7) en el cuarto de control de la estación de servicio. Su propósito principal es desacoplar el hardware físico de la estación (sondas de tanques y bombas dispensadoras) de la nube, garantizando despacho continuo incluso si la conexión a Internet se interrumpe temporalmente.
Características Principales del Appliance:
- Autonomía Local Offline: El Appliance almacena hasta 90 días de transacciones de despacho, lecturas volumétricas por segundo y aperturas de turno en su base de datos local SQLite cifrada con AES-256.
- Doble Puerto de Simulación / Hardware: Permite operar en modo simulación de laboratorio con generadores de tráfico realistas o conmutar al convertidor de puertos Moxa NPort conectado al hardware real sin recompilar el código.
- Certificación Criptográfica: Cada evento de despacho, corte de turno y recepción de combustible genera un hash SHA-256 inmutable con sello digital fiscal.
2. Módulo ATG Veeder-Root (Consola de Tanques)
El driver Veeder-Root del Appliance se comunica mediante sockets TCP/IP directamente con consolas TLS-350, TLS-450 y TLS-450 Plus a través de tarjetas Ethernet o interfaces serie RS-232 a Ethernet (puerto por defecto: 10001 o simulador en 15450).
Comandos de Comunicación Veeder-Root Soportados:
| Comando ASCII | Función | Datos Retornados | Frecuencia |
|---|---|---|---|
<SOH>i20100<ETX> |
In-Tank Inventory Report | Volumen bruto (L), volumen compensado a 20°C, altura combustible (mm), agua (mm), temperatura (°C) | Cada 4 segundos |
<SOH>i10100<ETX> |
System Status & Alarm Flags | Estado de sondas Mag 1/2, fuga intersticial, nivel crítico de agua y alarmas activas | Cada 10 segundos |
<SOH>i20200<ETX> |
Delivery Report (Descargas) | Registro histórico de volúmenes inicial y final detectados por la sonda en recepciones | Al terminar descarga |
15450. Simula dinámicamente el descenso de producto cuando los dispensarios despachan y el incremento gradual durante una descarga de pipa, respondiendo exactamente con las tramas hexadecimales estándar de Veeder-Root.
3. Módulo Transactor (Control y Monitoreo de Dispensarios)
El subsistema Transactor implementa el protocolo de bucle de corriente (Current Loop ATD / Gilbarco 2-Wire / Wayne CL) para el enlace continuo y la captura de despachos en tiempo real de bombas y mangueras.
3.1. Dashboard Unificado de Inicio (Visión Ejecutiva Integral)
A diferencia de la vista detallada de telemetría de tanques, el módulo de Inicio ofrece un tablero ejecutivo consolidado que unifica en una sola pantalla de alta visibilidad:
- Métricas Clave del Turno (KPIs): Volumen total acumulado despachado, inventario total disponible en planta, bombas en operación activa y estado de la sincronización hacia la nube.
- Inventario Sintético de Tanques: Barras de progreso con porcentajes de llenado, volumen neto actual, capacidad total y presencia de agua en fondo para cada combustible (Magna, Premium, Diésel).
- Forecourt Compacto en Vivo: Visualización simultánea del estado en tiempo real de todas las bombas de despacho de la estación sin requerir desplazamiento de pantalla (scroll).
- Últimas Transacciones Despachadas: Bitácora de tickets recientes con folio, bomba, combustible, litros, precio unitario e importe total.
3.2. Forecourt Compacto y Modo Monitoreo Pasivo vs Modo Simulación
Para estaciones con múltiples islas y alta afluencia vehicular, la vista de dispensarios cuenta con un diseño optimizado y una imagen de patio que brinda contexto visual inmediato:
Cuando el sistema está conectado a lazo físico de hardware (Moxa / bucle de corriente de bombas reales), opera en modo escucha pasiva. En este modo se ocultan deliberadamente los botones de intervención manual (Autorizar, Paro de Emergencia, Liberar Venta y Simular Despacho) para impedir que comandos externos interfieran con los computadores de las bombas o el flujo de caja del negocio.
Únicamente cuando se activa el Modo Simulador en la configuración del Appliance, la interfaz habilita los controles manuales para pruebas de laboratorio, validación de turnos, pruebas de corte y simulaciones de despacho instantáneas sin requerir flujo físico de hidrocarburos.
Diagrama de Estados de Bomba (Dispensario):
4. Recepción y Conciliación de Pipas
El módulo de recepciones resuelve una de las mayores exigencias regulatorias y financieras de la estación: la conciliación volumétrica entre los litros facturados por Pemex o el comercializador mayorista y los litros efectivamente recibidos en el tanque según la sonda de telemetría.
Procedimiento Estándar de Descarga (Paso a Paso):
- Verificación Documental: El operador ingresa el folio de remisión, placas de pipa, transportista y volumen a 20°C marcado en la factura de Pemex.
- Toma de Lectura Inicial (Sonda ATG): El Appliance consulta la sonda del tanque de destino y congela el volumen inicial y altura de agua en fondo (debe ser 0 mm).
- Interconexión y Descarga: Se conecta la manguera de descarga con línea a tierra. La telemetría detecta el incremento paulatino de producto.
- Periodo de Reposo (15 minutos): Se espera a la disipación de burbujas de aire y estabilización térmica.
- Toma de Lectura Final & Conciliación: El sistema calcula:
Merma (L) = Volumen Neto Recibido ATG - Volumen Facturado Remisión (a 20°C)
Tolerancia Máxima SAT / CRE: ±0.50% - Firma Digital: Se genera el certificado digital de descarga con hash SHA-256 y sello fiscal para auditoría.
5. Cortes de Turno y Balance Fiscal
El corte de turno concilia el inventario físico con las ventas acumuladas de los dispensarios y las entradas por pipa durante el turno de trabajo:
Inv. Inicial ATG + Recepciones Pipas - Ventas Dispensarios = Inv. Teórico Final
Diferencia de Balance = Inv. Físico ATG Final - Inv. Teórico Final
Sellado Fiscal SAT Anexo 30:
Al ejecutarse el corte, el sistema emite un ticket impreso con el desglose de ventas por manguera, forma de pago (efectivo, tarjetas, vales) y el balance volumétrico. Este registro queda sellado y se transmite automáticamente a la nube para formar parte del reporte de controles volumétricos diario.
6. Gestión de Alarmas y Eventos
El Appliance monitorea constantemente eventos físicos de seguridad ambiental e industrial:
| Tipo de Alarma | Gravedad | Causa | Acción Inmediata |
|---|---|---|---|
| Fuga Intersticial (Doble Pared) | CRÍTICA | Presencia de líquido en el espacio anular del tanque subterráneo | Detener despacho, avisar a Protección Civil y técnico acreditado ASEA |
| Presencia de Agua en Fondo | ADVERTENCIA | Condensación o filtración de agua superior a 25 mm | Purgar agua del tanque mediante succión inferior antes de que alcance la pichancha |
| Nivel Alto Llenado (95%) | OPERATIVA | Volumen total superando el límite seguro del tanque | Cerrar válvula de corte de pipa inmediatamente para evitar sobrellenado |
7. Persistencia Local SQLite & Sincronización a PostgreSQL Cloud
Uno de los mayores desafíos en la ingeniería de estaciones de servicio es la confiabilidad de los datos ante cortes intempestivos de energía eléctrica y fallas prolongadas de conectividad a Internet. Para resolver esto sin sobrecargar el hardware de campo, Flexor Gas adopta una arquitectura de persistencia zero-dependency:
¿Por qué SQLite en el Appliance Local en lugar de un motor pesado (PostgreSQL / MySQL)?
- Zero-Dependency & Zero-Maintenance: SQLite no es un servicio de servidor en ejecución, sino una biblioteca C/C++ embebida directamente dentro del proceso del Appliance. No consume 1-2 GB de memoria RAM en segundo plano, no abre puertos adicionales ni requiere un Administrador de Base de Datos (DBA) en la gasolinera.
- Resiliencia Total a Apagones (Modo WAL - Write-Ahead Logging): Las estaciones sufren micro-cortes y apagones frecuentes. En motores cliente-servidor convencionales, un apagón repentino durante una escritura a disco suele corromper los índices y bloquear el arranque del servicio. SQLite en modo WAL escribe en un archivo de bitácora secuencial (
appliance.db-wal) con operaciones atómicas ACID. Si la energía se corta a mitad de un despacho, el archivo se repara automáticamente al reiniciar en milisegundos sin pérdida ni corrupción de datos. - Portabilidad Absoluta (Single File): Toda la base de datos local reside en un único archivo
~/.flexorgas/appliance/appliance.db, facilitando respaldos automáticos instantáneos antes de mantenimientos de hardware. - Buffer Offline de 90 Días: El Appliance puede operar de forma continua sin conexión a Internet durante meses, acumulando cada litro despachado, variación de sonda y corte de turno.
Patrón Outbox y Sincronización Asíncrona hacia Azure PostgreSQL:
En la nube (Flexor Gas Cloud), los datos consolidados se almacenan en Azure Database for PostgreSQL Flexible Server por su soporte multi-tenant y manejo nativo de documentos JSONB (necesarios para los sellos del SAT Anexo 30). La sincronización entre el SQLite de la estación y el PostgreSQL de la nube opera bajo el Outbox Pattern:
CREATE TABLE OutboxSyncQueue (
EventId TEXT PRIMARY KEY,
StationId TEXT NOT NULL,
EventType TEXT NOT NULL, -- 'DISPENSE_FINISHED', 'SHIFT_CUT', 'DELIVERY_RECONCILED'
PayloadJson TEXT NOT NULL,
CreatedAtUtc DATETIME NOT NULL,
SyncStatus TEXT DEFAULT 'PENDING', -- 'PENDING', 'SYNCED', 'FAILED'
RetryCount INTEGER DEFAULT 0
);
Un servicio en segundo plano (CloudSyncWorker) lee lotes de eventos pendientes y los transmite vía HTTP POST seguro (mTLS 1.3 con firma HMAC-SHA256) a la nube. Al recibir confirmación (Ack HTTP 200), marca los registros locales como SYNCED, garantizando entrega garantizada (At-Least-Once Delivery) e idempotencia por hash criptográfico.
8. Control de Acceso RBAC (Super Administrador vs Supervisor)
El Appliance local está diseñado para operar en un entorno de estación física donde conviven diferentes perfiles de usuarios. El control de acceso está estructurado con reglas estrictas de segregación de funciones:
Matriz de Permisos y Roles en el Appliance Local:
| Función / Operación del Sistema | Super Administrador | Supervisor de Estación | Despachador | Auditor Fiscal |
|---|---|---|---|---|
| Configurar Nombre, Ciudad y Dirección de Estación | PERMITIDO | BLOQUEADO | BLOQUEADO | BLOQUEADO |
| Modificar Enlaces y API Keys a Azure Cloud | PERMITIDO | BLOQUEADO | BLOQUEADO | BLOQUEADO |
| Configurar Puertos de Hardware ATG / Transactor / Simulación | PERMITIDO | BLOQUEADO | BLOQUEADO | BLOQUEADO |
| Operar Despacho, Autorizar y Detener Bombas | PERMITIDO | PERMITIDO | Con PIN en Isla | BLOQUEADO |
| Registrar Recepción de Pipas y Conciliación | PERMITIDO | PERMITIDO | BLOQUEADO | Solo Lectura |
| Efectuar Corte de Turno y Arqueo Volumétrico | PERMITIDO | PERMITIDO | BLOQUEADO | Solo Lectura |
| Silenciar Chicharra / Reconocer Alarmas de Tanques | PERMITIDO | PERMITIDO | BLOQUEADO | Solo Lectura |
| Dar de Alta Usuarios y Resetear Contraseñas / PINs | Todos los Roles | Despachadores / Auditores | BLOQUEADO | BLOQUEADO |
| Cambiar Precios de Combustible por Litro | PERMITIDO | BLOQUEADO | BLOQUEADO | BLOQUEADO |
8.2. Ergonomía de Interfaz y Directrices de UX
- Cierre de Modales por Clic Externo (Backdrop): Cualquier ventana modal (usuarios, corte de turno, recepciones o precios) se cierra inmediatamente al hacer clic en el fondo oscurecido exterior sin necesidad de buscar el botón de cruz.
- Tooltips Informativos sin Alteración de Cursor: Las descripciones de ayuda aparecen suavemente tras posar el cursor durante 3 segundos sobre el elemento, manteniendo el cursor estándar del puntero (sin cambiar a signo de interrogación) y desvaneciéndose de forma instantánea al retirar el ratón.
- Identificador de Estación Única: La barra superior presenta un distintivo con el nombre comercial, municipio y número de permiso CRE configurado en el sistema local, eliminando controles desplegables que pudieran sugerir cambio a estaciones remotas.
9. Instalador Único y Despliegue
Flexor Gas incluye un instalador unificado compatible con macOS, Linux (Ubuntu 22.04 LTS / Debian) y Windows 10/11 / Windows Server:
Comando de Instalación en Linux / macOS:
chmod +x scripts/install.sh
./scripts/install.sh --install
Comando de Instalación en Windows (PowerShell Administrador):
Set-ExecutionPolicy Bypass -Scope Process -Force
.\scripts\install.ps1 -Install
Verificación de Servicio Activo:
# Respuesta esperada: {"status":"Healthy","appliance":"FlexorGas.Appliance.Host"}
10. Diagnóstico y Soporte Técnico
En caso de contingencias técnicas o pérdida de comunicación con periféricos:
- Sin comunicación con ATG Veeder-Root: Verifique que la IP de la consola o del conversor Moxa responda al comando
ping <IP>y que el puerto 10001 no esté bloqueado por el firewall local. - Dispensarios no responden a autorización: Revise las fuentes de alimentación del bucle de corriente (24V/45mA) y el led de actividad RX/TX del convertidor de lazo.
- Fallo de sincronización hacia la nube: Los registros quedan encolados localmente. Al restablecerse el enlace a Internet, el servicio sincronizará automáticamente los bloques pendientes sin duplicación de folios.