Cómo Trinta monitorea cientos de fuentes cada día: por dentro de la arquitectura
27 de julio de 2026 · 7 min de lectura
Un responsable de propuestas que exporta equipos a África occidental, el Golfo y América Latina tiene, en el papel, un solo trabajo: no perderse nunca una licitación relevante. En la práctica ese trabajo es casi imposible a mano. Los anuncios viven en más de 380 lugares distintos: TED de la UE, PNCP de Brasil, SECOP de Colombia, DNCP de Paraguay, el Banco Mundial y UNGM, más decenas de portales nacionales de contratación electrónica, almacenes centrales de medicamentos (NUPCO, KEMSA, CENAME, SALAMA), redes hospitalarias de la seguridad social (IMSS, EsSalud, CCSS) y hospitales de referencia sueltos que publican un único PDF y siguen adelante. Cada uno usa un idioma, una maquetación, un formato de plazo y una política de acceso diferentes. Revisar aunque sea treinta de ellos cada mañana es un puesto de tiempo completo, y el que usted se salta el martes es el que cerró el viernes.
Ese problema de monitoreo es exactamente lo que la arquitectura de Trinta existe para resolver. Así funciona realmente por dentro.
Más de 750 conectores escritos a mano, no un scraper mágico
El atajo tentador, cuando hay que leer cientos de fuentes, es construir un scraper universal ingenioso y apuntarlo a todas partes. Probamos ese camino y lo descartamos a propósito. Cada portal tiene sus propias manías: esquemas de paginación, verificaciones anti falsificación de peticiones (CSRF), archivos masivos de contratación abierta (OCDS) entregados como ZIP mensuales, sesiones de invitado en dos pasos que le entregan una cookie de visitante antes de mostrarle nada. Un único motor genérico maneja mal todo eso.
Por eso Trinta funciona con conectores deterministas escritos a mano: un componente pequeño y hecho a medida por fuente, cada uno afinado al comportamiento real de ese portal. La flota creció de unos 15 conectores a más de 750, y sigue creciendo. Un conector para una API estructurada como TED o PNCP es simple. Un conector para un portal que muestra un botón de "Iniciar sesión" pero que sirve en silencio su lista de licitaciones desde un endpoint público, sin autenticación, exige trabajo de detective: renderizamos la página una vez, observamos qué llamada de API devuelve realmente los datos y después llamamos a ese endpoint directamente. Esa técnica por sí sola abrió decenas de portales que desde afuera parecían amurallados.
Algunos principios mantienen honesta a la flota:
Un escaneo programado que corre sin que nadie mire
Los conectores no sirven de nada si alguien tiene que apretar el botón de inicio. Todo el proceso corre sobre una tarea programada en la nube (un cron diario en GitHub Actions) que no necesita ningún portátil abierto ni ninguna persona despierta. Cada ejecución hace la misma secuencia disciplinada:
1. Recolección. Todos los conectores corren en paralelo, con un tiempo límite estricto por fuente para que un portal lento o roto nunca pueda frenar ni tumbar el escaneo entero. 2. Ingesta y triaje. Los anuncios nuevos se integran al repositorio, los vencidos se descartan y el ruido evidente se filtra. 3. Enriquecer, auditar, publicar. Se descargan los documentos, se revisa cada licitación y los resultados se despliegan al feed en vivo.
Dos filtros hacen el trabajo pesado durante la recolección. Un filtro de relevancia compara cada anuncio con un perfil multilingüe de palabras clave (inglés, francés, español, portugués, árabe, hebreo), de modo que un anuncio turco o brasileño se juzga en su propio idioma y no en una traducción aproximada. Y un filtro de alcance descarta lo que parece correcto pero no lo es: para quien compra sistemas, un anuncio de pura reposición de consumibles o de alquiler de equipos queda fuera, y el filtro conoce el vocabulario del alquiler en cinco idiomas, así que "locacao", "alquiler" y "location" lo activan por igual.
Enriquecimiento documental: la lista de archivos, no solo el enlace
Encontrar una licitación es la mitad del trabajo. La otra mitad es leerla, y ahí es donde los equipos pierden horas: abrir el portal, buscar el expediente, descargar cada anexo. La capa de enriquecimiento documental de Trinta hace eso automáticamente. Un despachador enruta cada anuncio al extractor correcto:
Este paso es totalmente determinista y no necesita ningún modelo de IA, así que corre barato en cada escaneo. El resultado es que una licitación suele llegar con el enlace a su expediente y una lista de anexos ya adjuntos, de modo que el equipo de propuestas empieza leyendo en lugar de buscando.
Un agente de auditoría que puntúa cada licitación, y que falla en voz alta
La última etapa es la que casi todas las herramientas de monitoreo se saltan. Después de la recolección y el enriquecimiento, un agente de auditoría revisa cada licitación que todavía no fue revisada. Abre los documentos accesibles, lee el alcance, mapea los requisitos contra lo que el cliente realmente suministra y asigna una puntuación de encaje con una justificación breve. Esa puntuación, y no un conteo tosco de palabras clave, es la que ordena el feed, así que un lead con puntuación alta es uno cuyos requisitos ya fueron contrastados por alguien.
Hay una regla de seguridad deliberada grabada en el código, no solo en la documentación: toda licitación tiene que ser auditada antes de publicarse. Si el paso de auditoría no puede correr (por ejemplo, por una clave de API faltante) o no audita nada, el escaneo entero falla en voz alta y se detiene. Nada sin revisar llega al feed en vivo. Preferimos no mostrar ninguna actualización antes que mostrar una equivocada.
Nunca datos falsos
Debajo de todo esto hay una regla que moldea cada decisión de diseño: nunca fabricamos datos para tapar un hueco. Si un valor no es público, y los valores de contratación de verdad quedan sellados con sorprendente frecuencia (presupuestos brasileños bajo ciertas leyes, anuncios de obra alemanes, cifras de directorio del Golfo detrás de un acceso), el feed muestra "No divulgado" con el motivo, nunca un número inventado. La tasa por los documentos de licitación no es el valor del contrato, y jamás dejamos que una se haga pasar por el otro. Los anuncios viejos se podan con una ventana de recencia. Los anuncios de adjudicación y de resultado, que no tienen un plazo real, se filtran para que no puedan aparecer como oportunidades vivas.
El beneficio para el dueño de una pyme, el exportador o el consultor es simple. En lugar de patrullar 1.519 portales y confiar en que los cubrió todos, usted abre un único feed diario de licitaciones emparejadas, ya puntuadas por encaje, ya con sus documentos adjuntos, ya limpias de ruido, de contratos de reposición y de anuncios vencidos. El problema de monitoreo no desaparece; simplemente deja de ser suyo. Ese es todo el punto de un feed diario puntuado y emparejado: las cientos de fuentes siguen cambiando cada noche, y usted solo llega a ver el puñado que le importa.
Preguntas frecuentes
¿Cómo monitorea TRINTA cientos de fuentes de contratación pública?
Con una flota de conectores escritos a mano en lugar de un scraper genérico: cada conector apunta a un portal y extrae de él filas con fecha, sin necesidad de iniciar sesión. Un escaneo programado corre a diario sin supervisión, el enriquecimiento documental recupera la lista de archivos adjunta a cada anuncio, y un agente de auditoría puntúa cada licitación y falla en voz alta en lugar de callarse.
¿Por qué no usar un único scraper genérico para todos los portales?
Porque los portales gubernamentales no tienen nada en común a nivel estructural. Difieren en el marcado, la navegación, el manejo de sesiones, los muros de registro y el formato de publicación, y varios publican las licitaciones solo como PDF escondidos en la navegación. Un scraper genérico resuelve los fáciles y se pierde el resto en silencio, que es peor que no cubrirlos.
¿Cómo evita TRINTA publicar datos inventados?
Un agente de auditoría puntúa cada licitación y está diseñado para fallar en voz alta en lugar de degradarse en silencio, así que una fuente que deja de devolver filas reales aparece como un error y no como un resultado vacío que parece una semana tranquila. La regla de operación es que ningún registro es preferible a un registro fabricado y verosímil.
Compartir este artículo
Reference
Artículos relacionados
Licitaciones DNCP de Paraguay: guía del proveedor para la contratación pública
4 min de lectura
Contratación del Banco Mundial: guía de STEP para proveedores
7 min de lectura
Contratación pública en el Golfo: Etimad de Arabia Saudita, los EAU y Catar, y cómo calificar
10 min de lectura
Cómo la IA puntúa una licitación frente a su catálogo de productos
8 min de lectura
IA en compras públicas: cómo el aprendizaje automático transforma la inteligencia de licitaciones
9 min de lectura