Cumplimiento NDAA
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 — sin dependencias nuevas
Este documento no es una declaración de intenciones: es el inventario completo de lo que Mantis incorpora, con el origen de cada pieza y las órdenes exactas para que un auditor lo reproduzca sin depender de nosotros.
1. Qué exige la norma
Sección titulada «1. Qué exige la norma»La Sección 889 de la NDAA (ley de EE. UU.) prohíbe al gobierno federal y a sus contratistas usar equipos o servicios de telecomunicaciones y videovigilancia de un grupo concreto de empresas:
Huawei · ZTE · Hikvision · Dahua · Hytera — y sus filiales, entre ellas HiSilicon (Huawei) y las marcas OEM de Hikvision y Dahua.
Dos aclaraciones que evitan malentendidos frecuentes:
-
No existe una «certificación NDAA» oficial. Ningún organismo emite un sello previo. Lo que se declara es que el producto no incorpora tecnología de los proveedores prohibidos, y esa declaración se sostiene con evidencia reproducible.
-
Soportar una marca no es incorporarla. Poder leer un NVR de un fabricante mediante protocolos abiertos es interoperabilidad, no dependencia tecnológica. Lo que la norma restringe es integrar su hardware, su código o sus servicios.
2. Resumen del inventario
Sección titulada «2. Resumen del inventario»| Ámbito | Piezas | De proveedor restringido |
|---|---|---|
| Módulos del backend (Go) | 59 | 0 |
| Paquetes de analítica (Python) | 14 | 0 |
| Paquetes de la estación (C#/.NET) | 3 | 0 |
| Binarios de terceros empaquetados | 5 | 0 |
| Modelos de inteligencia artificial | 6 | 0 |
| SDK de fabricante de cámaras | 0 | — |
Cero coincidencias con la lista de la Sección 889 en las 87 piezas.
3. Código propio
Sección titulada «3. Código propio»Lo sustancial de Mantis está escrito por Intunet en Colombia. No es un integrador de componentes de terceros: es un producto propio que usa infraestructura de código abierto ampliamente auditada.
| Componente | Tecnología | Origen |
|---|---|---|
| Backend / API | Go | Desarrollo propio — Colombia |
| Interfaz web | React + TypeScript | Desarrollo propio — Colombia |
| Estación de escritorio | C# .NET 8 | Desarrollo propio — Colombia |
| Analítica de video | Python | Desarrollo propio — Colombia |
| Panel de licencias | Go + React | Desarrollo propio — Colombia |
| Clientes ONVIF / RTSP | Go | Desarrollo propio — Colombia |
El último punto importa y se detalla en el apartado 7: los clientes que hablan con cámaras y grabadores los escribimos nosotros, no son SDK del fabricante.
4. Infraestructura empaquetada
Sección titulada «4. Infraestructura empaquetada»Estos cinco componentes viajan dentro del instalador. Son proyectos de código abierto conocidos, cada uno con su licencia y su repositorio público.
| Componente | Función | Origen | Licencia |
|---|---|---|---|
| PostgreSQL | Base de datos | PostgreSQL Global Development Group (EE. UU.) | PostgreSQL |
| FFmpeg | Tratamiento de video | FFmpeg (comunidad, Europa) | LGPL / GPL |
| go2rtc | Streaming RTSP / WebRTC | AlexxIT (comunidad) | MIT |
| Caddy | Servidor web y TLS | Stack Holdings (EE. UU.) | Apache 2.0 |
| Python + CUDA | Entorno de analítica | Python Software Foundation · NVIDIA (EE. UU.) | PSF · propietaria NVIDIA |
Ninguno pertenece a un proveedor de la Sección 889, ni depende de uno.
5. Modelos de inteligencia artificial
Sección titulada «5. Modelos de inteligencia artificial»| Modelo | Para qué | Origen |
|---|---|---|
| InsightFace / antelopev2 | Reconocimiento facial | Proyecto académico abierto |
| YOLO (Ultralytics) | Detección de objetos y personas | Ultralytics — EE. UU. / Reino Unido |
| OSNet | Re-identificación de personas | Investigación académica abierta |
| PyTorch | Motor de inferencia | Linux Foundation (Meta, EE. UU.) |
| ONNX Runtime | Motor de inferencia | Microsoft (EE. UU.) |
| OpenCV | Tratamiento de imagen | OpenCV.org (fundación sin ánimo de lucro) |
Los modelos se ejecutan en el servidor del cliente. Ninguna imagen sale del centro para ser analizada.
Sobre el origen de la investigación en visión artificial. Buena parte de la literatura académica de este campo tiene autores de universidades chinas, y varios de estos modelos citan ese trabajo. Eso no es una dependencia de la Sección 889: la norma nombra empresas concretas cuyos equipos y servicios se prohíben, no la procedencia de un artículo científico. Los pesos que Mantis distribuye provienen de repositorios públicos con licencia abierta, verificables por su huella criptográfica.
6. Dependencias del backend (59 módulos)
Sección titulada «6. Dependencias del backend (59 módulos)»6.1 Directas — las que declaramos nosotros
Sección titulada «6.1 Directas — las que declaramos nosotros»| Módulo | Para qué | Origen |
|---|---|---|
gin-gonic/gin |
Framework web | Comunidad |
gin-contrib/cors |
Control de origen cruzado | Comunidad |
gorm.io/gorm + driver/postgres |
Acceso a base de datos | Comunidad |
glebarez/sqlite |
SQLite sin cgo (solo pruebas) | Comunidad |
golang-jwt/jwt/v5 |
Tokens de sesión | Comunidad |
gorilla/websocket |
Eventos en tiempo real | Comunidad |
pquerna/otp |
Segundo factor (TOTP) | Comunidad |
redis/go-redis/v9 |
Caché entre nodos | Redis Ltd. (EE. UU. / Israel) |
joho/godotenv |
Lectura de configuración | Comunidad |
golang.org/x/crypto |
Criptografía | Google / equipo de Go |
gopkg.in/yaml.v3 |
Configuración de go2rtc | Canonical |
stretchr/testify |
Pruebas automáticas | Comunidad |
6.2 Indirectas de origen chino — declaradas por transparencia
Sección titulada «6.2 Indirectas de origen chino — declaradas por transparencia»Cuatro de los 46 módulos indirectos proceden de empresas chinas. Ninguna está en la Sección 889, pero se declaran porque un auditor las va a encontrar y merece la explicación por adelantado:
| Módulo | Empresa | Por qué está |
|---|---|---|
bytedance/sonic |
ByteDance | Acelerador de JSON que incorpora Gin |
bytedance/sonic/loader |
ByteDance | Auxiliar del anterior |
cloudwego/base64x |
CloudWeGo (ByteDance) | Codificación base64 acelerada |
cloudwego/iasm |
CloudWeGo (ByteDance) | Ensamblador que usa sonic |
Cuatro precisiones:
- No están en la lista. La Sección 889 nombra cinco empresas concretas. ByteDance no es una de ellas, ni filial de ninguna.
- Son indirectas. Las arrastra Gin, el framework web. Mantis no las invoca en ninguna línea de su código.
- Son código abierto auditable, no un servicio ni un binario cerrado. Se compilan desde fuente en cada build.
- No hablan con la red. Son rutinas de codificación de texto en memoria: no abren conexiones ni leen ficheros.
Si un pliego exigiera excluirlas, se recompila Gin sin el acelerador de JSON, y
sonicdeja de entrar en el binario. Es un cambio de opciones de compilación, no un rediseño. Podemos entregar una compilación así a petición.
6.3 El resto
Sección titulada «6.3 El resto»Los 42 módulos indirectos restantes proceden del equipo de Go (golang.org/x),
de Google (protobuf, uuid), del proyecto modernc.org (Irlanda) y de la
comunidad de código abierto. La lista íntegra está en go.mod y se puede leer
sin ejecutar nada.
7. Dependencias de analítica y de la estación
Sección titulada «7. Dependencias de analítica y de la estación»Python (14 paquetes): numpy, opencv-python-headless, onnxruntime-gpu,
insightface, mediapipe, requests, python-dotenv, psycopg2-binary,
psutil, redis y cinco bibliotecas de CUDA de NVIDIA. Todas de comunidades
de código abierto o de empresas estadounidenses.
Estación de escritorio (3 paquetes): LibVLCSharp, LibVLCSharp.WPF y
VideoLAN.LibVLC.Windows — todos del proyecto VideoLAN (Francia).
8. Lo que sí aparece al buscar las marcas prohibidas
Sección titulada «8. Lo que sí aparece al buscar las marcas prohibidas»Una búsqueda de «Hikvision» o «Dahua» en el código devuelve coincidencias. Conviene explicarlas por adelantado, porque es lo primero que encuentra un auditor y en frío parece lo contrario de lo que es.
Todas son de interoperabilidad de lectura:
- Mantis puede conectarse a NVR ya instalados de varias marcas, incluidas algunas restringidas, para leer video que esos equipos ya grabaron. Es frecuente en una migración: el cliente tiene grabadores en servicio y quiere aplicarles analítica sin tirarlos.
- Esa conexión usa protocolos abiertos de la industria — ONVIF, RTSP y HTTP con autenticación digest — implementados por nosotros en Go. Las coincidencias son el nombre de la marca en un mapa de rutas y en el texto que ve el usuario al elegir el tipo de grabador.
- No hay SDK, ni biblioteca, ni binario, ni firmware del fabricante.
Verificado en el árbol del producto: ninguna carpeta de SDK y ningún .dll
o .so de terceros de fabricantes de cámaras.
Es la misma situación que un navegador que puede abrir cualquier sitio web: soportar el protocolo no es incorporar la tecnología del otro extremo.
⚠️ Esto importa en la instalación, no en el software. Mantis cumple la Sección 889; las cámaras que se conecten, no necesariamente. Un contrato federal estadounidense exigiría además que el hardware instalado no sea de marcas restringidas. Esa decisión pertenece al pliego del cliente, y Mantis funciona igual con cámaras que sí cumplen.
9. Funcionamiento sin internet
Sección titulada «9. Funcionamiento sin internet»Mantis no requiere conexión a internet para operar, lo que elimina de raíz la preocupación por tráfico hacia servidores extranjeros:
- La licencia se valida sin conexión, con firma criptográfica Ed25519.
- Los modelos de IA se ejecutan en el servidor del cliente. Ninguna imagen ni video sale del centro.
- No hay telemetría, ni analítica de uso, ni actualizaciones automáticas, ni «llamada a casa» de ningún tipo.
La única llamada externa del sistema es a la API de Telegram, y solo si el administrador configura ese canal de notificación. Está apagada por defecto y se puede no usar nunca. Comprobable con la orden 3 del apartado siguiente: no hay ninguna otra dirección externa en el código.
10. Cómo verificarlo usted mismo
Sección titulada «10. Cómo verificarlo usted mismo»No hace falta creer esta página. Sobre el código fuente:
# 1. SDK o binarios de fabricante de cámaras. Debe salir vacío.find . -iname "*sdk*" -type dfind . \( -name "*.dll" -o -name "*.so" \) -not -path "*/node_modules/*"
# 2. Proveedores de la Sección 889 en TODAS las dependencias del backend.# Debe salir vacío.grep -iE "huawei|zte|hikvision|dahua|hytera|hisilicon" \ desktop-windows/server/backend/go.mod \ desktop-windows/server/backend/go.sum
# 3. Direcciones externas a las que llama el software.# Solo debe aparecer api.telegram.org.grep -rhoE "https?://[a-zA-Z0-9.-]+" \ --include="*.go" desktop-windows/server/backend/internal/ | sort -u
# 4. Inventario completo de dependencias, con su origen.cat desktop-windows/server/backend/go.modcat desktop-windows/server/workers/requirements-gpu-windows.txtEl código fuente está disponible para auditoría del cliente bajo acuerdo de confidencialidad.
11. Declaración
Sección titulada «11. Declaración»Mantis es un producto desarrollado íntegramente en Colombia por Intunet. No incorpora hardware, código fuente, bibliotecas, firmware ni servicios de Huawei, ZTE, Hikvision, Dahua, Hytera ni de sus filiales.
Su capacidad de conectarse a sistemas de terceros se basa exclusivamente en protocolos abiertos de la industria — ONVIF y RTSP — implementados por Intunet.
Esta declaración se sostiene sobre el inventario de las 87 piezas enumeradas arriba y es reproducible con las órdenes del apartado 10.
Última verificación contra el código: 24 de agosto de 2026, versión 1.4.16.
Se repitió sobre la 1.3.2, que añade 6.489 líneas respecto a la 1.2.0:
ninguna dependencia nueva (go.mod y go.sum sin cambios), ningún
proveedor restringido y ninguna llamada externa nueva.
Revisado de nuevo sobre la 1.4.16 (24/08/2026). go.mod y go.sum siguen
sin cambios, y no se añadió ningún paquete de Python.
El único componente nuevo que se distribuye es el intérprete de Python «embeddable» oficial (~21 MB), que ahora viaja dentro del instalador. No introduce ningún proveedor nuevo: procede de python.org (Python Software Foundation, EE. UU.), la misma fuente del entorno de Python que ya figura en el inventario. Se incluyó porque un entorno de Python no funciona sin el intérprete que lo generó, y ese no estaba viajando con el producto — motivo por el que la analítica no arrancaba en ninguna instalación.
La comprobación debe repetirse en cada versión mayor y siempre que se añada una dependencia, por corta que sea. Las cuatro órdenes del apartado 10 tardan menos de un minuto.