# OQI-004: Gaps y Mejoras - Cuentas de Inversión

**Módulo:** OQI-004 - Cuentas de Inversión
**Ubicación:** `apps/frontend/src/modules\investment/`
**Fecha:** 2026-01-25
**Status:** ANÁLISIS DE BRECHAS

---

## 1. FUNCIONALIDADES FALTANTES (CRÍTICAS)

### 1.1 Creación de Cuentas (Investment Account Creation)

**Estado:** ❌ NO IMPLEMENTADO

| Aspecto | Descripción | Prioridad | Impacto |
|---------|-------------|----------|--------|
| **Problema** | No existe flujo completo de creación de nueva cuenta de inversión | CRÍTICA | Alto |
| **Ubicación** | ProductDetail.tsx línea 183-195 | UI | Usuario no puede invertir |
| **Endpoint** | POST /investment/accounts (NO EXISTE) | Backend | Falta implementación |
| **Componente** | Falta CreateAccountForm | Frontend | No hay form |

**Detalles:**
```typescript
// ProductDetail.tsx - línea 183-195
const handleInvest = async () => {
  if (!product || investing) return;
  try {
    setInvesting(true);
    // ❌ PROBLEMA: investmentService.createAccount existe pero endpoint NO
    await investmentService.createAccount(product.id, investAmount);
    navigate('/investment/portfolio');
  } catch (err) {
    setError(err instanceof Error ? err.message : 'Error creating account');
  } finally {
    setInvesting(false);
  }
};
```

**Endpoint Faltante:**
```
POST /investment/accounts
Body: {
  productId: string;
  initialAmount: number;
  autoReinvest?: boolean;
}
Response: {
  id: string;
  accountNumber: string;
  status: 'pending' | 'active';
  createdAt: string;
}
```

**Tareas Requeridas:**

| # | Tarea | Componente | Estimación |
|---|-------|-----------|-----------|
| 1 | Implementar POST /investment/accounts en backend | Backend API | 2d |
| 2 | Agregar validaciones (KYC check, min deposit) | Backend | 1d |
| 3 | Crear endpoint GET /investment/accounts/create-wizard | Backend | 1d |
| 4 | Crear componente CreateAccountWizard | Frontend | 2d |
| 5 | Integrar con Identity service (KYC) | Integration | 2d |
| 6 | Tests unitarios y E2E | QA | 1d |

**Flujo Propuesto:**
```
ProductDetail.tsx
  → "Invertir Ahora" click
  → CreateAccountWizard modal/page
    1. Confirmar producto + monto
    2. Verificar identidad (si requerido)
    3. Aceptar términos
    4. POST /investment/accounts
    5. Confirmación + redirect a AccountDetail
```

---

### 1.2 Optimización de Portafolio (Portfolio Optimization)

**Estado:** ❌ NO IMPLEMENTADO

| Aspecto | Descripción | Prioridad | Impacto |
|---------|-------------|----------|--------|
| **Problema** | No hay recomendaciones ni optimización automática de asignación | ALTA | Medio |
| **Ubicación** | Portfolio.tsx, Reports.tsx | UI | Usuario no optimiza |
| **Endpoint** | POST /investment/accounts/optimize (NO EXISTE) | Backend | Falta ML |
| **Componente** | Falta PortfolioOptimizer | Frontend | No hay UI |

**Descripción:**
Usuario debe poder:
- Obtener recomendaciones de realocación basadas en performance
- Ejecutar optimización automática (proporciones)
- Ver alternativas de portafolio
- Backtesting de cambios propuestos

**Endpoint Faltante:**
```
POST /investment/accounts/optimize
Body: {
  accountIds?: string[];
  strategy?: 'max-return' | 'min-risk' | 'balanced';
  constraints?: {
    minAllocation: number; // %
    maxAllocation: number; // %
    riskTolerance: 'low' | 'medium' | 'high';
  }
}
Response: {
  current: { [accountId]: number }; // %
  recommended: { [accountId]: number }; // %
  expectedReturn: number; // %
  expectedRisk: number; // std dev
  transactions: Array<{
    from: string;
    to: string;
    amount: number;
  }>;
}
```

