feat(captura): módulo de captura por departamentos

Backend: tabla CapturaDepartamento, 5 departamentos, 7 desarrollos,
service CRUD + importador Excel + 6 endpoints.
Frontend: tabla editable inline, tabs por dept, resumen avance,
paginación, filtro estatus, permisos por rol, dark mode.
746 API tests + 42 landing tests.
This commit is contained in:
2026-09-07 07:59:14 +00:00
parent 7d19e0da38
commit c2a8f4e929
21 changed files with 2496 additions and 7 deletions

View File

@@ -106,6 +106,15 @@ import {
desuscribirEndpoint,
vapidKeyEndpoint,
} from '../controllers/push.controller.js'
import {
listarEndpoint as listarCapturaEndpoint,
unidadesEndpoint as unidadesCapturaEndpoint,
resumenEndpoint as resumenCapturaEndpoint,
guardarEndpoint as guardarCapturaEndpoint,
bulkEndpoint as bulkCapturaEndpoint,
importarEndpoint as importarCapturaEndpoint,
requireAdminCaptura,
} from '../controllers/captura-departamento.controller.js'
export const apiRouter = Router()
@@ -236,6 +245,14 @@ apiRouter.patch('/config/usuarios/:id', requireAdmin, actualizarUsuarioEndpoint)
apiRouter.post('/config/reset-roles', requireAdmin, resetRolesEndpoint)
apiRouter.get('/config/acciones', obtenerAccionesEndpoint)
// ── Captura por departamentos ────────────────────────────────────────
apiRouter.get('/captura', listarCapturaEndpoint)
apiRouter.get('/captura/unidades', unidadesCapturaEndpoint)
apiRouter.get('/captura/resumen', resumenCapturaEndpoint)
apiRouter.post('/captura', guardarCapturaEndpoint)
apiRouter.post('/captura/bulk', bulkCapturaEndpoint)
apiRouter.post('/captura/importar', requireAdminCaptura, importarCapturaEndpoint)
// ── Push notifications ──────────────────────────────────────────────
apiRouter.get('/push/vapid-key', vapidKeyEndpoint)
apiRouter.post('/push/suscribir', suscribirEndpoint)