trading-platform/docs/02-definicion-modulos/OQI-002-education/historias-usuario/US-EDU-007-ver-progreso.md
rckrdmrd c1b5081208 feat(ml): Complete FASE 11 - BTCUSD update and comprehensive documentation alignment
ML Engine Updates:
- Updated BTCUSD with Polygon API data (2024-2025): 215,699 new records
- Re-trained all ML models: Attention (R²: 0.223), Base, Metamodel (87.3% confidence)
- Backtest results: +176.71R profit with aggressive_filter strategy

Documentation Consolidation:
- Created docs/99-analisis/_MAP.md index with 13 new analysis documents
- Consolidated inventories: removed duplicates from orchestration/inventarios/
- Updated ML_INVENTORY.yml with BTCUSD metrics and training results
- Added execution reports: FASE11-BTCUSD, correction issues, alignment validation

Architecture & Integration:
- Updated all module documentation with NEXUS v3.4 frontmatter
- Fixed _MAP.md indexes across all folders
- Updated orchestration plans and traces

Files: 229 changed, 5064 insertions(+), 1872 deletions(-)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 09:31:29 -06:00

435 lines
18 KiB
Markdown

---
id: "US-EDU-007"
title: "Ver Progreso Educativo"
type: "User Story"
status: "Done"
priority: "Alta"
epic: "OQI-002"
story_points: 3
created_date: "2025-12-05"
updated_date: "2026-01-04"
---
# US-EDU-007: Ver Progreso Educativo
## Metadata
| Campo | Valor |
|-------|-------|
| **ID** | US-EDU-007 |
| **Épica** | OQI-002 - Módulo Educativo |
| **Módulo** | education |
| **Prioridad** | P0 |
| **Story Points** | 3 |
| **Sprint** | Sprint 4 |
| **Estado** | Pendiente |
| **Asignado a** | Por asignar |
---
## Historia de Usuario
**Como** usuario activo en la plataforma educativa,
**quiero** ver un dashboard con mi progreso de aprendizaje completo,
**para** monitorear mi avance, mantenerme motivado y planificar mi siguiente paso.
## Descripción Detallada
El usuario debe poder acceder a un dashboard educativo centralizado que muestre métricas clave de su aprendizaje: cursos en progreso con porcentajes, cursos completados, total de lecciones vistas, horas de estudio, racha actual, nivel y XP, actividad reciente, calendario de aprendizaje, y sugerencias de qué estudiar a continuación.
## Mockups/Wireframes
```
┌─────────────────────────────────────────────────────────────────┐
│ [LOGO] Trading Platform Educación Trading Cuentas 👤 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ MI APRENDIZAJE │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ RESUMEN GENERAL │ │
│ │ │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │ 🔄 3 │ │ ✅ 12 │ │ 📚 156 │ │ ⏱ 42h │ │ │
│ │ │ En prog│ │ Comple │ │ Lecc. │ │ Estudio│ │ │
│ │ └────────┘ └────────┘ └────────┘ └────────┘ │ │
│ │ │ │
│ │ ┌───────────────────┐ ┌─────────────────┐ │ │
│ │ │ 🔥 RACHA: 12 DÍAS │ │ ⭐ NIVEL 15 │ │ │
│ │ │ ¡Sigue así! │ │ 2,450 / 3,000 XP│ │ │
│ │ │ 📅📅📅📅📅📅📅 │ │ ████████░░ 82% │ │ │
│ │ └───────────────────┘ └─────────────────┘ │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ CURSOS EN PROGRESO (3) │ │
│ │ │ │
│ │ ┌────────────────────────────────────────────────────┐ │ │
│ │ │ [IMG] Fibonacci Retracement Básico │ │ │
│ │ │ ████████████████░░░░ 75% completado │ │ │
│ │ │ 18 de 23 lecciones | Módulo 4 de 5 │ │ │
│ │ │ Última vez: Hace 2 horas │ │ │
│ │ │ [Continuar →] Lección: Fibonacci en tendencias │ │ │
│ │ └────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌────────────────────────────────────────────────────┐ │ │
│ │ │ [IMG] Day Trading para Principiantes │ │ │
│ │ │ ██████░░░░░░░░░░░░░░ 30% completado │ │ │
│ │ │ 9 de 30 lecciones | Módulo 2 de 6 │ │ │
│ │ │ Última vez: Hace 1 día │ │ │
│ │ │ [Continuar →] Lección: Análisis de volumen │ │ │
│ │ └────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ [Ver todos los cursos en progreso] │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────┐ ┌─────────────────────────────────┐ │
│ │ ACTIVIDAD RECIENTE │ │ CALENDARIO DE APRENDIZAJE │ │
│ │ │ │ │ │
│ │ Hoy, 15:30 │ │ L M X J V S D │ │
│ │ ✓ Completaste │ │ ██ ██ ░░ ██ ██ ██ ░░ │ │
│ │ "Niveles de Fib."│ │ ██ ██ ██ ██ ██ ░░ ░░ │ │
│ │ +10 XP │ │ ██ ██ ██ ░░ ░░ ░░ ░░ │ │
│ │ │ │ │ │
│ │ Hoy, 14:20 │ │ Días activos este mes: 18 │ │
│ │ ✅ Aprobaste │ │ │ │
│ │ Quiz Módulo 3 │ │ │ │
│ │ +30 XP │ │ │ │
│ │ │ │ │ │
│ │ Ayer, 18:45 │ │ │ │
│ │ 🎓 Obtuviste │ │ │ │
│ │ badge "Week │ │ │ │
│ │ Warrior" │ │ │ │
│ │ │ │ │ │
│ │ [Ver más] │ │ │ │
│ └─────────────────────┘ └─────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 📊 ESTADÍSTICAS │ │
│ │ │ │
│ │ Tiempo promedio por lección: 15 min │ │
│ │ Cursos completados este mes: 3 │ │
│ │ Tasa de completitud: 80% (12 de 15 cursos iniciados) │ │
│ │ Categoría favorita: Análisis Técnico (6 cursos) │ │
│ │ Mejor día de la semana: Miércoles (25 lecciones) │ │
│ │ │ │
│ │ [📈 Ver estadísticas detalladas] │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Criterios de Aceptación
**Escenario 1: Ver dashboard de progreso**
```gherkin
DADO que el usuario está autenticado
CUANDO navega a /education/progress o /education/dashboard
ENTONCES se muestra dashboard completo de aprendizaje
Y se muestran métricas: cursos en progreso, completados, lecciones, horas
Y se muestra racha actual con visualización de días
Y se muestra nivel actual y progreso a siguiente nivel
Y se muestran cursos en progreso con porcentajes
Y se muestra actividad reciente
```
**Escenario 2: Ver cursos en progreso**
```gherkin
DADO que el usuario tiene 3 cursos en progreso
CUANDO ve la sección "Cursos en progreso"
ENTONCES se muestran los 3 cursos ordenados por última actividad
Y cada curso muestra: título, imagen, porcentaje, lecciones completadas
Y se muestra "Última vez: hace X tiempo"
Y se muestra botón "Continuar" con próxima lección
Y al hacer click en "Continuar", navega a esa lección
```
**Escenario 3: Ver racha activa**
```gherkin
DADO que el usuario tiene racha de 12 días
CUANDO ve el widget de racha
ENTONCES se muestra "🔥 RACHA: 12 DÍAS"
Y se muestra visualización de últimos 7 días
Y se muestra mensaje motivacional "¡Sigue así!"
Y si no completó lección hoy, muestra "Completa 1 lección hoy para mantener racha"
```
**Escenario 4: Ver nivel y XP**
```gherkin
DADO que el usuario es nivel 15 con 2450 XP
Y necesita 3000 XP para nivel 16
CUANDO ve el widget de nivel
ENTONCES se muestra "⭐ NIVEL 15"
Y se muestra "2,450 / 3,000 XP"
Y se muestra barra de progreso al 82%
Y se muestra cuántos XP faltan: "Faltan 550 XP para nivel 16"
```
**Escenario 5: Ver calendario de actividad**
```gherkin
DADO que el usuario completó lecciones en 18 días este mes
CUANDO ve el calendario
ENTONCES se muestra grid estilo GitHub contributions
Y días con actividad están resaltados (cuadros llenos)
Y días sin actividad están vacíos
Y al hacer hover sobre un día, muestra detalle: "3 lecciones, 45 min"
Y se muestra contador "Días activos este mes: 18"
```
**Escenario 6: Ver actividad reciente**
```gherkin
DADO que el usuario tiene actividad reciente
CUANDO ve la sección "Actividad reciente"
ENTONCES se muestran últimos 10 eventos
Y cada evento muestra: timestamp, tipo, descripción, XP ganado
Y eventos incluyen: lección completada, quiz aprobado, badge obtenido
Y se ordenan de más reciente a más antiguo
Y hay botón "Ver más" para ver historial completo
```
**Escenario 7: Ver estadísticas**
```gherkin
DADO que el usuario tiene suficiente actividad
CUANDO ve la sección "Estadísticas"
ENTONCES se muestra tiempo promedio por lección
Y se muestra cursos completados este mes
Y se muestra tasa de completitud (cursos finalizados / iniciados)
Y se muestra categoría favorita
Y se muestra mejor día de la semana
Y hay botón para ver estadísticas detalladas
```
**Escenario 8: Continuar curso desde dashboard**
```gherkin
DADO que el usuario tiene curso en progreso
Y la última lección accedida fue "Lección 18"
CUANDO hace click en "Continuar" del curso
ENTONCES navega directamente a la Lección 19 (siguiente)
Y el reproductor se carga listo para comenzar
```
**Escenario 9: Usuario sin actividad reciente**
```gherkin
DADO que el usuario no tiene actividad en últimos 7 días
CUANDO accede al dashboard
ENTONCES se muestra mensaje de bienvenida
Y se sugieren cursos populares para comenzar
Y se muestra motivación: "¡Comienza hoy tu racha de aprendizaje!"
Y las métricas muestran valores cero elegantemente
```
**Escenario 10: Racha en riesgo**
```gherkin
DADO que el usuario tiene racha de 15 días
Y NO ha completado lecciones hoy
Y es después de las 6pm hora local
CUANDO accede al dashboard
ENTONCES se muestra alerta "⚠ ¡Racha en riesgo!"
Y se muestra "Completa 1 lección antes de medianoche"
Y se sugiere lección corta: "Lección rápida (5 min): [título]"
```
## Criterios Adicionales
- [ ] Gráfico de XP ganado por semana/mes
- [ ] Comparación con usuarios similares (opcional)
- [ ] Metas personales de aprendizaje
- [ ] Exportar reporte de progreso en PDF
- [ ] Compartir logros en redes sociales
- [ ] Widget de "Próximas recompensas" (badge a desbloquear)
---
## Tareas Técnicas
**Database:**
- [ ] DB-EDU-020: Vista materialized para stats de usuario
- [ ] DB-EDU-021: Índices en user_activity_log por user_id + timestamp
**Backend:**
- [ ] BE-EDU-049: Endpoint GET /education/progress/overview
- [ ] BE-EDU-050: Endpoint GET /education/progress/courses
- [ ] BE-EDU-051: Endpoint GET /education/progress/stats
- [ ] BE-EDU-052: Endpoint GET /education/progress/activity
- [ ] BE-EDU-053: Endpoint GET /education/progress/calendar
- [ ] BE-EDU-054: Implementar ProgressService.getOverview()
- [ ] BE-EDU-055: Job diario para calcular stats agregadas
- [ ] BE-EDU-056: Caché de stats en Redis (15 min)
**Frontend:**
- [ ] FE-EDU-060: Crear EducationDashboardPage.tsx
- [ ] FE-EDU-061: Crear componente ProgressOverview.tsx
- [ ] FE-EDU-062: Crear componente CourseProgressCard.tsx
- [ ] FE-EDU-063: Crear componente StreakWidget.tsx
- [ ] FE-EDU-064: Crear componente LevelWidget.tsx
- [ ] FE-EDU-065: Crear componente ActivityCalendar.tsx (GitHub style)
- [ ] FE-EDU-066: Crear componente RecentActivity.tsx
- [ ] FE-EDU-067: Crear componente StatsPanel.tsx
- [ ] FE-EDU-068: Implementar progressStore (Zustand)
- [ ] FE-EDU-069: Skeleton loaders para cada sección
**Tests:**
- [ ] TEST-EDU-026: Test cálculo de tasa de completitud
- [ ] TEST-EDU-027: Test cálculo de racha
- [ ] TEST-EDU-028: Test stats agregadas
- [ ] TEST-EDU-029: Test E2E visualizar dashboard completo
---
## Dependencias
**Depende de:**
- [ ] US-EDU-005: Completar lección - Estado: Pendiente
- [ ] RF-EDU-003: Sistema de progreso
- [ ] RF-EDU-006: Gamificación (para nivel y XP)
**Bloquea:**
- Ninguna (es página de visualización)
---
## Notas Técnicas
**Endpoint GET /education/progress/overview:**
```typescript
{
overview: {
coursesInProgress: 3,
coursesCompleted: 12,
coursesSaved: 5,
lessonsCompleted: 156,
totalLearningTime: 2520, // minutos (42h)
currentStreak: 12,
longestStreak: 18,
totalXP: 2450,
currentLevel: 15,
xpToNextLevel: 550
},
coursesInProgress: [
{
courseId: "course-1",
title: "Fibonacci Retracement Básico",
slug: "fibonacci-retracement-basico",
thumbnail: "...",
progressPercent: 75,
lessonsCompleted: 18,
totalLessons: 23,
modulesCompleted: 3,
totalModules: 5,
lastAccessedAt: "2025-12-05T13:30:00Z",
nextLesson: {
id: "les-19",
title: "Fibonacci en tendencias bajistas",
slug: "fibonacci-tendencias-bajistas",
duration: 12
}
}
// ... más cursos
],
recentActivity: [
{
type: "lesson_completed",
title: "Completaste 'Niveles de Fibonacci'",
description: "Lección 2.1 del curso Fibonacci Básico",
timestamp: "2025-12-05T15:30:00Z",
xpEarned: 10,
icon: "✓"
},
{
type: "quiz_passed",
title: "Aprobaste Quiz Módulo 3",
description: "Puntuación: 85%",
timestamp: "2025-12-05T14:20:00Z",
xpEarned: 30,
icon: "✅"
}
// ... más actividad
],
calendar: [
{ date: "2025-12-01", lessonsCompleted: 3, minutesLearned: 45 },
{ date: "2025-12-02", lessonsCompleted: 2, minutesLearned: 30 },
{ date: "2025-12-03", lessonsCompleted: 0, minutesLearned: 0 },
// ...
],
stats: {
avgTimePerLesson: 15,
coursesThisMonth: 3,
completionRate: 80, // 12 completados de 15 iniciados
activeDays: 18,
favoriteCategory: "Análisis Técnico",
bestDayOfWeek: "Wednesday",
preferredTimeOfDay: "Evening"
}
}
```
**Cálculos importantes:**
```javascript
// Racha actual
currentStreak = countConsecutiveDaysWithActivity(today, lookback=365);
// Tasa de completitud
completionRate = (coursesCompleted / coursesStarted) * 100;
// Tiempo promedio por lección
avgTimePerLesson = totalLearningTime / lessonsCompleted;
// Categoría favorita
favoriteCategory = categoryWithMostCompletedCourses();
```
**Optimizaciones:**
- Usar materialized views para stats agregadas
- Calcular stats en background job nocturno
- Cachear overview en Redis (15 min)
- Lazy load de secciones con IntersectionObserver
- Implementar skeleton loading para mejor UX
**Entidades/Tablas:**
- `education.user_course_progress`
- `education.user_lesson_progress`
- `education.user_activity_log`
- `gamification.user_stats`
---
## Definition of Ready (DoR)
- [x] Historia claramente escrita
- [x] Criterios de aceptación definidos
- [x] Story points estimados
- [x] Dependencias identificadas
- [x] Sin bloqueadores
- [x] 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