Sign inSign up

ingleo44/comercialai-logistics

By ingleo44

Updated about 12 hours ago

Image
0

3.9K

ingleo44/comercialai-logistics repository overview

🚀 ComercialAI SaaS Backend - Multi-Provider AI System

Sistema backend avanzado para gestión inteligente de inventario con soporte para múltiples proveedores de AI: Qwen, OpenAI y DeepSeek. Análisis inteligente, recomendaciones automáticas y optimización de costos.

🌟 Características Principales

🤖 Multi-Provider AI Architecture
  • Qwen AI (Alibaba Cloud) - Balance perfecto de costo-calidad
  • OpenAI (GPT-4o) - Máxima precisión para análisis críticos
  • DeepSeek - Ultra económico para desarrollo y testing
  • Switching automático entre proveedores según configuración
📊 Análisis Inteligente de Inventario
  • Análisis de demanda basado en históricos de venta
  • Predicción de stock-out con alertas tempranas
  • Recomendaciones automáticas de órdenes de compra
  • Gestión avanzada de lead times (90 días fabricante)
  • Análisis por categorías y segmentación de productos
Rendimiento Optimizado
  • Procesamiento concurrente con límites configurables
  • Circuit breaker para prevenir timeouts
  • Caché incremental para resultados en tiempo real
  • Análisis paginado para datasets grandes
  • Optimización automática de batch sizes
🔄 Integración Flexible
  • Multi-formato: CSV, Excel (.xlsx, .xls)
  • Mapeo automático de estructuras complejas
  • API REST completa con documentación
  • Exportación avanzada en múltiples formatos
  • Sistema de sesiones para análisis largos

🚀 Instalación y Configuración

1. Clonar y Setup Inicial
git clone <repository-url>
cd comercialai-saas
npm install
2. Configuración Multi-Provider
# Copiar archivo de configuración
cp .env.example .env

# Editar .env con tus API keys
nano .env
3. Configuración de Proveedores

En tu archivo .env, configura los proveedores que desees usar:

# ========================================
# SELECCIÓN DE PROVEEDOR (Escoge UNO)
# ========================================
AI_PROVIDER=QWEN                    # QWEN | OPENAI | DEEPSEEK

# ========================================
# QWEN AI (Alibaba Cloud) - Recomendado para Producción
# ========================================
DASHSCOPE_API_KEY=sk-your-qwen-key
MODEL_NAME=qwen-flash               # qwen-flash | qwen-plus | qwen-max

# ========================================  
# OPENAI - Máxima Calidad
# ========================================
OPENAI_API_KEY=sk-your-openai-key
OPENAI_MODEL=gpt-4o-mini            # gpt-4o-mini | gpt-4 | gpt-4-turbo

# ========================================
# DEEPSEEK - Ultra Económico
# ========================================
DEEPSEEK_API_KEY=sk-your-deepseek-key
DEEPSEEK_MODEL=deepseek-chat        # deepseek-chat | deepseek-coder
4. Verificar Configuración
# Probar todos los proveedores configurados
npm run test:ai

# Probar un proveedor específico
npm run test:ai:openai
npm run test:ai:qwen  
npm run test:ai:deepseek

# Iniciar servidor
npm start

💰 Comparación de Proveedores

ProveedorCosto por AnálisisVelocidadCalidadCaso de Uso Ideal
🔥 DeepSeek$0.01-0.05Muy RápidaExcelenteDesarrollo, Testing, Alto Volumen
🧠 Qwen AI$0.05-0.15RápidaAlta ConsistenciaProducción, Uso Regular
🤖 OpenAI$0.50-2.00ModeradaMáxima PrecisiónAnálisis Críticos, Decisiones Importantes

🔧 Scripts Disponibles

Desarrollo y Testing
npm start              # Iniciar servidor
npm run dev           # Modo desarrollo con recarga automática
npm run test:ai       # Probar todos los proveedores AI
Testing por Proveedor
npm run test:ai:openai    # Probar solo OpenAI
npm run test:ai:qwen      # Probar solo Qwen
npm run test:ai:deepseek  # Probar solo DeepSeek
Cambio de Proveedor
# Usar el script de switching automático
./scripts/switch-ai-provider.sh OPENAI   # Cambiar a OpenAI
./scripts/switch-ai-provider.sh QWEN     # Cambiar a Qwen  
./scripts/switch-ai-provider.sh DEEPSEEK # Cambiar a DeepSeek
Validación de API
npm run ai:validate         # Validar proveedor actual
npm run ai:validate:all     # Probar todos los proveedores

