Saltar al contenido

Caso 07 · Automatización · Operaciones · Productos

Conectar un ERP local con la web sin exponerlo, y sin escribir en él hasta tener autorización.

Camsmark vende material eléctrico e industrial con una tienda para Panamá y otra para Venezuela. Cada sede usa SAINT en un equipo Windows local con SQL Server. Construimos un agente que lee el inventario de cada sede y lo publica en la web por una conexión saliente, con reintentos, cola local y protecciones contra duplicados.

Proyecto
Agentes de integración con SAINT
Contexto
Camsmark · e-commerce con tiendas en Panamá y Venezuela
Por Antonio Duque
Revisado contra el código y la documentación el

01

Contexto y necesidad

Sin integración, el precio y el stock de la web dependían de cargas manuales. Las dos sedes tienen ediciones distintas de SAINT, listas de precio ordenadas de forma diferente y monedas distintas.

En Venezuela la conexión es satelital y está detrás de una red compartida: no se puede abrir un puerto ni depender de una IP pública. La web no debía entrar a la red del cliente.

02

Mi responsabilidad

  • Diseñé el agente y su contrato con la plataforma, corregí el esquema de lectura verificándolo en sitio, construí las defensas contra el doble descargo, el diagnóstico y el paquete de instalación, y participé en la instalación de Panamá.
  • En el lado web construí, en coautoría, el importador, los endpoints, el latido y las alertas de salud.

Trabajo en equipo

Proyecto en equipo con Noe Rivas, co-desarrollador y revisor, que lideró el piloto en Venezuela, endureció el servicio de Windows y revisó los cambios. El dueño del negocio decide el catálogo y los técnicos del cliente ejecutan en cada sede. La interfaz de la tienda es trabajo compartido.

03

Estrategia y decisiones

  1. Agente saliente: todas las conexiones salen del equipo del cliente por HTTPS; no hay puertos abiertos ni acceso entrante.
  2. Go como lenguaje: un binario único, compilado para Windows sin dependencias de C, que corre como servicio nativo.
  3. Cola local en SQLite para sobrevivir a cortes de enlace sin perder datos ni duplicar operaciones.
  4. Lector intercambiable: SQL Server directo (en uso en ambas sedes), servicio REST de SAINT (descartado porque no existía en sitio) o archivo CSV como plan de respaldo.
  5. Leer primero; escribir en el ERP solo con configuración completa y autorización escrita.

04

Qué construí

  • Agente con modos de diagnóstico, piloto e inventario de una sola vez, y tres ciclos: inventario cada 15 minutos (no reenvía si nada cambió), ventas cada 5 minutos y latido cada 5 minutos.
  • Lectura de solo dos tablas del ERP (productos y existencias por depósito), con la columna de precio elegida de una lista cerrada para evitar inyección SQL. En Panamá, con un usuario de base de datos dedicado y solo de lectura.
  • Envío por lotes con token independiente por sede; el servidor rechaza precios que no correspondan a la sede del token.
  • Reintentos con espera exponencial, tiempos máximos, arranque retrasado, reinicio ante fallos y bitácora rotativa en español.
  • Protecciones del lado web: el agente nunca envía imágenes ni precios de oferta, no manda lotes vacíos y detiene el proceso si el servidor responde con una carga parcial.
  • Panel de agentes y sincronizaciones con aviso de “sin señal” y un comando de alineación con respaldo y reversión.

Capturas reales

Pantallas del sistema real. Las de ZoDesk vienen de su modo demo, con un concesionario inventado; las marcadas «En producción» son páginas públicas capturadas el 14 de noviembre de 2026.

Tienda de Panamá: el precio y las existencias de la ficha vienen de la lectura de SAINT.

Tienda de Panamá: el precio y las existencias de la ficha vienen de la lectura de SAINT.

Ficha de producto en la tienda de Camsmark Panamá con precio en dólares y la indicación En stock con dieciséis disponibles.

05

