Estado del checklist
Verificado contra el código el 22 de agosto de 2026 · Mantis Server 1.3.2 Revisado el 24 de agosto de 2026 · Mantis Server 1.4.16 — ver «Lo corregido después del checklist» al final: nueve fallos que solo se vieron al poner el sistema a correr de verdad en una sede.
| Estado | Pruebas | |
|---|---|---|
| ✅ Funciona | 433 | 95 % |
| ⏳ Parcial | 14 | 3 % |
| — No aplica | 6 | 1 % |
| Total | 453 |
Cero pendientes. Se partió de 255 verificadas; se cerraron 178.
30 de los 37 módulos están al 100 %.
Los 14 parciales no son trabajo pendiente de software:
| 10 | Aprobaciones que firma el cliente tras probar en sitio |
| 2 | Pruebas de carga, que solo tienen sentido en el entorno real |
| 2 | Filtros que exigen modelos de IA que no existen en el proyecto (gorra, gafas, marca de vehículo) |
Qué se añadió
Sección titulada «Qué se añadió»Acceso y control
Sección titulada «Acceso y control»| Qué resuelve | |
|---|---|
| Sesiones abiertas | Ver desde dónde entra cada cuenta y cerrar un puesto sin echar al operador del que está usando. Antes solo se podían revocar todas a la vez cambiando la contraseña. |
| Salir de verdad | Pulsar «Salir» invalida el token en el servidor. Antes solo lo borraba del navegador: un token copiado antes de salir seguía entrando durante 24 h. |
| Estaciones autorizadas | Lista blanca opcional de equipos, para que un portátil traído de fuera no sirva aunque tenga credenciales válidas. |
| Guard de ruta por rol | Usuarios y Auditoría rebotan a Inicio sin rol de administrador. El backend ya rechazaba las peticiones; lo que se evita es una pantalla de administración rota. |
Búsqueda e investigación
Sección titulada «Búsqueda e investigación»| Qué resuelve | |
|---|---|
| Zona de la imagen | «¿Quién pasó por esta puerta?». Se dibuja sobre el fotograma de la cámara y se combina con el resto de filtros, identidad incluida. |
| Franja horaria recurrente | «Todos los días entre las 22:00 y las 06:00». Cruza medianoche, que es justo la franja que importa. |
| Clase y color de objeto | Existían solo en Sinopsis de video. |
| Edad en Búsqueda visual | Descarta de golpe los parecidos imposibles. |
| Comparar lado a lado | Decidir si dos detecciones son la misma persona ya no obliga a abrir una, cerrarla y comparar de memoria. |
| Recorrido sobre el plano | La secuencia de cámaras que vieron a alguien, dibujada. Antes había que traducir mentalmente una lista de horas a un plano. |
| Recorrer las apariciones | Anterior / Siguiente dentro del visor, en orden cronológico. |
Reproducción
Sección titulada «Reproducción»| Qué resuelve | |
|---|---|
| Multicámara sincronizada | Hasta 4 cámaras sobre el mismo instante, con cámara principal conmutable y modo sin sincronizar para comparar dos momentos distintos. |
| Marcadores en la barra | Los marcadores del día se pintan sobre la línea de tiempo. Antes solo se veían dentro de su caso. |
| Seleccionar un tramo | Arrastrar sobre la barra siembra la exportación con ese intervalo. |
| Metadatos del evento | La ficha aparece al pasar por encima de su marca. |
Operación
Sección titulada «Operación»| Qué resuelve | |
|---|---|
| Aviso configurable por regla | Silenciar las reglas de fondo. Si una detección rutinaria interrumpe igual que una de la lista de vigilancia, el operador termina ignorando las dos. La alarma se registra igual aunque no avise. |
| Investigar desde la alerta | Abre el caso con el evento ya dentro, desde el aviso en vivo y desde la campana. |
| Material del caso | Subir imágenes y PDF con autor, fecha y motivo. Antes ese material iba por correo, fuera del expediente. |
| Catálogo de tipos de evento | Cómo se llaman, de qué color se pintan y cuáles generan alarma. El vocabulario cambia de sede en sede y no puede exigir recompilar. |
Sistema
Sección titulada «Sistema»| Qué resuelve | |
|---|---|
| Cobertura del análisis | «¿Está ya analizado el vídeo de anoche?». Sin ese dato, no aparece y todavía no se ha mirado son indistinguibles: buscar en horas sin procesar devuelve cero igual que una búsqueda vacía. |
| Reloj del servidor | Estado de sincronización y botón para corregirlo, y aviso automático si se desvía: el reloj se va despacio y en silencio, y nadie mira la pantalla de Salud a diario. Los segmentos se archivan con la hora local del equipo, así que un reloj desviado guarda vídeo con una hora que no es la real — y eso no se arregla después. |
| Calidad de grabación por cámara | Resolución y fotogramas de lo que se guarda. Sin ajustes se graba el flujo tal cual llega, sin gastar procesador ni perder calidad. |
| Atributos seleccionables | BODY_ATTRIBUTES decide qué se extrae de cada persona. Cada atributo amplía lo que se registra de alguien, y eso hay que poder justificarlo. |
| Analíticas ampliadas | Una instalación nueva ya acepta los 15 tipos de evento que producen los detectores, no solo rostro y manipulación. Qué se ejecuta de verdad lo sigue decidiendo el interruptor por cámara: encender la analítica de cuerpo llevó la GPU del 7 % al 13 %, así que encenderlas todas en 36 cámaras no cabe. |
Un criterio que atraviesa todo
Sección titulada «Un criterio que atraviesa todo»Lo desconocido o sin configurar nunca bloquea. Estrenar una pieza no puede dejar sin trabajar a quien ya estaba trabajando:
- Un usuario sin permisos asignados ve todo.
- Una regla anterior a los avisos configurables avisa y suena.
- Un token anterior a las sesiones no se considera cerrado.
- La lista de estaciones autorizadas vacía no bloquea a nadie — si no, encender el control dejaría la sala entera sin poder trabajar.
- Sin
BODY_ATTRIBUTESse extraen todos los atributos. - Un filtro mal escrito se ignora en vez de devolver cero resultados.
La alternativa —fallar cerrado— produce el mismo síntoma en todos los casos: una sala de control parada a mitad de turno por un cambio que nadie relacionó con eso.
Lo que no se cierra por software
Sección titulada «Lo que no se cierra por software»| Por qué | |
|---|---|
| Gorra, gafas, marca de vehículo | Exigen modelos de IA que no existen en el proyecto. Es un desarrollo aparte. |
| Difuminado de rostros | Pendiente de confirmar si el INPEC lo exige. |
| Atributos de cuerpo y objeto suelto | El código está; falta encender esos detectores en el despliegue. |
| Las 12 aprobaciones finales | Las firma el cliente tras probar en sitio. |
Verificación
Sección titulada «Verificación»Todo lo anterior está cubierto por pruebas automáticas que se ejecutan en cada compilación, actualizado el 24/08/2026:
| Pruebas | |
|---|---|
| Backend (Go) | 640 |
| Workers de analítica (Python) | 278 |
| Interfaz web (Vitest) | 92 |
| Total | 1.010 |
Todas en verde sobre esta versión.
Cinco fallos graves aparecieron al escribirlas, y ninguno se habría visto sin ejecutar el código contra el sistema real. El más serio: el sistema grababa pero no analizaba nada — el control de licencias bloqueaba a los propios detectores, que piden datos por HTTP igual que un navegador.
Un sexto, más reciente (24/08/2026): el detector de personas emitía un evento por cada fotograma en que veía a alguien, no uno por persona — 211 eventos en un solo minuto en producción. Se corrigió agrupando por track (como ya hacía el de rostro) y quedó fijado con pruebas que reproducen el caso exacto: 30 avistamientos de la misma persona deben dejar un único evento.
Hecho, pero sin ver funcionar en la sede
Sección titulada «Hecho, pero sin ver funcionar en la sede»El estado dice que la funcionalidad EXISTE y está cubierta por pruebas automáticas. No dice que alguien la haya visto funcionar en la instalación del cliente — y esa diferencia no es teórica: los seis fallos graves de la sección anterior aparecieron al ejecutar el código contra el sistema real, no al escribir las pruebas.
126 de las 453 pruebas necesitan vídeo entrando, analítica corriendo
o disco llenándose para poder afirmarse. Están marcadas una por una en la
columna «QA en sitio» del .xlsx.
Aparte, 10 son aprobaciones formales que firma el cliente tras la prueba en sitio (los módulos de «Prueba final»). No son trabajo técnico pendiente: ya estaban así clasificadas.
| Módulo | Pruebas |
|---|---|
| RESEARCH - Búsqueda multicámara | 9 |
| RESEARCH - Búsqueda por vehículos | 8 |
| RESEARCH - Búsqueda por personas | 7 |
| RESEARCH - Resultados y evidencia | 7 |
| Backup y documentación | 6 |
| Configuración - Fuentes y cámaras | 6 |
| Pruebas de rendimiento | 6 |
| RESEARCH - Acceso y búsqueda | 6 |
| RESEARCH - Movimiento y comportamiento | 6 |
| REVIEW - Evidencia | 6 |
| REVIEW - Multicámara | 6 |
| Configuración - Retención y almacenamiento | 4 |
| Configuración - Video Analytics | 4 |
| RESEARCH - Objetos y atributos | 4 |
| RESPOND - Live response | 4 |
| (otros 18 módulos) | 37 |
Que RESEARCH concentre la mayor parte es esperable: es todo analítica sobre vídeo grabado, y sin detecciones reales no hay nada que buscar. El resto —311 pruebas— es comprobable en el sistema: se verifica abriendo la aplicación, sin hardware específico.
El servidor de la sede (10.3.96.6) lleva sin responder desde el 24 de agosto. Hasta que vuelva, ninguna de estas pruebas puede cerrarse.
Lo corregido después del checklist (24 de agosto de 2026)
Sección titulada «Lo corregido después del checklist (24 de agosto de 2026)»El checklist se verificó contra el código. Al poner el sistema a funcionar de verdad en una sede aparecieron fallos que ninguna revisión de código habría encontrado, porque solo se manifiestan en una instalación real.
El más grave: la analítica no había generado un solo evento, en ningún servidor Windows instalado, nunca. Nueve causas encadenadas, cada una tapando a la siguiente — arreglar una y volver a probar parecía «sigue sin funcionar» cuando en realidad se había avanzado una capa:
| Qué pasaba | |
|---|---|
| 1 | El intérprete de Python se buscaba donde nunca está en Windows, así que los detectores no arrancaban y no dejaban ni una línea de registro. |
| 2 | El entorno de Python viajaba sin el intérprete que lo hace funcionar: la ruta grabada dentro apuntaba al equipo donde se compiló. |
| 3 | Las rutas con espacios (C:\Archivos de programa\Mantis) se partían al lanzar los procesos. Afectaba a tres puntos distintos. |
| 4 | El Python empaquetado ignora la variable que le dice dónde están sus módulos — comportamiento propio de esa distribución, no un descuido. |
| 5 | La configuración de vídeo se guardaba a medias: al reiniciar, las cámaras quedaban apuntando a un flujo inexistente. Sin error visible: la imagen simplemente venía vacía. |
| 6 | El usuario de las cámaras era admin, no administrador (esa es la cuenta del NVR). De tanto reintentar, varias cámaras se bloquearon solas. |
| 7 | Hay dos generaciones de cámaras Pelco en la sede, con direcciones de vídeo distintas. Seis cámaras usaban la ruta de la otra generación. |
| 8 | El instalador paraba el sistema después de copiar los archivos, no antes, así que las actualizaciones se cancelaban solas sin que nadie las cancelara. |
| 9 | La segunda tarjeta gráfica del servidor estaba sin usar: todo el trabajo caía en la primera, al 100 % con 15,9 de 16,4 GB ocupados. |
Resultado: las 35 cámaras decodificando en GPU, detecciones simultáneas en 8 cámaras, y las dos tarjetas repartiéndose la carga.
Todo se entregó como producto — instaladores compilados y verificados por huella digital, publicados en la página de descargas. En ningún momento se dejó código fuente en el servidor de la sede.