🛍️ Módulo de Compras v2.0 Refactor
🏗️ Arquitectura General
El módulo sigue un patrón MVC-like (Model-View-Controller) dividido en dos capas principales. Diseñado para ser modular, mantenible y escalable.
🐍 Backend (Python)
1. Controller Layer (ui_layout.py)
Define los endpoints API REST que consume el frontend. No contiene lógica compleja, solo orquestación.
2. Service Layer (data_service.py)
Nucleo de la aplicación. Maneja transacciones SQL, validaciones y reglas de negocio.
- ComprasDataService.create_purchase_orders(): Valida SKUs, proveedores y genera IDs de orden.
- ComprasDataService.get_resumen_stats(): Calcula KPIs y genera datos para gráficas Chart.js.
- ComprasDataService.sync_exchange_rates(): Conexión con API Banxico para TC.
📦 Frontend (JavaScript)
Orquestador (main.js)
Maneja la navegación entre pestañas y carga los submódulos. Expone
window.ComprasModule.
Dashboard (dashboard.js)
Gráficos interactivos con Drill-Down (Año > Mes > Día) y Top Productos.
Creación (creacion.js)
Grid tipo Excel para generación rápida de órdenes. Validación de proveedores.
Pagos (pagos.js)
Control de facturación, validación de condiciones de pago y alertas de crédito mixto.
🔄 Flujo de Datos (Ejemplo: Dashboard)
Usuario hace clic en la pestaña "Resumen".
main.js detecta el evento y llama a
ComprasModule.Dashboard.init().
dashboard.js ejecuta
fetch('/api/compras/resumen/stats?year=2024').
`ui_layout.py` recibe la petición -> `data_service.py` ejecuta queries SQL agregadas.
Frontend recibe JSON y renderiza gráficas usando Chart.js y actualiza KPIs del DOM.