---
id: "US-INV-010"
title: "Comparar Productos"
type: "User Story"
status: "Done"
priority: "Media"
epic: "OQI-004"
project: "trading-platform"
story_points: 3
created_date: "2025-12-05"
updated_date: "2026-01-04"
---

# US-INV-010: Comparar Productos

## Metadata

| Campo | Valor |
|-------|-------|
| **ID** | US-INV-010 |
| **Épica** | OQI-004 - Cuentas de Inversión |
| **Módulo** | investment |
| **Prioridad** | P2 |
| **Story Points** | 3 |
| **Sprint** | Sprint 7 |
| **Estado** | Pendiente |
| **Asignado a** | Por asignar |

---

## Historia de Usuario

**Como** inversor potencial,
**quiero** comparar los productos de inversión lado a lado,
**para** tomar una decisión informada sobre cuál se adapta mejor a mi perfil.

## Descripción Detallada

El usuario debe poder seleccionar múltiples productos (2 o 3) y ver una tabla comparativa que resalte las diferencias clave: perfil de riesgo, rendimiento objetivo, inversión mínima, estrategia, rendimiento histórico, y otras métricas relevantes. La comparación debe ser visual e intuitiva.

## Mockups/Wireframes

```
┌─────────────────────────────────────────────────────────────────┐
│                    COMPARAR PRODUCTOS                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  [x] Atlas    [x] Orion    [x] Nova                             │
│                                                                  │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │ Característica  │ 🛡️ Atlas  │ ⚡ Orion  │ 🚀 Nova      │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Perfil de       │ Conservador│ Moderado   │ Agresivo     │  │
│  │ riesgo          │            │            │              │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Target          │ 3-5%       │ 5-10%      │ 10%+         │  │
│  │ mensual         │ mensual    │ mensual    │ mensual      │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Max drawdown    │ 5%         │ 10%        │ 20%          │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Inversión       │ $100 USD   │ $500 USD   │ $1,000 USD   │  │
│  │ mínima          │ ✅ Accesible│            │              │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Estrategia      │ Mean       │ Trend      │ Momentum     │  │
│  │                 │ reversion  │ following  │ trading      │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Activos         │ BTC, ETH   │ BTC, ETH,  │ BTC, ETH,    │  │
│  │                 │ (majors)   │ BNB, SOL   │ Top 20       │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Trades por día  │ 2-5        │ 5-10       │ 10-20        │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Rendimiento     │ +4.1%      │ +7.2%      │ +11.5%       │  │
│  │ promedio mensual│ 🟢 Estable │ 🟢 Bueno   │ 🟢 Excelente │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Win rate        │ 78%        │ 72%        │ 68%          │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Sharpe ratio    │ 1.8        │ 1.5        │ 1.3          │  │
│  │                 │ ✅ Mejor   │            │              │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Tiempo activo   │ 12 meses   │ 8 meses    │ 6 meses      │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Usuarios        │ 1,250      │ 850        │ 420          │  │
│  │ activos         │            │            │              │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │ Mejor para      │ Principian-│ Intermedio │ Experimenta- │  │
│  │                 │ tes, bajo  │ dispuesto  │ dos, alto    │  │
│  │                 │ riesgo     │ a riesgo   │ riesgo       │  │
│  ├──────────────────────────────────────────────────────────┤  │
│  │                 │ [Abrir]    │ [Abrir]    │ [Abrir]      │  │
│  │                 │ cuenta     │ cuenta     │ cuenta       │  │
│  └──────────────────────────────────────────────────────────┘  │
│                                                                  │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │  📊 Rendimiento Comparado (últimos 6 meses)             │  │
│  │  [Gráfico de líneas con los 3 agentes]                  │  │
│  └──────────────────────────────────────────────────────────┘  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
```

---

## Criterios de Aceptación

**Escenario 1: Comparar 2 productos**
```gherkin
DADO que el usuario está en /investment/products
CUANDO selecciona Atlas y Orion
Y hace click en "Comparar"
ENTONCES se navega a /investment/compare?products=atlas,orion
Y se muestra tabla comparativa con ambos productos
Y se resaltan las diferencias clave
Y se muestra gráfico de rendimiento histórico comparado
```

**Escenario 2: Comparar 3 productos**
```gherkin
DADO que el usuario está en página de comparación
CUANDO selecciona Atlas, Orion y Nova
ENTONCES se muestran los 3 productos en columnas
Y cada característica se compara lado a lado
Y se muestra indicador de "mejor opción" por categoría
```

**Escenario 3: Resaltar mejor opción por criterio**
```gherkin
DADO que el usuario está comparando productos
ENTONCES el producto con menor inversión mínima tiene badge "✅ Más accesible"
Y el producto con mejor Sharpe ratio tiene badge "✅ Mejor"
Y el producto con mayor rendimiento tiene badge "🟢 Más rentable"
```

**Escenario 4: Ver gráfico comparativo**
```gherkin
DADO que el usuario está comparando productos
CUANDO hace scroll a la sección de rendimiento
ENTONCES se muestra gráfico de líneas
Y cada producto tiene color diferente
Y se puede hacer hover para ver valores exactos
Y se muestra leyenda con nombres de productos
```

**Escenario 5: Abrir cuenta desde comparación**
```gherkin
DADO que el usuario decidió cuál producto elegir
CUANDO hace click en "Abrir cuenta" de Orion
ENTONCES se navega a /investment/open/orion
Y se pre-carga información del producto
```

