Saltar a contenido

Vista: Lista de Reportes (Reportes ETL)

Selector: app-lista-reportes

Ubicación: src/app/views/analytics/lista-reportes


¿Qué hace?

Catálogo de reportes en tarjetas para cualquier usuario autenticado, filtrado por su rol de sesión. Es la puerta de entrada normal del usuario final al módulo (a diferencia de Gestión de Reportes, que es de administración).


Ruta

Ruta Guard Parámetros de URL
/app/analytics/vista-reportes AuthGuard

Propiedades clave

Propiedad Tipo Descripción
reportes ReporteAnalytics[] Ya filtrados por Estado === 'ACTIVO' y acceso de rol — nunca llegan aquí BORRADOR/ARCHIVADO
categoriaSeleccionada string Chip activo; 'Todos' por defecto
categoriasDisponibles string[] (getter) Derivadas de las categorías presentes en reportes — no hardcodeadas
puedeGestionar boolean (readonly) true si el rol de sesión es Jefe Datos o Desarrollador — controla el botón "Gestionar ETL"

Servicios y endpoints

Servicio Método Endpoint Cuándo
ReportesAnalyticsService listarReportes() GET metodoGenerico?coleccion=ReportesAnalytics Al inicializar

Filtro de acceso resuelto en cliente (roles.util.ts), no en el backend — ver limitación conocida.


Secciones de la vista

# Sección Descripción
1 Header Título "Reportes ETL" + botón "Gestionar ETL" (solo roles autorizados)
2 Buscador Filtra por nombre o categoría, sin debounce (dataset pequeño)
3 Chips de categoría "Todos" + una por cada categoría presente en los reportes visibles
4 Grid de tarjetas Responsive (auto-fill, minmax(270px, 1fr)) — badge de estado, categoría, título, descripción, fecha de actualización, versión, autor, botón "Ver Reporte"

Flujo principal

ngOnInit()
  -> cargarReportesVisibles()
     -> reportesService.listarReportes()
     -> obtenerRolesUsuario() (sessionStorage.roles_asignados)
     -> filtra: Estado === 'ACTIVO' && tieneAcceso(RolesPermitidos, rolesUsuario)
  -> reportes = resultado

Regla de acceso (tieneAcceso, idéntica al criterio que usa el sidebar en default-layout.component.ts para módulos):

si RolesPermitidos incluye "Todos" -> acceso
si no -> acceso solo si algún rol del usuario está en RolesPermitidos

Estados de la vista

Estado Qué muestra
Cargando Spinner
Con datos Grid de tarjetas
Sin reportes visibles para el usuario "Todavía no hay reportes disponibles para ti."
Búsqueda/filtro sin resultados "Ningún reporte coincide con la búsqueda."
Error de carga Alerta roja

Observaciones

  • Un reporte en BORRADOR o ARCHIVADO no aparece atenuado — directamente no llega al arreglo reportes. No es "se ve pero deshabilitado" como en algunos mockups de referencia; es invisibilidad real.
  • El botón "Ver Reporte" navega con [routerLink]="['/app/analytics/vista-reportes', reporte.ReporteId]" — con el prefijo /app explícito. Un routerLink sin ese prefijo (bug ya corregido) rompe la navegación porque analytics está anidado bajo /app en app.routes.ts.

Changelog

Fecha Autor Cambio
2026-08-14 Iker Acevedo Vargas Versión inicial: grid de tarjetas, filtro por categoría y rol, botón "Gestionar ETL" condicionado por rol