Modelo
TenantGamificationConfig (XP rules, level thresholds, features)
└── CourseGamificationConfig (override per-course)
UserGamificationProfile (totalXp, currentLevel, currentStreakDays, coins)
├── XpLog (cada XP earned con source)
├── UserBadge[]
├── ContestParticipant[]
└── RewardRedemption[]
Motor XP
XP ganado por actividad. Config en xpRules JSON:
{
"lessonComplete": 50,
"quizPass": 30,
"quizPassFirstTry": 50,
"assignmentSubmit": 40,
"forumPostCreate": 10,
"forumReplyCreate": 5,
"chatTutorMessage": 2,
"liveClassJoin": 20,
"dailyLogin": 5,
"streakBonus": [
{ "days": 7, "bonus": 100 },
{ "days": 30, "bonus": 500 }
]
}
handleGamificationEvent() integrado en 7 rutas (lesson complete, quiz, chat tutor, forum post/reply, live class join, assignment submit).
Niveles
Umbrales configurables (por defecto: nivel N = 100 × N²):
Nivel 1: 0 XP
Nivel 2: 100 XP
Nivel 3: 400 XP
Nivel 4: 900 XP
Nivel 5: 1600 XP
...
El level up dispara el evento level_up (automatización) + push notification (móvil). El evento badge_earned se emite cuando se concede un badge.
Badges
11 tipos de criterio con lógica booleana AND/OR:
| Criterio | Disparador |
|---|---|
| lesson_count | N lecciones completadas |
| module_count | N módulos completados |
| course_count | N cursos completados |
| xp_threshold | XP >= N |
| streak_days | racha de N días |
| mastery_avg | media de mastery >= X |
| quiz_perfect_count | N quizzes con 100% |
| forum_post_count | N posts en foro |
| study_minutes | N minutos estudiados |
| badge_collection | conjunto de badges conquistado |
| compound | reglas AND/OR anidadas |
Criterios compuestos (AND/OR, profundidad máx. 3):
{
"logic": "AND",
"rules": [
{ "type": "quiz_perfect_count", "value": 3 },
{
"logic": "OR",
"rules": [
{ "type": "streak_days", "value": 7 },
{ "type": "mastery_avg", "value": 0.9 }
]
}
]
}
Los badges manuales usan criteriaType=manual y pueden ser otorgados por profesores/admins autorizados; manual no es un tipo automático de criterio.
Open Badges 3.0
Al ganar un badge se crea un UserBadge con página pública:
/badges/verify/[userBadgeId](sin autenticación)/api/badges/verify/[userBadgeId]devuelve JSON-LD compatible con Open Badges 3.0 (modelo de datos W3C VC)- Schema.org
EducationalOccupationalCredentialpara descubrimiento en Google/LinkedIn - Autenticidad verificada mediante la URL/API pública + registro de la plataforma. La firma/proof criptográfica y el botón nativo de LinkedIn aún no están implementados (roadmap); el compartir es manual vía URL
Leaderboards
Redis ZSET (sorted sets) para rendimiento:
ZADD leaderboard:tenant:{tenantId}:scope:course:{courseId}:window:weekly {xp} {userId}
ZADD leaderboard:tenant:{tenantId}:scope:class:{classId}:window:alltime {xp} {userId}
Ámbitos: course, class_group. Ventanas: alltime, weekly, monthly.
Modo anónimo: el alumno aparece como "Alumno #42" (config por tenant).
Contests
Lifecycle: draft → active → ended (cron auto-start/end).
7 métricas:
- xp_earned (XP total en el período)
- lessons_completed
- quizzes_passed
- avg_quiz_score
- study_minutes
- forum_posts
- badges_earned
Configurable: ámbito (course/class/tenant), fecha inicio/fin, premios (rewards).
Rewards shop
Catálogo de recompensas virtuales. El alumno gasta coins (acumulados vía XP):
- certificate_template — diploma personalizado
- profile_customization — avatar/borde
- badge_special — badge único
- virtual_item — sticker, color de nombre, etc.
Redención atómica (anti-race condition). Reembolso automático si el admin lo deniega.
Agente IA de gamificación
El admin puede crear/gestionar la gamificación vía chat:
"Crea 5 badges para mi curso de Matemáticas enfocados en consistencia
(rachas) y mastery (>= 80% de acierto). Bonus para alumnos que ayudan
en el foro."
19 herramientas (CRUD badges/contests/rewards, config XP, analytics, award manual). Loop tool_use máx. 15 iteraciones.
El Gamification Agent (IA) permite crear badges, contests y rewards por chat.
Informes para padres
Gamificación integrada en packages/core/src/monitoring/advanced-reports.ts:
- StudentReport incluye XP, nivel, badges recientes, racha
- El portal de padres muestra la sección "Logros" con badge grid + streak counter
- El informe LLM menciona los logros: "María completó 3 cursos y ganó 5 badges este mes"