Arquitectura de Gamificación

Arquitectura técnica del sistema de misiones, motor de XP, cálculo de tablas de clasificación e integración con la pista de auditoría.

Última actualización: 2025-02-18

Arquitectura de Gamificación

El sistema de gamificación está construido como una capa sobre el registro de auditoría event-sourced. Las recompensas de XP se derivan de eventos operacionales, asegurando que las mecánicas de juego nunca entren en conflicto con los requisitos de cumplimiento.

Arquitectura del Sistema

Loading diagram…

Motor de Reglas de XP

El motor de reglas mapea eventos operacionales a recompensas de XP:

<Card className="w-80">
  <CardHeader className="pb-2">
    <CardTitle className="text-sm">Configuración de Reglas XP</CardTitle>
    <CardDescription>Puntos otorgados por acción</CardDescription>
  </CardHeader>
  <CardContent className="space-y-2">
    <div className="flex items-center justify-between text-xs p-2 rounded bg-muted">
      <span>Colocación con evidencia completa</span>
      <Badge variant="outline">100 XP</Badge>
    </div>
    <div className="flex items-center justify-between text-xs p-2 rounded">
      <span>Verificación de supervisor</span>
      <Badge variant="outline">50 XP</Badge>
    </div>
    <div className="flex items-center justify-between text-xs p-2 rounded bg-muted">
      <span>Avance de etapa</span>
      <Badge variant="outline">75 XP</Badge>
    </div>
    <div className="flex items-center justify-between text-xs p-2 rounded">
      <span>Completado antes de tiempo</span>
      <Badge variant="outline">25 XP bonus</Badge>
    </div>
    <div className="flex items-center justify-between text-xs p-2 rounded bg-muted">
      <span>Auditoría perfecta (sin disputas)</span>
      <Badge variant="outline">500 XP</Badge>
    </div>
  </CardContent>
</Card>

Pipeline de Procesamiento de Reglas

interface XPRule {
  eventType: EventType;
  condition?: (event: Event) => boolean;
  baseXP: number;
  multipliers?: XPMultiplier[];
}

// Example rule: placement with photo evidence
const placementRule: XPRule = {
  eventType: 'PLACED',
  condition: (e) => !!e.photo_url && !!e.scale_weight_kg,
  baseXP: 100,
  multipliers: [
    { type: 'streak', factor: (streak) => 1 + streak * 0.1 },
    { type: 'time', factor: (elapsed) => elapsed < 120 ? 1.25 : 1.0 },
  ],
};

Sistema de Misiones

Las misiones son configuradas por administradores y rastreadas en tiempo real:

Loading diagram…

Tipos de Misiones

TipoDuraciónAlcanceEjemplo
Diaria24 horasIndividualProcesar 20 unidades
Semanal7 díasIndividualSemana sin incidentes
EquipoVariableEquipoProcesar 500 unidades como equipo
DesafíoPersonalizadoInstalaciónMayor rendimiento este mes
LogroPermanenteIndividual1,000 colocaciones de por vida

Modelo de Datos de Misiones

interface Quest {
  id: string;
  title: string;
  description: string;
  type: 'daily' | 'weekly' | 'team' | 'challenge' | 'achievement';
  criteria: QuestCriteria[];
  xpReward: number;
  badgeReward?: string;
  deadline?: Date;
  assignedTo: string[]; // operator IDs or 'all'
}

interface QuestCriteria {
  metric: string; // e.g., 'placements_count', 'incidents_zero'
  target: number;
  current: number; // derived from events
}

Arquitectura de Tablas de Clasificación

Las tablas de clasificación se computan desde el registro de eventos XP usando agregaciones materializadas:

TablaPeríodo de ReinicioAlcanceMétrica de Ranking
DiariaCada 24hInstalaciónXP ganado hoy
SemanalCada lunesInstalaciónXP ganado esta semana
Mensual1ro del mesOrganizaciónXP ganado este mes
Todo el tiempoNuncaOrganizaciónXP total de por vida

Cómputo

-- Weekly leaderboard (cached, refreshed every 5 minutes)
SELECT
  operator_id,
  SUM(xp_amount) as weekly_xp,
  COUNT(*) as actions,
  RANK() OVER (ORDER BY SUM(xp_amount) DESC) as rank
FROM xp_events
WHERE created_at >= date_trunc('week', NOW())
GROUP BY operator_id
ORDER BY weekly_xp DESC
LIMIT 50;

Progresión de Nivel

NivelXP RequeridoTítuloBeneficios
1-50-2,500NovatoMisiones básicas
6-102,500-10,000HábilMisiones avanzadas
11-1510,000-25,000ExpertoMisiones de equipo
16-2025,000-50,000MaestroCreación de desafíos
21+50,000+LeyendaTodas las funciones

Integración con Auditoría

ℹ️

Seguro para Cumplimiento

Cada recompensa de XP, completación de misión y cambio en la tabla de clasificación se registra en la misma pista de auditoría inmutable que los eventos operacionales. La gamificación nunca compromete la integridad de la auditoría.

La capa de gamificación produce sus propios eventos de auditoría:

// Gamification events in the audit trail
{
  type: 'GAMIFICATION',
  subtype: 'XP_AWARDED',
  operator: 'op-123',
  data: {
    amount: 100,
    source: 'placement',
    sourceEventId: 'evt-456',
    questId: 'quest-789',
    multiplier: 1.5,
    streakDays: 15
  },
  hash: 'sha256:...',
  timestamp: '2025-01-15T14:32:07Z'
}

Componentes

ComponenteRutaDescripción
GamificationHeader@/components/whms/GamificationHeaderBarra de XP persistente
QuestCard@/components/whms/QuestCardTarjeta de progreso de misión
QuestsTab@/components/whms/QuestsTabVista de lista de misiones
QuestCreator@/components/whms/QuestCreatorConstructor de misiones para admin
MissionCard@/components/whms/MissionCardTarjeta de misión de equipo
MissionsTab@/components/whms/MissionsTabMisiones en el mapa
AdminGameSetup@/components/whms/admin/AdminGameSetupConfiguración del juego

Relacionado