Cómo funciona

  1. SAINT en la sede

    SQL Server local con productos y existencias por depósito.

  2. Agente Go

    Servicio de Windows que lee, calcula un resumen del lote y lo guarda en su cola local.

  3. Salida HTTPS

    Envío por lotes con token de la sede, reintentos y espera exponencial.

  4. Importador

    Aplica cada fila en una transacción y guarda la referencia del lote.

  5. Precio y stock por tienda

    Panamá en dólares y Venezuela en bolívares, cada una con su lista y su depósito.

  6. Latido y alertas

    El panel muestra el estado de cada agente y avisa si deja de reportar.

Demostración

El mapa de la integración

Cuatro flujos, cuatro estados distintos

Diagrama

Sede del cliente (Windows)

SAINT + SQL Server · agente Go como servicio · cola SQLite

Solo HTTPS saliente →
token por sede · reintentos

Plataforma web

Laravel · importador · panel de agentes · alertas

  • Lectura del ERPSAINT · SQL Server → Agente Go (solo SELECT)En producción
  • Publicación del catálogoAgente Go → Precio y stock por tiendaEn producción
  • Recepción de pedidosTienda web → Cola de pedidos del agenteConstruido y probado
  • Escritura de descargosAgente Go → SAINT (requiere autorización)Pendiente

Panamá: dólares, con su propia lista de precio y depósito. Venezuela: bolívares, con su lista y su depósito. La web nunca entra a la red del cliente.

06

Herramientas y su función

Go
Agente multiplataforma con lectura del ERP, cola, reintentos y servicio de Windows.
SQL Server
Base de datos de SAINT en cada sede, leída con permisos mínimos.
SQLite
Cola local y registro para no perder ni duplicar operaciones.
Laravel 10 y Filament 3
Importador, endpoints, panel de agentes y alertas.
PowerShell
Instalación, piloto y diagnóstico en el equipo del cliente.

Evidencias disponibles

  • 157 pruebas automatizadas del agente en Go, ejecutadas en verde el 14 de noviembre de 2026, incluido un corte de luz simulado durante un descargo.
  • Pruebas de integración del lado web para el importador, los pedidos, el latido y el contrato con el agente.
  • Documentos de cierre técnico y operativo, e informe de incidentes con su tratamiento.

07

Estado actual

  • 1. Lectura del ERP

    Operativa en ambas sedes: Venezuela como servicio desde agosto de 2026 y Panamá instalado el 10 de agosto de 2026.

    En producción
  • 2. Publicación del catálogo

    Precio y stock por tienda se actualizan desde el agente. La reconciliación de productos ausentes existe, pero está apagada hasta validarla.

    En producción
  • 3. Recepción de pedidos

    Endpoints construidos y probados. No operativo: el pago en línea está deshabilitado y la venta se cierra por WhatsApp.

    Construido y probado
  • 4. Escritura de descargos en SAINT

    Construida y probada con tres defensas contra el doble descargo. Pendiente de configuración y de autorización escrita del cliente; nunca se ha escrito en SAINT.

    Pendiente
  • Monitoreo continuo

    La auditoría del 5 de noviembre de 2026 registró intermitencias de latido y un agente desconectado; su tratamiento está en curso.

    En desarrollo

“En producción” solo se usa cuando la documentación del proyecto lo confirma. “Construido y probado” significa que hay pruebas automatizadas, no que esté en uso. “Propuesta” es una idea documentada, no algo construido.

Próximos pasos

  • Restablecer la conexión del agente de Panamá y fijar la versión del binario desplegado.
  • Separar los datos globales del producto (nombre y enlace) para que los agentes de dos sedes no se pisen.
  • Confirmar con el cliente la moneda de una de las listas de precio de Venezuela.
  • Validar y activar la reconciliación; obtener la configuración y la autorización antes de habilitar descargos.

08

Aprendizajes

Verificar el esquema en sitio: tres supuestos sobre el ERP resultaron falsos al conectarse.
Las listas de precio pueden estar ordenadas al revés entre sedes: copiar una configuración habría vendido más barato sin un solo error visible.
En un ERP aparecen conceptos administrativos como si fueran productos; hay que filtrarlos.
No se escribe en las tablas de un ERP sin autorización explícita, aunque el código esté listo.

Servicios relacionados

Casos conectados