workspace/projects/gamilit/orchestration/analisis-admin-portal-2025-12-23/FASE-3-PLAN-IMPLEMENTACIONES.md
rckrdmrd a249c99be2
Some checks failed
CI Pipeline / changes (push) Has been cancelled
CI Pipeline / core (push) Has been cancelled
CI Pipeline / trading-backend (push) Has been cancelled
CI Pipeline / trading-data-service (push) Has been cancelled
CI Pipeline / trading-frontend (push) Has been cancelled
CI Pipeline / erp-core (push) Has been cancelled
CI Pipeline / erp-mecanicas (push) Has been cancelled
CI Pipeline / gamilit-backend (push) Has been cancelled
CI Pipeline / gamilit-frontend (push) Has been cancelled
feat: Sincronizacion completa workspace 2025-12-26
## Backend
- fix(ranks): Reordenar rutas en RanksController para evitar conflictos 404
- feat(gamification): Agregar MayaRankEntity al modulo
- feat(ml-coins): Expandir funcionalidad del servicio
- feat(teacher): Mejoras en dashboard, mensajes y reportes
- feat(entities): Nuevas entidades admin, educational, progress, social

## Frontend
- feat(gamificationAPI): API completa para ranks con endpoints
- feat(RubricEvaluator): Nuevo componente para evaluacion docente
- refactor(admin): Mejoras en hooks y paginas
- refactor(teacher): Mejoras en paginas del portal

## Database
- fix(initialize_user_stats): Agregar is_current y achieved_at a user_ranks
- fix(notifications-policies): Corregir RLS con JOIN correcto
- feat(friendships): Agregar columna status con estados
- sync(seeds): Homologacion completa DEV <-> PROD

## Docs & Orchestration
- docs(api): Actualizar API-TEACHER-MODULE.md
- docs(frontend): COMPONENTES-INVENTARIO.md
- docs(database): VIEWS-INVENTARIO.md, VALIDACION-DDL-SEEDS
- Reportes de analisis y validacion

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 17:53:38 -06:00

12 KiB

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:

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:

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:

} catch (err: unknown) {
  setToast({
    type: 'error',
    message: err.message || 'Error al generar reporte',
  });
}

Código Propuesto:

} 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:

if (confirm('Are you sure you want to delete this feature flag?')) {

Código Propuesto:

// Opción A: Crear componente ConfirmDialog
const [confirmDelete, setConfirmDelete] = useState<string | null>(null);

// En el render:
{confirmDelete && (
  <ConfirmDialog
    isOpen={!!confirmDelete}
    title="Eliminar Feature Flag"
    message={`¿Estás seguro de eliminar el feature flag "${confirmDelete}"?`}
    confirmText="Eliminar"
    cancelText="Cancelar"
    onConfirm={() => {
      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

{activeTab === 'ab-testing' && (
  <UnderConstruction
    title="A/B Testing Dashboard"
    description="Funcionalidad en desarrollo para Q2 2026"
    icon={FlaskConical}
  />
)}

Opción B: Implementar MVP básico

// 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

/**
 * @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:

// 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:

// 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