workspace/projects/gamilit/orchestration/analisis-modulos-3-4-5/FASE-4-VALIDACION-DEPENDENCIAS.md
rckrdmrd a249c99be2
Some checks failed
CI Pipeline / changes (push) Has been cancelled
CI Pipeline / core (push) Has been cancelled
CI Pipeline / trading-backend (push) Has been cancelled
CI Pipeline / trading-data-service (push) Has been cancelled
CI Pipeline / trading-frontend (push) Has been cancelled
CI Pipeline / erp-core (push) Has been cancelled
CI Pipeline / erp-mecanicas (push) Has been cancelled
CI Pipeline / gamilit-backend (push) Has been cancelled
CI Pipeline / gamilit-frontend (push) Has been cancelled
feat: Sincronizacion completa workspace 2025-12-26
## Backend
- fix(ranks): Reordenar rutas en RanksController para evitar conflictos 404
- feat(gamification): Agregar MayaRankEntity al modulo
- feat(ml-coins): Expandir funcionalidad del servicio
- feat(teacher): Mejoras en dashboard, mensajes y reportes
- feat(entities): Nuevas entidades admin, educational, progress, social

## Frontend
- feat(gamificationAPI): API completa para ranks con endpoints
- feat(RubricEvaluator): Nuevo componente para evaluacion docente
- refactor(admin): Mejoras en hooks y paginas
- refactor(teacher): Mejoras en paginas del portal

## Database
- fix(initialize_user_stats): Agregar is_current y achieved_at a user_ranks
- fix(notifications-policies): Corregir RLS con JOIN correcto
- feat(friendships): Agregar columna status con estados
- sync(seeds): Homologacion completa DEV <-> PROD

## Docs & Orchestration
- docs(api): Actualizar API-TEACHER-MODULE.md
- docs(frontend): COMPONENTES-INVENTARIO.md
- docs(database): VIEWS-INVENTARIO.md, VALIDACION-DDL-SEEDS
- Reportes de analisis y validacion

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 17:53:38 -06:00

368 lines
13 KiB
Markdown

