FASE 0 - Preparación y Purga: - Archived 21 completed tasks to _archive/2026-01/ - Marked 4 docs as DEPRECATED - Created 3 baseline coherence reports FASE 1 - DDL-Backend Coherence: - audit.types.ts: +4 types (SystemEvent, TradingAudit, ApiRequestLog, DataAccessLog) - investment.types.ts: +4 types (RiskQuestionnaire, WithdrawalRequest, DailyPerformance, DistributionHistory) - entity.types.ts: +5 types (Symbol, TradingBot, TradingSignal, TradingMetrics, PaperBalance) FASE 2 - Backend-Frontend Coherence: - investmentStore.ts: New Zustand store with 20+ actions - mlStore.ts: New Zustand store with signal caching - alerts.service.ts: New service with 15 functions FASE 3 - Documentation: - OQI-009: Updated to 100% coverage, added ET-MKT-004-productos.md - OQI-010: Created full structure (STATUS.md, ROADMAP-MT4.md, ET-MT4-001-gateway.md) Coherence Baseline Established: - DDL-Backend: 31% (target 95%) - Backend-Frontend: 72% (target 85%) - Global: 39.6% (target 90%) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
02-ANALISIS - Phase 1 MVP Implementation
Análisis de Dependencias
Servicios Existentes Analizados
-
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
- Método
-
Email Service (
src/modules/auth/services/email.service.ts)- Nodemailer configurado
- Templates HTML existentes
- Patrón a replicar para notificaciones
-
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
-
Product Service (
src/modules/investment/services/product.service.ts)- Productos Atlas/Orion/Nova con tasas de retorno
targetReturnMin/Maxpara cálculo de distribuciones
Tablas de Base de Datos Esperadas
-- 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
- Service Classes: Singleton con export de instancia
- Controllers: Funciones async con AuthenticatedRequest
- Routes: Router con authHandler helper
- 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 |