🔌 API Endpoints

Análisis de Inventario
# Análisis paginado (recomendado para datasets grandes)
POST /api/inventory/analyze-paginated
GET  /api/inventory/results/:sessionId
GET  /api/inventory/status/:sessionId
DELETE /api/inventory/stop/:sessionId    # 🛑 NUEVO: Detener análisis en progreso

# Exportación de resultados
POST /api/inventory/export
GET  /api/inventory/exports
GET  /api/inventory/export/:filename
Sistema y Monitoreo
GET /api/inventory/status           # Estado del sistema
GET /api/inventory/ai/validate      # Validar proveedor actual
GET /api/inventory/ai/validate?testAll=true  # Probar todos
Ejemplo de Uso de API
// Análisis de inventario con archivo CSV
const formData = new FormData();
formData.append('inventory', csvFile);

const response = await fetch('/api/inventory/analyze-paginated', {
  method: 'POST',
  body: formData
});

const { sessionId } = await response.json();

// Polling para obtener resultados
const pollResults = async () => {
  const results = await fetch(`/api/inventory/results/${sessionId}`);
  const data = await results.json();
  
  if (data.processing.completed) {
    console.log('Análisis completado:', data.results);
  } else {
    setTimeout(pollResults, 2000); // Continuar polling
  }
};

pollResults();

// 🛑 Detener análisis si es necesario
const stopAnalysis = async () => {
  const response = await fetch(`/api/inventory/stop/${sessionId}`, {
    method: 'DELETE'
  });
  
  const result = await response.json();
  console.log('Análisis detenido:', result.data.final_stats);
  
  if (result.data.results_available) {
    // Obtener resultados parciales
    const partialResults = await fetch(`/api/inventory/results/${sessionId}`);
    console.log('Resultados parciales:', await partialResults.json());
  }
};

🐳 Despliegue con Docker

Build y Run
# Construir imagen
docker build -t comercialai-saas .

# Ejecutar con docker-compose
docker-compose up -d

# Verificar estado
docker-compose logs -f
Variables de Entorno para Docker
# En docker-compose.yml o al ejecutar
docker run -e AI_PROVIDER=QWEN \
           -e DASHSCOPE_API_KEY=sk-your-key \
           -e OPENAI_API_KEY=sk-your-openai-key \
           -e DEEPSEEK_API_KEY=sk-your-deepseek-key \
           -p 3000:3000 comercialai-saas

📁 Estructura del Proyecto

comercialai-saas/
├── src/
│   ├── algorithms/
│   │   ├── InventoryCalculationEngine.js      # Motor V1 (Pipeline + Días Objetivo)
│   │   └── InventoryCalculationEngineV2.js    # Motor V2 (Min-Max + Safety Stock) 🆕
│   ├── controllers/
│   │   └── InventoryController.js             # Controlador principal
│   ├── services/
│   │   ├── UnifiedInventoryAnalysisService.js # Servicio unificado (sin IA)
│   │   ├── ExcelProcessorService.js           # Procesamiento Excel
│   │   └── ExportService.js                   # Exportación de datos
│   ├── routes/
│   │   └── inventory.js                       # Rutas API
│   ├── utils/
│   │   └── middleware.js                      # Middleware personalizado
│   └── index.js                               # Servidor principal
├── scripts/
│   ├── test-ai-providers.js                   # Testing de proveedores
│   └── switch-ai-provider.sh                  # Cambio de proveedor
├── .env.example                               # Plantilla de configuración
├── docker-compose.yml                         # Configuración Docker
├── Dockerfile                                 # Imagen Docker
├── CLEANUP_SUMMARY.md                         # Resumen de limpieza de código
├── DEPLOYMENT.md                              # Guía de despliegue
├── INVENTORY_MODELS_COMPARISON.md             # Comparación V1 vs V2 🆕
└── README.md                                  # Esta documentación

📊 Modelos de Cálculo de Inventario

🔄 Selección de Modelo

El sistema soporta dos modelos de cálculo de inventario que coexisten sin conflictos:

