ERP IMPORCOMGUA
Plataforma full-stack con infraestructura AWS provisionada vía Terraform, pipelines CI/CD multi-stage en GitHub Actions, API REST Flask con arquitectura en capas y frontend React con RBAC granular por rol.
Sistema ERP ligero para empresa importadora guatemalteca, construido sobre una arquitectura cloud en AWS con separación estricta de capas. El backend es una API REST en Flask estructurada en Controladores → Servicios → Modelos, con patrón Singleton (metaclase Python) para la gestión de conexiones MySQL y servicios, desplegada en EC2 como contenedor Docker gestionado por systemd con restart automático. El frontend React 19 (compilado con Vite + TailwindCSS 4) se sirve como sitio estático desde S3 con website hosting habilitado. La base de datos corre en AWS RDS MySQL 8.0 (db.t3.micro, 20 GB gp2). Toda la infraestructura —EC2, RDS, S3— se provisiona con Terraform >=1.3 organizado en módulos independientes. Se implementaron 5 pipelines de GitHub Actions: 2 triggered por path (frontend/** y backend/**) para rolling deploys automáticos, y 3 de aprovisionamiento de infraestructura activados vía workflow_dispatch. Incluye RBAC de 3 niveles, gestión de inventario con trazabilidad de DUCA (Declaración Única Centroamericana), módulo de ventas/cobranzas con soporte crédito/contado, y alertas automáticas de stock bajo mediante SendGrid con templates dinámicos.
- IaC con Terraform para EC2, RDS MySQL 8.0 y S3 static hosting; variables sensibles gestionadas como GitHub Secrets inyectadas en tiempo de plan/apply
- Bootstrap automatizado de EC2 vía user_data.sh.tpl: instala Docker, clona el repo con GitHub PAT, genera .env, construye imagen Docker y registra servicio systemd con política Restart=always
- 5 GitHub Actions workflows: 2 pipelines path-triggered (frontend/**, backend/**) y 3 de aprovisionamiento de infraestructura on workflow_dispatch con Terraform Init → Validate → Plan → Apply
- Patrón Singleton con SingletonMeta (metaclase Python) aplicado a DatabaseConnection y BaseService para garantizar una única conexión activa y reutilización de instancias de servicio
- RBAC granular: React Context (AuthContext) + ProtectedRoutes con redirección automática según rol; mapeado 1:1 a rol_id en base de datos (Gerencia General, Ventas/Finanzas, Inventario)
- Sistema proactivo de alertas de stock: al registrar salida de bodega se evalúa porcentaje de stock restante vs. stock inicial; si cae por debajo del 10% se notifica a roles 1 y 3 vía SendGrid con templates dinámicos (Personalization API)
- Trazabilidad de importaciones con entidad DUCA: cada movimiento de inventario (Ingreso, Despacho, Salida, Recepción) queda vinculado a su número de DUCA y contenedor de importación
- Autenticación con hash SHA2-256 directo en MySQL; contraseñas nunca almacenadas en texto claro
- Suite de tests con pytest: pruebas unitarias de validaciones de dominio (NIT 7 dígitos, teléfono 8 dígitos, formato ISO de fecha) y pruebas de integración con mocking de servicios
- Despliegue completamente automatizado: un push a main actualiza el frontend en S3 y el backend en EC2 vía SSH sin intervención manual
- Infraestructura reproducible y versionada en Git: cualquier recurso AWS puede recrearse en minutos ejecutando el pipeline Terraform correspondiente
- Eliminación del riesgo de rotura de stock no detectado: notificaciones automáticas a gerentes ante productos críticos post-salida de bodega
- Separación de responsabilidades por rol de negocio: acceso mínimo necesario por perfil, reduciendo superficie de error operativo
- Entorno de desarrollo local reproducible con Docker Compose (frontend + backend + MySQL), alineado con el stack de producción