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
8.6 KiB
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:
- El título del ejercicio se muestra correctamente
- El módulo del ejercicio se muestra correctamente
- El nombre del estudiante se muestra correctamente
- La fecha de envío es la del submission, no del review
- 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
submissionpero sin datos destudentniexercise - Frontend espera campos
student.name,exercise.title,exercise.moduleIdpoblados - Arquitectura cross-database impide JOINs TypeORM entre schemas
Anti-Duplicación
# 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:
- Trigger: 17-trg_create_manual_review_on_update.sql (nuevo - AFTER UPDATE)
- Script: fix-missing-manual-reviews.sql (migración datos existentes)
Backend:
- Interface: EnrichedManualReview
- Method: enrichReview (individual)
- Method: enrichReviews (batch)
- Modify: findPendingReviews
- Modify: findById
- Modify: findByTeacher
Frontend:
- Interface: ManualReview.exercise (agregar type)
- Interface: ManualReview.submission (agregar submitted_at)
- Component: ReviewList (usar fecha correcta)
- 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:
- Importar entidades Profile y Exercise
- Inyectar repositorios profileRepo y exerciseRepo
- Crear interface EnrichedManualReview
- Crear método enrichReview() para enriquecimiento individual
- Crear método enrichReviews() para enriquecimiento batch
- Modificar findPendingReviews() para enriquecer reviews
- Modificar findById() para enriquecer review
- Modificar findByTeacher() para enriquecer reviews
Artefactos generados:
- apps/backend/src/modules/teacher/services/manual-review.service.ts (modificado)
Validación:
cd apps/backend && npx tsc --noEmit --skipLibCheck
# Debe compilar sin errores
Criterios de éxito:
- Compilación exitosa
- Interface EnrichedManualReview definida
- Métodos de enriquecimiento implementados
Ciclo 2: Modificaciones Frontend
Duración estimada: 45 minutos Objetivo: Actualizar interfaces y componentes
Tareas:
- Actualizar interface ManualReview en manualReviewApi.ts
- Agregar campos exercise.type, exercise.exercise_type
- Agregar campos submission.submittedAt, submission.submitted_at
- Modificar ReviewList para usar fecha de submission
- Modificar ReviewDetail para usar fecha de submission
- 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:
cd apps/frontend && npx tsc --noEmit --skipLibCheck 2>&1 | grep -E "(ReviewList|ReviewDetail|manualReviewApi)"
# No debe haber errores en estos archivos
Criterios de éxito:
- Compilación de archivos modificados sin errores
- Interfaces actualizadas con campos necesarios
Ciclo 3: Validación Final
Duración estimada: 30 minutos Objetivo: Validar integración completa
Validaciones:
# 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:
- Backend compila sin errores
- Frontend (archivos modificados) compila sin errores
- Documentación actualizada
- Inventarios actualizados (N/A - no requiere cambios en inventarios de configuración)
- Sin errores de compilación en archivos modificados
- Sin duplicaciones creadas
- 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:
- Comentarios inline con tag FIX BUG-TEACHER-REVIEWS-002
Post-ejecución:
- ANALISIS-BUG-TEACHER-REVIEWS-002-2026-01-08.md
- PLAN-BUG-TEACHER-REVIEWS-002-2026-01-08.md
- 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:
- Backend compila sin errores
- Frontend (archivos modificados) compila sin errores
- Datos de student poblados correctamente
- Datos de exercise poblados correctamente
- Fecha de envío usa submitted_at del submission
- Sin duplicaciones creadas
- Cumple estándares de código
- 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