--- id: EPIC-MCH-009 type: Epic title: "MCH-009: Prediccion de Inventario" code: MCH-009 status: Completado phase: 2 priority: P1 story_points: 13 created_at: 2026-01-10 updated_at: 2026-01-17 simco_version: "4.0.1" dependencies: blocks: ["MCH-012"] depends_on: ["MCH-003", "MCH-004", "MCH-007"] --- # MCH-009: Prediccion de Inventario ## Metadata - **Codigo:** MCH-009 - **Fase:** 2 - Inteligencia - **Prioridad:** P1 - **Estado:** Completado - **Story Points:** 13 - **Fecha completado:** 2026-01-10 ## Descripcion Sistema de prediccion de inventario basado en historico de ventas: alertas de stock bajo, sugerencias de reabastecimiento, prediccion de demanda, y deteccion de productos de lento movimiento. ## Objetivos 1. Alertas de stock bajo 2. Prediccion de demanda semanal 3. Sugerencias de pedido a proveedor 4. Deteccion de productos sin movimiento 5. Dias de inventario estimados ## Alcance ### Incluido - Alerta cuando stock < min_stock - Prediccion basada en promedio movil - Calculo de punto de reorden - Lista de sugerencias de compra - Productos sin venta en X dias ### Excluido - ML avanzado (LSTM, Prophet) - Integracion automatica con proveedores - Pedidos automaticos ## Algoritmos ### Prediccion de Demanda ``` Promedio Movil Ponderado (4 semanas) - Semana -1: peso 0.4 - Semana -2: peso 0.3 - Semana -3: peso 0.2 - Semana -4: peso 0.1 Demanda_estimada = Σ(ventas_semana * peso) ``` ### Punto de Reorden ``` Punto_reorden = (Demanda_diaria * Lead_time) + Stock_seguridad Donde: - Demanda_diaria = Demanda_semanal / 7 - Lead_time = dias para recibir pedido (default: 3) - Stock_seguridad = Demanda_diaria * 2 ``` ### Dias de Inventario ``` Dias_inventario = Stock_actual / Demanda_diaria ``` ## Endpoints API | Metodo | Endpoint | Descripcion | |--------|----------|-------------| | GET | /inventory/low-stock | Productos bajo minimo | | GET | /inventory/predictions | Predicciones de demanda | | GET | /inventory/reorder-suggestions | Sugerencias de pedido | | GET | /inventory/slow-moving | Productos sin movimiento | | GET | /inventory/days-on-hand | Dias de inventario | | GET | /inventory/analytics | Dashboard completo | ## Modelo de Datos ### Tablas Adicionales **inventory_predictions** (cache) - id, product_id, period_start, period_end - predicted_demand, confidence - calculated_at **reorder_suggestions** - id, tenant_id, product_id - current_stock, suggested_quantity - priority, status, created_at ## Flujos de Usuario ### Alerta de Stock Bajo ``` 1. Sistema detecta stock < min_stock 2. Genera notificacion push 3. Muestra en dashboard 4. Dueno revisa y decide ``` ### Ver Sugerencias de Pedido ``` 1. Dueno abre "Sugerencias de compra" 2. Ve lista ordenada por prioridad 3. Cada item muestra: - Producto - Stock actual - Cantidad sugerida - Proveedor (si conocido) 4. Puede marcar como "Pedido" ``` ### Reporte Semanal ``` 1. Lunes a las 8am 2. Sistema genera reporte: - Top 10 productos por venta - Productos a reordenar - Productos sin movimiento 3. Envia via WhatsApp al dueno ``` ## UI Components ### InventoryDashboard - Grafica de stock vs demanda - Lista de alertas - Indicadores clave ### ReorderList - Tabla de sugerencias - Filtros por categoria - Accion: marcar como pedido ## Entregables | Entregable | Estado | Archivo | |------------|--------|---------| | predictions.service | Pendiente | `services/predictions.service.ts` | | inventory.analytics | Pendiente | `modules/inventory/analytics/` | | Dashboard FE | Pendiente | `components/inventory/` | | Cron jobs | Pendiente | `jobs/inventory.jobs.ts` | ## Dependencias ### Depende de - MCH-003 (Productos) - MCH-004 (POS) - historial de ventas - MCH-007 (Inventory module base) ### Bloquea a - MCH-012 (Chat LLM puede consultar predicciones) ## Criterios de Aceptacion - [x] Alertas de stock bajo funcionan - [x] Predicciones tienen precision >70% - [x] Sugerencias de reorden son utiles - [x] Productos sin movimiento se detectan - [x] Dashboard muestra info clara ## Configuracion por Tenant ```typescript { predictions: { enabled: true, low_stock_threshold: 5, lead_time_days: 3, safety_stock_days: 2, slow_moving_days: 30, weekly_report_enabled: true } } ``` --- ## Historias de Usuario ### MCH-US-080: Alertas de Stock Bajo **Como** dueno de changarrito **Quiero** recibir alertas cuando un producto esta por agotarse **Para** poder reabastecer a tiempo y no perder ventas - **Story Points:** 3 - **Prioridad:** P1 #### Criterios de Aceptacion | ID | Criterio | |----|----------| | CA-080-1 | Sistema detecta cuando stock actual < min_stock configurado | | CA-080-2 | Se genera notificacion push al dispositivo del dueno | | CA-080-3 | Alerta visible en dashboard con indicador visual claro | | CA-080-4 | Lista de productos en alerta ordenada por urgencia | #### Tareas | ID | Tarea | Estimacion | |----|-------|------------| | MCH-TT-080-01 | Implementar detector de stock bajo en backend | 2h | | MCH-TT-080-02 | Crear endpoint GET /inventory/low-stock | 1h | | MCH-TT-080-03 | Configurar notificaciones push | 2h | | MCH-TT-080-04 | Componente AlertList en dashboard | 2h | --- ### MCH-US-081: Prediccion de Demanda **Como** dueno de changarrito **Quiero** ver predicciones de venta para los proximos dias **Para** planificar mis compras con anticipacion - **Story Points:** 3 - **Prioridad:** P1 #### Criterios de Aceptacion | ID | Criterio | |----|----------| | CA-081-1 | Prediccion usa promedio movil ponderado de 4 semanas | | CA-081-2 | Precision de prediccion >70% en productos con historial | | CA-081-3 | Muestra demanda estimada por producto para proxima semana | | CA-081-4 | Calcula dias de inventario restantes por producto | #### Tareas | ID | Tarea | Estimacion | |----|-------|------------| | MCH-TT-081-01 | Implementar algoritmo promedio movil ponderado | 3h | | MCH-TT-081-02 | Crear predictions.service.ts | 2h | | MCH-TT-081-03 | Endpoint GET /inventory/predictions | 1h | | MCH-TT-081-04 | Cache de predicciones en tabla inventory_predictions | 2h | --- ### MCH-US-082: Sugerencias de Reorden **Como** dueno de changarrito **Quiero** recibir sugerencias de que productos reabastecer y en que cantidad **Para** optimizar mis compras y no quedarme sin stock - **Story Points:** 3 - **Prioridad:** P1 #### Criterios de Aceptacion | ID | Criterio | |----|----------| | CA-082-1 | Calcula punto de reorden basado en lead time y stock de seguridad | | CA-082-2 | Sugiere cantidad optima a pedir por producto | | CA-082-3 | Lista ordenada por prioridad (mas urgente primero) | | CA-082-4 | Permite marcar sugerencia como "Pedido realizado" | #### Tareas | ID | Tarea | Estimacion | |----|-------|------------| | MCH-TT-082-01 | Implementar calculo de punto de reorden | 2h | | MCH-TT-082-02 | Crear tabla reorder_suggestions | 1h | | MCH-TT-082-03 | Endpoint GET /inventory/reorder-suggestions | 1h | | MCH-TT-082-04 | Componente ReorderList con acciones | 2h | --- ### MCH-US-083: Productos Sin Movimiento **Como** dueno de changarrito **Quiero** identificar productos que no se han vendido en mucho tiempo **Para** tomar decisiones sobre promociones o descontinuarlos - **Story Points:** 2 - **Prioridad:** P2 #### Criterios de Aceptacion | ID | Criterio | |----|----------| | CA-083-1 | Detecta productos sin ventas en X dias (configurable, default 30) | | CA-083-2 | Muestra ultima fecha de venta por producto | | CA-083-3 | Calcula valor de inventario estancado | | CA-083-4 | Sugiere acciones (promocion, liquidacion) | #### Tareas | ID | Tarea | Estimacion | |----|-------|------------| | MCH-TT-083-01 | Query para detectar productos sin movimiento | 1h | | MCH-TT-083-02 | Endpoint GET /inventory/slow-moving | 1h | | MCH-TT-083-03 | Vista de productos estancados en UI | 2h | --- ### MCH-US-084: Reporte Semanal Automatico **Como** dueno de changarrito **Quiero** recibir un resumen semanal de inventario via WhatsApp **Para** mantenerme informado sin entrar a la app constantemente - **Story Points:** 2 - **Prioridad:** P2 #### Criterios de Aceptacion | ID | Criterio | |----|----------| | CA-084-1 | Reporte se envia automaticamente los lunes a las 8am | | CA-084-2 | Incluye top 10 productos mas vendidos de la semana | | CA-084-3 | Lista productos que necesitan reorden urgente | | CA-084-4 | Muestra productos sin movimiento | | CA-084-5 | Formato legible y conciso para WhatsApp | #### Tareas | ID | Tarea | Estimacion | |----|-------|------------| | MCH-TT-084-01 | Crear cron job semanal | 1h | | MCH-TT-084-02 | Generar reporte consolidado | 2h | | MCH-TT-084-03 | Integrar envio via WhatsApp API | 2h | | MCH-TT-084-04 | Template de mensaje formateado | 1h | --- ## Resumen de Story Points | Historia | Descripcion | SP | |----------|-------------|---:| | MCH-US-080 | Alertas de Stock Bajo | 3 | | MCH-US-081 | Prediccion de Demanda | 3 | | MCH-US-082 | Sugerencias de Reorden | 3 | | MCH-US-083 | Productos Sin Movimiento | 2 | | MCH-US-084 | Reporte Semanal Automatico | 2 | | | **TOTAL EPIC MCH-009** | **13** | --- **Ultima actualizacion:** 2026-01-17