workspace-v1/orchestration/analisis/PLAN-BUG-TEACHER-REVIEWS-002-2026-01-08.md
rckrdmrd e56e927a4d [MAINT-001] docs(orchestration): Actualizacion directivas SIMCO, perfiles y documentacion
Cambios incluidos:
- INDICE-DIRECTIVAS-WORKSPACE.yml actualizado
- Perfiles de agentes: PERFIL-ML.md, PERFIL-SECURITY.md
- Directivas SIMCO actualizadas:
  - SIMCO-ASIGNACION-PERFILES.md
  - SIMCO-CCA-SUBAGENTE.md
  - SIMCO-CONTEXT-ENGINEERING.md
  - SIMCO-CONTEXT-RESOLUTION.md
  - SIMCO-DELEGACION-PARALELA.md
- Inventarios actualizados: DEVENV-MASTER, DEVENV-PORTS
- Documentos de analisis agregados:
  - Analisis y planes de fix student portal
  - Analisis scripts BD
  - Analisis achievements, duplicados, gamification
  - Auditoria documentacion gamilit
  - Backlog discrepancias NEXUS
  - Planes maestros de resolucion
- Reportes de ejecucion agregados
- Knowledge base gamilit README actualizado
- Referencia submodulo gamilit actualizada (commit beb94f7)

Validaciones:
- Plan validado contra directivas SIMCO-GIT
- Dependencias verificadas
- Build gamilit: EXITOSO
2026-01-10 04:51:28 -06:00

287 lines
8.6 KiB
Markdown