ModeloDescripciónEstadoUso Recomendado
V1Pipeline + Días Objetivo✅ Producción (Default)Simple, probado, rápido
V2Min-Max + Safety Stock🆕 Nuevo (Estadístico)Preciso, incluye compras en fabricación
🎯 Diferencias Clave
Modelo V1 (Actual):
  • ✅ Basado en días objetivo de cobertura
  • ✅ Simple y rápido
  • NO incluye inventario_en_compras (fabricación)
  • ❌ Stock de seguridad fijo (%)
  • ❌ Sin Reorder Point (ROP) explícito
Modelo V2 (Nuevo):
  • ✅ Basado en teoría estadística (distribución normal)
  • Incluye inventario_en_compras en pipeline
  • ✅ Safety Stock = Z × σ × √(Lead Time) - ajustado a variabilidad
  • ✅ Reorder Point (ROP) explícito
  • ✅ Inventario Máximo calculado
  • ✅ Proyección de agotamiento
  • ✅ Nivel de servicio por Pareto (A=99%, B=95%, C=90%)
🔧 Configuración

Para cambiar entre modelos, edita tu archivo .env:

# Usar modelo V1 (Default - Pipeline + Días Objetivo)
USE_INVENTORY_MODEL_V2=false

# Usar modelo V2 (Nuevo - Min-Max + Safety Stock)
USE_INVENTORY_MODEL_V2=true
📖 Documentación Detallada

Lee INVENTORY_MODELS_COMPARISON.md para:

  • Comparación técnica detallada
  • Ejemplos numéricos lado a lado
  • Guías de migración (completa, A/B testing, comparación)
  • Referencias teóricas
  • Métricas de evaluación

🛠️ Configuración Avanzada

Performance Tuning
# En .env - Ajustes de rendimiento
MAX_AI_CONCURRENCY=2              # Llamadas concurrentes (reducir si hay timeouts)
OPTIMIZED_THRESHOLD=100           # Usar modo optimizado para datasets >100 items
AI_TIMEOUT_BASE_MS=180000         # Timeout base: 3 minutos
AI_TIMEOUT_PER_ITEM_MS=8000       # Timeout adicional por item: 8 segundos
CIRCUIT_BREAKER_MAX_FAILURES=3    # Max fallos antes de backoff
Business Logic Settings
# Configuraciones de negocio
LEAD_TIME_DAYS=90                 # Lead time de fabricantes
TARGET_COVERAGE_DAYS=40           # Cobertura objetivo de stock
MIN_STOCK_ALERT_DAYS=30           # Umbral de alerta de stock mínimo

🚨 Troubleshooting

Problemas Comunes

🔥 Timeouts en API de AI

# Reducir concurrencia en .env
MAX_AI_CONCURRENCY=1
AI_TIMEOUT_BASE_MS=300000

🔑 Error de API Keys

# Verificar configuración
npm run test:ai

# Validar un proveedor específico
npm run test:ai:qwen

💾 Memoria insuficiente para datasets grandes

# Usar procesamiento paginado
POST /api/inventory/analyze-paginated
# En lugar de /api/inventory/analyze
Logs y Monitoreo
# Logs en tiempo real
docker-compose logs -f

# Estado del sistema
curl http://localhost:3000/api/inventory/status

# Validar todos los proveedores
curl "http://localhost:3000/api/inventory/ai/validate?testAll=true"

🔒 Seguridad

  • Helmet.js para headers de seguridad
  • CORS configurado para dominios autorizados
  • Validación de archivos con filtros de tipo
  • Límites de tamaño de archivo (10MB)
  • Rate limiting en API calls
  • Variables de entorno para secrets

📄 Variables de Entorno Completas

Consulta .env.example para ver todas las variables disponibles con documentación detallada.

🤝 Contribución

  1. Fork el proyecto
  2. Crea tu feature branch (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push al branch (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

📞 Soporte

Para soporte técnico o consultas:

📜 Licencia

MIT License - Ver LICENSE para más detalles.


🎯 Sistema listo para producción con arquitectura multi-proveedor AI escalable y optimizada para costos.

Tag summary

Content type

Image

Digest

sha256:c9ce48092

Size

83.5 MB

Last updated

about 12 hours ago

docker pull ingleo44/comercialai-logistics