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>
325 lines
12 KiB
Markdown
325 lines
12 KiB
Markdown
---
|
|
id: "US-INV-007"
|
|
title: "Ver Historial de Transacciones"
|
|
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-007: Ver Historial de Transacciones
|
|
|
|
## Metadata
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-INV-007 |
|
|
| **Épica** | OQI-004 - Cuentas de Inversión |
|
|
| **Módulo** | investment |
|
|
| **Prioridad** | P1 |
|
|
| **Story Points** | 3 |
|
|
| **Sprint** | Sprint 6 |
|
|
| **Estado** | Pendiente |
|
|
| **Asignado a** | Por asignar |
|
|
|
|
---
|
|
|
|
## Historia de Usuario
|
|
|
|
**Como** inversor,
|
|
**quiero** ver el historial completo de transacciones de mi cuenta,
|
|
**para** auditar movimientos, reconciliar mi balance y tener trazabilidad completa.
|
|
|
|
## Descripción Detallada
|
|
|
|
El usuario debe poder acceder a un historial completo de todas las transacciones de su cuenta: depósitos, retiros, ganancias/pérdidas de trades, distribuciones de utilidades, y comisiones. Debe poder filtrar por tipo, fecha, y exportar los datos.
|
|
|
|
## Mockups/Wireframes
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ HISTORIAL DE TRANSACCIONES │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ Filtros: │
|
|
│ Tipo: [Todas ▼] Período: [Último mes ▼] [Buscar] │
|
|
│ │
|
|
│ ┌──────────────────────────────────────────────────────────┐ │
|
|
│ │ Fecha │ Tipo │ Descripción │ Monto │ │
|
|
│ ├──────────────────────────────────────────────────────────┤ │
|
|
│ │ 2025-12-05 │ 💰 Depósito │ Stripe │ +$1,000 │ │
|
|
│ │ 10:30 AM │ │ │ │ │
|
|
│ ├──────────────────────────────────────────────────────────┤ │
|
|
│ │ 2025-12-04 │ 📈 Ganancia Trade │ BTC/USDT │ +$45.20 │ │
|
|
│ │ 03:15 PM │ │ Long │ │ │
|
|
│ ├──────────────────────────────────────────────────────────┤ │
|
|
│ │ 2025-12-04 │ 📉 Pérdida Trade │ ETH/USDT │ -$12.30 │ │
|
|
│ │ 11:20 AM │ │ Long │ │ │
|
|
│ ├──────────────────────────────────────────────────────────┤ │
|
|
│ │ 2025-12-03 │ 📊 Distribución │ Utilidades │ +$32.10 │ │
|
|
│ │ 12:00 PM │ │ Mensual │ │ │
|
|
│ ├──────────────────────────────────────────────────────────┤ │
|
|
│ │ 2025-12-02 │ 💸 Retiro │ Stripe │ -$500.00 │ │
|
|
│ │ 09:00 AM │ │ Completado │ │ │
|
|
│ ├──────────────────────────────────────────────────────────┤ │
|
|
│ │ 2025-12-01 │ 💰 Depósito │ Stripe │ +$200.00 │ │
|
|
│ │ 02:45 PM │ │ │ │ │
|
|
│ └──────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
│ Mostrando 6 de 156 transacciones │
|
|
│ [← Anterior] Página 1 de 26 [Siguiente →] │
|
|
│ │
|
|
│ [Exportar CSV] [Exportar PDF] │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Criterios de Aceptación
|
|
|
|
**Escenario 1: Ver historial completo**
|
|
```gherkin
|
|
DADO que el usuario tiene cuenta con 156 transacciones
|
|
CUANDO navega a /investment/transactions/:accountId
|
|
ENTONCES se muestra lista paginada (10 por página)
|
|
Y cada transacción muestra: fecha, hora, tipo, descripción, monto
|
|
Y las transacciones están ordenadas por fecha desc (más recientes primero)
|
|
Y se muestra navegación de paginación
|
|
```
|
|
|
|
**Escenario 2: Filtrar por tipo de transacción**
|
|
```gherkin
|
|
DADO que el usuario está viendo el historial
|
|
CUANDO selecciona filtro "Tipo: Depósitos"
|
|
ENTONCES se muestran solo transacciones de tipo "deposit"
|
|
Y se actualiza contador "Mostrando X de Y"
|
|
Y se resetea paginación a página 1
|
|
```
|
|
|
|
**Escenario 3: Filtrar por período**
|
|
```gherkin
|
|
DADO que el usuario está viendo el historial
|
|
CUANDO selecciona "Período: Último mes"
|
|
ENTONCES se muestran solo transacciones de últimos 30 días
|
|
Y se actualiza la lista
|
|
```
|
|
|
|
**Escenario 4: Ver detalle de transacción**
|
|
```gherkin
|
|
DADO que el usuario está viendo el historial
|
|
CUANDO hace click en una transacción
|
|
ENTONCES se abre modal/drawer con detalle completo
|
|
Y muestra: ID transacción, timestamp exacto, monto bruto, comisiones, monto neto
|
|
Y para trades: par, dirección, precio entrada, precio salida, P&L
|
|
Y para Stripe: payment intent ID, método de pago
|
|
```
|
|
|
|
**Escenario 5: Exportar historial**
|
|
```gherkin
|
|
DADO que el usuario tiene filtros activos
|
|
CUANDO hace click en "Exportar CSV"
|
|
ENTONCES se descarga CSV con transacciones filtradas
|
|
Y incluye todas las columnas relevantes
|
|
Y nombre archivo: "transactions_atlas_2025-12-05.csv"
|
|
```
|
|
|
|
**Escenario 6: Cuenta sin transacciones**
|
|
```gherkin
|
|
DADO que el usuario tiene cuenta recién creada
|
|
Y no hay transacciones
|
|
CUANDO accede al historial
|
|
ENTONCES se muestra mensaje "Aún no hay transacciones"
|
|
Y se muestra CTA "Realizar primer depósito"
|
|
```
|
|
|
|
## Criterios Adicionales
|
|
|
|
- [ ] Mostrar balance acumulado después de cada transacción
|
|
- [ ] Indicadores visuales por tipo (colores, iconos)
|
|
- [ ] Búsqueda por texto libre (descripción, monto)
|
|
- [ ] Infinite scroll como alternativa a paginación
|
|
- [ ] Cache de consultas frecuentes
|
|
|
|
---
|
|
|
|
## Tareas Técnicas
|
|
|
|
**Database:**
|
|
- [ ] DB-INV-001: Índice compuesto en (account_id, created_at DESC)
|
|
- [ ] DB-INV-002: Índice en (account_id, transaction_type)
|
|
- [ ] DB-INV-003: Vista para unir transacciones con metadata
|
|
|
|
**Backend:**
|
|
- [ ] BE-INV-001: Endpoint GET /investment/accounts/:id/transactions
|
|
- [ ] BE-INV-002: Implementar TransactionService.getHistory()
|
|
- [ ] BE-INV-003: Query builder para filtros dinámicos
|
|
- [ ] BE-INV-004: Paginación cursor-based o offset
|
|
- [ ] BE-INV-005: Endpoint GET /investment/transactions/:id (detalle)
|
|
- [ ] BE-INV-006: Endpoint GET /investment/accounts/:id/transactions/export
|
|
|
|
**Frontend:**
|
|
- [ ] FE-INV-001: Crear página TransactionsPage.tsx
|
|
- [ ] FE-INV-002: Crear componente TransactionList.tsx
|
|
- [ ] FE-INV-003: Crear componente TransactionRow.tsx
|
|
- [ ] FE-INV-004: Crear componente TransactionFilters.tsx
|
|
- [ ] FE-INV-005: Crear componente TransactionDetailModal.tsx
|
|
- [ ] FE-INV-006: Crear componente Pagination.tsx
|
|
- [ ] FE-INV-007: Implementar transactionsStore
|
|
- [ ] FE-INV-008: Implementar exportación CSV
|
|
|
|
**Tests:**
|
|
- [ ] TEST-INV-001: Test queries con filtros
|
|
- [ ] TEST-INV-002: Test paginación
|
|
- [ ] TEST-INV-003: Test exportación
|
|
- [ ] TEST-INV-004: Test E2E historial completo
|
|
|
|
---
|
|
|
|
## Dependencias
|
|
|
|
**Depende de:**
|
|
- [ ] US-INV-003: Realizar depósito - Estado: Pendiente
|
|
- [ ] US-INV-006: Solicitar retiro - Estado: Pendiente
|
|
|
|
**Bloquea:**
|
|
- [ ] US-INV-011: Exportar reporte PDF
|
|
|
|
---
|
|
|
|
## Notas Técnicas
|
|
|
|
**Endpoints involucrados:**
|
|
| Método | Endpoint | Descripción |
|
|
|--------|----------|-------------|
|
|
| GET | /investment/accounts/:id/transactions | Lista paginada |
|
|
| GET | /investment/transactions/:id | Detalle |
|
|
| GET | /investment/accounts/:id/transactions/export | CSV export |
|
|
|
|
**Entidades/Tablas:**
|
|
- `investment.transactions`: Transacciones principales
|
|
- `investment.trade_details`: Metadata de trades
|
|
- `payments.stripe_transactions`: Metadata de Stripe
|
|
|
|
**Query Parameters:**
|
|
```typescript
|
|
{
|
|
page: 1,
|
|
limit: 10,
|
|
type?: "deposit" | "withdrawal" | "trade_profit" | "trade_loss" | "distribution" | "fee",
|
|
startDate?: "2025-11-01",
|
|
endDate?: "2025-12-05",
|
|
search?: "BTC",
|
|
sortBy?: "created_at",
|
|
sortOrder?: "DESC"
|
|
}
|
|
```
|
|
|
|
**Response GET /transactions:**
|
|
```typescript
|
|
{
|
|
transactions: [
|
|
{
|
|
id: "uuid",
|
|
accountId: "uuid",
|
|
type: "deposit",
|
|
amount: 1000,
|
|
description: "Stripe deposit",
|
|
createdAt: "2025-12-05T10:30:00Z",
|
|
metadata: {
|
|
stripePaymentIntentId: "pi_xxx",
|
|
paymentMethod: "card_****4242"
|
|
}
|
|
},
|
|
{
|
|
id: "uuid",
|
|
accountId: "uuid",
|
|
type: "trade_profit",
|
|
amount: 45.20,
|
|
description: "BTC/USDT Long",
|
|
createdAt: "2025-12-04T15:15:00Z",
|
|
metadata: {
|
|
symbol: "BTC/USDT",
|
|
side: "long",
|
|
entryPrice: 45000,
|
|
exitPrice: 46000,
|
|
size: 0.05,
|
|
pnl: 45.20
|
|
}
|
|
}
|
|
],
|
|
pagination: {
|
|
page: 1,
|
|
limit: 10,
|
|
total: 156,
|
|
totalPages: 16,
|
|
hasNext: true,
|
|
hasPrev: false
|
|
},
|
|
summary: {
|
|
totalDeposits: 5000,
|
|
totalWithdrawals: 1000,
|
|
totalProfits: 1245.50,
|
|
totalLosses: 255.30
|
|
}
|
|
}
|
|
```
|
|
|
|
**Tipos de Transacción:**
|
|
- `deposit`: Depósito vía Stripe
|
|
- `withdrawal`: Retiro vía Stripe
|
|
- `trade_profit`: Ganancia de trade del agente
|
|
- `trade_loss`: Pérdida de trade del agente
|
|
- `distribution`: Distribución mensual de utilidades
|
|
- `fee`: Comisiones (Stripe, plataforma)
|
|
|
|
**CSV Export Format:**
|
|
```csv
|
|
Date,Time,Type,Description,Amount,Balance,Transaction ID
|
|
2025-12-05,10:30:00,Deposit,Stripe,+1000.00,1000.00,uuid
|
|
2025-12-04,15:15:00,Trade Profit,BTC/USDT Long,+45.20,1045.20,uuid
|
|
```
|
|
|
|
---
|
|
|
|
## 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
|
|
- [ ] Paginación funcionando correctamente
|
|
- [ ] Filtros funcionando
|
|
- [ ] Exportación CSV funcionando
|
|
- [ ] Code review aprobado
|
|
- [ ] Documentación actualizada
|
|
- [ ] Performance optimizada (queries < 500ms)
|
|
- [ ] 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
|