- Add 5 frontend specification documents (ET-*-frontend.md): - ET-AUTH-006: Authentication module frontend spec - ET-ML-008: ML Signals module frontend spec - ET-LLM-007: LLM Agent module frontend spec - ET-PFM-008: Portfolio Manager frontend spec (design) - ET-MKT-003: Marketplace frontend spec (design) - Add 8 new user stories: - US-AUTH-013: Global logout - US-AUTH-014: Device management - US-ML-008: Ensemble signal view - US-ML-009: ICT analysis view - US-ML-010: Multi-symbol scan - US-LLM-011: Execute trade from chat - US-PFM-013: Rebalance alerts - US-PFM-014: PDF report generation - Update task index with completed analysis Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.4 KiB
4.4 KiB
| id | title | type | status | priority | epic | project | story_points | created_date | updated_date |
|---|---|---|---|---|---|---|---|---|---|
| US-PFM-014 | Generar Reporte PDF | User Story | Ready | Alta | OQI-008 | trading-platform | 5 | 2026-01-25 | 2026-01-25 |
US-PFM-014: Generar Reporte PDF
Épica: OQI-008 - Portfolio Manager Story Points: 5 | Prioridad: P0
Historia de Usuario
Como inversor Quiero generar reportes PDF de mi portafolio Para análisis offline o compartir con asesores financieros
Criterios de Aceptación
Scenario: Seleccionar período de reporte
Given estoy en la sección de reportes del portafolio
And tengo datos de inversión disponibles
When selecciono un rango de fechas
Then puedo elegir período predeterminado (mensual, trimestral, anual)
And puedo ingresar fechas personalizadas
And el período es validado contra datos disponibles
Scenario: Generar reporte con gráficos
Given seleccioné un período válido
When solicito generar reporte PDF
Then el documento incluye gráficos de:
- Evolución del valor del portafolio (línea temporal)
- Distribución por activos (pie chart)
- Comparativo portafolio vs benchmark
- Retorno acumulado vs rentabilidad mensual (barras)
Scenario: Incluir métricas de rendimiento
Given el reporte está siendo generado
When se incluyen métricas de rendimiento
Then veo en el documento:
- Rentabilidad total (%)
- Rentabilidad anualizada
- Volatilidad
- Ratio de Sharpe
- Máxima pérdida acumulada (drawdown)
- Ratio ganancia/pérdida
Scenario: Detalle de posiciones
Given el reporte incluye posiciones
When se genera la sección de posiciones
Then veo tabla con:
- Código/Ticker del activo
- Cantidad de unidades
- Precio de compra/Precio actual
- Valor actual en portafolio
- Rendimiento (% y valor absoluto)
- Fecha de compra
Scenario: Descargar reporte
Given el reporte PDF está listo
When hago clic en "Descargar"
Then el archivo se descarga como: Portfolio_[fecha_inicio]_[fecha_fin]_[timestamp].pdf
And el formato PDF es optimizado (tamaño <5MB)
Scenario: Enviar reporte por email
Given el reporte PDF está listo
When hago clic en "Enviar por Email"
And ingreso dirección(es) de correo
Then el PDF se envía a los destinatarios
And recibo confirmación de envío
And el destinatario recibe el correo con adjunto
Scenario: Reporte multi-cuenta
Given tengo múltiples cuentas/portafolios
When selecciono la opción "Consolidado"
Then el reporte muestra:
- Resumen general
- Desglose por cada cuenta
- Distribución consolidada
- Rentabilidades combinadas
API Endpoint
POST /api/portfolio/reports/pdf
Request:
{
"portfolioId": "uuid",
"startDate": "2026-01-01",
"endDate": "2026-01-25",
"includeGraphs": true,
"includeMetrics": true,
"includePositions": true,
"benchmark": "SPX",
"downloadFormat": "pdf",
"sendEmail": {
"enabled": false,
"recipients": []
},
"consolidated": false
}
Response (200):
{
"id": "report_uuid",
"status": "generated",
"downloadUrl": "/api/reports/download/report_uuid",
"emailStatus": "pending|sent|failed",
"generatedAt": "2026-01-25T10:30:00Z",
"fileName": "Portfolio_2026-01-01_2026-01-25_20260125103000.pdf"
}
Response (202 - Async):
{
"jobId": "job_uuid",
"status": "processing",
"estimatedTime": "30s",
"checkUrl": "/api/portfolio/reports/pdf/status/job_uuid"
}
Dependencias
- RF-PFM-007: Cálculo de métricas de rendimiento
- RF-PFM-008: Integración con servicio de reportes
- RF-PFM-009: Generación de gráficos embebidos en PDF
- ET-PFM-007: Entidad ReportPDF
- US-PFM-012: Reporte Fiscal (complementario)
Notas Técnicas
- Usar librería
pdfkitopuppeteerpara generación - Gráficos embebidos con
chart.jsolightweight-charts - Queue asíncrona para reportes grandes (>500MB portafolio)
- Implementar retry automático en fallos de email
- Almacenar reportes 30 días máximo
- Validar tamaño de portafolio antes de generar
Aceptación
- Endpoint POST creado y documentado
- Generación de PDF con gráficos funcional
- Descarga de archivos validada
- Envío por email implementado
- Tests unitarios y de integración
- Documentación en Swagger
- Manual de usuario actualizado
Historia de usuario - Sistema NEXUS