# US-INV-002: Abrir Cuenta de Inversión

## Metadata

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

---

## Historia de Usuario

**Como** inversor,
**quiero** abrir una cuenta de inversión en un producto específico,
**para** comenzar a invertir y obtener rendimientos gestionados por un agente IA.

## Descripción Detallada

El usuario debe poder seleccionar un producto de inversión (Atlas, Orion, Nova) y abrir una cuenta asociada. El proceso incluye aceptar términos y condiciones, y ser redirigido al flujo de depósito inicial.

## Mockups/Wireframes

```
┌─────────────────────────────────────────────────────────────────┐
│                    ABRIR CUENTA - ATLAS                         │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │  🛡️ ATLAS - El Guardián                                 │   │
│   │                                                          │   │
│   │  Perfil: Conservador                                     │   │
│   │  Target mensual: 3-5%                                    │   │
│   │  Max drawdown: 5%                                        │   │
│   │  Inversión mínima: $100 USD                              │   │
│   │                                                          │   │
│   │  Estrategia: Mean reversion + Grid trading               │   │
│   │  Activos: BTC, ETH (solo majors)                        │   │
│   │  Frecuencia: 2-5 trades/día                             │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                  │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │  ⚠️ Disclaimer                                           │   │
│   │                                                          │   │
│   │  Los rendimientos pasados no garantizan resultados      │   │
│   │  futuros. El trading de criptomonedas conlleva riesgos  │   │
│   │  significativos de pérdida.                             │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                  │
│   [✓] Acepto los términos y condiciones                        │
│   [✓] Entiendo los riesgos asociados                           │
│   [✓] Confirmo que tengo al menos 18 años                      │
│                                                                  │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              ABRIR CUENTA Y DEPOSITAR                    │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
```

---

## Criterios de Aceptación

**Escenario 1: Abrir cuenta exitosamente**
```gherkin
DADO que el usuario está autenticado
Y tiene email verificado
Y no tiene cuenta en el producto Atlas
CUANDO navega a la página de apertura de Atlas
Y acepta todos los checkboxes requeridos
Y hace click en "Abrir Cuenta y Depositar"
ENTONCES se crea una nueva cuenta de inversión
Y el estado de la cuenta es "active"
Y el balance inicial es $0
Y se redirige al flujo de depósito
```

**Escenario 2: Usuario ya tiene cuenta en ese producto**
```gherkin
DADO que el usuario ya tiene cuenta en Atlas
CUANDO intenta abrir otra cuenta en Atlas
ENTONCES se muestra mensaje "Ya tienes una cuenta en Atlas"
Y se ofrece link para ir al dashboard de la cuenta existente
```

**Escenario 3: Email no verificado**
```gherkin
DADO que el usuario no tiene email verificado
CUANDO intenta abrir cuenta de inversión
ENTONCES se muestra mensaje "Debes verificar tu email primero"
Y se ofrece link para reenviar verificación
```

**Escenario 4: No acepta términos**
```gherkin
DADO que el usuario está en la página de apertura
CUANDO no marca todos los checkboxes requeridos
ENTONCES el botón "Abrir Cuenta" está deshabilitado
Y se muestra mensaje indicando los campos faltantes
```

**Escenario 5: Apertura sin depósito inmediato**
```gherkin
DADO que el usuario quiere abrir cuenta sin depositar ahora
CUANDO hace click en "Abrir cuenta sin depositar" (link secundario)
ENTONCES se crea la cuenta con balance $0
Y se redirige al dashboard de la cuenta
Y se muestra CTA para depositar
```

## Criterios Adicionales

- [ ] Mostrar rendimiento histórico del agente
- [ ] Mostrar disclaimer legal claramente
- [ ] Guardar aceptación de términos con timestamp
- [ ] Enviar email de confirmación de apertura
- [ ] Tracking de conversión (analytics)

---

## Tareas Técnicas

**Database:**
- [ ] DB-INV-001: Verificar schema de investment.accounts
- [ ] DB-INV-002: Crear índice en (user_id, product_id)

**Backend:**
- [ ] BE-INV-001: Crear endpoint POST /investment/accounts
- [ ] BE-INV-002: Implementar AccountService.createAccount()
- [ ] BE-INV-003: Validar email verificado
- [ ] BE-INV-004: Validar cuenta única por producto
- [ ] BE-INV-005: Guardar aceptación de términos

**Frontend:**
- [ ] FE-INV-001: Crear página OpenAccount.tsx
- [ ] FE-INV-002: Crear componente ProductSummary.tsx
- [ ] FE-INV-003: Crear componente TermsCheckboxes.tsx
- [ ] FE-INV-004: Implementar investmentStore

**Tests:**
- [ ] TEST-INV-001: Test unitario AccountService
- [ ] TEST-INV-002: Test integración crear cuenta
- [ ] TEST-INV-003: Test E2E flujo completo

---

## Dependencias

**Depende de:**
- [ ] US-AUTH-001: Autenticación - Estado: ✅ Completado
- [ ] US-INV-001: Ver productos - Estado: Pendiente

**Bloquea:**
- [ ] US-INV-003: Realizar depósito
- [ ] US-INV-004: Ver dashboard portfolio

---

## Notas Técnicas

**Endpoints involucrados:**
| Método | Endpoint | Descripción |
|--------|----------|-------------|
| GET | /investment/products/:id | Detalle del producto |
| POST | /investment/accounts | Crear cuenta |
| GET | /investment/accounts | Verificar cuentas existentes |

**Entidades/Tablas:**
- `investment.accounts`: Cuenta de inversión
- `investment.terms_acceptance`: Registro de aceptación

**Request Body:**
```typescript
{
  productId: "uuid-atlas",
  acceptedTerms: true,
  acceptedRisks: true,
  confirmedAge: true,
  ipAddress: "192.168.1.1",
  userAgent: "Mozilla/5.0..."
}
```

**Response:**
```typescript
{
  account: {
    id: "uuid",
    userId: "uuid",
    productId: "uuid",
    status: "active",
    balance: 0,
    openedAt: "2025-12-05T..."
  },
  redirectTo: "/investment/deposit?accountId=uuid"
}
```

---

## Definition of Ready (DoR)

- [x] Historia claramente escrita
- [x] Criterios de aceptación definidos
- [x] Story points estimados
- [x] Dependencias identificadas
- [x] Sin bloqueadores
- [ ] 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
- [ ] 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
