Feature: capa de datos de catálogos (carreras, grupos, ITRs y categorías)
Agrega la pantalla /catalogos (el ítem "Catálogos" del menú ya existía pero llevaba a un 404) con el ABM de los cinco catálogos: carreras, grupos, ITRs, categorías de instancia y categorías de recordatorio (RF35–RF40).
Cambios
Listado
- Una pestaña por catálogo. Solo se ven las que el usuario puede ver (
VER_CARRERAS,VER_GRUPOS,VER_ITRS,VER_CATEGORIAS_*). La pestaña abierta queda en la URL (?tab=). - Buscador y filtro por estado en todas las pestañas. Grupos filtra además por carrera y generación, e ITRs por carrera.
- Desactivar con confirmación y activar directo. "Editar" solo aparece en registros activos, porque el backend rechaza editar uno inactivo.
- Los mensajes de éxito o error se borran a los 3 segundos. El error de carga del listado queda fijo.
- Ancho de 1200px, igual que Instancias e Incidencias.
Alta y edición
- Páginas propias:
/catalogos/[catalogo]/nuevoy/catalogos/[catalogo]/[id]/editar, con la misma estructura que el resto de los formularios y una leyenda informativa por catálogo. - Grupo: la carrera no se puede cambiar después de crearlo, y la generación va de 1901 al año actual.
-
Categorías: muestra cómo se va a guardar el nombre (ej.
ENTREVISTA_CON_FAMILIA). -
ITR: se eligen las carreras que dicta. Como
GET /itrssolo trae los nombres de las carreras y elPUTreemplaza todas las asociaciones, la edición se bloquea si no se pudo cargar el catálogo de carreras, para no desvincularlas todas por error. - Un nombre repetido se marca en el campo. Por URL directa: sin permiso se muestra
SinPermiso, y un registro inactivo muestra un aviso en vez del formulario.
Archivos
- Nuevos:
app/(app)/(secciones)/catalogos/**,components/catalogos/*,lib/carreras.ts,lib/categorias-recordatorio.ts,lib/catalogos.ts,lib/catalogos-tabs.ts. - Modificados:
lib/groups.ts,lib/itrs.tsylib/cates funciones de ABM y un parámetroestado` opcional. Laspantallas que ya los usaban no cambian.
Problema conocido (backend)
Después de asociar una carrera a un ITR, el listado de carreras sigue mostrando "Sin ITR asignado" hasta que se reinicia el backend. No es del
front: CarreraService.listar() usa @Cacheable("carrera)/editar() solo vacían el caché itrs. Al revés pasa lomismo: renombrar o desactivar una carrera no actualiza el listado de ITRs. El arreglo es que esos métodos vacíen los dos cachés.
Cómo probar
- Con un administrador, entrar a Catálogos y recorrer las pestañas.
- Crear una carrera, editarla, desactivarla y volver a a se va solo a los 3 s.
- Crear un grupo para esa carrera. Al editarlo, la carrera aparece bloqueada.
- Crear un ITR y asociarle carreras. Editarlo y verifica ya tenía.
- Crear una categoría "entrevista con familia" y verificar que se guarda como
ENTREVISTA_CON_FAMILIA. Crearla de nuevo y verificar que marca el nombre repetido. - Desactivar una categoría en uso: muestra el error del backend.
- Con un usuario sin permisos de catálogos, entrar por Uogos/carreras/nuevo
: muestraSinPermiso`.
Verificación
Typecheck y lint pasan.