Changes include: - Updated architecture documentation - Enhanced module definitions (OQI-001 to OQI-008) - ML integration documentation updates - Trading strategies documentation - Orchestration and inventory updates - Docker configuration updates 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
254 lines
9.0 KiB
Markdown
254 lines
9.0 KiB
Markdown
---
|
|
id: "US-INV-002"
|
|
title: "Abrir Cuenta de Inversión"
|
|
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-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
|