Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Gamilit: - Backend: Teacher services, assignments, gamification, exercise submissions - Frontend: Admin/Teacher/Student portals, module 4-5 mechanics, monitoring - Database: DDL functions, seeds for dev/prod, auth/gamification schemas - Docs: Architecture, features, guides cleanup and reorganization Core/Orchestration: - New workspace directives index - Documentation directive Trading-platform: - Database seeds and inventory updates - Tech leader validation report 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
538 lines
14 KiB
Markdown
538 lines
14 KiB
Markdown
# ANALISIS FASE 6 - TAREAS OPCIONALES
|
|
## Portal Admin y Rutas Legacy
|
|
|
|
**Fecha:** 2025-12-15
|
|
**Version:** 1.0
|
|
**Estado:** ANALISIS COMPLETADO
|
|
|
|
---
|
|
|
|
## 1. RESUMEN EJECUTIVO
|
|
|
|
### 1.1 Hallazgos Principales
|
|
|
|
```yaml
|
|
Portal_Admin:
|
|
total_paginas: 15
|
|
estado_completitud: 93% (14 completas, 1 parcial)
|
|
|
|
duplicidades_detectadas:
|
|
critica:
|
|
- AdminAlertsPage vs AlertasTab en AdminMonitoringPage
|
|
- Solapamiento: 60-70% en componentes UI
|
|
- Recomendacion: NO FUSIONAR, SI REUTILIZAR COMPONENTES
|
|
|
|
media:
|
|
- AdminAnalyticsPage vs AdminProgressPage
|
|
- Solapamiento: Metricas de engagement
|
|
- Recomendacion: MANTENER SEPARADAS (responsabilidades distintas)
|
|
|
|
Rutas_Legacy_Teacher:
|
|
total_rutas: 5
|
|
estados:
|
|
- /teacher/students: FUNCIONAL (100%)
|
|
- /teacher/analytics: FUNCIONAL (100%)
|
|
- /teacher/communication: DESHABILITADA (feature flag)
|
|
- /teacher/content: DESHABILITADA (feature flag)
|
|
- /teacher/resources: PLACEHOLDER (0% implementado)
|
|
|
|
recomendacion: MANTENER 4, REDIRIGIR 1 (resources)
|
|
```
|
|
|
|
---
|
|
|
|
## 2. INVENTARIO PORTAL ADMIN
|
|
|
|
### 2.1 Paginas Completas (14)
|
|
|
|
| # | Pagina | Ruta | Estado | Prioridad |
|
|
|---|--------|------|--------|-----------|
|
|
| 1 | AdminDashboardPage | /admin/dashboard | COMPLETO | CRITICO |
|
|
| 2 | AdminAlertsPage | /admin/alerts | COMPLETO | ALTO |
|
|
| 3 | AdminMonitoringPage | /admin/monitoring | COMPLETO | CRITICO |
|
|
| 4 | AdminAnalyticsPage | /admin/analytics | COMPLETO | ALTO |
|
|
| 5 | AdminProgressPage | /admin/progress | COMPLETO | ALTO |
|
|
| 6 | AdminUsersPage | /admin/users | COMPLETO | CRITICO |
|
|
| 7 | AdminInstitutionsPage | /admin/institutions | COMPLETO | ALTO |
|
|
| 8 | AdminRolesPage | /admin/roles | COMPLETO | ALTO |
|
|
| 9 | AdminContentPage | /admin/content | COMPLETO | ALTO |
|
|
| 10 | AdminGamificationPage | /admin/gamification | COMPLETO | CRITICO |
|
|
| 11 | AdminReportsPage | /admin/reports | COMPLETO | MEDIO |
|
|
| 12 | AdminSettingsPage | /admin/settings | COMPLETO | ALTO |
|
|
| 13 | AdminClassroomTeacherPage | /admin/classroom-teachers | COMPLETO | MEDIO |
|
|
| 14 | AdminAssignmentsPage | /admin/assignments | COMPLETO | ALTO |
|
|
|
|
### 2.2 Paginas Parciales (1)
|
|
|
|
| # | Pagina | Ruta | Estado | Notas |
|
|
|---|--------|------|--------|-------|
|
|
| 15 | AdminAdvancedPage | /admin/advanced | PARCIAL | Feature Flags implementado, A/B Testing basico, Tenant y Economic placeholders |
|
|
|
|
---
|
|
|
|
## 3. ANALISIS DE DUPLICIDADES
|
|
|
|
### 3.1 CRITICA: AdminAlertsPage vs AlertasTab
|
|
|
|
```yaml
|
|
Contexto:
|
|
AdminAlertsPage:
|
|
ubicacion: /apps/admin/pages/AdminAlertsPage.tsx
|
|
lineas: 215
|
|
proposito: Gestion completa de alertas del sistema
|
|
|
|
AlertasTab:
|
|
ubicacion: /apps/admin/components/monitoring/AlertasTab.tsx
|
|
lineas: 362
|
|
proposito: Vista rapida de alertas dentro de Monitoring
|
|
|
|
Solapamiento_Identificado:
|
|
componentes_duplicados:
|
|
- Stats cards (4 tarjetas identicas)
|
|
- Severity colors (getSeverityColor)
|
|
- Status colors (getStatusColor)
|
|
- Timestamp formatting (formatTimestamp)
|
|
- Alert card rendering
|
|
|
|
porcentaje_duplicacion: 60-70%
|
|
|
|
hooks_compartidos:
|
|
- useAlerts (mismo hook, mismos endpoints)
|
|
|
|
Funcionalidades_Unicas_AlertsPage:
|
|
- Suppress Alert Action
|
|
- Modales especializados (Details, Acknowledge, Resolve)
|
|
- Filtros avanzados (status, severity, type, module, dateRange)
|
|
- Paginacion completa
|
|
- Seleccion persistente de alerta
|
|
- Historial de changelog
|
|
|
|
Funcionalidades_Unicas_Monitoring:
|
|
- Logs Viewer
|
|
- Metricas del sistema (CPU, memoria, procesos)
|
|
- Error Tracking
|
|
- Tendencias de errores
|
|
- Dashboard de salud del sistema
|
|
|
|
Decision:
|
|
fusionar: NO
|
|
razon: |
|
|
Responsabilidades diferentes:
|
|
- AdminAlertsPage = herramienta especializada de alertas
|
|
- AdminMonitoringPage = dashboard de monitoreo general
|
|
Fusionarlas crearia una pagina demasiado compleja.
|
|
|
|
accion: REUTILIZAR COMPONENTES
|
|
componentes_a_compartir:
|
|
- AlertsStats (ya es puro)
|
|
- AlertCard (agregar variante 'compact')
|
|
- alertUtils.ts (nuevo, funciones compartidas)
|
|
```
|
|
|
|
### 3.2 MEDIA: AdminAnalyticsPage vs AdminProgressPage
|
|
|
|
```yaml
|
|
Contexto:
|
|
AdminAnalyticsPage:
|
|
proposito: Analisis de patrones y tendencias
|
|
tabs: Overview, Engagement, Gamification, Retention
|
|
|
|
AdminProgressPage:
|
|
proposito: Seguimiento individual de estudiantes
|
|
views: Overview, Classrooms, Students
|
|
|
|
Solapamiento:
|
|
- Ambas muestran metricas de engagement
|
|
- Ambas tienen exportacion CSV
|
|
- Comparten algunos endpoints
|
|
|
|
Decision:
|
|
fusionar: NO
|
|
razon: |
|
|
Perspectivas diferentes:
|
|
- Analytics = insights a nivel empresa/sistema
|
|
- Progress = tracking individual/classroom
|
|
|
|
accion: MANTENER SEPARADAS
|
|
nota: Podrian compartir utilities pero no es critico
|
|
```
|
|
|
|
---
|
|
|
|
## 4. ANALISIS RUTAS LEGACY TEACHER
|
|
|
|
### 4.1 Matriz de Evaluacion
|
|
|
|
| Ruta | Funcionalidad | Usuarios | Impacto Redirect | Decision |
|
|
|------|---------------|----------|------------------|----------|
|
|
| /teacher/students | 100% | Posible | MEDIO | MANTENER |
|
|
| /teacher/analytics | 100% | Probable | MEDIO | MANTENER |
|
|
| /teacher/communication | 0% (flag) | Ninguno | BAJO | MANTENER (Fase 2) |
|
|
| /teacher/content | 0% (flag) | Ninguno | BAJO | MANTENER (Fase 2) |
|
|
| /teacher/resources | 0% | Ninguno | MUY BAJO | REDIRIGIR |
|
|
|
|
### 4.2 Detalle por Ruta
|
|
|
|
```yaml
|
|
/teacher/students:
|
|
componente: TeacherStudentsPage -> TeacherStudents
|
|
estado: FUNCIONAL COMPLETO
|
|
funcionalidades:
|
|
- Tabla de estudiantes con filtros
|
|
- Busqueda por nombre
|
|
- Filtros por clase y desempeno
|
|
- Ordenamiento dinamico
|
|
- Modal de detalle
|
|
api: classroomsApi.getClassroomStudents() [REAL]
|
|
decision: MANTENER
|
|
razon: |
|
|
Funcionalidad diferente a Monitoring.
|
|
Monitoring = tiempo real, Students = tabla detallada.
|
|
Usuarios pueden tener bookmarks.
|
|
|
|
/teacher/analytics:
|
|
componente: TeacherAnalyticsPage -> TeacherAnalytics
|
|
estado: FUNCIONAL COMPLETO
|
|
funcionalidades:
|
|
- Graficos de barras (Chart.js)
|
|
- Tabs: Overview, Performance, Engagement
|
|
- Rango de fechas dinamico
|
|
- Selector de aula
|
|
- Descarga de reportes
|
|
api: analyticsApi, engagementApi [REAL]
|
|
decision: MANTENER
|
|
razon: |
|
|
Diferente de Progress (que ahora tiene tab Engagement).
|
|
Analytics tiene graficos mas detallados.
|
|
Considerar agregar a sidebar en futuro.
|
|
|
|
/teacher/communication:
|
|
componente: TeacherCommunicationPage
|
|
estado: DESHABILITADA (SHOW_UNDER_CONSTRUCTION = true)
|
|
feature_flag_linea: 39
|
|
funcionalidades_cuando_habilitada:
|
|
- Bandeja de entrada de mensajes
|
|
- Conversaciones agrupadas
|
|
- Anuncios a clases
|
|
- Feedback privado a estudiantes
|
|
decision: MANTENER
|
|
razon: Codigo completo para Fase 2
|
|
|
|
/teacher/content:
|
|
componente: TeacherContentPage
|
|
estado: DESHABILITADA (SHOW_UNDER_CONSTRUCTION = true)
|
|
feature_flag_linea: 10
|
|
funcionalidades_cuando_habilitada:
|
|
- CRUD completo de contenido
|
|
- Clonar contenido
|
|
- Publicar contenido
|
|
- Filtros y busqueda
|
|
decision: MANTENER
|
|
razon: Codigo completo para Fase 2
|
|
|
|
/teacher/resources:
|
|
componente: TeacherResourcesPage
|
|
estado: PLACEHOLDER (nunca implementado)
|
|
funcionalidades: NINGUNA (solo UnderConstruction)
|
|
decision: REDIRIGIR a /teacher/dashboard
|
|
razon: |
|
|
Zero funcionalidad implementada.
|
|
Nunca estuvo en sidebar.
|
|
No hay usuarios afectados.
|
|
Limpia codigo innecesario.
|
|
```
|
|
|
|
---
|
|
|
|
## 5. DECISION DE ARQUITECTURA
|
|
|
|
### 5.1 NO Fusionar AdminAlerts con AdminMonitoring
|
|
|
|
```yaml
|
|
Razon_Principal: Responsabilidades diferentes
|
|
|
|
AdminAlertsPage:
|
|
responsabilidad: Herramienta especializada de gestion de alertas
|
|
usuarios_objetivo: Administradores que gestionan incidentes
|
|
flujo_trabajo:
|
|
- Revisar alertas pendientes
|
|
- Filtrar por severidad/estado
|
|
- Acknowledge con notas
|
|
- Resolve con resolucion detallada
|
|
- Suppress alertas irrelevantes
|
|
- Exportar historico
|
|
|
|
AdminMonitoringPage:
|
|
responsabilidad: Dashboard de estado del sistema
|
|
usuarios_objetivo: Administradores monitoreando salud general
|
|
flujo_trabajo:
|
|
- Ver logs de auditoria
|
|
- Monitorear metricas CPU/memoria
|
|
- Revisar errores recientes
|
|
- Vista rapida de alertas (ultimas 10)
|
|
- Navegar a Alerts para gestion completa
|
|
|
|
Conclusion:
|
|
- Fusionar crearia pagina compleja con dos propositos
|
|
- Mejor mantener separadas con componentes compartidos
|
|
- AlertasTab es "preview" que lleva a pagina completa
|
|
```
|
|
|
|
### 5.2 SI Reutilizar Componentes
|
|
|
|
```yaml
|
|
Componentes_a_Compartir:
|
|
|
|
AlertsStats:
|
|
ubicacion: /components/alerts/AlertsStats.tsx
|
|
estado: YA ES PURO (solo props)
|
|
cambios_necesarios: NINGUNO
|
|
|
|
AlertCard:
|
|
ubicacion: /components/alerts/AlertCard.tsx
|
|
estado: Necesita variante
|
|
cambios_necesarios:
|
|
- Agregar prop variant: 'full' | 'compact'
|
|
- Renderizado condicional de botones
|
|
- Lineas estimadas: +20
|
|
|
|
alertUtils.ts:
|
|
ubicacion: /components/alerts/alertUtils.ts (NUEVO)
|
|
exports:
|
|
- getSeverityColor(severity)
|
|
- getStatusColor(status)
|
|
- getSeverityLabel(severity)
|
|
- getStatusLabel(status)
|
|
- formatTimestamp(timestamp)
|
|
lineas_estimadas: 50
|
|
|
|
Beneficios:
|
|
- Reduce 280+ lineas de codigo duplicado
|
|
- Consistencia visual garantizada
|
|
- Mantenimiento centralizado
|
|
- Menor riesgo de bugs
|
|
```
|
|
|
|
---
|
|
|
|
## 6. PLAN DE IMPLEMENTACION PROPUESTO
|
|
|
|
### FASE 6A: Rutas Legacy y Documentacion (Bajo Riesgo)
|
|
|
|
```yaml
|
|
Alcance:
|
|
- Redirect /teacher/resources -> /teacher/dashboard
|
|
- Agregar comentarios de documentacion en App.tsx
|
|
- Actualizar inventarios
|
|
|
|
Archivos_a_Modificar:
|
|
- App.tsx (1 redirect + comentarios)
|
|
|
|
Tiempo_Estimado: 30 minutos
|
|
Riesgo: MUY BAJO
|
|
```
|
|
|
|
### FASE 6B: Refactor AlertasTab (Medio Riesgo)
|
|
|
|
```yaml
|
|
Alcance:
|
|
- Crear alertUtils.ts con funciones compartidas
|
|
- Agregar variante 'compact' a AlertCard
|
|
- Refactorizar AlertasTab para reutilizar componentes
|
|
|
|
Archivos_a_Modificar:
|
|
- /components/alerts/AlertCard.tsx
|
|
- /components/monitoring/AlertasTab.tsx
|
|
|
|
Archivos_a_Crear:
|
|
- /components/alerts/alertUtils.ts
|
|
|
|
Tiempo_Estimado: 2-3 horas
|
|
Riesgo: MEDIO (requiere pruebas de UI)
|
|
```
|
|
|
|
### FASE 6C: Sidebar Admin (Opcional - Bajo Riesgo)
|
|
|
|
```yaml
|
|
Alcance:
|
|
- Evaluar si AdminClassroomTeacher debe permanecer en sidebar
|
|
- Documentar estructura final del sidebar admin
|
|
|
|
Nota: El sidebar admin ya esta bien estructurado
|
|
Esta fase es solo documentacion/evaluacion
|
|
|
|
Tiempo_Estimado: 30 minutos
|
|
Riesgo: MUY BAJO
|
|
```
|
|
|
|
---
|
|
|
|
## 7. MATRIZ DE DEPENDENCIAS
|
|
|
|
### 7.1 AdminAlertsPage
|
|
|
|
```yaml
|
|
Importado_Por:
|
|
- App.tsx (ruta /admin/alerts)
|
|
- GamilitSidebar.tsx (navegacion)
|
|
|
|
Importa:
|
|
- AdminLayout
|
|
- AlertsStats, AlertFilters, AlertsList
|
|
- AlertDetailsModal, AcknowledgeAlertModal, ResolveAlertModal
|
|
- useAlerts hook
|
|
- useAuth, useUserGamification
|
|
|
|
APIs_Consumidas:
|
|
- GET /admin/alerts
|
|
- GET /admin/alerts/stats
|
|
- POST /admin/alerts/:id/acknowledge
|
|
- POST /admin/alerts/:id/resolve
|
|
- POST /admin/alerts/:id/suppress
|
|
```
|
|
|
|
### 7.2 AdminMonitoringPage
|
|
|
|
```yaml
|
|
Importado_Por:
|
|
- App.tsx (ruta /admin/monitoring)
|
|
- GamilitSidebar.tsx (navegacion)
|
|
|
|
Importa:
|
|
- AdminLayout
|
|
- LogsViewer, MetricsTab, ErrorTrackingTab, AlertasTab
|
|
- useAuth, useUserGamification
|
|
|
|
APIs_Consumidas:
|
|
- GET /admin/monitoring/metrics
|
|
- GET /admin/monitoring/errors/*
|
|
- GET /admin/logs
|
|
- (via AlertasTab) useAlerts APIs
|
|
```
|
|
|
|
### 7.3 AlertasTab
|
|
|
|
```yaml
|
|
Importado_Por:
|
|
- AdminMonitoringPage
|
|
|
|
Importa:
|
|
- DetectiveCard, DetectiveButton
|
|
- lucide-react icons
|
|
- useNavigate
|
|
|
|
APIs_Consumidas:
|
|
- Recibe datos via props (no llama APIs directamente)
|
|
|
|
Dependencias_Recibidas_Por_Props:
|
|
- alerts: SystemAlert[]
|
|
- stats: AlertsStats
|
|
- isLoading: boolean
|
|
- onRefresh, onAcknowledge, onResolve
|
|
```
|
|
|
|
---
|
|
|
|
## 8. INVENTARIO DE ARCHIVOS AFECTADOS
|
|
|
|
### FASE 6A
|
|
|
|
```yaml
|
|
Modificar:
|
|
- /apps/frontend/src/App.tsx
|
|
- Lineas: ~230 (agregar redirect)
|
|
- Cambio: Navigate para /teacher/resources
|
|
|
|
Sin_Cambios:
|
|
- TeacherStudentsPage.tsx
|
|
- TeacherAnalyticsPage.tsx
|
|
- TeacherCommunicationPage.tsx
|
|
- TeacherContentPage.tsx
|
|
- TeacherResourcesPage.tsx (mantener para referencia)
|
|
```
|
|
|
|
### FASE 6B
|
|
|
|
```yaml
|
|
Crear:
|
|
- /apps/admin/components/alerts/alertUtils.ts (NUEVO)
|
|
- Exports: getSeverityColor, getStatusColor, etc.
|
|
- Lineas: ~50
|
|
|
|
Modificar:
|
|
- /apps/admin/components/alerts/AlertCard.tsx
|
|
- Agregar prop variant
|
|
- Renderizado condicional
|
|
- Lineas cambiadas: ~30
|
|
|
|
- /apps/admin/components/monitoring/AlertasTab.tsx
|
|
- Importar alertUtils
|
|
- Importar AlertCard, AlertsStats
|
|
- Eliminar funciones duplicadas
|
|
- Refactorizar renderizado
|
|
- Lineas reducidas: ~200
|
|
|
|
Sin_Cambios:
|
|
- AdminAlertsPage.tsx
|
|
- AdminMonitoringPage.tsx
|
|
- useAlerts.ts
|
|
- AlertsStats.tsx
|
|
```
|
|
|
|
---
|
|
|
|
## 9. CRITERIOS DE ACEPTACION
|
|
|
|
### FASE 6A
|
|
|
|
- [ ] /teacher/resources redirige a /teacher/dashboard
|
|
- [ ] Otras rutas legacy siguen funcionando
|
|
- [ ] No hay errores en consola
|
|
- [ ] Comentarios de documentacion agregados en App.tsx
|
|
|
|
### FASE 6B
|
|
|
|
- [ ] alertUtils.ts creado con funciones exportadas
|
|
- [ ] AlertCard acepta prop variant
|
|
- [ ] AlertCard variant='compact' muestra menos botones
|
|
- [ ] AlertasTab usa AlertCard en lugar de renderizado inline
|
|
- [ ] AlertasTab usa AlertsStats en lugar de cards duplicadas
|
|
- [ ] UI de AlertasTab se ve identica (sin regresiones visuales)
|
|
- [ ] Funcionalidad acknowledge/resolve funciona desde AlertasTab
|
|
- [ ] Link "Ver todas las alertas" navega a /admin/alerts
|
|
|
|
---
|
|
|
|
## 10. ROLLBACK
|
|
|
|
### FASE 6A
|
|
|
|
```yaml
|
|
Revertir:
|
|
- Remover Navigate de App.tsx
|
|
- Restaurar Route original para /teacher/resources
|
|
Impacto: Minimo (solo 1 linea)
|
|
```
|
|
|
|
### FASE 6B
|
|
|
|
```yaml
|
|
Revertir:
|
|
- Restaurar AlertasTab.tsx original
|
|
- Eliminar alertUtils.ts
|
|
- Restaurar AlertCard.tsx original
|
|
|
|
Archivos_Backup_Recomendados:
|
|
- AlertasTab.tsx.bak
|
|
- AlertCard.tsx.bak
|
|
|
|
Impacto: Medio (3 archivos)
|
|
```
|
|
|
|
---
|
|
|
|
**Documento generado:** 2025-12-15
|
|
**Por:** Requirements-Analyst Agent
|
|
**Estado:** LISTO PARA ESPECIFICACIONES TECNICAS
|
|
|