feat(ti/soporte): filtro Tipo por estado de empresa y rediseño de Activo Fijo
Barra de filtros en el orden pedido: Portafolio · Empresa · Tipo · Ubicación Física · Categoría · Fabricante · Estado, y al final Año · Mes, que hablan de la fecha de alta y no del activo.
Tipo es nuevo y sale del catálogo de /admin (empresas_grupo_caabsa.estado),
no del datalake: viaja vía empresa igual que Portafolio, traduciendo el tipo a
los valores crudos que cruzan a empresas con ese estado. Ofrece los tres del
CHECK —Operativa, No operativa, Patrimonial— más "(sin tipo)", seleccionable a
propósito para poder aislar y curar lo que no cruza. Hoy son 386 de 952 activos,
casi todos de "Corporativo", que no es una empresa del catálogo.
Estado reemplaza a Clasificación (misma agrupación clasificacion_estatus) y
toma el lugar que tenía Estatus en la barra; el estatus crudo de Snipe-IT sigue
disponible dentro del modal, que es donde sirve para auditar qué lo compone.
clasificacion_estatus pasa a faceta de categoría: sin eso sus opciones se
vaciaban al filtrar por fecha.
emp_tipo va en su propio dict y no dentro de emp_map porque ese se
desempaqueta como par en catorce puntos del router.
Ajustes de look & feel de la misma pestaña:
- Las cinco KPI cards quedaban disparejas porque el wrapper
Clickablese interpone entre el grid y la card, y un hijo bloque no hereda la altura de la fila. En el canon (Finanzas/Tesorería) la card es hija directa del grid y estira sola. - Se les añaden las dos afordancias de
OaeKpiCard—halo en hover y flecha↗ —, las mismas de Documentación API, y sale el texto "Ver detalle" que repetía en cinco tarjetas lo que la flecha dice sola. El color sale deACENTO, no escrito a mano (look & feel 2.0). - Las donas pasan a leyenda DEBAJO y a todo el ancho (look & feel 4.4). Al costado medía un cuarto de pantalla y cortaba etiquetas reales: "Stock Fast Company / Mediasurf / Lucid Films" (44 caracteres), "Equipos que estaban en renta" (28), "Modulo de Apilamiento" (21). Radios homologados al canon.
- La columna "Tipo" del detalle pasa a "Grupo": es
tipo_asignaciony chocaba con el filtro Tipo, que es otra cosa.
Verificado: tsc --noEmit limpio en portal_ti y en frontend (con el árbol
compartido sincronizado), check_lookandfeel.py --diff origin/qa en 0, y el
filtro contrastado contra los datos reales de serving_ti.activos.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com