# PLAN DE EJECUCIÓN: BUG-TEACHER-REVIEWS-002 - Datos faltantes en página teacher/reviews
**Agente:** Backend-Agent + Frontend-Agent
**Tipo de tarea:** Bug
**Prioridad:** P1
**Fecha creación:** 2026-01-08
**Relacionado con:** [TEACHER-PORTAL], [PROGRESS-TRACKING], [MANUAL-REVIEWS]
---
## 🔍 VERIFICACIÓN DE CATÁLOGO
**Funcionalidades a verificar:**
| Funcionalidad | ¿Aplica? | Catálogo | Acción |
|---------------|----------|----------|--------|
| auth/login | No | N/A | N/A |
| multi-tenant | No | N/A | N/A |
| notificaciones | No | N/A | N/A |
**Resultado:** No aplica catálogo
---
## 🎯 OBJETIVO
Corregir la visualización de datos en la página `/teacher/reviews` para que muestre correctamente la información del estudiante, ejercicio y fecha de envío.
**Criterios de Aceptación:**
- [x] El título del ejercicio se muestra correctamente
- [x] El módulo del ejercicio se muestra correctamente
- [x] El nombre del estudiante se muestra correctamente
- [x] La fecha de envío es la del submission, no del review
- [x] El detalle del review muestra los mismos datos correctamente
---
## 📋 ANÁLISIS PREVIO
### Contexto
La página de revisiones del docente muestra fallbacks ("Sin título", "Desconocido") porque el backend no retorna datos enriquecidos de student y exercise.
### Estado Actual
- ManualReviewService retorna reviews con relación `submission` pero sin datos de `student` ni `exercise`
- Frontend espera campos `student.name`, `exercise.title`, `exercise.moduleId` poblados
- Arquitectura cross-database impide JOINs TypeORM entre schemas
### Anti-Duplicación
```bash
# Comandos ejecutados para verificar no-duplicación
grep -rn "enrichReview" apps/backend/src/
# Resultado: No existe función de enriquecimiento previa
```
---
## 📐 DISEÑO DE SOLUCIÓN
### Approach Seleccionado
Inyectar repositorios de Profile y Exercise en ManualReviewService, crear métodos helper para enriquecimiento batch y individual, y modificar los métodos de consulta existentes para usar estos helpers.
### Componentes a Crear/Modificar
**Database:**
- [x] Trigger: 17-trg_create_manual_review_on_update.sql (nuevo - AFTER UPDATE)
- [x] Script: fix-missing-manual-reviews.sql (migración datos existentes)
**Backend:**
- [x] Interface: EnrichedManualReview
- [x] Method: enrichReview (individual)
- [x] Method: enrichReviews (batch)
- [x] Modify: findPendingReviews
- [x] Modify: findById
- [x] Modify: findByTeacher
**Frontend:**
- [x] Interface: ManualReview.exercise (agregar type)
- [x] Interface: ManualReview.submission (agregar submitted_at)
- [x] Component: ReviewList (usar fecha correcta)
- [x] Component: ReviewDetail (usar fecha correcta, fallback email)
---
## 🔄 CICLOS DE EJECUCIÓN
### Ciclo 1: Modificaciones Backend
**Duración estimada:** 1.5 horas
**Objetivo:** Enriquecer datos de reviews en el servicio
**Tareas:**
1. Importar entidades Profile y Exercise
2. Inyectar repositorios profileRepo y exerciseRepo
3. Crear interface EnrichedManualReview
4. Crear método enrichReview() para enriquecimiento individual
5. Crear método enrichReviews() para enriquecimiento batch
6. Modificar findPendingReviews() para enriquecer reviews
7. Modificar findById() para enriquecer review
8. Modificar findByTeacher() para enriquecer reviews
**Artefactos generados:**
- apps/backend/src/modules/teacher/services/manual-review.service.ts (modificado)
**Validación:**
```bash
cd apps/backend && npx tsc --noEmit --skipLibCheck
# Debe compilar sin errores
```
**Criterios de éxito:**
- [x] Compilación exitosa
- [x] Interface EnrichedManualReview definida
- [x] Métodos de enriquecimiento implementados
---
### Ciclo 2: Modificaciones Frontend
**Duración estimada:** 45 minutos
**Objetivo:** Actualizar interfaces y componentes
**Tareas:**
1. Actualizar interface ManualReview en manualReviewApi.ts
2. Agregar campos exercise.type, exercise.exercise_type
3. Agregar campos submission.submittedAt, submission.submitted_at
4. Modificar ReviewList para usar fecha de submission
5. Modificar ReviewDetail para usar fecha de submission
6. Agregar fallback para email del estudiante
**Artefactos generados:**
- apps/frontend/src/shared/api/manualReviewApi.ts (modificado)
- apps/frontend/src/apps/teacher/components/review-panel/ReviewList.tsx (modificado)
- apps/frontend/src/apps/teacher/components/review-panel/ReviewDetail.tsx (modificado)
**Validación:**
```bash
cd apps/frontend && npx tsc --noEmit --skipLibCheck 2>&1 | grep -E "(ReviewList|ReviewDetail|manualReviewApi)"
# No debe haber errores en estos archivos
```
**Criterios de éxito:**
- [x] Compilación de archivos modificados sin errores
- [x] Interfaces actualizadas con campos necesarios
---
### Ciclo 3: Validación Final
**Duración estimada:** 30 minutos
**Objetivo:** Validar integración completa
**Validaciones:**
```bash
# Backend
cd apps/backend && npm run build
# Debe compilar sin errores
# Frontend (archivos modificados)
cd apps/frontend && npx tsc --noEmit --skipLibCheck 2>&1 | grep -E "(ReviewList|ReviewDetail|manualReviewApi)"
# No debe haber errores
```
**Checklist de Validación:**
- [x] Backend compila sin errores
- [x] Frontend (archivos modificados) compila sin errores
- [x] Documentación actualizada
- [x] Inventarios actualizados (N/A - no requiere cambios en inventarios de configuración)
- [x] Sin errores de compilación en archivos modificados
- [x] Sin duplicaciones creadas
- [x] Cumple estándares de código
---
## 🔗 DEPENDENCIAS
### Depende de:
- Ninguna
### Bloquea:
- Ninguna
### Requerimientos externos:
- Ninguno
---
## ⚠️ RIESGOS IDENTIFICADOS
| Riesgo | Probabilidad | Impacto | Mitigación |
|--------|-------------|---------|------------|
| Performance con queries adicionales | Media | Bajo | Usar batch queries con IN clause |
| Incompatibilidad de nombres de campos (snake_case vs camelCase) | Media | Medio | Soportar ambos formatos en interface |
---
## 📊 ESTIMACIONES
**Tiempo total estimado:** 4 horas
**Desglose:**
- Análisis: 1h
- Desarrollo Backend: 1.5h
- Desarrollo Frontend: 0.5h
- Testing: 0.5h
- Documentación: 0.5h
**Recursos necesarios:**
- Agentes: Backend-Agent, Frontend-Agent
- Herramientas: TypeScript, TypeORM, React
---
## 📝 DOCUMENTACIÓN A GENERAR
**Durante ejecución:**
- [x] Comentarios inline con tag FIX BUG-TEACHER-REVIEWS-002
**Post-ejecución:**
- [x] ANALISIS-BUG-TEACHER-REVIEWS-002-2026-01-08.md
- [x] PLAN-BUG-TEACHER-REVIEWS-002-2026-01-08.md
- [x] Actualización de MASTER_INVENTORY.yml (N/A - cambios de código, no de configuración)
---
## 🎯 CRITERIOS DE ÉXITO
La tarea se considera **COMPLETADA** cuando:
- [x] Backend compila sin errores
- [x] Frontend (archivos modificados) compila sin errores
- [x] Datos de student poblados correctamente
- [x] Datos de exercise poblados correctamente
- [x] Fecha de envío usa submitted_at del submission
- [x] Sin duplicaciones creadas
- [x] Cumple estándares de código
- [x] Documentación completa
---
## 📁 ARCHIVOS MODIFICADOS
### Database
| Archivo | Cambio | Ubicación |
|---------|--------|-----------|
| `17-trg_create_manual_review_on_update.sql` | Nuevo trigger AFTER UPDATE | ddl/schemas/progress_tracking/triggers/ |
| `fix-missing-manual-reviews.sql` | Script migración datos | scripts/ |
### Backend
| Archivo | Cambio | Líneas |
|---------|--------|--------|
| `manual-review.service.ts` | Import Profile, Exercise | 13-15 |
| `manual-review.service.ts` | Interface EnrichedManualReview | 61-77 |
| `manual-review.service.ts` | Inyección repositorios | 105-109 |
| `manual-review.service.ts` | Método enrichReview() | 117-168 |
| `manual-review.service.ts` | Método enrichReviews() | 170-239 |
| `manual-review.service.ts` | findPendingReviews() enriquece | 284-288, 319-323 |
| `manual-review.service.ts` | findById() retorna enriched | 660-681 |
| `manual-review.service.ts` | findByTeacher() retorna enriched | 683-711 |
### Frontend
| Archivo | Cambio | Líneas |
|---------|--------|--------|
| `manualReviewApi.ts` | exercise.type, exercise_type | 84-85 |
| `manualReviewApi.ts` | submission.submitted_at | 89 |
| `ReviewList.tsx` | Fecha usa submitted_at | 170-174 |
| `ReviewDetail.tsx` | Email con fallback | 164-170 |
| `ReviewDetail.tsx` | Fecha usa submitted_at | 173-180 |
---
## 📚 REFERENCIAS
**Documentación del proyecto:**
- Vista SQL: apps/database/ddl/schemas/progress_tracking/views/02-teacher_pending_reviews.sql
**Archivos de referencia:**
- Entity Profile: apps/backend/src/modules/auth/entities/profile.entity.ts
- Entity Exercise: apps/backend/src/modules/educational/entities/exercise.entity.ts
---
**Versión:** 1.0
**Última actualización:** 2026-01-08
**Estado:** COMPLETADO