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

18 KiB

id title type status priority epic story_points created_date updated_date
US-EDU-007 Ver Progreso Educativo User Story Done Alta OQI-002 3 2025-12-05 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

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

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

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

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

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

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

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

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

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

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:

{
  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:

// 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)

  • Historia claramente escrita
  • Criterios de aceptación definidos
  • Story points estimados
  • Dependencias identificadas
  • Sin bloqueadores
  • Diseño/mockup disponible
  • 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