**Componente Requerido:**
```typescript
interface PortfolioOptimizerProps {
  accounts: InvestmentAccount[];
  onApply?: (transactions: Transaction[]) => void;
}

const PortfolioOptimizer: React.FC<PortfolioOptimizerProps> = ({
  accounts,
  onApply
}) => {
  // 1. Calcular allocation actual
  // 2. Llamar POST /investment/accounts/optimize
  // 3. Mostrar comparativa (actual vs recomendado)
  // 4. Permitir ajustes manuales
  // 5. Simular rendimiento esperado
  // 6. Ejecutar reallocations
};
```

**Tareas Requeridas:**

| # | Tarea | Componente | Estimación |
|---|-------|-----------|-----------|
| 1 | Implementar algoritmo Markowitz en ML engine | ML | 3d |
| 2 | Crear endpoint POST /investment/accounts/optimize | Backend | 2d |
| 3 | Crear PortfolioOptimizer component | Frontend | 2d |
| 4 | Agregar página /investment/portfolio-optimizer | Frontend | 1d |
| 5 | Integrar visualización de simulaciones | Frontend | 1d |
| 6 | Tests de algoritmo + UI | QA | 1d |

---

### 1.3 Análisis de Riesgo Avanzado (Risk Analysis)

**Estado:** ⚠️ PARCIALMENTE IMPLEMENTADO

| Aspecto | Descripción | Prioridad | Impacto |
|---------|-------------|----------|--------|
| **Problema** | Solo métricas básicas (balance, ganancias); falta análisis profundo | ALTA | Medio |
| **Ubicación** | Reports.tsx, AccountDetail.tsx | UI | Usuario no comprende riesgo |
| **Endpoint** | GET /investment/accounts/:id/risk-analysis (NO EXISTE) | Backend | Falta cálculos |
| **Componente** | Falta RiskAnalysisPanel | Frontend | No hay UI detallada |

**Métricas Faltantes:**
```
- Value at Risk (VaR) - 95% confidence
- Conditional Value at Risk (CVaR)
- Sharpe Ratio
- Sortino Ratio
- Maximum Drawdown
- Correlation Matrix (con otros productos)
- Beta (vs benchmark)
- Correlation con portafolio del usuario
```

**Endpoint Faltante:**
```
GET /investment/accounts/:id/risk-analysis
Response: {
  var95: number;           // % pérdida máxima esperada
  cvar: number;            // % en tail risk
  sharpeRatio: number;
  sortinoRatio: number;
  maxDrawdown: number;     // % histórico
  currentDrawdown: number; // % actual
  beta: number;
  correlationMatrix: Record<string, number>;
  riskScore: number;       // 1-10
  riskGrade: 'A' | 'B' | 'C' | 'D' | 'F';
}
```

**Componente Requerido:**
```typescript
interface RiskAnalysisPanelProps {
  accountId: string;
  onOpenSettings?: () => void;
}

const RiskAnalysisPanel: React.FC<RiskAnalysisPanelProps> = ({
  accountId,
  onOpenSettings
}) => {
  // 1. GET /investment/accounts/:id/risk-analysis
  // 2. Renderizar métricas con explicaciones
  // 3. Gráficos de riesgo (histogram, correlation heatmap)
  // 4. Sugerencias de ajuste si riesgo alto
  // 5. Comparación con otros productos
};
```

**Tareas Requeridas:**

| # | Tarea | Componente | Estimación |
|---|-------|-----------|-----------|
| 1 | Implementar cálculos de VaR/CVaR en backend | Backend | 2d |
| 2 | Crear endpoint GET /investment/accounts/:id/risk-analysis | Backend | 1d |
| 3 | Crear RiskAnalysisPanel component | Frontend | 2d |
| 4 | Agregar visualizaciones (heatmap, histogram) | Frontend | 1d |
| 5 | Integrar alertas de riesgo excesivo | Backend/Frontend | 1d |
| 6 | Tests y validación de fórmulas | QA | 1d |

---

## 2. FUNCIONALIDADES PARCIALMENTE IMPLEMENTADAS

### 2.1 Gestión de Múltiples Cuentas

**Estado:** ⚠️ PARCIALMENTE IMPLEMENTADO (70%)

| Aspecto | Descripción | Status |
|---------|-------------|--------|
| Listar cuentas | ✅ Portfolio.tsx, Transactions.tsx | Done |
| Ver detalles cuenta | ✅ AccountDetail.tsx | Done |
| Transferencias entre cuentas | ❌ NOT IMPLEMENTED | Missing |
| Consolidación de reportes | ⚠️ PARTIAL - No en tiempo real | Partial |
| Limpieza de cuentas cerradas | ❌ NOT IMPLEMENTED | Missing |

