# FASE 3: PLAN DE IMPLEMENTACIONES Y CORRECCIONES
**Fecha:** 2025-12-18
**Perfil:** Requirements Analyst
**Proyecto:** Gamilit
---
## RESUMEN DE GAPS A RESOLVER
| Prioridad | Cantidad | Descripción |
|-----------|----------|-------------|
| CRÍTICOS | 4 | Bloquean producción |
| ALTOS | 5 | Afectan calidad |
| MEDIOS | 3 | Mejoras |
| **TOTAL** | **12** | |
---
## SPRINT 0: CORRECCIONES CRÍTICAS
### TASK-001: Integrar Emparejamiento en ExerciseContentRenderer
**Prioridad:** CRÍTICA
**Impacto:** Respuestas de ejercicios Emparejamiento no renderizan
**Archivo a modificar:**
- `/apps/frontend/src/shared/components/mechanics/ExerciseContentRenderer.tsx`
**Cambios requeridos:**
```typescript
// Agregar case para 'emparejamiento'
case 'emparejamiento':
return ;
```
**Dependencias:**
- Crear componente EmparejamientoRenderer si no existe
- Importar desde features/mechanics/module1/Emparejamiento/
**Archivos impactados:**
1. `ExerciseContentRenderer.tsx` - Agregar case
2. Posiblemente crear `EmparejamientoRenderer.tsx`
**Estimación:** 2-4 horas
---
### TASK-002: Completar Mecánicas Auxiliares (Tipos y Schemas)
**Prioridad:** CRÍTICA
**Impacto:** 4 mecánicas no son producción-ready
**Mecánicas afectadas:**
1. ComprensiónAuditiva
2. CollagePrensa
3. TextoEnMovimiento
4. CallToAction
**Archivos a crear por cada mecánica:**
#### ComprensiónAuditiva
```
/features/mechanics/auxiliar/ComprensiónAuditiva/
├── comprensiónAuditivaTypes.ts (CREAR)
├── comprensiónAuditivaSchemas.ts (CREAR)
├── comprensiónAuditivaMockData.ts (CREAR)
```
#### CollagePrensa
```
/features/mechanics/auxiliar/CollagePrensa/
├── collagePrensaTypes.ts (CREAR)
├── collagePrensaSchemas.ts (CREAR)
├── collagePrensa MockData.ts (CREAR)
```
#### TextoEnMovimiento
```
/features/mechanics/auxiliar/TextoEnMovimiento/
├── textoEnMovimientoTypes.ts (CREAR)
├── textoEnMovimientoSchemas.ts (CREAR)
├── textoEnMovimientoMockData.ts (CREAR)
```
#### CallToAction
```
/features/mechanics/auxiliar/CallToAction/
├── callToActionTypes.ts (CREAR)
├── callToActionSchemas.ts (CREAR)
├── callToActionMockData.ts (CREAR)
```
**Dependencias:**
- Refactorizar interfaces inline de componentes existentes
- Importar zod para schemas
**Archivos impactados:**
- 12 archivos nuevos
- 4 componentes existentes (refactorizar imports)
**Estimación:** 8-12 horas
---
### TASK-003: Implementar Gamification API Completo
**Prioridad:** CRÍTICA
**Impacto:** Solo 20% de endpoints gamification implementados
**Archivo a modificar:**
- `/apps/frontend/src/services/api/gamificationAPI.ts`
**Endpoints a implementar:**
```typescript
// Endpoints faltantes
export const getUserAchievements = async (userId: string): Promise => {
const response = await apiClient.get(`/gamification/achievements/${userId}`);
return response.data;
};
export const getUserRanks = async (userId: string): Promise => {
const response = await apiClient.get(`/gamification/ranks/${userId}`);
return response.data;
};
export const getLeaderboard = async (params: LeaderboardParams): Promise => {
const response = await apiClient.get('/gamification/leaderboard', { params });
return response.data;
};
export const getUserCoins = async (userId: string): Promise => {
const response = await apiClient.get(`/gamification/coins/${userId}`);
return response.data;
};
export const getUserXP = async (userId: string): Promise => {
const response = await apiClient.get(`/gamification/xp/${userId}`);
return response.data;
};
export const claimAchievement = async (userId: string, achievementId: string): Promise => {
const response = await apiClient.post(`/gamification/achievements/${userId}/claim/${achievementId}`);
return response.data;
};
```
**Dependencias:**
- Verificar que endpoints existan en backend
- Crear tipos TypeScript correspondientes
- Agregar error handling
**Archivos impactados:**
1. `gamificationAPI.ts` - Agregar funciones
2. Posiblemente crear `gamificationTypes.ts`
**Estimación:** 4-6 horas
---
### TASK-004: Agregar Tests para Teacher Portal (Crítico)
**Prioridad:** CRÍTICA
**Impacto:** 97 archivos sin tests, riesgo de regresiones
**Estructura de tests a crear:**
```
/apps/frontend/src/apps/teacher/__tests__/
├── hooks/
│ ├── useTeacherDashboard.test.ts
│ ├── useGrading.test.ts
│ ├── useMasteryTracking.test.ts
│ ├── useClassroomRealtime.test.ts
│ ├── useMissionStats.test.ts
├── components/
│ ├── dashboard/
│ │ └── TeacherDashboardStats.test.tsx
│ ├── grading/
│ │ └── RubricEvaluator.test.tsx
│ ├── responses/
│ │ └── ResponseDetailModal.test.tsx
├── pages/
│ ├── TeacherDashboardPage.test.tsx
│ ├── TeacherAssignmentsPage.test.tsx
│ ├── TeacherMonitoringPage.test.tsx
```
**Prioridad de tests:**
1. Hooks (core logic)
2. Páginas principales
3. Componentes críticos
**Dependencias:**
- Configuración Vitest existente
- Mocks para APIs y stores
**Estimación:** 16-24 horas
---
## SPRINT 1: CORRECCIONES ALTAS
### TASK-005: Eliminar Páginas Huérfanas y Duplicadas
**Prioridad:** ALTA
**Impacto:** Código muerto, confusión en mantenimiento
**Archivos a ELIMINAR:**
```
/apps/frontend/src/apps/student/pages/
├── GamificationTestPage.tsx (ELIMINAR)
├── GamificationPage.tsx (ELIMINAR - legacy)
├── PasswordRecoveryPage.tsx (ELIMINAR - duplicada)
├── ProfilePage.tsx (ELIMINAR - usar EnhancedProfilePage)
├── LoginPage.tsx (ELIMINAR - usar pages/auth)
├── RegisterPage.tsx (ELIMINAR - usar pages/auth)
├── admin/RolesPermissionsPage.tsx (MOVER a apps/admin/)
├── admin/UserManagementPage.tsx (MOVER a apps/admin/)
```
**Archivo a EVALUAR:**
- `NewLeaderboardPage.tsx` - Comparar con LeaderboardPage actual
**Dependencias:**
- Verificar que no hay imports a estos archivos
- Actualizar rutas si es necesario
**Archivos impactados:**
- 8 archivos a eliminar
- 2 archivos a mover
- Posibles imports a actualizar
**Estimación:** 2-4 horas
---
### TASK-006: Implementar Schemas Module 2
**Prioridad:** ALTA
**Impacto:** Validación débil en 4 mecánicas
**Archivos a crear:**
```
/features/mechanics/module2/
├── LecturaInferencial/lecturaInferencialSchemas.ts (CREAR)
├── PuzzleContexto/puzzleContextoSchemas.ts (CREAR)
├── PrediccionNarrativa/prediccionNarrativaSchemas.ts (CREAR)
├── ConstruccionHipotesis/construccionHipotesisSchemas.ts (CREAR)
```
**Patrón a seguir (de DetectiveTextual):**
```typescript
import { z } from 'zod';
export const lecturaInferencialAnswerSchema = z.object({
selectedOption: z.string(),
timestamp: z.number(),
// ... otros campos según tipo
});
export const lecturaInferencialExerciseSchema = z.object({
id: z.string(),
type: z.literal('lectura_inferencial'),
// ... estructura del ejercicio
});
export type LecturaInferencialAnswer = z.infer;
```
**Dependencias:**
- Importar zod
- Revisar tipos existentes para estructura
**Archivos impactados:**
- 4 archivos nuevos
- Posiblemente actualizar imports en componentes
**Estimación:** 4-6 horas
---
### TASK-007: Agregar Error Handling a APIs Pendientes
**Prioridad:** ALTA
**Impacto:** UX pobre en errores
**Archivos a modificar:**
1. `profileAPI.ts`
2. `passwordAPI.ts`
3. `schoolsAPI.ts`
4. `missionsAPI.ts`
**Patrón a implementar:**
```typescript
import { handleAPIError } from './apiErrorHandler';
export const updateProfile = async (userId: string, data: ProfileData) => {
try {
const response = await apiClient.put(`/users/${userId}/profile`, data);
return response.data;
} catch (error) {
throw handleAPIError(error);
}
};
```
**Dependencias:**
- `apiErrorHandler.ts` ya existe
**Archivos impactados:**
- 4 archivos a modificar
**Estimación:** 2-3 horas
---
### TASK-008: Tests para Mechanics
**Prioridad:** ALTA
**Impacto:** 80+ archivos sin tests
**Estructura de tests a crear:**
```
/features/mechanics/__tests__/
├── module1/
│ ├── VerdaderoFalso.test.tsx
│ ├── Crucigrama.test.tsx
│ ├── SopaLetras.test.tsx
│ ├── Emparejamiento.test.tsx
│ ├── Timeline.test.tsx
├── module2/
│ ├── DetectiveTextual.test.tsx
│ ├── RuedaInferencias.test.tsx
├── module3/
│ ├── AnalisisFuentes.test.tsx
│ ├── PodcastArgumentativo.test.tsx
├── shared/
│ └── ExerciseContentRenderer.test.tsx
```
**Prioridad de tests:**
1. ExerciseContentRenderer (crítico)
2. Mecánicas Module 1 (base)
3. Mecánicas Module 3 (producción)
**Estimación:** 12-16 horas
---
### TASK-009: Tests para Assignments
**Prioridad:** ALTA
**Impacto:** 15 archivos sin tests
**Estructura:**
```
/features/assignments/__tests__/
├── hooks/
│ └── useAssignments.test.ts
├── components/
│ └── AssignmentCard.test.tsx
├── api/
│ └── assignmentsApi.test.ts
```
**Estimación:** 6-8 horas
---
## SPRINT 2: MEJORAS
### TASK-010: Completar Páginas Teacher en Construcción
**Prioridad:** MEDIA
**Impacto:** Funcionalidad pendiente
**Archivos a completar:**
1. `TeacherContentPage.tsx` - Remover flag SHOW_UNDER_CONSTRUCTION
2. `TeacherResourcesPage.tsx` - Implementar funcionalidad
**Dependencias:**
- Definir requerimientos de estas páginas
- Verificar APIs necesarias
**Estimación:** 8-16 horas (depende de alcance)
---
### TASK-011: Agregar Mock Data Faltante
**Prioridad:** MEDIA
**Impacto:** Testing difícil
**Archivos a crear:**
```
/features/mechanics/
├── module2/LecturaInferencial/lecturaInferencialMockData.ts (CREAR)
├── module2/ConstruccionHipotesis/construccionHipotesisMockData.ts (CREAR)
```
**Patrón:**
```typescript
export const lecturaInferencialMockExercise = {
id: 'mock-li-001',
type: 'lectura_inferencial',
title: 'Ejercicio de prueba',
// ... estructura completa
};
export const lecturaInferencialMockData = [
lecturaInferencialMockExercise,
// más ejemplos
];
```
**Estimación:** 2-4 horas
---
### TASK-012: Conectar analyticsInterceptor
**Prioridad:** MEDIA
**Impacto:** Métricas perdidas
**Archivo a modificar:**
- `/apps/frontend/src/services/api/apiInterceptors.ts`
**Cambios:**
```typescript
// Conectar a servicio de analytics real
export const analyticsInterceptor = {
onRequest: (config) => {
analyticsService.trackAPICall({
endpoint: config.url,
method: config.method,
timestamp: Date.now()
});
return config;
},
onResponse: (response) => {
analyticsService.trackAPIResponse({
endpoint: response.config.url,
status: response.status,
duration: Date.now() - response.config.metadata?.startTime
});
return response;
}
};
```
**Dependencias:**
- Definir analyticsService
- Decidir destino de métricas
**Estimación:** 2-4 horas
---
## MATRIZ DE DEPENDENCIAS
```
TASK-001 (Emparejamiento ECR)
└── No tiene dependencias
TASK-002 (Mecánicas Auxiliares)
└── No tiene dependencias
TASK-003 (Gamification API)
└── Depende de: Backend endpoints existentes
TASK-004 (Tests Teacher)
└── No tiene dependencias
TASK-005 (Eliminar páginas)
└── Depende de: Verificar imports
TASK-006 (Schemas Module 2)
└── No tiene dependencias
TASK-007 (Error Handling APIs)
└── No tiene dependencias
TASK-008 (Tests Mechanics)
└── Depende de: TASK-001 (Emparejamiento)
TASK-009 (Tests Assignments)
└── No tiene dependencias
TASK-010 (Páginas Teacher)
└── Depende de: Definición de requerimientos
TASK-011 (Mock Data)
└── Depende de: TASK-006 (Schemas)
TASK-012 (Analytics)
└── Depende de: Definición de analyticsService
```
---
## CRONOGRAMA SUGERIDO
### Semana 1: Sprint 0 - Críticos
| Día | Tasks | Horas |
|-----|-------|-------|
| 1-2 | TASK-001, TASK-002 | 12-16h |
| 3 | TASK-003 | 4-6h |
| 4-5 | TASK-004 (inicio) | 8-12h |
### Semana 2: Sprint 1 - Altos
| Día | Tasks | Horas |
|-----|-------|-------|
| 1 | TASK-005, TASK-006 | 6-10h |
| 2 | TASK-007 | 2-3h |
| 3-5 | TASK-004 (cont), TASK-008 | 16-20h |
### Semana 3: Sprint 2 - Mejoras
| Día | Tasks | Horas |
|-----|-------|-------|
| 1-2 | TASK-009 | 6-8h |
| 3-4 | TASK-010, TASK-011 | 10-20h |
| 5 | TASK-012 | 2-4h |
---
## ESTIMACIÓN TOTAL
| Sprint | Tasks | Horas Est. |
|--------|-------|------------|
| Sprint 0 | 4 | 30-48h |
| Sprint 1 | 5 | 26-37h |
| Sprint 2 | 3 | 18-36h |
| **TOTAL** | **12** | **74-121h** |
---
**Estado:** FASE 3 COMPLETADA
**Siguiente:** FASE 4 - Validación de Planeación vs Análisis