# ADR-002: Arquitectura Modular Monorepo **Estado:** Aceptada **Fecha:** 2025-11-24 **Responsable:** Architecture-Analyst **Proyecto:** ERP Construccion ## Contexto Necesitamos organizar el codigo en una estructura escalable y mantenible que soporte: - Multiples aplicaciones (backend, frontend, mobile) - Componentes compartidos con ERP Generico - Modulos especificos de construccion - Desarrollo en equipo ## Decision **Monorepo con estructura:** ``` erp-construccion/ +-- apps/ | +-- database/ # DDL, seeds | +-- backend/ # API REST | +-- frontend/ # Web app | +-- mobile/ # React Native (asistencias) +-- packages/ # Librerias compartidas +-- docs/ # Documentacion +-- devops/ # Scripts, CI/CD ``` **Dependencia de ERP Generico:** ```json { "dependencies": { "@erp-generic/core": "^1.0.0", "@erp-generic/financial": "^1.0.0", "@erp-generic/purchasing": "^1.0.0", "@erp-generic/ui-components": "^1.0.0" } } ``` ## Justificacion ### Referencia a Gamilit - Estructura probada en produccion - Organizacion clara por aplicacion - Facil navegacion y onboarding ### Alineacion con ERP Generico - Misma estructura permite reutilizacion - Modulos especificos se agregan sin conflicto ### Especifico para Construccion - Modulo mobile separado para asistencias GPS - Modulos especificos: proyectos-obra, estimaciones, INFONAVIT ## Consecuencias ### Positivas - Escalabilidad (agregar nuevas apps) - Reutilizacion de codigo (packages compartidos + ERP Generico) - Desarrollo en equipo sin conflictos - Testing aislado por app - 61% de reutilizacion del ERP Generico ### Negativas - Complejidad inicial de setup - Requiere herramientas monorepo (npm workspaces) - Gestion de versiones con ERP Generico ## Alternativas Consideradas **1. Repositorios separados** - Rechazada: Dificulta sincronizacion con ERP Generico **2. Monolito unico** - Rechazada: No escalable, no permite reutilizacion **3. Fork del ERP Generico** - Rechazada: Perdemos actualizaciones automaticas ## Implementacion ### Acciones Requeridas - [x] Crear estructura de carpetas - [x] Configurar npm workspaces - [x] Setup path aliases - [ ] Configurar dependencias de ERP Generico ### Criterios de Aceptacion - Apps pueden importar packages compartidos - Apps pueden importar modulos de ERP Generico - Build independiente por app funcional - Modulos especificos no afectan al generico ## Referencias - [ERP Generico ADR-002](../../erp-generic/docs/adr/ADR-002-arquitectura-modular.md) - [Gamilit Backend Patterns](../../shared/reference/gamilit/backend-patterns.md)