**Endpoint Faltante:**
```
POST /investment/accounts/transfer
Body: {
  fromAccountId: string;
  toAccountId: string;
  amount: number;
}
Response: {
  transactionId: string;
  status: 'pending' | 'completed';
}
```

**Componente Requerido:**
```typescript
// Agregar a AccountDetail.tsx
const handleTransfer = async () => {
  // Modal para seleccionar cuenta destino
  // Validar monto y saldo
  // POST /investment/accounts/transfer
  // Refresco de balances
};
```

---

### 2.2 Reporte y Exportación Avanzada

**Estado:** ⚠️ PARCIALMENTE IMPLEMENTADO (50%)

| Aspecto | Descripción | Status |
|---------|-------------|--------|
| Export JSON | ✅ Reports.tsx línea 193 | Done |
| Export CSV | ❌ NOT IMPLEMENTED | Missing |
| Export PDF | ❌ NOT IMPLEMENTED | Missing |
| Email scheduling | ❌ NOT IMPLEMENTED | Missing |
| Custom date range | ❌ NOT IMPLEMENTED | Missing |
| Tax report (1099) | ❌ NOT IMPLEMENTED | Missing |

**Tareas Requeridas:**

| # | Tarea | Componente | Estimación |
|---|-------|-----------|-----------|
| 1 | Agregar export CSV | Reports.tsx | 1d |
| 2 | Agregar export PDF con jsPDF | Reports.tsx | 1d |
| 3 | Crear endpoint GET /investment/accounts/tax-report | Backend | 2d |
| 4 | Agregar scheduling de reportes por email | Backend/Scheduler | 2d |
| 5 | Implementar date range picker | Frontend | 1d |

---

### 2.3 Notificaciones en Tiempo Real

**Estado:** ⚠️ PARCIALMENTE IMPLEMENTADO (30%)

| Aspecto | Descripción | Status |
|---------|-------------|--------|
| Configuración | ✅ AccountSettingsPanel.tsx | Done |
| Distribución alerts | ❌ NOT IMPLEMENTED | Missing |
| Performance alerts | ❌ NOT IMPLEMENTED | Missing |
| Risk alerts | ❌ NOT IMPLEMENTED | Missing |
| WebSocket updates | ❌ NOT IMPLEMENTED | Missing |
| Push notifications | ❌ NOT IMPLEMENTED | Missing |

**Tareas Requeridas:**

| # | Tarea | Componente | Estimación |
|---|-------|-----------|-----------|
| 1 | Implementar WebSocket connection | Frontend/Backend | 2d |
| 2 | Crear notification service | Frontend | 1d |
| 3 | Setup Firebase Cloud Messaging | Backend/Frontend | 2d |
| 4 | Integrar notificaciones reales | All | 1d |

---

## 3. BUGS Y PROBLEMAS CONOCIDOS

### 3.1 Performance Issues

| Bug | Ubicación | Severity | Descripción |
|-----|-----------|----------|-------------|
| Canvas rendering lag | ProductDetail.tsx, Reports.tsx | MEDIA | Lag en renderizado de gráficos con muchos datos |
| No pagination en transactions | Transactions.tsx | BAJA | Carga todos los registros sin paginación |
| N+1 queries | API | MEDIA | Múltiples queries por cada transacción |
| No lazy loading de images | Componentes | BAJA | Iconos/imágenes se cargan todos |

**Soluciones:**

| Bug | Solución | Estimación |
|-----|----------|-----------|
| Canvas lag | Web Worker para cálculos, requestAnimationFrame | 1d |
| No pagination | Implementar infinite scroll | 1d |
| N+1 queries | Query optimization + batch endpoints | 2d |
| Lazy loading | Lazy load imgs, tree-shaking imports | 1d |

---

### 3.2 Validación Incompleta

| Bug | Ubicación | Severity | Descripción |
|-----|-----------|----------|-------------|
| Sync issues 2FA | WithdrawForm.tsx | ALTA | No hay retry logic para código 2FA |
| No validation de dirección crypto | WithdrawForm.tsx | MEDIA | No valida formato de wallet address |
| Min amount no actualiza | WithdrawForm.tsx línea 199 | BAJA | Min withdrawal amount hardcoded |
| No throttle en form submit | DepositForm.tsx | BAJA | Usuario puede hacer click múltiples veces |

---

### 3.3 Error Handling

