# FASE 3: Plan de Implementaciones y Correcciones **Fecha:** 2025-12-23 **Proyecto:** Gamilit - Portal Admin **Fase:** Planeación de Implementaciones --- ## 1. PRIORIZACIÓN DE CORRECCIONES ### Sprint 1: Correcciones Críticas (P0) | ID | Problema | Archivo | Línea | Corrección Propuesta | |----|----------|---------|-------|---------------------| | CRIT-001 | Mapeo incorrecto de campos de usuario | `useUserManagement.ts` | 122-135 | Verificar estructura backend y ajustar transformación | | CRIT-002 | Error handling sin validación de tipo | `AdminReportsPage.tsx` | 88 | Usar `err instanceof Error ? err.message : String(err)` | | CRIT-003 | Diálogo confirm() en inglés | `FeatureFlagsPanel.tsx` | 85 | Crear ConfirmDialog en español | | CRIT-004 | ABTestingDashboard vacío | `AdminAdvancedPage.tsx` | 94 | Mostrar "Under Construction" o implementar | | CRIT-005 | Funciones mock en useSettings | `useSettings.ts` | 183,230,262 | Implementar endpoints backend o marcar como deprecated | ### Sprint 2: Correcciones Altas (P1) | ID | Problema | Archivo | Corrección Propuesta | |----|----------|---------|---------------------| | HIGH-001 | Dependencia circular en filtros | `useUserManagement.ts` | Refactorizar useCallback sin filters como dependencia | | HIGH-002 | Mapeo inconsistente de campos | `useOrganizations.ts` | Estandarizar nombres (usar solo `plan`, `userCount`) | | HIGH-003 | Sin validación de fechas | `ReportGenerationForm.tsx` | Agregar validación con date-fns | | HIGH-004 | Filtro pierde limit | `AdminAssignmentsPage.tsx` | Corregir merge de filtros | | HIGH-005 | SHOW_CONTENT hardcodeado | `AdminAdvancedPage.tsx` | Usar feature flag del backend | ### Sprint 3: Correcciones Medias (P2) #### Grupo A: Error Handling y Feedback | ID | Problema | Archivo | |----|----------|---------| | MED-003 | Falta feedback de guardado | `AdminRolesPage.tsx` | | MED-007 | fetchMetrics no actualiza error | `useMonitoring.ts` | | MED-009 | Errores silenciados en analytics | `useAnalytics.ts` | | MED-011 | Error handling silenciado | `AdminAssignmentsPage.tsx` | #### Grupo B: UI/UX Improvements | ID | Problema | Archivo | |----|----------|---------| | MED-004 | Placeholder vista previa ejercicio | `AdminContentPage.tsx` | | MED-005 | PreviewImpactDialog incompleto | `AdminGamificationPage.tsx` | | MED-006 | Usuarios hardcodeado (1250) | `AdminGamificationPage.tsx` | | MED-013 | Stats cards en inglés | `AdminAdvancedPage.tsx` | #### Grupo C: Data & Performance | ID | Problema | Archivo | |----|----------|---------| | MED-001 | Campos null en dashboard | `AdminDashboardPage.tsx` | | MED-008 | Parámetros hardcodeados | `useAnalytics.ts` | | MED-010 | Sin timeout en descargas | `AdminReportsPage.tsx` | | MED-014 | Sin caching en FeatureFlags | `FeatureFlagsPanel.tsx` | ### Sprint 4: Correcciones Bajas (P3) | ID | Problema | Archivo | |----|----------|---------| | LOW-001 | Auto-refresh agresivo | `useAdminDashboard.ts` | | LOW-002 | Roles hardcodeados | `useRoles.ts` | | LOW-004 | Typos en mensajes | Múltiples archivos | | LOW-005 | Tipo `any` en hook | `useSystemMetrics.ts` | | LOW-009 | Inconsistencia duración toast | Múltiples archivos | --- ## 2. DETALLE DE IMPLEMENTACIONES ### 2.1 CRIT-001: Mapeo de Campos de Usuario **Archivo:** `/apps/frontend/src/apps/admin/hooks/useUserManagement.ts` **Líneas:** 122-135 **Código Actual:** ```typescript const metadata = (user as any).metadata || (user as any).raw_user_meta_data || {}; const fullName = metadata.full_name || metadata.display_name || user.name || user.email; ``` **Código Propuesto:** ```typescript interface UserMetadata { full_name?: string; display_name?: string; avatar_url?: string; } const getUserMetadata = (user: any): UserMetadata => { // El backend devuelve raw_user_meta_data return user.raw_user_meta_data || user.metadata || {}; }; const getDisplayName = (user: any, metadata: UserMetadata): string => { return metadata.full_name || metadata.display_name || user.name || user.email?.split('@')[0] || 'Usuario'; }; ``` **Dependencias:** Ninguna **Impacto:** Solo useUserManagement.ts --- ### 2.2 CRIT-002: Error Handling en Reports **Archivo:** `/apps/frontend/src/apps/admin/pages/AdminReportsPage.tsx` **Línea:** 88 **Código Actual:** ```typescript } catch (err: unknown) { setToast({ type: 'error', message: err.message || 'Error al generar reporte', }); } ``` **Código Propuesto:** ```typescript } catch (err: unknown) { const errorMessage = err instanceof Error ? err.message : typeof err === 'string' ? err : 'Error al generar reporte'; setToast({ type: 'error', message: errorMessage, }); } ``` **Dependencias:** Ninguna **Impacto:** Solo AdminReportsPage.tsx --- ### 2.3 CRIT-003: ConfirmDialog en Español **Archivo:** `/apps/frontend/src/apps/admin/components/advanced/FeatureFlagsPanel.tsx` **Línea:** 85 **Código Actual:** ```typescript if (confirm('Are you sure you want to delete this feature flag?')) { ``` **Código Propuesto:** ```typescript // Opción A: Crear componente ConfirmDialog const [confirmDelete, setConfirmDelete] = useState(null); // En el render: {confirmDelete && ( { handleDeleteFlag(confirmDelete); setConfirmDelete(null); }} onCancel={() => setConfirmDelete(null)} variant="danger" /> )} // Opción B: Usar confirm nativo con español if (window.confirm('¿Estás seguro de eliminar este feature flag? Esta acción no se puede deshacer.')) { ``` **Dependencias:** Crear ConfirmDialog si no existe **Impacto:** FeatureFlagsPanel.tsx, posible nuevo componente --- ### 2.4 CRIT-004: ABTestingDashboard **Archivo:** `/apps/frontend/src/apps/admin/pages/AdminAdvancedPage.tsx` **Línea:** 94 **Opciones:** **Opción A: Mostrar Under Construction** ```typescript {activeTab === 'ab-testing' && ( )} ``` **Opción B: Implementar MVP básico** ```typescript // Ver componente ABTestingDashboard para implementación ``` **Decisión Recomendada:** Opción A (mostrar Under Construction) dado que está planificado para Q2 2026. **Dependencias:** Ninguna **Impacto:** AdminAdvancedPage.tsx --- ### 2.5 CRIT-005: useSettings Mock Functions **Archivo:** `/apps/frontend/src/apps/admin/hooks/useSettings.ts` **Líneas:** 183, 230, 262 **Estado Actual:** - `sendTestEmail` usa setTimeout (mock) - `createBackup` usa setTimeout (mock) - `clearCache` usa setTimeout (mock) **Opciones:** **Opción A: Marcar como deprecated y eliminar** ```typescript /** * @deprecated Este hook contiene funciones sin implementar. * Use useSystemConfig para configuración. * Las funciones de email, backup y cache requieren endpoints backend. */ export const useSettings = () => { console.warn('[useSettings] Este hook está deprecado. Use useSystemConfig.'); // ... } ``` **Opción B: Implementar endpoints backend** Requiere: - `POST /admin/system/test-email` - `POST /admin/system/backup` - `POST /admin/system/clear-cache` **Decisión Recomendada:** Opción A para MVP, implementar backend en futura iteración. **Dependencias:** Backend si se implementa Opción B **Impacto:** useSettings.ts, AdminSettingsPage.tsx si se usa --- ## 3. ORDEN DE IMPLEMENTACIÓN RECOMENDADO ``` Semana 1 (Críticos): ├── CRIT-002: Error handling (1h) ├── CRIT-003: ConfirmDialog español (2h) ├── CRIT-004: ABTestingDashboard placeholder (1h) ├── CRIT-001: Mapeo usuarios (2h) └── CRIT-005: Deprecar useSettings (1h) Semana 2 (Altos): ├── HIGH-002: Estandarizar campos (2h) ├── HIGH-004: Fix filtros assignments (1h) ├── HIGH-001: Refactor dependencias (3h) ├── HIGH-003: Validación fechas (2h) └── HIGH-005: Feature flag dinámico (2h) Semana 3 (Medios - Grupo A y B): ├── MED-003: Feedback guardado roles (1h) ├── MED-007: Fix error monitoring (1h) ├── MED-004: Vista previa ejercicio (3h) ├── MED-005: PreviewImpactDialog (2h) └── MED-006: Obtener totalUsers de API (1h) Semana 4 (Medios - Grupo C y Bajos): ├── MED-008: Parametrizar analytics (2h) ├── MED-010: Timeout descargas (1h) ├── LOW-004: Fix typos (1h) ├── LOW-009: Estandarizar toast (1h) └── Cleanup y testing ``` --- ## 4. ARCHIVOS A MODIFICAR POR SPRINT ### Sprint 1 (5 archivos) - `apps/frontend/src/apps/admin/hooks/useUserManagement.ts` - `apps/frontend/src/apps/admin/pages/AdminReportsPage.tsx` - `apps/frontend/src/apps/admin/components/advanced/FeatureFlagsPanel.tsx` - `apps/frontend/src/apps/admin/pages/AdminAdvancedPage.tsx` - `apps/frontend/src/apps/admin/hooks/useSettings.ts` ### Sprint 2 (5 archivos) - `apps/frontend/src/apps/admin/hooks/useOrganizations.ts` - `apps/frontend/src/apps/admin/pages/AdminAssignmentsPage.tsx` - `apps/frontend/src/apps/admin/components/reports/ReportGenerationForm.tsx` - `apps/frontend/src/apps/admin/hooks/useUserManagement.ts` - `apps/frontend/src/apps/admin/pages/AdminAdvancedPage.tsx` ### Sprint 3 (8 archivos) - `apps/frontend/src/apps/admin/pages/AdminRolesPage.tsx` - `apps/frontend/src/apps/admin/hooks/useMonitoring.ts` - `apps/frontend/src/apps/admin/hooks/useAnalytics.ts` - `apps/frontend/src/apps/admin/pages/AdminContentPage.tsx` - `apps/frontend/src/apps/admin/pages/AdminGamificationPage.tsx` - `apps/frontend/src/apps/admin/pages/AdminDashboardPage.tsx` - `apps/frontend/src/apps/admin/pages/AdminReportsPage.tsx` - `apps/frontend/src/apps/admin/components/advanced/FeatureFlagsPanel.tsx` ### Sprint 4 (5+ archivos) - `apps/frontend/src/apps/admin/hooks/useAdminDashboard.ts` - `apps/frontend/src/apps/admin/hooks/useRoles.ts` - `apps/frontend/src/apps/admin/hooks/useSystemMetrics.ts` - Múltiples archivos para typos y toast --- ## 5. COMPONENTES NUEVOS A CREAR ### ConfirmDialog (Opcional) Si no existe, crear componente reutilizable: ```typescript // apps/frontend/src/shared/components/ConfirmDialog.tsx interface ConfirmDialogProps { isOpen: boolean; title: string; message: string; confirmText?: string; cancelText?: string; onConfirm: () => void; onCancel: () => void; variant?: 'danger' | 'warning' | 'info'; } ``` ### ExercisePreviewComponent Para vista previa de ejercicios en AdminContentPage: ```typescript // apps/frontend/src/apps/admin/components/content/ExercisePreview.tsx interface ExercisePreviewProps { exercise: Exercise; type: ExerciseType; } ``` --- ## 6. TESTS A AGREGAR ### Unit Tests Prioritarios 1. **useUserManagement**: Test de transformación de campos 2. **useRolePermissions**: Test de transformPermissionsFromBackend 3. **useAnalytics**: Test de manejo de errores 4. **ConfirmDialog**: Tests de comportamiento ### Integration Tests 1. **AdminUsersPage**: Flujo CRUD completo 2. **AdminReportsPage**: Generación y descarga de reportes 3. **AdminGamificationPage**: Cambio de parámetros con preview --- ## 7. MÉTRICAS DE ÉXITO | Métrica | Antes | Después | |---------|-------|---------| | Problemas Críticos | 5 | 0 | | Problemas Altos | 5 | 0 | | Cobertura de Tests | ~0% | >60% | | Errores en Consola | Varios | 0 | | Consistencia UI | ~80% | 100% | --- ## 8. RIESGOS Y MITIGACIÓN | Riesgo | Probabilidad | Impacto | Mitigación | |--------|--------------|---------|------------| | Cambio en estructura backend | Media | Alto | Validar estructura antes de implementar | | Regresión en funcionalidades | Media | Alto | Tests antes de merge | | Conflictos de merge | Baja | Medio | PRs pequeños y frecuentes | | Tiempo insuficiente | Media | Medio | Priorizar críticos y altos | --- ## 9. CONCLUSIÓN El plan de implementación está estructurado en 4 sprints con: - **Sprint 1**: 5 correcciones críticas (~7h) - **Sprint 2**: 5 correcciones altas (~10h) - **Sprint 3**: 8 correcciones medias (~9h) - **Sprint 4**: 5+ correcciones bajas + cleanup (~5h) **Tiempo total estimado:** ~31 horas de desarrollo **Próximo paso:** FASE 4 - Validación de dependencias y objetos impactados