Skip to content

Flujo Prioridades

Base URL: /api/v1. Backend: camaroneras_backend (mismo módulo reportes, controller ReportesController) ✅. Admin: camaroneras_admin (feature prioridades) ✅. Mobile: no aplica (igual que el reporte semanal y el dashboard de producción). Undécimo módulo; cierra la hoja Prioridades del Excel v4 (Winston Loaiza) — el ranking operativo de lagunas por índice de salud, consumiendo el motor de scoring de 10 · Parámetros KPI.

Bodies de request: no aplica — este endpoint no recibe body, solo date? en query. Responses 2xx: el shape de la respuesta exitosa está en la API Reference, generada desde el spec OpenAPI. Acá quedan solo las respuestas de error (4xx/5xx) y las reglas de negocio/flujo de cliente.

📐 Cómo se calculan el índice de salud, la prioridad y la recomendación que ordenan y llenan esta tabla: WL Aqua Intelligence v4 — fórmulas de scoring y KPIs.

Ver ADR-0059 por el detalle de por qué Prioridades es página + endpoint propios, en vez de una sección del dashboard de producción o una vista sobre /reports/dashboard.

Modelo

No agrega tablas propias ni un query nuevo: reutiliza el mismo fetch Prisma y el mismo buildRow por piscina que getWeekly/getDashboard (ver 09 · Dashboard de producción), aplanado a una fila por piscina y ordenado por índice de salud ascendente (peor primero). Sin series ni la agregación de sectores/kpis que esa vista sí trae — Prioridades es una lista, no un panorama.

Solo entran piscinas con ciclo: una piscina vacía evalúa sus 5 criterios en sin_dato y siempre da índice 100 (ver 10 · Parámetros KPI) — no aporta al ranking operativo y se excluye, igual que en los kpis agregados del dashboard.

RBAC

  • Mismo permiso que el dashboard de producción: módulo dashboard, acción ver (dashboard:ver). No es un módulo nuevo — es la misma superficie ejecutiva, no la sábana de reportes.

Endpoints (protegidos: AccessJwtGuard + PermissionGuard; tenant del JWT)

GET /reports/priorities — (dashboard:ver)

Ranking de piscinas por índice de salud ascendente, a una fecha de corte.

Query: date? (ISO 8601; default hoy).

json
// response 400 (fecha de corte inválida)
{ "error": "...", "message": "Fecha de corte inválida", "statusCode": 400 }

Flujo admin (camaroneras_admin, feature prioridades)

  • Ruta: /prioridades — protegida (ProtectedRoute module="dashboard" action="ver"), mismo permiso y mismo ítem de nav "Operación" que /produccion.
  • Selector de fecha de corte (default hoy) recalcula el ranking (['reports','priorities',date]), igual que en /produccion y /reportes.
  • Tabla: sector, piscina, peso actual, los 5 semáforos por criterio (EstadoBadge), índice de salud, prioridad (PrioridadBadge) y recomendación — mismos componentes compartidos que usa la tabla de /reportes (shared/components/KpiBadges.tsx, ver ADR-0059).
  • Sin filtros propios: a diferencia de /produccion, esta vista no tiene año/sector/piscina — es el ranking completo, pensado para consultarse entero.
  • Estados límite:
    • Cargando: mensaje centrado, igual que el resto de las páginas de reportes.
    • Vacío (sin piscinas con ciclo en el corte): mensaje explícito, distinto del de carga/error.
    • Error (fecha inválida, red, sesión): mensaje con el detalle del backend (getErrorMessage), sin reintento automático — el usuario ajusta la fecha o recarga.

Backlog / a futuro

  • Export de la vista (xlsx/csv/PDF) — no implementado, igual que en /reportes y /produccion.
  • Mobile: fuera de alcance.