- Configure workspace Git repository with comprehensive .gitignore - Add Odoo as submodule for ERP reference code - Include documentation: SETUP.md, GIT-STRUCTURE.md - Add gitignore templates for projects (backend, frontend, database) - Structure supports independent repos per project/subproject level Workspace includes: - core/ - Reusable patterns, modules, orchestration system - projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.) - knowledge-base/ - Reference code and patterns (includes Odoo submodule) - devtools/ - Development tools and templates - customers/ - Client implementations template 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.8 KiB
Scripts de Validación de Integridad - GAMILIT Database
Fecha: 2025-11-24 Mantenido por: Database-Agent Propósito: Scripts para validar y mantener la integridad de datos de XP y ML Coins
📋 Scripts Disponibles
1. quick-validate-xp.sql
Descripción: Validación rápida (30 segundos) para detectar problemas de integridad en XP.
Uso:
cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit/apps/database
PGPASSWORD='C5hq7253pdVyVKUC' psql -h localhost -U gamilit_user -d gamilit_platform -f scripts/quick-validate-xp.sql
Salida esperada (sistema saludable):
1. Intentos con score > 0 pero xp_earned = 0:
intentos_problematicos = 0
2. Usuarios con discrepancias:
usuarios_con_discrepancias = 0
3. Estado de integridad:
estado = "✅ INTEGRIDAD OK"
Frecuencia recomendada: Diaria o después de cada deployment
2. validate-xp-integrity.sql
Descripción: Validación completa (2-3 minutos) con reporte detallado de todos los aspectos de integridad.
Uso:
cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit/apps/database
PGPASSWORD='C5hq7253pdVyVKUC' psql -h localhost -U gamilit_user -d gamilit_platform -f scripts/validate-xp-integrity.sql
Validaciones incluidas:
- Intentos con score > 0 pero xp_earned = 0
- Usuarios con discrepancias entre attempts y user_stats
- Intentos donde xp_earned no coincide con la fórmula esperada
- User stats sin attempts registrados
- Resumen general del sistema
Frecuencia recomendada: Semanal o cuando se detecten anomalías
3. fix-historical-xp-ml-coins-v2.sql
Descripción: Script de corrección automática de datos históricos (solo si se detectan problemas).
⚠️ ADVERTENCIA: Solo ejecutar si quick-validate-xp.sql reporta problemas.
Uso:
cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit/apps/database
PGPASSWORD='C5hq7253pdVyVKUC' psql -h localhost -U gamilit_user -d gamilit_platform -f scripts/fix-historical-xp-ml-coins-v2.sql
# Revisar output cuidadosamente antes de confirmar
# Si todo se ve bien, ejecutar en otra sesión:
PGPASSWORD='C5hq7253pdVyVKUC' psql -h localhost -U gamilit_user -d gamilit_platform -c "COMMIT;"
Acciones que realiza:
- Deshabilita trigger
trg_check_rank_promotion_on_xp_gain - Corrige
xp_earnedyml_coins_earnedenexercise_attempts - Recalcula
user_statsbasado en suma de attempts - Rehabilita trigger
- Valida integridad final
Frecuencia recomendada: Solo cuando sea necesario (no es una tarea periódica)
🔍 Interpretación de Resultados
Estado: ✅ INTEGRIDAD OK
Todo funciona correctamente. No se requiere acción.
Estado: ❌ HAY PROBLEMAS
Pasos a seguir:
-
Ejecutar validación completa:
psql -d gamilit_platform -f scripts/validate-xp-integrity.sql -
Analizar reporte detallado:
- ¿Cuántos intentos afectados?
- ¿Cuántos usuarios tienen discrepancias?
- ¿Cuál es la magnitud del problema?
-
Si hay pocos casos aislados (< 5 usuarios):
- Ejecutar script de corrección automática
- Revisar logs antes de confirmar
- Validar resultado
-
Si hay muchos casos (> 5 usuarios):
- NO ejecutar script automático
- Investigar la causa raíz
- Consultar con Database-Agent o Tech Lead
📊 Fórmulas de XP y ML Coins
XP Earned
xp_earned = GREATEST(0, score - (hints_used * 10))
Ejemplos:
- Score: 100, hints: 0 → XP: 100
- Score: 100, hints: 2 → XP: 80
- Score: 50, hints: 10 → XP: 0 (no negativo)
ML Coins Earned
ml_coins_earned = GREATEST(0, FLOOR(score / 10) - (comodines_used * 2))
Ejemplos:
- Score: 100, comodines: 0 → ML Coins: 10
- Score: 100, comodines: 2 → ML Coins: 6
- Score: 50, comodines: 0 → ML Coins: 5
🚨 Problemas Comunes
1. Intentos con xp_earned = 0
Causa: Bug en el código que crea el attempt sin calcular XP.
Solución: Ejecutar script de corrección automática.
Prevención: Agregar validación en backend antes de insertar attempt.
2. Discrepancia entre attempts y user_stats
Causa: Trigger update_user_stats_on_exercise_complete no se ejecutó correctamente.
Solución: Recalcular user_stats con script de corrección.
Prevención: Monitorear logs de triggers.
3. Fórmulas inconsistentes
Causa: Cambio en lógica de negocio sin migración de datos históricos.
Solución: Decidir si mantener datos históricos o migrar.
Prevención: Documentar cambios en fórmulas.
📝 Historial de Correcciones
2025-11-24: Corrección inicial de datos históricos
- Usuario afectado:
85a2d456-a07d-4be9-b9ce-4a46b183a2a0 - Intentos corregidos: 1
- XP recuperado: +600 XP (500 → 1100)
- ML Coins recuperados: +90 ML Coins (220 → 310)
- Bug adicional: Corregida función
promote_to_next_rank()
Ver detalles completos:
/apps/database/REPORTE-CORRECCION-XP-ML-COINS-2025-11-24.md/apps/database/RESUMEN-EJECUTIVO-CORRECCION-XP-2025-11-24.md
🔗 Referencias
- Política DDL-First:
/orchestration/directivas/DIRECTIVA-POLITICA-CARGA-LIMPIA.md - Traza de tareas:
/orchestration/trazas/TRAZA-TAREAS-DATABASE.md - Prompt Database-Agent:
/orchestration/prompts/PROMPT-DATABASE-AGENT.md
📞 Contacto
Mantenido por: Database-Agent Última actualización: 2025-11-24
Para preguntas o problemas, consultar:
- Documentación en
/apps/database/docs/ - Trazas en
/orchestration/trazas/ - Tech Lead del proyecto GAMILIT
FIN DEL README