# VALIDACIÓN DE PLANEACIÓN Y DEPENDENCIAS
## Fase 4: Verificación de Objetos Impactados
**Fecha:** 2025-12-23
**Analista:** Requirements-Analyst
**Versión:** 1.0
**Estado:** VALIDACIÓN COMPLETA
---
## 1. RESUMEN DE VALIDACIÓN
| Área | Hallazgo | Acción |
|------|----------|--------|
| Rúbricas | 4 existentes, 6 faltantes | Extender `getRubricForMechanic()` |
| Multiplicador ML Coins | Implementado parcialmente | Integrar con rangos Maya |
| DTOs M4-M5 | ✅ Completos (8 DTOs) | Sin acción |
| Hooks Teacher | ✅ Completos (3 hooks grading) | Sin acción |
| Validador SQL | ✅ Completo | Sin acción |
| Seeds | ✅ Completos | Sin acción |
---
## 2. ANÁLISIS DE RÚBRICAS
### 2.1 Rúbricas Existentes
| Rúbrica | Tipo de Ejercicio | Módulo | Estado |
|---------|-------------------|--------|--------|
| `prediccion_narrativa` | Predicción Narrativa | M2 | ✅ Completa |
| `tribunal_opiniones` | Tribunal de Opiniones | M3 | ✅ Completa |
| `comic_digital` | Cómic Digital | M5 | ✅ Completa |
| `generic_creative` | Fallback para 10 tipos | - | ✅ Disponible |
### 2.2 Rúbricas Faltantes (Necesitan Implementación)
#### Módulo 4 (4 ejercicios con revisión manual):
| Tipo | Criterios Sugeridos | Peso |
|------|-------------------|------|
| `verificador_fake_news` | Precisión veredictos (40%), Calidad evidencia (35%), Fuentes citadas (25%) | 100% |
| `infografia_interactiva` | Comprensión datos (35%), Secciones exploradas (30%), Síntesis (35%) | 100% |
| `navegacion_hipertextual` | Eficiencia navegación (30%), Información sintetizada (40%), Ruta lógica (30%) | 100% |
| `analisis_memes` | Interpretación elementos (35%), Análisis cultural (30%), Precisión histórica (35%) | 100% |
#### Módulo 5 (2 ejercicios faltantes):
| Tipo | Criterios Sugeridos | Peso |
|------|-------------------|------|
| `diario_multimedia` | Precisión histórica (30%), Profundidad emocional (25%), Creatividad (25%), Voz auténtica (20%) | 100% |
| `video_carta` | Autenticidad de voz (30%), Mensaje (30%), Estructura (25%), Longitud (15%) | 100% |
### 2.3 Código a Modificar
**Archivo:** `apps/frontend/src/apps/teacher/components/grading/RubricEvaluator.tsx`
**Cambio requerido:**
```typescript
// Agregar constantes para nuevas rúbricas:
const RUBRIC_VERIFICADOR_FAKE_NEWS: RubricConfig = {
id: 'verificador_fake_news',
name: 'Verificador de Fake News',
description: 'Evaluación de verificación de afirmaciones',
mechanicType: 'verificador_fake_news',
maxScore: 100,
criteria: [
{ id: 'precision', name: 'Precisión de veredictos', weight: 40, ... },
{ id: 'evidencia', name: 'Calidad de evidencia', weight: 35, ... },
{ id: 'fuentes', name: 'Fuentes citadas', weight: 25, ... }
]
};
// Agregar a DEFAULT_RUBRICS:
export const DEFAULT_RUBRICS: RubricConfig[] = [
...EXISTING_RUBRICS,
RUBRIC_VERIFICADOR_FAKE_NEWS,
RUBRIC_INFOGRAFIA_INTERACTIVA,
RUBRIC_NAVEGACION_HIPERTEXTUAL,
RUBRIC_ANALISIS_MEMES,
RUBRIC_DIARIO_MULTIMEDIA,
RUBRIC_VIDEO_CARTA
];
```
---
## 3. ANÁLISIS DE MULTIPLICADOR ML COINS
### 3.1 Estado Actual
**Implementación encontrada en `ml-coins.service.ts`:**
```typescript
async addCoins(
userId: string,
amount: number,
type: TransactionType,
description: string,
referenceId?: string,
referenceType?: string,
multiplier?: number // ✅ Parámetro existe
): Promise<MLCoinsTransaction> {
const finalAmount = multiplier
? Math.floor(amount * multiplier)
: amount; // ✅ Se aplica si se pasa
...
}
```
### 3.2 Gap Identificado
**El multiplicador NO se obtiene automáticamente del rango del usuario.**
Flujo actual:
```
Ejercicio completado → mlCoinsService.addCoins(userId, 50) → 50 ML Coins
```
Flujo esperado:
```
Ejercicio completado → Obtener rango usuario → Obtener xp_multiplier →
mlCoinsService.addCoins(userId, 50, multiplier: 1.10) → 55 ML Coins
```
### 3.3 Corrección Requerida
**Opción A: En Backend (Recomendada)**
Modificar `exercise-attempt.service.ts`:
```typescript
async awardRewards(userId: string, exercise: Exercise, score: number) {
// Obtener multiplicador del rango del usuario
const userStats = await this.userStatsService.findByUserId(userId);
const userRank = await this.mayaRanksRepository.findOne({
where: { rank_name: userStats.current_rank }
});
const multiplier = userRank?.xp_multiplier || 1.0;
// Aplicar multiplicador a ML Coins
await this.mlCoinsService.addCoins(
userId,
exercise.ml_coins_reward,
'exercise_completion',
`Completar ${exercise.title}`,
exercise.id,
'exercise',
multiplier // ← Pasar multiplicador
);
}
```
**Opción B: En Base de Datos**
Modificar `award_ml_coins.sql`:
```sql
-- Obtener multiplicador automáticamente
SELECT xp_multiplier INTO v_multiplier
FROM gamification_system.maya_ranks
WHERE rank_name = (
SELECT current_rank
FROM gamification_system.user_stats
WHERE user_id = p_user_id
);
v_final_amount := FLOOR(p_amount * COALESCE(v_multiplier, 1.0));
```
---
## 4. VALIDACIÓN DE DTOs
### 4.1 DTOs Módulo 4 ✅ COMPLETOS
| DTO | Archivo | Campos Clave | Validación |
|-----|---------|--------------|------------|
| `VerificadorFakeNewsAnswerDto` | `verificador-fake-news-answer.dto.ts` | claims_verified[], is_fake, evidence | ≥10 caracteres |
| `InfografiaInteractivaAnswerDto` | `infografia-interactiva-answer.dto.ts` | answers{}, sections_explored[] | ≥1 sección |
| `QuizTikTokAnswerDto` | `quiz-tiktok-answer.dto.ts` | answers[] (numbers) | ≥0 por índice |
| `NavegacionHipertextualAnswerDto` | `navegacion-hipertextual-answer.dto.ts` | path[], information_found{} | ≥2 nodos |
| `AnalisisMemesAnswerDto` | `analisis-memes-answer.dto.ts` | annotations[], analysis.message | message no vacío |
### 4.2 DTOs Módulo 5 ✅ COMPLETOS
| DTO | Archivo | Campos Clave | Validación |
|-----|---------|--------------|------------|
| `DiarioMultimediaAnswerDto` | `diario-multimedia-answer.dto.ts` | entries[{date, content, mood}] | 1-5 entradas, ≥50 chars |
| `ComicDigitalAnswerDto` | `comic-digital-answer.dto.ts` | panels[{dialogue, narration}] | 4-6 paneles |
| `VideoCartaAnswerDto` | `video-carta-answer.dto.ts` | video_url OR script, duration | ≥100 chars script |
---
## 5. VALIDACIÓN DE HOOKS TEACHER
### 5.1 Hooks de Calificación ✅ COMPLETOS
| Hook | Propósito | Métodos Principales |
|------|-----------|-------------------|
| `useGrading` | Gestión de calificaciones | `grade()`, `bulkGrade()`, `getSubmissionDetail()` |
| `useExerciseResponses` | Respuestas de ejercicios | `useAttemptDetail()`, `useAttemptsByStudent()` |
| `useStudentMonitoring` | Monitoreo en tiempo real | `students`, `setRefreshInterval()` |
### 5.2 Hooks Complementarios
| Hook | Uso para Calificación |
|------|----------------------|
| `useGrantBonus` | Otorgar XP/ML Coins adicionales |
| `useStudentsEconomy` | Ver balance de estudiantes |
| `useMasteryTracking` | Verificar dominio de temas |
---
## 6. MATRIZ DE IMPACTO DE CAMBIOS
### 6.1 Cambios en Frontend
| Archivo | Cambio | Impacto | Dependencias |
|---------|--------|---------|--------------|
| `RubricEvaluator.tsx` | +6 rúbricas | Alto | `useGrading.ts` |
| Ningún otro | - | - | - |
### 6.2 Cambios en Backend
| Archivo | Cambio | Impacto | Dependencias |
|---------|--------|---------|--------------|
| `exercise-attempt.service.ts` | Integrar multiplicador | Medio | `ml-coins.service.ts`, `maya-ranks.repository` |
| Ningún otro | - | - | - |
### 6.3 Cambios en Database
| Archivo | Cambio | Impacto | Dependencias |
|---------|--------|---------|--------------|
| Ninguno | - | - | Validador ya está completo |
### 6.4 Cambios en Documentación
| Archivo | Cambio | Impacto | Dependencias |
|---------|--------|---------|--------------|
| `VISION.md` | Actualizar estado M4-M5 | Alto | Ninguna |
| Otros docs XP | Estandarizar umbrales | Medio | Ninguna |
---
## 7. VERIFICACIÓN DE DEPENDENCIAS CRUZADAS
### 7.1 Flujo de Calificación Completo
```
┌─────────────────────────────────────────────────────────────────────┐
│ ESTUDIANTE │
│ └─> Completa ejercicio M4/M5 │
│ └─> Frontend: useExerciseSubmission() │
│ └─> Backend: exercises.controller.submit() │
│ └─> validate_module4_module5_answer() [SQL] │
│ └─> exercise-attempt.service.create() │
│ └─> progress_tracking.exercise_attempts │
│ └─> TRIGGERS (XP, ML Coins, Misiones)│
│ │
│ DOCENTE │
│ └─> Ve pendientes en ReviewPanel │
│ └─> Frontend: useGrading.getSubmissions() │
│ └─> Backend: teacher/exercise-responses.controller │
│ └─> Renderiza RubricEvaluator │
│ └─> Docente califica con rúbrica │
│ └─> Frontend: useGrading.grade() │
│ └─> Backend: grading.service.grade() │
│ └─> Actualiza submission.score │
│ └─> Trigger: otorga rewards│
└─────────────────────────────────────────────────────────────────────┘
```
### 7.2 Dependencias Verificadas
| Dependencia | Estado | Nota |
|-------------|--------|------|
| `useExerciseSubmission``exercises.controller` | ✅ OK | Flujo probado |
| `exercises.controller``validate_module4_module5_answer` | ✅ OK | Validador existe |
| `RubricEvaluator``useGrading` | ✅ OK | Integración completa |
| `useGrading.grade()``grading.service` | ✅ OK | Endpoint funcional |
| `grading.service``triggers` | ✅ OK | Triggers actualizan rewards |
### 7.3 Dependencias Faltantes
| Dependencia | Estado | Corrección |
|-------------|--------|------------|
| `awardRewards``xp_multiplier` por rango | ⚠️ PARCIAL | Integrar en COR-006 |
| `RubricEvaluator` → Rúbricas M4 | ⚠️ FALTANTE | Agregar en COR-003 |
| `RubricEvaluator` → Rúbricas M5 (2 de 3) | ⚠️ FALTANTE | Agregar en COR-003 |
---
## 8. OBJETOS QUE DEBEN IMPACTARSE
### 8.1 Lista Definitiva de Archivos a Modificar
| # | Archivo | Tipo de Cambio | Prioridad |
|---|---------|----------------|-----------|
| 1 | `docs/00-vision-general/VISION.md` | Actualizar estado | P0 |
| 2 | `docs/00-vision-general/*.md` (varios) | Estandarizar XP | P0 |
| 3 | `apps/frontend/src/apps/teacher/components/grading/RubricEvaluator.tsx` | +6 rúbricas | P1 |
| 4 | `apps/backend/src/modules/progress/services/exercise-attempt.service.ts` | Integrar multiplicador | P2 |
| 5 | Configuración de storage (si video upload) | Infraestructura | P2 |
### 8.2 Archivos que NO Requieren Cambios
| Archivo | Razón |
|---------|-------|
| DTOs M4-M5 | Ya completos y funcionales |
| Validador SQL | Completo y probado |
| Hooks Teacher | Completos y funcionales |
| Seeds de ejercicios | Completos |
| Triggers de gamificación | Funcionando |
---
## 9. CONCLUSIÓN DE VALIDACIÓN
### 9.1 Plan Original vs. Validación
| Corrección | Plan Original | Validación | Estado |
|------------|---------------|------------|--------|
| COR-001 | Actualizar VISION.md | Confirmado | ✅ MANTENER |
| COR-002 | Estandarizar docs XP | Confirmado | ✅ MANTENER |
| COR-003 | Configurar rúbricas | 6 rúbricas faltantes identificadas | ✅ AJUSTAR |
| COR-004 | Verificar Quiz TikTok | Bajo riesgo, DTOs correctos | ✅ REDUCIR ESFUERZO |
| COR-005 | Tests E2E | Necesario para validar flujo | ✅ MANTENER |
| COR-006 | Multiplicador ML Coins | Gap real identificado | ✅ CONFIRMAR |
| COR-007 | Video Storage | Depende de requisitos infra | ✅ VERIFICAR PRIORIDAD |
### 9.2 Ajustes al Plan
1. **COR-003 ampliado:** Agregar 6 rúbricas específicas, no solo verificar existentes
2. **COR-004 simplificado:** Solo verificar que anti-farming funcione
3. **COR-006 confirmado:** Gap real, multiplicador no se aplica automáticamente
### 9.3 Riesgos Actualizados
| Riesgo | Antes | Después | Nota |
|--------|-------|---------|------|
| Rúbricas faltantes | Media | Alta | 6 de 10 usan genérica |
| Multiplicador ML Coins | Media | Confirmado | Gap real identificado |
| Tests E2E | Media | Media | Sin cambios |
---
## 10. APROBACIÓN PARA FASE 5
### Checklist de Validación
- [x] Todos los gaps del análisis (Fase 2) están cubiertos en el plan (Fase 3)
- [x] Dependencias de código identificadas y documentadas
- [x] Archivos a modificar listados exhaustivamente
- [x] Archivos que NO deben modificarse confirmados
- [x] Flujo end-to-end verificado
- [x] Riesgos actualizados con hallazgos de validación
### Decisión
**✅ PLAN VALIDADO Y APROBADO PARA FASE 5**
El plan de implementaciones está listo para ejecutarse con los ajustes identificados en esta fase de validación.
---
**Documento generado:** 2025-12-23
**Estado:** FASE 4 COMPLETA - Listo para Fase 5 (Ejecución)