Platform Marketing Content: - Add PaginationParams, PaginationMeta, PaginatedResponse interfaces - Fix JwtAuthGuard import paths (common/guards instead of modules/auth) - Add missing fields to CRM interfaces (address, keywords, features, benefits) - Install @nestjs/throttler dependency ERP Suite - Construccion: - Create tsconfig.node.json for web frontend - Add vite-env.d.ts for Vite types - Fix implicit return errors in Express controllers - Prefix unused parameters with underscore ERP Suite - ERP Core: - Export PoolClient type from database config - Fix invoice type comparison (customer/supplier vs out_invoice) - Refactor base.service.ts query handling for proper type inference - Rename Role type to RoleType to avoid conflict with entity - Fix ProtectedRoute to use role?.name instead of roles array ERP Suite - POS Micro: - Add vite-env.d.ts for Vite types - Fix Sale property names (discountAmount, changeAmount) - Export TodaySummary interface from sales service All projects now pass npm install and npm run build successfully. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
24 KiB
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
core/modules/vacío - Solo carpetas sin códigocore/catalog/_reference/vacío - Documentación sin implementación- Código duplicado entre proyectos (~5,000+ líneas)
- Frameworks mixtos - NestJS vs Express
- 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
- data-service incompleto - Solo 20% implementado
- Sin tests - Framework configurado pero sin tests reales
- URLs hardcodeadas entre servicios
- Sin retry/circuit breaker en comunicación inter-servicios
- 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
- shared-libs vacío - Sin código compartido entre verticales
- Verticales sin código - Solo documentación en la mayoría
- Inconsistencia de stack - Express en core, NestJS en POS
- 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/:
// core/constants/database.constants.ts
export const DB_SCHEMAS = {
AUTH: 'auth_management',
CORE: 'core',
// ... universales
};
export const getFullTableName = (schema: string, table: string) =>
`${schema}.${table}`;
// 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
# Copia enums de backend a frontend
cp backend/src/shared/constants/enums.ts frontend/src/shared/constants/enums.ts
Agregar a package.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)
-
Poblar
core/modules/utils/- Copiar de
/projects/gamilit/apps/backend/src/shared/utils/ - Adaptar para ser framework-agnostic
- Copiar de
-
Crear
core/constants/- Copiar enums universales de Gamilit
- Crear regex patterns
-
Crear
core/types/- Tipos de API response
- Tipos de paginación
- Tipos de auth
-
Poblar
core/catalog/_reference/- Copiar código de referencia de Gamilit para auth, notifications, etc.
Fase 2: Trading Platform (Semana 2-4)
-
Completar data-service
- Implementar feeds de datos de mercado
- Integrar con Binance/otros providers
-
Crear packages/sdk-typescript
- Cliente HTTP compartido
- Tipos de API
-
Agregar tests básicos
- Tests unitarios para servicios críticos
Fase 3: ERP-Suite (Semana 3-6)
-
Implementar backend Mecánicas Diesel
- Basarse en DDL existente (100% completo)
- Crear services y controllers
-
Completar backend Construcción
- Implementar services para módulos existentes
-
Crear packages/erp-sdk
- SDK para que verticales extiendan erp-core
Fase 4: Estandarización (Semana 6-8)
-
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
-
Implementar patrones SSOT en todos los proyectos
-
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 usocore/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