Parte Diario / Documentación Acceder

Sprint 5: Refactorización y Calidad de Código

1. Objetivo del Sprint

Mejorar la calidad del código existente: eliminar duplicación, corregir bugs de UI, reemplazar datos hardcodeados por datos reales del sistema, y estandarizar componentes visuales.

2. Planificación de Historias de Usuario

Código Descripción Técnica Puntos Tiempo (Días)
HU21 Dashboard raíz con datos reales: reescribir Dashboard.php con endpoints JSON (estadisticasJson, proximasClases) y vista dashboard.php con fetch() + skeleton loaders por rol. 5 2.5
HU22 Modelos con validaciones: agregar $validationRules y $validationMessages a los 16 modelos del sistema para integridad de datos. 3 1.5
HU23 Refactorización código duplicado: crear trait DiaHelper, centralizar getProgramaId() en BaseController, eliminar métodos duplicados en 13 controladores. 3 2.0
HU24 Bug HTML usuarios.php: corregir nesting incorrecto de modal y <script> fuera del loop foreach y estructura de tabla. 2 0.5
HU25 Login unification Tailwind: reescribir docente/login.php y auth/login.php con clases Tailwind (antes CSS inline). 2 1.0
Total 15 SP 7.5 Días

3. Criterios de Éxito

  • Dashboard carga datos reales del sistema (no más valores hardcodeados).
  • Todos los modelos validan datos antes de persistir.
  • No hay código duplicado para diaEspanol() ni getProgramaId().
  • usuarios.php renderiza correctamente con modal y script fuera del loop.
  • Login usa Tailwind (sin CSS inline) en ambas rutas.

4. Estado de Implementación

HU Estado Detalle
HU21 Completado Dashboard.php reescrito con estadisticasJson() y proximasClases() (endpoints JSON). Vista dashboard.php usa fetch() con skeleton loaders por rol (admin/coordinador/docente). Rutas: /dashboard/estadisticas, /dashboard/proximas-clases.
HU22 Completado Los 16 modelos (DocenteModel, CursoModel, PeriodoAcademicoModel, HorarioModel, AsignacionModel, RegistroSesionModel, FeriadoModel, FranjaAcademicaModel, HorarioAcademicoModel, DisponibilidadModel, ConfigSistemaModel, AuditoriaModel, NotificacionModel, ProgramaModel, SolicitudPasswordModel, AuthModel) ahora incluyen $validationRules y $validationMessages declarativos. ConfigSistemaModel además tiene método valor().
HU23 Completado Trait App\Traits\DiaHelper creado con diaEspanol() y diaEspanolCapitalizado(). getProgramaId() movido a BaseController.php (ahora es use \App\Traits\DiaHelper). Eliminado getProgramaId() de 9 controladores Coordinador. Eliminado diaEspanol() de 4 controladores.
HU24 Completado En admin/usuarios.php, el modal de edición y el <script> de eventos se movieron fuera del foreach y de la tabla, corrigiendo el HTML nesting que causaba bugs de renderizado y modales duplicados.
HU25 Completado docente/login.php reescrito de CSS inline a Tailwind. auth/login.php reescrito de CSS inline a Tailwind. Ambos login ahora usan las mismas clases del design system.

5. Notas Técnicas

5.1 Dashboard con Datos Reales

  • Controlador: app/Controllers/Dashboard.php — reescrito completamente
  • Vista: app/Views/dashboard.php — reescrita con fetch()
  • Rutas: dashboard/estadisticas, dashboard/proximas-clases (sin autenticación, acceden por sesión)
  • Sistema de skeleton loaders: Cada tarjeta del dashboard tiene un skeleton que se reemplaza al recibir datos
  • 3 roles diferentes: admin ve métricas globales, coordinador ve métricas por programa, docente ve métricas personales

5.2 Trait DiaHelper

  • Ubicación: app/Traits/DiaHelper.php
  • Reemplaza: diaEspanol() que estaba duplicado en Dashboard, DashboardController, ClasesController, RegistroController
  • Uso: Se agrega use \App\Traits\DiaHelper; en el trait (disponible vía BaseController)

5.3 Refactorización de BaseController

  • app/Controllers/BaseController.php ahora tiene getProgramaId() como método público
  • Los 9 controladores de Coordinador ya no definen su propio getProgramaId() — lo heredan de BaseController
  • BaseController también hace use \App\Traits\DiaHelper

5.4 Bug Fix: usuarios.php

  • Problema: El modal de edición y el <script> de eventos HTMX/SweetAlert estaban dentro del foreach de usuarios, lo que generaba HTML duplicado y bugs de renderizado
  • Solución: Modal y script movidos fuera del loop, referenciando el último registro vía variables globales HTMX
  • Archivo: app/Views/admin/usuarios.php

5.5 Login Unification

  • app/Views/docente/login.php — de CSS inline (~200 líneas) a clases Tailwind
  • app/Views/auth/login.php — de CSS inline a clases Tailwind
  • Ambos login ahora son visualmente consistentes con el resto del sistema

6. Archivos Modificados

Archivo Cambio
app/Controllers/Dashboard.php Reescrito: estadisticasJson(), proximasClases(), métodos privados de stats por rol
app/Controllers/BaseController.php Nuevo getProgramaId(), use \App\Traits\DiaHelper
app/Traits/DiaHelper.php Nuevo archivodiaEspanol(), diaEspanolCapitalizado()
app/Views/dashboard.php Reescrita: fetch() dinámico, skeleton loaders por rol
app/Config/Routes.php +2 rutas: dashboard/estadisticas, dashboard/proximas-clases
app/Models/*.php (16 archivos) +$validationRules y $validationMessages en todos
app/Views/admin/usuarios.php Fix HTML nesting (modal + script fuera de foreach)
app/Views/docente/login.php Reescrito de CSS inline a Tailwind
app/Views/auth/login.php Reescrito de CSS inline a Tailwind
app/Controllers/Coordinador/*.php (9 archivos) Eliminado getProgramaId() duplicado
app/Controllers/Docente/RegistroController.php Eliminado diaEspanol() duplicado
app/Controllers/Docente/ClasesController.php Eliminado diaEspanol() duplicado
app/Controllers/Admin/DashboardController.php Eliminado diaEspanol() duplicado
app/Controllers/Coordinador/DashboardController.php Eliminado diaEspanol() duplicado, estadisticasJson()/docentesPendientes() eliminados (migrados a Dashboard.php)

7. Impacto

  • Líneas eliminadas: ~350 (código duplicado, CSS inline)
  • Archivos nuevos: 1 (DiaHelper.php)
  • Modelos mejorados: 16 (todos con validaciones declarativas)
  • Controladores refactorizados: 14 (eliminación de duplicación)
  • Bugfixes críticos: 2 (HTML usuarios.php, dashboard hardcodeado)