# PLAN DE ORGANIZACIÓN DEL WORKSPACE **Fecha:** 2025-12-08 **Versión:** 1.0.0 **Estado:** Propuesta --- ## RESUMEN EJECUTIVO Este documento presenta un plan integral para organizar el workspace, centralizando funcionalidades compartidas en `core/`, definiendo módulos claros para cada proyecto, y eliminando duplicación de código. ### Estado Actual | Proyecto | Estado | Backend | Frontend | BD | |----------|--------|---------|----------|-----| | **Gamilit** | ✅ 60% MVP | NestJS | React 19 | PostgreSQL 9 schemas | | **Trading Platform** | 🔄 50% | Express | React 18 | PostgreSQL 8 schemas | | **ERP Suite** | 🔄 35% | Express | React 18 | PostgreSQL 12+ schemas | | **Marketing Content** | 📋 Inicio | Express | React | - | | **Betting/Inmobiliaria** | 📋 Planificación | - | - | - | ### Problemas Identificados 1. **`core/modules/` vacío** - Solo carpetas sin código 2. **`core/catalog/_reference/` vacío** - Documentación sin implementación 3. **Código duplicado** entre proyectos (~5,000+ líneas) 4. **Frameworks mixtos** - NestJS vs Express 5. **Patrones inconsistentes** - Diferentes formas de hacer lo mismo --- ## PARTE 1: ESTRUCTURA DE CORE/ ### 1.1 Estructura Propuesta ``` core/ ├── modules/ # CÓDIGO COMPARTIDO EJECUTABLE │ ├── utils/ # Utilidades universales │ │ ├── date.util.ts │ │ ├── string.util.ts │ │ ├── validation.util.ts │ │ ├── format.util.ts │ │ ├── crypto.util.ts │ │ └── index.ts │ │ │ ├── auth/ # Autenticación (adapter pattern) │ │ ├── jwt/ │ │ │ ├── jwt.service.ts │ │ │ ├── jwt.guard.ts │ │ │ └── jwt.strategy.ts │ │ ├── passport/ │ │ │ ├── google.strategy.ts │ │ │ ├── facebook.strategy.ts │ │ │ └── github.strategy.ts │ │ ├── adapters/ │ │ │ ├── nestjs.adapter.ts │ │ │ └── express.adapter.ts │ │ └── index.ts │ │ │ ├── database/ # Schemas y migraciones base │ │ ├── schemas/ │ │ │ ├── auth.base.sql │ │ │ ├── audit.base.sql │ │ │ └── notifications.base.sql │ │ ├── entities/ │ │ │ ├── base.entity.ts │ │ │ └── tenant.entity.ts │ │ └── migrations/ │ │ │ ├── api/ # Patrones de API │ │ ├── response.ts # ApiResponse format │ │ ├── pagination.ts │ │ ├── filters.ts │ │ └── interceptors/ │ │ ├── transform-response.interceptor.ts │ │ └── logging.interceptor.ts │ │ │ ├── notifications/ # Sistema de notificaciones │ │ ├── email/ │ │ ├── push/ │ │ ├── in-app/ │ │ └── index.ts │ │ │ ├── payments/ # Integración de pagos │ │ ├── stripe/ │ │ ├── webhooks/ │ │ └── index.ts │ │ │ ├── websocket/ # WebSocket patterns │ │ ├── socket.service.ts │ │ ├── rooms.ts │ │ └── index.ts │ │ │ └── multitenant/ # Multi-tenancy │ ├── rls.interceptor.ts │ ├── tenant.context.ts │ └── index.ts │ ├── catalog/ # DOCUMENTACIÓN + REFERENCIA (ya existe) │ ├── auth/ │ │ ├── README.md │ │ ├── IMPLEMENTATION.md │ │ └── _reference/ # ← POBLAR CON CÓDIGO DE GAMILIT │ ├── ... │ ├── constants/ # CONSTANTES GLOBALES (NUEVO) │ ├── enums.constants.ts # Enums universales │ ├── regex.constants.ts # Patrones regex │ └── index.ts │ ├── types/ # TIPOS COMPARTIDOS (NUEVO) │ ├── api.types.ts │ ├── auth.types.ts │ ├── common.types.ts │ └── index.ts │ ├── frontend/ # COMPONENTES FRONTEND COMPARTIDOS (NUEVO) │ ├── components/ │ │ ├── atoms/ │ │ ├── molecules/ │ │ └── organisms/ │ ├── hooks/ │ ├── utils/ │ └── themes/ │ ├── orchestration/ # Sistema de agentes (ya existe) ├── standards/ # Estándares técnicos (ya existe) └── package.json # Para publicar como paquete npm ``` ### 1.2 Prioridad de Implementación | Prioridad | Módulo | Origen | Impacto | |-----------|--------|--------|---------| | **P0** | `utils/` | Gamilit | Todos los proyectos | | **P0** | `constants/` | Gamilit | Todos los proyectos | | **P0** | `types/` | Nuevo | Todos los proyectos | | **P1** | `auth/` | Gamilit + Trading | Backend | | **P1** | `api/interceptors/` | Gamilit | Backend | | **P2** | `database/schemas/` | ERP + Gamilit | Base de datos | | **P2** | `notifications/` | Gamilit | Backend | | **P3** | `payments/` | Trading | Backend | | **P3** | `websocket/` | Trading + Gamilit | Backend | | **P3** | `frontend/` | Gamilit | Frontend | --- ## PARTE 2: ORGANIZACIÓN DE TRADING PLATFORM ### 2.1 Estado Actual ``` trading-platform/apps/ ├── backend/ # Express.js - 55 archivos, 15K+ líneas ✅ ├── frontend/ # React 18 - 49 archivos ✅ ├── ml-engine/ # Python FastAPI - 27 archivos ✅ ├── llm-agent/ # Python FastAPI - 18 archivos ✅ ├── trading-agents/ # Python FastAPI - 19 archivos ✅ ├── data-service/ # Python FastAPI - 8 archivos ⚠️ INCOMPLETO └── database/ # PostgreSQL - 98 archivos DDL ✅ ``` ### 2.2 Problemas Identificados 1. **data-service incompleto** - Solo 20% implementado 2. **Sin tests** - Framework configurado pero sin tests reales 3. **URLs hardcodeadas** entre servicios 4. **Sin retry/circuit breaker** en comunicación inter-servicios 5. **Documentación API incompleta** ### 2.3 Reorganización Propuesta ``` trading-platform/ ├── apps/ │ ├── backend/ # API principal (mantener) │ │ └── src/ │ │ ├── modules/ │ │ │ ├── auth/ # ← Usar @core/auth adapter │ │ │ ├── users/ │ │ │ ├── trading/ │ │ │ ├── portfolio/ │ │ │ ├── education/ │ │ │ ├── payments/ # ← Usar @core/payments │ │ │ └── admin/ │ │ └── shared/ │ │ ├── clients/ # Clientes para otros servicios │ │ ├── middleware/ │ │ └── utils/ # ← Usar @core/utils │ │ │ ├── frontend/ # UI (mantener) │ │ │ ├── ml-services/ # RENOMBRAR: Agrupa ML │ │ ├── prediction-engine/ # Ex ml-engine │ │ └── signal-generator/ # Nuevo: extraer de ml-engine │ │ │ ├── ai-services/ # RENOMBRAR: Agrupa IA │ │ ├── copilot/ # Ex llm-agent │ │ └── market-analyst/ # Nuevo: análisis de mercado │ │ │ ├── trading-services/ # RENOMBRAR: Agrupa trading │ │ ├── agents/ # Ex trading-agents │ │ └── order-executor/ # Nuevo: ejecución de órdenes │ │ │ ├── data-services/ # COMPLETAR │ │ ├── market-data/ # Datos de mercado en tiempo real │ │ ├── historical/ # Datos históricos │ │ └── providers/ # Integraciones (Binance, etc.) │ │ │ └── database/ # Mantener │ ├── packages/ # NUEVO: Código compartido interno │ ├── sdk-typescript/ # Cliente para frontend/backend │ ├── sdk-python/ # Cliente para servicios Python │ ├── config/ # Configuración centralizada │ └── types/ # Tipos compartidos │ └── docker/ ├── docker-compose.yml └── docker-compose.dev.yml ``` ### 2.4 Módulos por Funcionalidad | Funcionalidad | App | Responsabilidad | |---------------|-----|-----------------| | **Autenticación** | backend | Login, OAuth, JWT, 2FA | | **Usuarios** | backend | Perfiles, preferencias | | **Trading** | backend + trading-services | Watchlists, órdenes, posiciones | | **Portafolio** | backend | Gestión de inversiones | | **Educación** | backend + frontend | Cursos, lecciones, certificados | | **Pagos** | backend | Stripe, suscripciones | | **Predicciones** | ml-services | Modelos ML, señales | | **Copiloto IA** | ai-services | Chat, análisis, recomendaciones | | **Agentes** | trading-services | Ejecución automática | | **Datos** | data-services | Market data, históricos | ### 2.5 Tareas Pendientes Trading Platform | Tarea | Prioridad | Esfuerzo | |-------|-----------|----------| | Completar data-service | P0 | Alto | | Agregar tests unitarios | P0 | Alto | | Implementar retry/circuit breaker | P1 | Medio | | Crear SDK compartido | P1 | Medio | | Documentar APIs (OpenAPI) | P1 | Medio | | Implementar métricas Prometheus | P2 | Bajo | | Centralizar logging | P2 | Bajo | | Migrar auth a @core/auth | P2 | Medio | --- ## PARTE 3: ORGANIZACIÓN DE ERP-SUITE ### 3.1 Estado Actual ``` erp-suite/apps/ ├── erp-core/ # Base 60% ✅ │ ├── backend/ # 14 módulos, 100+ archivos │ ├── frontend/ # 165 archivos │ └── database/ # 12 schemas, 130+ tablas │ ├── verticales/ │ ├── construccion/ # 35% - DDL parcial ⚠️ │ ├── vidrio-templado/ # 25% - Solo docs 📋 │ ├── mecanicas-diesel/ # 95% - DDL completo ✅ │ ├── retail/ # 25% - Solo docs 📋 │ └── clinicas/ # 25% - Solo docs 📋 │ ├── products/ │ ├── pos-micro/ # 80% MVP ✅ │ └── erp-basico/ # 0% ❌ │ ├── saas/ # Billing layer └── shared-libs/ # VACÍO ❌ ``` ### 3.2 Problemas Identificados 1. **shared-libs vacío** - Sin código compartido entre verticales 2. **Verticales sin código** - Solo documentación en la mayoría 3. **Inconsistencia de stack** - Express en core, NestJS en POS 4. **Sin herencia clara** - Verticales no extienden erp-core ### 3.3 Arquitectura de Herencia Propuesta ``` ┌─────────────────┐ │ @core/ │ │ (workspace) │ └────────┬────────┘ │ ┌────────▼────────┐ │ erp-core │ │ (60-70%) │ └────────┬────────┘ │ ┌────────────────────┼────────────────────┐ │ │ │ ┌───────▼───────┐ ┌───────▼───────┐ ┌───────▼───────┐ │ Construcción │ │ Retail │ │ Clínicas │ │ (+30% custom)│ │ (+40% custom)│ │ (+50% custom)│ └───────────────┘ └───────────────┘ └───────────────┘ ``` ### 3.4 Reorganización Propuesta ``` erp-suite/ ├── apps/ │ ├── erp-core/ # BASE GENÉRICA │ │ ├── backend/ │ │ │ └── src/ │ │ │ ├── modules/ │ │ │ │ ├── auth/ # Autenticación base │ │ │ │ ├── core/ # Catálogos maestros │ │ │ │ ├── partners/ # Clientes/Proveedores │ │ │ │ ├── inventory/ # Inventario base │ │ │ │ ├── sales/ # Ventas base │ │ │ │ ├── purchases/ # Compras base │ │ │ │ ├── financial/ # Contabilidad base │ │ │ │ ├── hr/ # RRHH base │ │ │ │ ├── projects/ # Proyectos base │ │ │ │ ├── crm/ # CRM base │ │ │ │ └── system/ # Sistema │ │ │ └── shared/ # Compartido dentro de core │ │ ├── frontend/ │ │ └── database/ │ │ │ ├── verticales/ │ │ ├── construccion/ │ │ │ ├── backend/ │ │ │ │ └── src/ │ │ │ │ ├── modules/ │ │ │ │ │ ├── construction/ # Proyectos de obra │ │ │ │ │ ├── hse/ # Seguridad e higiene │ │ │ │ │ ├── budgets/ # Presupuestos │ │ │ │ │ ├── progress/ # Avances de obra │ │ │ │ │ └── infonavit/ # Integración INFONAVIT │ │ │ │ └── extends/ # EXTENSIONES de erp-core │ │ │ │ ├── hr.extension.ts │ │ │ │ └── projects.extension.ts │ │ │ ├── frontend/ │ │ │ └── database/ │ │ │ │ │ ├── mecanicas-diesel/ │ │ │ ├── backend/ │ │ │ │ └── src/modules/ │ │ │ │ ├── service-orders/ # Órdenes de servicio │ │ │ │ ├── diagnostics/ # Diagnósticos │ │ │ │ ├── vehicles/ # Vehículos │ │ │ │ └── parts/ # Refacciones │ │ │ └── ... │ │ │ │ │ ├── vidrio-templado/ │ │ │ └── ... (por definir) │ │ │ │ │ ├── retail/ │ │ │ ├── backend/ │ │ │ │ └── src/modules/ │ │ │ │ ├── pos/ # Punto de venta │ │ │ │ ├── cash/ # Caja │ │ │ │ ├── pricing/ # Precios │ │ │ │ └── ecommerce/ # E-commerce │ │ │ └── ... │ │ │ │ │ └── clinicas/ │ │ ├── backend/ │ │ │ └── src/modules/ │ │ │ ├── patients/ # Pacientes │ │ │ ├── appointments/ # Citas │ │ │ ├── consultations/ # Consultas │ │ │ ├── prescriptions/ # Recetas │ │ │ ├── laboratory/ # Laboratorio │ │ │ └── pharmacy/ # Farmacia │ │ └── ... │ │ │ └── products/ │ ├── pos-micro/ # POS standalone │ └── erp-basico/ # ERP simplificado │ ├── packages/ # NUEVO: Shared interno │ ├── erp-sdk/ # SDK para verticales │ ├── erp-types/ # Tipos compartidos │ ├── erp-components/ # Componentes UI │ └── erp-utils/ # Utilidades │ └── docker/ ``` ### 3.5 Módulos por Vertical | Módulo | Core | Construcción | Mecánicas | Retail | Clínicas | |--------|:----:|:------------:|:---------:|:------:|:--------:| | Auth | ✅ | Hereda | Hereda | Hereda | Hereda | | Partners | ✅ | Hereda | Hereda | Hereda | Hereda | | Inventory | ✅ | Extiende | Extiende | Extiende | Extiende | | Sales | ✅ | - | - | Extiende | - | | Purchases | ✅ | Extiende | Extiende | Extiende | Extiende | | Financial | ✅ | Extiende | Hereda | Hereda | Hereda | | HR | ✅ | Extiende | Hereda | Hereda | Hereda | | Projects | ✅ | Extiende | - | - | - | | Construction | - | ✅ | - | - | - | | HSE | - | ✅ | - | - | - | | Service Orders | - | - | ✅ | - | - | | Diagnostics | - | - | ✅ | - | - | | POS | - | - | - | ✅ | - | | Cash | - | - | - | ✅ | - | | Patients | - | - | - | - | ✅ | | Appointments | - | - | - | - | ✅ | | Medical Records | - | - | - | - | ✅ | ### 3.6 Tareas Pendientes ERP-Suite | Tarea | Vertical | Prioridad | Esfuerzo | |-------|----------|-----------|----------| | Implementar backend Mecánicas | mecanicas-diesel | P0 | Alto | | Completar backend Construcción | construccion | P0 | Alto | | Crear DDL Retail | retail | P1 | Medio | | Crear DDL Clínicas | clinicas | P1 | Medio | | Crear DDL Vidrio Templado | vidrio-templado | P2 | Medio | | Crear packages/erp-sdk | global | P1 | Alto | | Implementar herencia de módulos | global | P1 | Alto | | Poblar shared-libs | global | P1 | Medio | --- ## PARTE 4: PATRONES A REPLICAR DE GAMILIT ### 4.1 Sistema SSOT (Single Source of Truth) **Qué es:** Constantes centralizadas que son la única fuente de verdad. **Archivos a crear en core/constants/:** ```typescript // core/constants/database.constants.ts export const DB_SCHEMAS = { AUTH: 'auth_management', CORE: 'core', // ... universales }; export const getFullTableName = (schema: string, table: string) => `${schema}.${table}`; ``` ```typescript // core/constants/api.constants.ts export const API_VERSION = 'v1'; export const API_BASE = `/api/${API_VERSION}`; export const buildApiUrl = (route: string) => `${API_BASE}${route}`; ``` ### 4.2 Sincronización Backend-Frontend **Script:** `sync-enums.ts` ```bash # Copia enums de backend a frontend cp backend/src/shared/constants/enums.ts frontend/src/shared/constants/enums.ts ``` **Agregar a package.json:** ```json { "scripts": { "sync:enums": "ts-node scripts/sync-enums.ts", "postinstall": "npm run sync:enums" } } ``` ### 4.3 Estructura de Módulos Backend ``` module/ ├── module.module.ts # Decorador @Module ├── module.controller.ts # Endpoints ├── module.service.ts # Lógica de negocio ├── dto/ # Data Transfer Objects │ ├── create-x.dto.ts │ ├── update-x.dto.ts │ └── query-x.dto.ts ├── entities/ # Entidades TypeORM │ └── x.entity.ts └── __tests__/ # Tests ├── module.service.spec.ts └── module.controller.spec.ts ``` ### 4.4 Estructura de Features Frontend ``` features/ └── gamification/ ├── components/ # Componentes del feature ├── hooks/ # Hooks del feature ├── services/ # API calls ├── types/ # Tipos └── utils/ # Utilidades ``` ### 4.5 Shared Components (Atomic Design) ``` shared/components/ ├── atoms/ # Button, Input, Label ├── molecules/ # FormField, Card, Alert ├── organisms/ # DataTable, Modal, Sidebar └── templates/ # Layouts completos ``` --- ## PARTE 5: ACCIONES INMEDIATAS ### Fase 1: Core Modules (Semana 1-2) 1. **Poblar `core/modules/utils/`** - Copiar de `/projects/gamilit/apps/backend/src/shared/utils/` - Adaptar para ser framework-agnostic 2. **Crear `core/constants/`** - Copiar enums universales de Gamilit - Crear regex patterns 3. **Crear `core/types/`** - Tipos de API response - Tipos de paginación - Tipos de auth 4. **Poblar `core/catalog/_reference/`** - Copiar código de referencia de Gamilit para auth, notifications, etc. ### Fase 2: Trading Platform (Semana 2-4) 1. **Completar data-service** - Implementar feeds de datos de mercado - Integrar con Binance/otros providers 2. **Crear packages/sdk-typescript** - Cliente HTTP compartido - Tipos de API 3. **Agregar tests básicos** - Tests unitarios para servicios críticos ### Fase 3: ERP-Suite (Semana 3-6) 1. **Implementar backend Mecánicas Diesel** - Basarse en DDL existente (100% completo) - Crear services y controllers 2. **Completar backend Construcción** - Implementar services para módulos existentes 3. **Crear packages/erp-sdk** - SDK para que verticales extiendan erp-core ### Fase 4: Estandarización (Semana 6-8) 1. **Decisión de framework** - Opción A: Migrar todo a NestJS - Opción B: Mantener Express, crear adapters - **Recomendación:** Opción B para minimizar reescritura 2. **Implementar patrones SSOT en todos los proyectos** 3. **Configurar CI/CD con validación de contratos** --- ## PARTE 6: MATRIZ DE RESPONSABILIDADES ### Por Proyecto | Proyecto | Responsable | Stack | Prioridad | |----------|-------------|-------|-----------| | core/modules | Arquitecto | Agnostic | P0 | | Gamilit | Dev Team A | NestJS | Mantenimiento | | Trading Platform | Dev Team B | Express/Python | P1 | | ERP-Suite/Core | Dev Team C | Express | P1 | | ERP/Verticales | Dev Teams | Express | P2 | ### Por Módulo Core | Módulo | Propietario | Consumidores | |--------|-------------|--------------| | utils | Core Team | Todos | | auth | Core Team | Backend | | database | Core Team | Backend, DDL | | api | Core Team | Backend | | notifications | Core Team | Backend | | payments | Trading Team | Trading, ERP | | frontend | Core Team | Frontend | --- ## PARTE 7: MÉTRICAS DE ÉXITO ### Corto Plazo (1 mes) - [ ] `core/modules/utils/` implementado y en uso - [ ] `core/constants/` creado con enums universales - [ ] data-service de Trading Platform funcional - [ ] Backend de Mecánicas Diesel iniciado ### Mediano Plazo (3 meses) - [ ] 70% de código duplicado eliminado - [ ] Todos los proyectos usando `@core/utils` - [ ] DDL completo para todas las verticales ERP - [ ] Tests con cobertura >50% en servicios críticos ### Largo Plazo (6 meses) - [ ] Arquitectura de herencia ERP funcionando - [ ] CI/CD con validación de contratos API - [ ] Documentación completa (OpenAPI) para todas las APIs - [ ] Todos los proyectos con estructura consistente --- ## ANEXO A: DECISIONES ARQUITECTÓNICAS ### ADR-001: Mantener Múltiples Frameworks **Contexto:** Tenemos NestJS (Gamilit) y Express (Trading, ERP). **Decisión:** Mantener ambos frameworks, crear adapters en core/. **Razón:** - Reescribir Gamilit a Express sería costoso - NestJS tiene ventajas para proyectos modulares grandes - Adapters permiten reutilización de lógica ### ADR-002: Monorepo con Packages Compartidos **Contexto:** Código duplicado entre proyectos. **Decisión:** Usar estructura de packages internos. **Razón:** - npm workspaces para gestionar dependencias - Cada proyecto puede importar `@core/utils`, `@erp/sdk` - Versionado independiente si es necesario ### ADR-003: SSOT para Constantes **Contexto:** Constantes hardcodeadas en múltiples lugares. **Decisión:** Centralizar en `core/constants/` con sincronización automática. **Razón:** - Evita inconsistencias - Facilita refactoring - Validación automática en CI --- ## ANEXO B: ARCHIVOS CLAVE ``` # Gamilit (Referencia) /projects/gamilit/apps/backend/src/shared/constants/enums.constants.ts /projects/gamilit/apps/backend/src/shared/constants/database.constants.ts /projects/gamilit/apps/backend/src/shared/constants/routes.constants.ts /projects/gamilit/apps/backend/src/shared/utils/ # Trading Platform /projects/trading-platform/apps/backend/src/ /projects/trading-platform/apps/ml-engine/src/ /projects/trading-platform/apps/database/ddl/ # ERP Suite /projects/erp-suite/apps/erp-core/backend/src/modules/ /projects/erp-suite/apps/erp-core/database/ddl/ /projects/erp-suite/apps/verticales/mecanicas-diesel/database/init/ # Core (a poblar) /core/modules/ /core/constants/ /core/types/ /core/catalog/*/reference/ ``` --- **Fin del documento**