Contexto
ABASA Dashboard es el panel central del ERP de ABASA (AbasaMx), una plataforma que reúne contabilidad, cuentas por cobrar y pagar, banca, ventas, inventario y reportes en una sola interfaz. Su rasgo distintivo es HEX, un copiloto financiero con inteligencia artificial que no se limita a conversar: ejecuta acciones reales sobre los datos de la empresa.
El sistema se reparte en dos repositorios que evolucionan en paralelo: un frontend SSR en Astro con React 19 (ABASA-ERP-DASHBOARD) y una API en Node.js/Express 5 (ABASA-ERP-API). El desarrollo arrancó a finales de 2025 y continúa activo en producción, sirviendo el panel bajo dashboard.abasa.app.
El reto
Un ERP financiero tiene dos exigencias difíciles de conciliar. Por un lado, profundidad de dominio: contabilidad de pólizas, conciliación bancaria, manejo multi-moneda y catálogos fiscales del SAT. Por otro, accesibilidad: que un usuario no contable pueda preguntar por sus ventas, sus saldos o generar un reporte sin navegar decenas de pantallas.
La apuesta fue resolver esa segunda parte con un copiloto que opere sobre la base de datos real en lugar de inventar respuestas. El reto técnico de fondo era construir un agente de IA confiable: que solo hable de lo que de verdad consultó o ejecutó, que mantenga conversaciones largas sin perder contexto, y que sea extensible sin reescribir su núcleo.
Arquitectura
El frontend es una aplicación Astro en modo server (SSR con adaptador de Node) que monta islas de React 19. Toda la lógica de cliente vive en TypeScript bajo src/assets/react, con Zustand para estado, Recharts para gráficas, i18next para internacionalización y Socket.IO para tiempo real. La interfaz de HEX (components/hex) incluye chat, selector de modelo, panel de uso de tokens y renderizado de respuestas estructuradas (gráficas, llamadas a API, tarjetas de datos).
El backend es una API REST en Express 5 organizada por módulos: accounting, customers, finances, inventory, purchases, sales, taxes, ai-hex, entre muchos otros. Persiste en MySQL (datos transaccionales), Redis (caché y banderas de despliegue) y MongoDB (catálogo público). La seguridad se apoya en JWT con refresh tokens, Helmet, CORS por dominios y rate limiting. Socket.IO empuja eventos en vivo al panel.
El núcleo de HEX es un loop agéntico real (services/financesChat/agentLoop.js). El modelo recibe un conjunto de tools y las invoca vía tool_calls; el servidor las ejecuta, devuelve el resultado real (role: "tool") y el modelo encadena hasta resolver. Como explica el propio código, “no hay forma de fingir una acción: el modelo solo puede hablar de lo que de verdad ejecutó porque ve el envelope/ERROR real en la conversación”. Las respuestas se transmiten en streaming (incluido el contenido de razonamiento) por SSE hacia el cliente.
Las capacidades de HEX se definen como skills auto-descubiertas: cada archivo en services/financesChat/skills/ se registra solo, sin tocar el registry. Entre ellas: resumen del dashboard financiero, directorio y notas de venta, corte diario, búsqueda difusa de clientes, búsqueda de entidades, memoria del usuario y generación de PDFs, presentaciones e imágenes.
El proveedor principal de IA es DeepSeek con el modelo deepseek-v4-flash (el código deja constancia de que deepseek-chat/deepseek-reasoner quedaron deprecados), con OpenAI (gpt-4o-mini) como fallback. La transcripción de voz usa OpenAI y la síntesis/clonación de voz se apoya en DashScope (CosyVoice).
Funcionalidades clave
- Copiloto HEX: chat agéntico que consulta datos reales, genera gráficas y documentos, y mantiene memoria por usuario.
- Contabilidad: pólizas (journal entries) con auditoría, reparación y backfill; catálogo de cuentas; periodos y políticas contables.
- Cuentas por cobrar y pagar: cobranza, recordatorios, calendarios de pago, notas de crédito y estados de cuenta de clientes.
- Banca: cuentas bancarias, conciliación bancaria y flujo de caja.
- Multi-moneda: tipo de cambio USD/MXN obtenido de un proveedor externo y cacheado en Redis por hora.
- Presupuestos y forecast: planeación, alertas de presupuesto y pronósticos de demanda.
- Inventario y compras: catálogos, recepción de mercancía, transferencias y órdenes de compra.
- Reportes y exportación: PDF (jsPDF/PDFKit), Excel (ExcelJS/xlsx) y generación de presentaciones desde el chat.
Decisiones técnicas y retos
La decisión más importante fue abandonar el patrón “router + redactor sin tools” a favor de un verdadero loop de tool calling. Esto elimina las alucinaciones de acciones: el modelo ve el resultado o el error real de cada herramienta antes de responder. El loop está acotado (máximo de iteraciones configurable, con clamp) y soporta opcionalmente strict function calling en beta para que los argumentos respeten estrictamente el JSON-schema de cada tool.
Para conversaciones largas se implementó un gestor de contexto con compactación en base de datos (financesChatContext.js). Los mensajes se almacenan en MySQL con conteo de tokens; al acercarse al umbral, los más antiguos se resumen con un modelo rápido y se marcan como compactados, reconstruyendo el prompt como [system] + [summaries] + [mensajes vivos]. Esto aprovecha la ventana de ~1M tokens del modelo sin pagar el costo de reenviar todo el historial.
Otras decisiones notables: forzar una sola copia de React en el bundle de Vite para evitar el conflicto de hooks con la librería de mapas; usar Redis tanto para caché de tipo de cambio como para coordinar notificaciones de despliegue vía Socket.IO; y un patrón de skills como archivos sueltos que reduce agregar una capacidad nueva a crear un único archivo.
Resultado
El resultado es un ERP financiero en producción donde la IA es una herramienta operativa, no un adorno. HEX convierte preguntas en lenguaje natural en consultas y acciones verificables sobre la contabilidad, las ventas y la operación, mientras el resto del panel cubre los flujos contables y administrativos completos. La arquitectura de dos repos, el loop agéntico con tools reales y el sistema extensible de skills dejan una base preparada para seguir sumando capacidades sin reescribir el núcleo.