12 KiB
Agente IA para SAP Business One + HANA
Objetivo
Construir progresivamente un agente de IA tipo chat para la empresa, conectado a SAP Business One sobre HANA, usando modelos locales mediante Ollama.
La evolución prevista es:
- Consultas de negocio en lenguaje natural.
- KPIs.
- Análisis de datos.
- Gráficos y cuadros resumen.
- Reportes PDF y Excel.
- Resúmenes gerenciales.
- Alertas y análisis automáticos.
La estrategia es comenzar pequeño y agregar capacidades mediante herramientas independientes.
Arquitectura
USUARIO
|
v
+-------------+
| Chat Web UI |
| React/Vite |
+------+------+
|
v
+-------------+
| FastAPI |
| Backend |
+------+------+
|
+---------+---------+
| |
v v
+-----------+ +--------------+
| Ollama | | Tool / Skill |
| Local LLM | | Engine |
+-----------+ +-------+------+
|
+--------+--------+
| |
v v
SAP HANA SAP Service Layer
Principio fundamental
El modelo de IA no debe tener acceso directo e irrestricto a SAP.
El LLM debe solicitar herramientas (tools) que ejecuten consultas controladas.
Ejemplo:
Usuario: ¿Cuánto vendimos este mes?
|
v
Ollama
|
v
ventas_mes()
|
v
Python / FastAPI
|
v
SAP HANA
|
v
Resultado
|
v
Ollama
|
v
Respuesta al usuario
Esto permite controlar permisos, consultas y calidad de los resultados.
Tecnologías
Frontend
- React
- Vite
- Interfaz tipo ChatGPT
- Tablas
- Gráficos
- Dashboards
Backend
- Python
- FastAPI
- Herramientas / Skills
- Control de acceso
- Gestión de conversaciones
- Generación de reportes
IA
- Ollama
- Modelos locales
- Candidatos iniciales: Qwen 3 8B, Qwen 3 14B, Mistral Small y Gemma 3 12B.
- La elección final dependerá del hardware y de pruebas reales.
Datos e integración
- SAP Business One
- SAP HANA
- Vistas HANA
- SQL controlado
- SAP Service Layer para operaciones que necesiten la lógica de SAP
Visualización y documentos
- Plotly para gráficos interactivos
- Matplotlib para imágenes/gráficos destinados a documentos
- ReportLab para PDF
- OpenPyXL para Excel
Fase 1: herramientas básicas
Crear inicialmente un conjunto pequeño de funciones Python:
ventas_hoy()
ventas_mes()
top_clientes()
productos_mas_vendidos()
facturas_pendientes()
compras_mes()
stock_critico()
cuentas_por_cobrar()
cuentas_por_pagar()
utilidad_mes()
Cada herramienta ejecutará internamente una consulta SQL o utilizará una vista HANA.
El usuario pregunta:
¿Cuánto vendimos este mes?
El agente determina:
tool = ventas_mes()
Obtiene el resultado y genera una respuesta en lenguaje natural.
Fase 2: herramientas con parámetros
Agregar parámetros:
ventas_por_cliente(cliente)
ventas_por_fecha(desde, hasta)
compras_por_proveedor(proveedor, desde, hasta)
stock_almacen(almacen)
articulo(codigo)
Ejemplo:
¿Cuánto le hemos vendido a Alicorp este año?
Puede interpretarse como:
ventas_cliente(
cliente="ALICORP",
año=2026
)
Fase 3: capa semántica empresarial
En lugar de hacer que el modelo conozca todas las tablas de SAP Business One, crear vistas orientadas al negocio:
VW_VENTAS
VW_COMPRAS
VW_STOCK
VW_CXC
VW_CXP
VW_CLIENTES
VW_PRODUCTOS
VW_VENDEDORES
VW_KPI_VENTAS
VW_KPI_COBRANZAS
Las vistas deben presentar información clara y consistente, por ejemplo:
Cliente
RUC
Vendedor
Línea
Ciudad
Total
Margen
Cantidad
Fecha
Fase 4: SQL generado por IA
Cuando el sistema básico sea estable, se puede permitir que el modelo genere SQL, pero únicamente sobre vistas analíticas autorizadas.
Ejemplo:
Vista: VW_VENTAS
Campos:
Fecha
Cliente
Ciudad
Total
Margen
Cantidad
Vendedor
Pregunta:
¿Cuánto vendimos por ciudad?
Consulta posible:
SELECT
Ciudad,
SUM(Total) AS TotalVentas
FROM VW_VENTAS
GROUP BY Ciudad;
El backend debe validar el SQL antes de ejecutarlo.
Fase 5: conversación con contexto
El agente debe mantener el contexto:
Usuario: Muéstrame las ventas de marzo.
Agente: ...
Usuario: Ahora solo Lima.
Agente: ...
Usuario: Compáralo con febrero.
Agente: ...
Usuario: Haz un gráfico.
Agente: ...
Fase 6: gráficos
El agente podrá generar visualizaciones como:
- Ventas por vendedor
- Ventas por ciudad
- Ventas mensuales
- Margen por línea
- Top 10 productos
- Top 10 clientes
- Evolución de cobranza
- Stock por almacén
Flujo:
Pregunta -> Tool -> HANA -> Datos -> Motor de gráficos -> Gráfico -> Chat
Fase 7: KPIs
Crear un catálogo de indicadores.
Ventas
- Ventas del mes
- Ventas acumuladas
- Cumplimiento de meta
- Crecimiento vs. período anterior
- Ticket promedio
- Ventas por vendedor
- Ventas por cliente
- Ventas por producto
Rentabilidad
- Margen bruto
- Margen por producto
- Margen por línea
- Margen por vendedor
Inventario
- Stock disponible
- Stock crítico
- Rotación
- Productos sin movimiento
- Productos próximos a agotarse
Finanzas
- Cuentas por cobrar
- Cuentas por pagar
- Vencimientos
- Cobranza
- Antigüedad de saldos
Fase 8: reportes
El usuario podrá solicitar:
Genera un resumen gerencial de junio.
El sistema:
- Consulta los datos.
- Calcula KPIs.
- Genera gráficos.
- Utiliza el LLM para interpretar los resultados.
- Genera conclusiones.
- Crea un PDF.
- Puede crear un Excel.
Estructura posible:
REPORTE GERENCIAL
Resumen ejecutivo
Ventas
Rentabilidad
Inventario
Cuentas por cobrar
Principales variaciones
Principales clientes
Principales productos
Conclusiones
Fase 9: alertas automáticas
Ejemplo de resumen diario:
Ventas: S/ 124,500
Meta: 95%
Margen: 28%
Top vendedor: Carlos
Productos sin stock: 14
Clientes con deuda: 18
El agente también podría detectar anomalías:
- Las ventas de Arequipa disminuyeron 15%.
- El producto X cayó 20% respecto al promedio.
- Las cobranzas aumentaron 12%.
- Tres clientes concentran una parte importante de la deuda vencida.
La IA debe aportar principalmente interpretación de datos reales, no inventar respuestas plausibles.
Seguridad
Principios desde el inicio:
- El LLM no debe tener credenciales directas de HANA.
- Las herramientas deben estar controladas por el backend.
- Separar consultas de lectura de operaciones de escritura.
- No permitir SQL arbitrario inicialmente.
- Validar parámetros.
- Registrar las consultas ejecutadas.
- Registrar usuario, herramienta y fecha.
- Controlar qué herramientas puede utilizar cada usuario.
- Utilizar Service Layer para operaciones que modifiquen SAP.
- No permitir que una pregunta de lenguaje natural ejecute operaciones destructivas.
Arquitectura de lectura:
Usuario -> LLM -> Tool controlada -> Vista/Query HANA -> Resultado
Arquitectura de operaciones:
Usuario -> LLM -> Tool controlada -> Validación -> Service Layer -> SAP Business One
Capa semántica empresarial
Uno de los componentes más importantes será un catálogo que explique al agente qué significa cada dato.
Ejemplo:
VW_VENTAS
Descripción:
Información consolidada de documentos de venta.
Campos:
Fecha
Fecha del documento.
Cliente
Código del cliente.
NombreCliente
Nombre comercial.
Vendedor
Vendedor responsable.
Total
Importe total del documento.
Margen
Margen bruto calculado.
Cantidad
Cantidad vendida.
También se deben documentar reglas de negocio, por ejemplo:
"Ventas" significa documentos de venta contabilizados.
"No considerar documentos cancelados."
"Margen" se calcula utilizando el costo correspondiente.
"Ventas del mes" utiliza DocDate salvo que se indique otra fecha.
Esto será más importante que intentar meter miles de tablas SAP en el contexto del LLM.
Estructura inicial del proyecto
agente_sap/
|
+-- app/
| +-- main.py
| +-- api/
| | +-- chat.py
| | +-- reports.py
| +-- agent/
| | +-- agent.py
| | +-- prompts.py
| | +-- tools.py
| +-- tools/
| | +-- ventas.py
| | +-- compras.py
| | +-- stock.py
| | +-- clientes.py
| | +-- finanzas.py
| +-- database/
| | +-- hana.py
| +-- sap/
| | +-- service_layer.py
| +-- reports/
| | +-- pdf.py
| | +-- excel.py
| +-- charts/
| +-- charts.py
|
+-- frontend/
| +-- ...
|
+-- sql/
| +-- views/
| +-- queries/
|
+-- docs/
| +-- semantic_layer/
|
+-- tests/
|
+-- .env
+-- requirements.txt
+-- README.md
Primera versión recomendada
No empezar con dashboards, agentes autónomos ni SQL generado por IA.
La primera versión debería hacer solamente:
Chat
|
v
Ollama
|
v
Tools Python
|
v
HANA
|
v
Resultado
|
v
Ollama
|
v
Respuesta
Con cinco herramientas iniciales:
ventas_hoy()
ventas_mes()
top_clientes()
stock_critico()
cuentas_por_cobrar()
Y una interfaz web sencilla.
Evolución recomendada
FASE 1
Chat + Ollama + 5 tools
|
v
FASE 2
Tools con parámetros
|
v
FASE 3
Vistas HANA / capa semántica
|
v
FASE 4
SQL controlado sobre vistas
|
v
FASE 5
Contexto conversacional
|
v
FASE 6
Gráficos
|
v
FASE 7
KPIs
|
v
FASE 8
PDF / Excel
|
v
FASE 9
Dashboards
|
v
FASE 10
Alertas y análisis automáticos
Objetivo final
El asistente podrá responder preguntas como:
¿Cuánto vendimos este mes?
¿Cuáles son nuestros 10 mejores clientes?
¿Qué productos están cayendo en ventas?
¿Qué vendedores no están alcanzando su meta?
¿Cuánto tenemos pendiente de cobrar?
¿Qué clientes tienen mayor deuda vencida?
¿Cómo se comportaron las ventas frente al mes anterior?
¿Cuál es nuestro margen promedio?
Genera un reporte gerencial del mes.
Genera un Excel con las ventas por vendedor.
Muéstrame un gráfico de ventas de los últimos 12 meses.
¿Qué problemas ves en los datos de este mes?
Posteriormente:
Analiza la situación comercial de la empresa
y dame las principales conclusiones.
Las conclusiones deben basarse en datos reales obtenidos de SAP, no en respuestas inventadas por el modelo.
Principio de diseño
La arquitectura debe ser modular.
Cada nueva capacidad debe incorporarse como una nueva herramienta:
Nueva necesidad
|
v
Nueva Tool
|
v
Consulta / Vista HANA
|
v
Documentación semántica
|
v
Disponible para el agente
Esto permite crecer sin rehacer toda la aplicación.
Conclusión
La estrategia recomendada es construir primero un asistente de consulta sobre SAP Business One, no un sistema autónomo.
La combinación:
React
+
FastAPI
+
Ollama
+
Tools Python
+
SAP HANA
+
Service Layer
es suficiente para construir una primera versión sólida.
La pieza más importante no será el modelo de IA, sino la capa de herramientas y conocimiento empresarial que conectará el lenguaje natural con los datos reales de SAP.
El modelo puede cambiarse posteriormente. Las herramientas, vistas, reglas de negocio y capa semántica serán el verdadero activo del proyecto.