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>
13 KiB
| id | title | type | status | priority | module | epic | version | created_date | updated_date |
|---|---|---|---|---|---|---|---|---|---|
| RF-EDU-006 | Sistema de Gamificacion | Requirement | Done | Media | education | OQI-002 | 1.0 | 2025-12-05 | 2026-01-04 |
RF-EDU-006: Sistema de Gamificación
Versión: 1.0.0 Fecha: 2025-12-05 Épica: OQI-002 - Módulo Educativo Prioridad: P2 Story Points: 8
Descripción
El sistema debe implementar mecánicas de gamificación que aumenten el engagement y motivación de los usuarios mediante puntos de experiencia (XP), niveles, badges, logros, leaderboards y recompensas, creando una experiencia de aprendizaje más inmersiva y competitiva.
Requisitos Funcionales
RF-EDU-006.1: Sistema de XP (Puntos de Experiencia)
El sistema debe otorgar XP por las siguientes acciones:
| Acción | XP | Frecuencia |
|---|---|---|
| Completar lección de video | 10 | Por lección |
| Completar lección de artículo | 15 | Por lección |
| Completar módulo | 50 | Por módulo |
| Completar curso | 200 | Por curso |
| Aprobar quiz (primera vez) | 30 | Por quiz |
| Aprobar quiz con 100% | 50 | Por quiz |
| Racha de 7 días consecutivos | 100 | Por milestone |
| Racha de 30 días consecutivos | 500 | Por milestone |
| Tomar notas en lección | 5 | Máx 1 por lección |
| Descargar recursos | 2 | Máx 1 por lección |
| Compartir certificado | 25 | Por certificado |
| Referir a un amigo que se registre | 100 | Por referido |
| Completar perfil 100% | 50 | Una vez |
| Primera lección del día | 5 | Diario (bonus) |
Bonificaciones:
- Fin de semana: +50% XP sábados y domingos
- Perfectionist: +20% XP si completa curso con todos los quizzes al 100%
- Speed learner: +30% XP si completa curso en <50% del tiempo estimado
RF-EDU-006.2: Sistema de Niveles
Niveles del 1 al 100 con títulos temáticos:
| Nivel | XP Acumulado | Título | Descripción |
|---|---|---|---|
| 1-10 | 0 - 5,500 | Novice Trader | Iniciando el viaje |
| 11-20 | 5,500 - 23,100 | Apprentice Analyst | Aprendiendo fundamentos |
| 21-30 | 23,100 - 50,700 | Skilled Trader | Dominando estrategias |
| 31-40 | 50,700 - 88,300 | Expert Strategist | Conocimiento avanzado |
| 41-50 | 88,300 - 136,500 | Master Investor | Elite del trading |
| 51-60 | 136,500 - 196,100 | Quant Analyst | Análisis cuantitativo |
| 61-70 | 196,100 - 267,700 | Portfolio Manager | Gestión profesional |
| 71-80 | 267,700 - 351,300 | Market Wizard | Dominio del mercado |
| 81-90 | 351,300 - 447,900 | Trading Legend | Leyenda del trading |
| 91-100 | 447,900 - 556,500 | Quant Master | Maestría absoluta |
Recompensas por nivel:
- Nivel 5: Desbloquea tema oscuro premium
- Nivel 10: Badge especial + Avatar frame
- Nivel 15: Acceso a cursos exclusivos
- Nivel 20: Descuento 10% en suscripción
- Nivel 25: Prioridad en soporte
- Nivel 30: Acceso a comunidad premium
- Nivel 50: Certificado de "Elite Trader"
- Nivel 75: Reunión 1-on-1 con instructor
- Nivel 100: Trofeo físico + Lifetime discount 20%
RF-EDU-006.3: Sistema de Badges (Insignias)
Categorías de badges:
Logros de Curso:
- First Steps (completar primer curso)
- Knowledge Seeker (completar 5 cursos)
- Learning Machine (completar 10 cursos)
- Master Scholar (completar 25 cursos)
- Completionist (completar todos los cursos de una categoría)
Logros de Velocidad:
- Fast Learner (completar curso en 1 día)
- Speed Demon (completar 3 cursos en 1 semana)
- Marathon Runner (completar curso de >10h)
Logros de Calidad:
- Perfectionist (aprobar todos los quizzes al 100%)
- Overachiever (superar 95% en todos los quizzes de un curso)
- Note Taker (tomar notas en 50 lecciones)
Logros de Racha:
- Week Warrior (racha de 7 días)
- Month Master (racha de 30 días)
- Unstoppable (racha de 100 días)
- Year Legend (racha de 365 días)
Logros Sociales:
- Influencer (compartir 5 certificados)
- Recruiter (referir 10 usuarios)
- Helper (responder 25 preguntas en foro)
Logros Especiales:
- Early Bird (completar lección antes de las 6am)
- Night Owl (completar lección después de las 11pm)
- Weekend Warrior (completar 5 lecciones en fin de semana)
- Category Master (completar todos los cursos de una categoría)
Cada badge tiene:
- Nombre
- Descripción
- Icono (SVG/PNG)
- Rareza: Común, Raro, Épico, Legendario
- Fecha de obtención
- Progreso hacia obtenerlo (si aplica)
RF-EDU-006.4: Leaderboard (Tabla de Clasificación)
El sistema debe proveer leaderboards:
Global:
- Top 100 usuarios por XP total
- Actualización: Tiempo real
Por Período:
- Esta semana (lunes a domingo)
- Este mes
- Este año
- Histórico
Por Categoría:
- Leaderboard por cada categoría de curso
- Top learners de Análisis Técnico, etc.
Por Métrica:
- Más cursos completados
- Más racha consecutiva
- Más badges obtenidos
- Más rápido en completar curso X
Información mostrada:
- Posición (#1, #2, ...)
- Avatar del usuario
- Nombre/username
- XP total o métrica relevante
- Badge de top 3 (oro, plata, bronce)
- Indicador de subida/bajada de posición
Privacidad:
- Usuario puede optar por salir del leaderboard
- Por default, solo muestra username, no nombre completo
- Top 10 siempre visible, resto opcional
RF-EDU-006.5: Sistema de Logros (Achievements)
Logros son metas específicas que otorgan recompensas:
interface Achievement {
id: string;
name: string;
description: string;
icon: string;
category: 'course' | 'speed' | 'quality' | 'streak' | 'social';
rarity: 'common' | 'rare' | 'epic' | 'legendary';
xpReward: number;
badgeReward?: string; // ID del badge que se otorga
requirements: {
type: 'courses_completed' | 'quiz_score' | 'streak_days' | 'custom';
target: number;
metadata?: any;
};
progress?: {
current: number;
target: number;
percentage: number;
};
}
Ejemplos:
- "Trading Fundamentals Master": Completar todos los cursos de categoría Fundamentos (200 XP + badge)
- "Quiz Perfectionist": Obtener 100% en 20 quizzes (150 XP + badge épico)
- "Dedicated Learner": Mantener racha de 30 días (500 XP + badge raro)
RF-EDU-006.6: Recompensas y Premios
El sistema debe permitir canjear XP o logros por:
- Descuentos en suscripción premium (1000 XP = 5% descuento)
- Acceso early a nuevos cursos (500 XP)
- Merch de Trading Platform (camisetas, stickers) (5000 XP)
- Consulta 1-on-1 con instructor (10,000 XP)
- Features premium temporales (2,000 XP = 1 mes)
Tienda de recompensas:
- Catálogo de items canjeables
- Historial de canjes
- Balance de XP disponible
RF-EDU-006.7: Notificaciones y Celebraciones
El sistema debe mostrar animaciones/notificaciones para:
- Subir de nivel (modal con confeti)
- Obtener nuevo badge (toast notification)
- Completar logro (modal con progreso)
- Entrar al top 100 del leaderboard (email)
- Alcanzar milestone de racha (confeti)
- Obtener XP ("+10 XP" flotante en pantalla)
RF-EDU-006.8: Perfil Gamificado
Página de perfil del usuario debe mostrar:
- Avatar con marco según nivel
- Nivel actual y barra de progreso
- XP actual / XP para próximo nivel
- Total de badges obtenidos
- Galería de badges (destacar raros/épicos)
- Logros recientes
- Estadísticas: cursos, lecciones, quizzes, racha
- Posición en leaderboard global
- Gráfico de XP ganado por mes
Datos de Salida
interface UserGamification {
userId: string;
totalXP: number;
currentLevel: number;
levelTitle: string;
xpForCurrentLevel: number;
xpForNextLevel: number;
progressToNextLevel: number; // 0-100
badges: {
id: string;
name: string;
description: string;
icon: string;
rarity: string;
earnedAt: string;
}[];
achievements: Achievement[];
leaderboard: {
globalRank: number;
weeklyRank: number;
categoryRanks: {
category: string;
rank: number;
}[];
};
stats: {
coursesCompleted: number;
quizzesPassed: number;
currentStreak: number;
longestStreak: number;
totalBadges: number;
rareBadges: number;
epicBadges: number;
legendaryBadges: number;
};
}
interface LeaderboardEntry {
rank: number;
userId: string;
username: string;
avatar: string;
totalXP: number;
level: number;
badge?: string; // Badge de top 3
rankChange: number; // +5, -2, 0
}
Reglas de Negocio
- XP no se puede perder: Una vez ganado, permanece
- Nivel no puede bajar: Solo sube
- Badges permanentes: No se pueden perder
- Leaderboard semanal: Reset cada lunes 00:00 UTC
- Anti-cheat: Validar todas las acciones en backend
- Rate limiting: Máximo 1000 XP por hora para prevenir exploits
- Recompensas únicas: Algunos logros se pueden ganar solo una vez
- Canje de recompensas: Consume XP del balance, pero no baja nivel
- Privacidad: Usuario puede ocultar su perfil gamificado
Criterios de Aceptación
Escenario: Usuario gana XP al completar lección
DADO que el usuario completa una lección de video
CUANDO se marca como completada
ENTONCES se otorgan 10 XP
Y se muestra animación "+10 XP"
Y se actualiza barra de progreso de nivel
Y se guarda en historial de XP
Escenario: Usuario sube de nivel
DADO que el usuario tiene 990 XP (nivel 9)
Y necesita 1000 XP para nivel 10
CUANDO completa un curso y gana 200 XP
ENTONCES sube a nivel 10
Y se muestra modal "¡Subiste de nivel!"
Y se desbloquea badge de nivel 10
Y se envía notificación por email
Escenario: Usuario obtiene badge
DADO que el usuario completó 4 cursos
CUANDO completa el 5to curso
ENTONCES se otorga badge "Knowledge Seeker"
Y se muestra toast notification
Y el badge aparece en galería de perfil
Y se suman 50 XP adicionales
Escenario: Usuario ve leaderboard
DADO que el usuario está en posición #42
CUANDO accede a /education/leaderboard
ENTONCES se muestra tabla con top 100
Y su posición está destacada
Y se muestra su XP y nivel
Y puede filtrar por: Semanal, Mensual, Histórico
Escenario: Usuario canjea recompensa
DADO que el usuario tiene 5000 XP disponibles
CUANDO canjea "Merch Trading Platform" (5000 XP)
ENTONCES se deduce 5000 XP de balance
Y se registra el canje
Y se envía email de confirmación
Y nivel NO baja (XP acumulado permanece)
Escenario: Progreso hacia logro
DADO que el usuario completó 7 de 10 cursos para logro
CUANDO ve página de logros
ENTONCES se muestra "7/10 cursos"
Y barra de progreso al 70%
Y descripción de lo que falta
Dependencias
- PostgreSQL para gamification data
- Redis para caché de leaderboards
- Event system para otorgar XP en tiempo real
- Notification service para celebraciones
- Analytics para tracking de engagement
Notas Técnicas
- Calcular leaderboard en background job cada 5 minutos
- Usar Redis Sorted Sets para leaderboards rápidos
- Implementar event handlers para cada acción que otorga XP
- Crear índices en tablas de XP y badges para queries rápidas
- Considerar rate limiting para prevenir farming de XP
- Implementar audit log de XP ganado/gastado
- Usar WebSockets para notificaciones en tiempo real
Referencias
- Schema:
/backend/src/database/schemas/gamification.sql - API:
/backend/src/modules/gamification/ - Frontend:
/frontend/src/pages/Leaderboard.tsx
Tareas Técnicas
Database:
- Tabla gamification.user_xp: user_id, total_xp, level
- Tabla gamification.badges: definición de badges
- Tabla gamification.user_badges: user_id, badge_id, earned_at
- Tabla gamification.achievements: definición de logros
- Tabla gamification.user_achievements: progreso de usuario
- Tabla gamification.xp_transactions: log de XP ganado/gastado
- Tabla gamification.leaderboard: caché de rankings
- Índices para queries de leaderboard
Backend:
- Endpoint GET /gamification/profile (stats del usuario)
- Endpoint GET /gamification/leaderboard
- Endpoint GET /gamification/badges
- Endpoint GET /gamification/achievements
- Endpoint POST /gamification/rewards/redeem
- Implementar GamificationService.awardXP()
- Implementar GamificationService.checkLevelUp()
- Implementar GamificationService.checkAchievements()
- Event handlers para todas las acciones que otorgan XP
- Cron job para calcular leaderboards
Frontend:
- Crear LeaderboardPage.tsx
- Crear BadgesGalleryPage.tsx
- Crear AchievementsPage.tsx
- Crear RewardsStorePage.tsx
- Crear componente XPAnimation.tsx
- Crear componente LevelUpModal.tsx
- Crear componente BadgeToast.tsx
- Crear componente ProgressBar.tsx para nivel
- Integrar gamificación en perfil de usuario
- Implementar gamificationStore
Tests:
- Test cálculo de nivel según XP
- Test otorgamiento de badges automático
- Test ranking en leaderboard
- Test canje de recompensas
Creado por: Requirements-Analyst Fecha: 2025-12-05 Última actualización: 2025-12-05