**Escenario 6: Compartir comparación**
```gherkin
DADO que el usuario está comparando productos
CUANDO hace click en "Compartir"
ENTONCES se copia URL con parámetros ?products=atlas,orion
Y se puede compartir la comparación exacta
Y al abrir el link se muestran los mismos productos
```

## Criterios Adicionales

- [ ] Permitir agregar/quitar productos sin recargar página
- [ ] Exportar comparación como PDF
- [ ] Mostrar recomendación basada en perfil del usuario
- [ ] Responsive design (en móvil, cards apiladas)
- [ ] Opción de filtrar características (mostrar solo las relevantes)

---

## Tareas Técnicas

**Database:**
- [ ] DB-INV-001: Query optimizada para traer múltiples productos
- [ ] DB-INV-002: Incluir métricas calculadas (avg return, Sharpe, etc.)

**Backend:**
- [ ] BE-INV-001: Endpoint GET /investment/products/compare
- [ ] BE-INV-002: Implementar ProductService.compareProducts()
- [ ] BE-INV-003: Calcular métricas comparativas
- [ ] BE-INV-004: Endpoint para rendimiento histórico comparado

**Frontend:**
- [ ] FE-INV-001: Crear página ComparePage.tsx
- [ ] FE-INV-002: Crear componente ComparisonTable.tsx
- [ ] FE-INV-003: Crear componente ComparisonChart.tsx
- [ ] FE-INV-004: Crear componente ProductSelector.tsx
- [ ] FE-INV-005: Crear componente BestBadge.tsx
- [ ] FE-INV-006: Implementar lógica de resaltado
- [ ] FE-INV-007: Implementar comparisonsStore

**Tests:**
- [ ] TEST-INV-001: Test lógica de comparación
- [ ] TEST-INV-002: Test resaltado de mejor opción
- [ ] TEST-INV-003: Test compartir URL
- [ ] TEST-INV-004: Test E2E flujo completo

---

## Dependencias

**Depende de:**
- [ ] US-INV-001: Ver productos - Estado: Pendiente

**Bloquea:**
- Ninguna

---

## Notas Técnicas

**Endpoints involucrados:**
| Método | Endpoint | Descripción |
|--------|----------|-------------|
| GET | /investment/products/compare | Datos de comparación |
| GET | /investment/products/performance/compare | Rendimiento comparado |

**Query Parameters:**
```typescript
GET /investment/products/compare?products=atlas,orion,nova
```

**Response:**
```typescript
{
  products: [
    {
      id: "uuid-atlas",
      name: "Atlas",
      codeName: "atlas",
      riskProfile: "conservative",
      targetReturn: { min: 3, max: 5 },
      maxDrawdown: 5,
      minimumInvestment: 100,
      strategy: "Mean reversion + Grid trading",
      assets: ["BTC", "ETH"],
      tradesPerDay: { min: 2, max: 5 },
      metrics: {
        avgMonthlyReturn: 4.1,
        winRate: 78,
        sharpeRatio: 1.8,
        monthsActive: 12,
        activeUsers: 1250
      }
    },
    // ... Orion, Nova
  ],
  comparison: {
    bestMinimumInvestment: "atlas",
    bestSharpeRatio: "atlas",
    bestAvgReturn: "nova",
    mostConservative: "atlas",
    mostAggressive: "nova"
  },
  performanceData: {
    period: "6M",
    atlas: [
      { date: "2025-06-01", return: 3.2 },
      { date: "2025-07-01", return: 7.5 }
      // ...
    ],
    orion: [...],
    nova: [...]
  }
}
```

**Características Comparables:**
- Perfil de riesgo
- Target mensual
- Max drawdown
- Inversión mínima
- Estrategia de trading
- Activos operados
- Frecuencia de trades
- Rendimiento promedio mensual
- Win rate
- Sharpe ratio
- Tiempo activo
- Usuarios activos
- Mejor para (perfil de usuario)

**Lógica de Resaltado:**
```typescript
const getBestBadges = (products) => {
  return {
    lowestMinInvestment: products.sort((a, b) => a.minimumInvestment - b.minimumInvestment)[0],
    bestSharpe: products.sort((a, b) => b.metrics.sharpeRatio - a.metrics.sharpeRatio)[0],
    bestReturn: products.sort((a, b) => b.metrics.avgMonthlyReturn - a.metrics.avgMonthlyReturn)[0],
    bestWinRate: products.sort((a, b) => b.metrics.winRate - a.metrics.winRate)[0]
  };
};
```

**URL Sharing:**
```
/investment/compare?products=atlas,orion
/investment/compare?products=atlas,orion,nova
```

---

## Definition of Ready (DoR)

- [x] Historia claramente escrita
- [x] Criterios de aceptación definidos
- [x] Story points estimados
- [x] Dependencias identificadas
- [ ] Diseño/mockup disponible
- [x] API spec disponible

## Definition of Done (DoD)

- [ ] Código implementado según criterios
- [ ] Tests unitarios escritos y pasando
- [ ] Tests de integración pasando
- [ ] Tabla comparativa responsive
- [ ] Gráfico funcionando
- [ ] URL sharing funcionando
- [ ] Code review aprobado
- [ ] Documentación actualizada
- [ ] QA aprobado
- [ ] Desplegado en ambiente de pruebas

---

## Historial de Cambios

| Fecha | Cambio | Autor |
|-------|--------|-------|
| 2025-12-05 | Creación | Requirements-Analyst |

---

**Creada por:** Requirements-Analyst
**Fecha:** 2025-12-05
**Última actualización:** 2025-12-05
