# 02-ANALISIS - Phase 1 MVP Implementation ## Análisis de Dependencias ### Servicios Existentes Analizados 1. **WebSocket Manager** (`src/core/websocket/websocket.server.ts`) - Método `sendToUser(userId, message)` disponible - Soporte para canales privados (`user:*`, `account:*`) - Heartbeat y reconexión automática 2. **Email Service** (`src/modules/auth/services/email.service.ts`) - Nodemailer configurado - Templates HTML existentes - Patrón a replicar para notificaciones 3. **Alerts Service** (`src/modules/trading/services/alerts.service.ts`) - TODO en línea 280 para integración de notificaciones - Método `triggerAlert()` necesita enviar notificaciones 4. **Product Service** (`src/modules/investment/services/product.service.ts`) - Productos Atlas/Orion/Nova con tasas de retorno - `targetReturnMin/Max` para cálculo de distribuciones ### Tablas de Base de Datos Esperadas ```sql -- Notificaciones CREATE TABLE notifications ( id UUID PRIMARY KEY, user_id UUID REFERENCES users(id), type VARCHAR(50), title VARCHAR(255), message TEXT, priority VARCHAR(20), data JSONB, action_url VARCHAR(255), icon_type VARCHAR(20), channels TEXT[], is_read BOOLEAN DEFAULT FALSE, read_at TIMESTAMPTZ, created_at TIMESTAMPTZ DEFAULT NOW() ); -- Push tokens CREATE TABLE user_push_tokens ( id UUID PRIMARY KEY, user_id UUID REFERENCES users(id), token TEXT, platform VARCHAR(20), is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMPTZ DEFAULT NOW() ); -- Distribution history CREATE TABLE investment.distribution_history ( id UUID PRIMARY KEY, account_id UUID REFERENCES investment.accounts(id), product_id UUID REFERENCES investment.products(id), distribution_date DATE, gross_amount DECIMAL(18,2), fee_amount DECIMAL(18,2), net_amount DECIMAL(18,2), balance_before DECIMAL(18,2), balance_after DECIMAL(18,2), created_at TIMESTAMPTZ DEFAULT NOW() ); -- Distribution runs (auditoría) CREATE TABLE investment.distribution_runs ( id UUID PRIMARY KEY, run_date DATE, total_accounts INTEGER, successful_count INTEGER, failed_count INTEGER, total_gross_amount DECIMAL(18,2), total_fee_amount DECIMAL(18,2), total_net_amount DECIMAL(18,2), started_at TIMESTAMPTZ, completed_at TIMESTAMPTZ, duration_ms INTEGER, created_at TIMESTAMPTZ DEFAULT NOW() ); ``` ## Patrones Identificados 1. **Service Classes**: Singleton con export de instancia 2. **Controllers**: Funciones async con AuthenticatedRequest 3. **Routes**: Router con authHandler helper 4. **Error Handling**: try/catch con logger ## Riesgos Identificados | Riesgo | Mitigación | |--------|------------| | Tablas DB no existen | Diseño flexible que maneja errores | | Push tokens vacíos | Log debug, no error | | Distribución negativa | Skip silencioso en días negativos |