| Bug | Ubicación | Severity | Descripción |
|-----|-----------|----------|-------------|
| Generic error messages | Todos | MEDIA | "Error" sin detalles para usuario |
| No retry en fetch failure | Transacciones | ALTA | Falla sin posibilidad de retry |
| No fallback UI | Charts | BAJA | Charts pueden no renderizar sin error visible |

---

## 4. MEJORAS SUGERIDAS (NO CRÍTICAS)

### 4.1 User Experience

| Mejora | Impacto | Estimación |
|--------|--------|-----------|
| Animaciones de transiciones | Bajo | 1d |
| Modo oscuro refinado | Bajo | 1d |
| Keyboard shortcuts | Bajo | 1d |
| Quick preview de productos | Medio | 2d |
| Autosave de borradores | Medio | 1d |
| Historial de acciones (undo) | Bajo | 2d |

---

### 4.2 Funcionalidades Avanzadas

| Mejora | Descripción | Estimación |
|--------|-------------|-----------|
| Simulador de inversiones | "What-if" tool para diferentes montos | 3d |
| Análisis de tendencias | Gráficos de trends a largo plazo | 2d |
| Benchmark comparison | Comparar vs índices de mercado | 2d |
| Social features | Compartir portafolio (anónimo) | 3d |
| API pública | Permitir terceros integrar datos | 5d |

---

## 5. ROADMAP DE IMPLEMENTACIÓN

### Fase 1 (1-2 semanas) - CRÍTICO
```
Sprint 1:
✅ Creación de cuentas (createAccount endpoint)
✅ Transferencias entre cuentas
✅ Análisis de riesgo básico
```

### Fase 2 (2-3 semanas) - IMPORTANTE
```
Sprint 2-3:
✅ Optimización de portafolio
✅ Export PDF/CSV
✅ Notificaciones en tiempo real
✅ Performance fixes
```

### Fase 3 (3-4 semanas) - DESEADO
```
Sprint 4-5:
✅ Advanced analytics
✅ Simulador de inversiones
✅ Social features
✅ API pública
```

---

## 6. TABLA RESUMEN DE GAPS

| Categoría | Funcionalidad | Estado | Prioridad | Impacto |
|-----------|---------------|--------|----------|--------|
| **CRÍTICO** | Crear cuenta de inversión | ❌ 0% | P0 | ALTO |
| **CRÍTICO** | Optimización portafolio | ❌ 0% | P0 | ALTO |
| **CRÍTICO** | Análisis riesgo avanzado | ⚠️ 30% | P1 | ALTO |
| **IMPORTANTE** | Transferencias entre cuentas | ❌ 0% | P1 | MEDIO |
| **IMPORTANTE** | Export PDF/CSV | ❌ 0% | P1 | MEDIO |
| **IMPORTANTE** | Notificaciones reales | ⚠️ 30% | P1 | MEDIO |
| **DESEADO** | Simulador inversiones | ❌ 0% | P2 | BAJO |
| **DESEADO** | Benchmark comparison | ❌ 0% | P2 | BAJO |
| **BUGS** | Performance gráficos | ⚠️ | P1 | MEDIO |
| **BUGS** | Error handling genérico | ⚠️ | P1 | MEDIO |

---

## 7. ESTIMACIÓN TOTAL

| Categoría | Estimación | Rango |
|-----------|------------|-------|
| Funcionalidades Críticas | 12 días | 1-2 semanas |
| Funcionalidades Importantes | 14 días | 2-3 semanas |
| Mejoras/Deseables | 16 días | 3-4 semanas |
| Bugs/Fixes | 8 días | 1 semana |
| **TOTAL** | **50 días** | **~10 semanas** |

---

## 8. RECOMENDACIONES FINALES

1. **Prioridad Inmediata:** Completar flujo de creación de cuentas (BLOQUEANTE)
2. **Validación:** Implementar análisis de riesgo antes de ejecutar optimizaciones
3. **Testing:** Agregar E2E tests para flujos críticos (depósito/retiro/crear cuenta)
4. **Monitoreo:** Setup analytics para entender uso del módulo
5. **Escalabilidad:** Considerar caching y batch operations para múltiples cuentas
6. **Seguridad:** Audit de manejo de tokens y datos sensibles

---

**Fecha de Análisis:** 2026-01-25
**Total de Gaps Identificados:** 15+
**Funcionalidades Bloqueantes:** 3
**Próximo Paso:** Priorizar y crear tickets de Jira
