Saltar al contenido

Logística y transporte por carretera · Plataforma de datos e inteligencia territorial

Observatorio de Riesgo Vial

El Observatorio de Riesgo Vial es un producto propio pensado para la logística por carretera en Argentina, empezando por los corredores Rosario-Córdoba, Rosario-Bahía Blanca y los accesos al AMBA. Junta lo que publican por separado vialidades, servicios meteorológicos e hidrológicos, pasos fronterizos y prensa local, y lo convierte en un nivel de riesgo por tramo con la evidencia que lo sostiene.

Tipo
Producto propio
Sector
Logística y transporte por carretera
Solución
Plataforma de datos e inteligencia territorial
Periodo
Desde agosto de 2026
Estado
En producción En servicio interno 24/7
Portada de la web pública del Observatorio: un corredor vial con un tramo cortado por crecida y el aviso de desvío en el kilómetro 300.

Resumen ejecutivo

Plataforma que reúne 44 fuentes públicas sobre las rutas argentinas y estima, por tramo de 10 km, la probabilidad de corte en las próximas horas.

Las rutas argentinas se cortan por crecidas, nevadas, incendios u obras, y la información para preverlo existe, pero repartida entre decenas de organismos con formatos distintos. El Observatorio ingiere 44 fuentes públicas, guarda cada documento original sin modificarlo, extrae observaciones con reglas y, solo donde el texto no tiene estructura, con Claude, y las consolida en eventos. Un motor de reglas versionado combina unas 18 señales y publica, para cada uno de los 20.345 tramos de 10 km y cinco ventanas de 6 horas a 7 días, un nivel de riesgo con su evidencia. Funciona 24/7 en un servidor propio; las métricas de acierto todavía no son calculables.

El reto

  1. La pregunta operativa es sencilla: si un camión puede salir por una ruta en las próximas 24 horas. La respuesta depende de datos que nadie cruza entre sí.

  2. Vialidad Nacional y las vialidades provinciales publican partes en PDF, imágenes u hojas de cálculo, casi siempre sin coordenadas ni kilómetro y cada una con su propio vocabulario.

  3. El servicio meteorológico y el instituto del agua avisan de lluvias, nevadas o crecidas, pero ninguno dice sobre qué ruta caen.

  4. Los pasos fronterizos tienen varias fuentes que a veces se contradicen, y la prensa llega tarde y en texto libre, sin una ubicación estructurada.

  5. Además, para afirmar que el sistema anticipa un corte hay que poder distinguir haberlo predicho de haber copiado un aviso que otro organismo ya había publicado.

La solución

Un pipeline en Python descarga cada fuente con su cadencia, su cuota y sus reintentos, y guarda el documento crudo sin tocarlo. Reglas deterministas y, solo donde no hay estructura, Claude Haiku y Sonnet extraen observaciones, que se deduplican en eventos con historial. PostGIS los cruza con una red vial fija de tramos de 10 km, el motor calcula las amenazas por ventana temporal y un panel en Next.js con MapLibre y Cesium lo muestra.

Funcionalidades

Qué hace, pantalla a pantalla

  • Mapa de hechos y predicciones

    El mapa se abre eligiendo qué se mira, hechos reportados o predicciones del motor, con un interruptor siempre visible para no confundirlos. Muestra solo lo vigente, sin eventos vencidos ni revocados, y un panel de capas para combinar eventos, observaciones y predicciones.

  • Riesgo por tramo y ventana

    Cada tramo de 10 km recibe un estado INFO, WATCH, WARNING o CRITICAL para ventanas de 6, 12, 24, 72 y 168 horas, con su probabilidad y la evidencia que la sostiene, enlazada a la versión exacta de cada evento usado.

  • Eventos consolidados con historial

    Las observaciones de varias fuentes sobre un mismo hecho se agrupan en un evento con nivel de confianza y contradicciones resueltas por jerarquía de autoridad. La base guarda cada versión, de modo que se puede ver qué sabía el sistema en cada momento.

  • Salud de fuentes y cobertura

    Cada conector muestra sus corridas, errores, cuota consumida y estado del cortacircuito. La pantalla de cobertura explica qué eventos no llegan a ningún tramo y por qué: sin ubicación, geometría lejana o ruta sin kilómetro oficial.

  • Alertas con formato CAP

    Las amenazas que suben de nivel se agrupan por ruta, necesitan corroboración y respetan un tope para no saturar. Cada alerta guarda su texto congelado y se exporta en CAP 1.2, validado con el esquema de OASIS. El envío por webhook aún no tiene destino.

  • Explorador 3D

    Un globo Cesium con terreno, separado del mapa operativo, para estudiar el agua y capas geográficas propias importadas en KML. Lo que se sube queda guardado en el servidor y se puede borrar desde la misma pantalla, sin mezclarse con el mapa diario.

  • Métricas sin números engañosos

    La pantalla de métricas separa eventos anticipados, confianza, acierto y coste de extracción. No publica un porcentaje cuando la muestra es mínima y respeta el bloqueo del backtest, que no da cifras de acierto mientras falte historia.

  • Playas de camiones

    Los aparcaderos de camiones aparecen con su capacidad y su ocupación. El porcentaje nunca se muestra solo: va con la antigüedad de la lectura y, si el dato es viejo, se ve degradado y con el tiempo que lleva sin actualizarse.

Módulos

Qué funciona hoy y qué está propuesto

3 operativos, 3 parciales y 0 propuestos. Los propuestos son diseño de producto: todavía no hay software detrás.

  • Ingesta de fuentes

    Operativo

    44 conectores registrados con cuotas por proveedor, cortacircuito, cola de fallos y reproceso del documento crudo cuando se corrige un parser.

  • Motor de probabilidad por tramo

    Operativo

    Reglas versionadas con unas 18 señales y cinco ventanas temporales. Dos señales más se calculan en sombra para compararlas antes de que decidan.

  • Panel web

    Operativo

    Mapa, amenazas, eventos, fuentes, cobertura, revisión, métricas, aparcaderos y explorador 3D.

  • Alertas

    Parcial

    Se calculan, se registran y se exportan en CAP 1.2, pero todavía no se entregan: el webhook no tiene destino configurado.

  • Consulta por itinerario

    Parcial

    Lógica y comandos para cruzar un recorrido ordenado de tramos con las amenazas de una ventana y traducirlo a una decisión. Sin pantalla en el panel.

  • Backtest

    Parcial

    Escrito y ejecutable, con seis métricas separadas. Devuelve «no calculable» hasta reunir 42 días de historia y una afirmación firmada de que el catálogo de impactos está completo.

Cómo funciona

De un documento publicado a una alerta

  1. Descarga

    Cada fuente se descarga con su cadencia y su cuota. El documento original se guarda con un hash único y nunca se borra ni se modifica.

  2. Extracción

    Reglas deterministas para los formatos estructurados. En prensa, un filtro de palabras deja pasar pocas notas, Claude Haiku las clasifica y Claude Sonnet extrae los datos en JSON validado; nunca se infieren kilómetros ni horarios.

  3. Consolidación

    Las observaciones se deduplican en eventos con confianza, contradicciones y un historial de versiones que mantiene la propia base.

  4. Puente espacial

    Triggers de PostGIS cruzan cada evento con la red vial de tramos fijos de 10 km y guardan el resultado, sin recalcularlo en cada lectura.

  5. Inferencia

    El motor combina eventos, avisos, lluvia, nieve, niveles de río, focos de calor e historial del tramo, y publica un estado y una probabilidad por ventana.

  6. Alerta

    Las subidas de nivel se agrupan por ruta, se exige corroboración y un tope, y la alerta queda registrada y exportable en CAP 1.2.

  7. Validación

    Los impactos registrados alimentan el backtest, que mide detección, predicción, acierto, anticipación, error espacial y calibración por separado.

Arquitectura

Cómo está construido

Plano · observatorio-vial 6 capas · 30 piezas
  1. Fuentes públicas

    • Vialidad Nacional y vialidades provinciales (PDF, HTML y hojas de cálculo)
    • Alertas del servicio meteorológico (CAP y avisos de corto plazo)
    • Niveles y pronósticos de ríos
    • Pasos fronterizos de Argentina y Chile
    • TomTom Traffic y Open-Meteo
    • Focos de calor, incendios y sismos
    • Medios locales por RSS
    • De Fuentes públicas a Ingesta: APIs, PDF, HTML y RSS
  2. Ingesta

    • Python 3.12 con httpx, pdfplumber y feedparser
    • Cuotas por proveedor, cortacircuito y cola de fallos
    • Extracción por reglas y con Claude (Haiku clasifica, Sonnet extrae)
    • Validación con Pydantic y caché de respuestas del modelo
    • APScheduler como servicio supervisado
  3. Motor y decisión

    • Reglas de probabilidad versionadas en YAML
    • Deduplicación, confianza y contradicción
    • Propagación de crecidas entre estaciones
    • Alertas con agrupación, corroboración y exportación CAP 1.2
    • Consulta por itinerario y backtest
    • De Datos a Motor y decisión: eventos por tramo y series de medición
    • De Motor y decisión a Datos: amenazas, evidencia y alertas
  4. Datos

    • PostgreSQL 17 con PostGIS
    • 137 migraciones SQL puras
    • Triggers de historial de eventos y de cruce con tramos
    • Red vial de 20.345 tramos de 10 km
    • De Panel web a Datos: lectura SQL directa
  5. Panel web

    • Next.js 15, React 19 y TypeScript
    • Tailwind 4 y shadcn/ui
    • MapLibre GL y Cesium
    • Gráficos en SVG propio
    • Modo de datos de demostración con escenarios
  6. Operación

    • Servicios de Windows en un servidor propio 24/7
    • Copia diaria de la base con rotación
    • Latido de salud y detector de configuración desactualizada
    • Script de actualización que solo despliega desde la rama principal

Otros flujos

  • Ingesta → Datos : crudo inmutable, observaciones y eventos
  • Operación → Ingesta : supervisión y copias

Tecnologías

Stack verificado en el código

Interfaz

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • shadcn/ui
  • MapLibre GL
  • Cesium

Backend

  • Python
  • Pydantic
  • APScheduler

Datos

  • PostgreSQL
  • PostGIS

IA y voz

  • Claude (Anthropic)

Integraciones

  • TomTom Traffic

Calidad

  • pytest

Ingeniería

Cómo se planteó y se construyó

  1. Esquema, fuentes y motor (agosto de 2026)

    El 15 de agosto se crea el monorepo con el esquema base, el núcleo de ingesta y las primeras fuentes: TomTom, Vialidad Nacional, la policía caminera de Córdoba, medios por RSS y clima de Open-Meteo. Ese mismo día llega la primera versión del motor de probabilidad por tramo con anticipación hidrológica.

  2. Puente espacial y consolidación (agosto de 2026)

    Entre el 16 y el 19 de agosto se fija la red vial en tramos de 10 km, el cruce con eventos pasa a triggers persistidos, la contradicción entre fuentes usa una jerarquía de autoridad y se añaden caché de respuestas del modelo y guardas contra cruces geométricos sin índice.

  3. Panel y salidas (agosto de 2026)

    Se rehacen el mapa, las amenazas, la cobertura y la revisión sobre un mismo sistema visual, se separa el explorador 3D con Cesium y se añade la exportación de alertas en CAP 1.2. También se valida el pronóstico de nivel de río contra lo observado.

  4. Calibración y verdad de campo (agosto de 2026)

    Se ajusta con 30 años de series el tiempo que tarda una crecida entre estaciones, se carga un corpus histórico de 24.679 eventos de protección civil fuera del motor, se arma un conjunto de 280 cortes de referencia y se mide el estado completo del sistema.

  5. Servicio continuo (agosto a octubre de 2026)

    El 26 de agosto el sistema se instala entero en un servidor Windows encendido 24/7, con el planificador y el panel como servicios, copia diaria de la base y un script de actualización que se niega a desplegar fuera de la rama principal.

Retos técnicos resueltos

Medir la anticipación sin inflarla: un aviso copiado de otro organismo no puede contar como predicción propia.
Medición, hecho reportado e inferencia propia viven en tablas separadas, con ejes de tiempo distintos para cuándo pasó algo y cuándo se supo. La evidencia apunta a la versión del evento usada. El backtest separa el tiempo de anticipación real del contado desde la primera lectura y bloquea sus cifras con motivos de un vocabulario cerrado.
Cruzar miles de eventos con 20.345 tramos sin colgar la máquina: un producto cartesiano llegó a bloquearla 44 minutos.
Los cruces usan ST_DWithin sobre geography sin conversión, para conservar el índice GiST, y las geometrías de entrada van en tablas temporales. El resultado del cruce se guarda mediante triggers en la misma transacción, y la pantalla de cobertura pasó de 41 segundos a responder al instante.
Distinguir si un corte terminó o si la fuente dejó de publicar.
La ausencia en un listado completo cierra el hecho solo con tres guardas: la corrida terminó bien, el listado no vino vacío y ninguna otra fuente sigue sosteniéndolo. Además, cortacircuito por fuente, cola de fallos de parseo y topes diarios y mensuales por proveedor.
Interpretar texto libre sin que el coste por documento se dispare.
Primero reglas deterministas; el modelo solo entra donde no hay estructura. En prensa, un filtro de palabras descarta casi todo antes de Claude Haiku, y Sonnet extrae a JSON validado con un reintento. A 25 de agosto, el 91,6 % de las observaciones salía sin modelo.
Estimar cuánto margen da una crecida aguas arriba antes de llegar a una ruta.
Correlación cruzada sobre 30 años de series entre pares de estaciones del mismo río: de 416 pares probados, 124 mostraron un desfase identificable, con mediana de 5 días. La verificación manual detectó que el orden de los pares se decidía comparando códigos como texto.

Galería

Más pantallas

Resultados

Lo que se ha medido

Cada cifra lleva su fuente y su fecha. Lo que no se ha medido va aparte, como potencial.

  • 36.087

    documentos públicos ingeridos y guardados sin modificar en los primeros 11 días

    Informe de estado del repositorio (docs/salidas/observatorio-estado-2026-08-25, script medir_estado.py) · 2026-08-25

  • 91,6 %

    de las observaciones extraídas con reglas deterministas, sin modelo de lenguaje

    Informe de estado del repositorio (30.856 de 33.693 observaciones, medir_estado.py) · 2026-08-25

  • 20.345

    tramos de 10 km con nivel de riesgo calculado para cinco ventanas temporales

    Tabla red_vial (migración 024), recuento del informe de estado · 2026-08-25

Documentos públicos ingeridos por día

Documentos crudos capturados cada día en los primeros once días de operación.

Documentos crudos: de 514 en 15 ago a 2.712 en 25 ago.

Fuente: Informe de estado del repositorio (docs/salidas/observatorio-estado-2026-08-25, medir_estado.py) · Datos a 2026-08-25 · El 15 de agosto es el día de arranque del sistema y el 25 de agosto se midió durante la propia jornada.

Ver los datos en tabla
Documentos públicos ingeridos por día
Periodo Documentos crudos
15 ago 514
16 ago 3.677
17 ago 3.331
18 ago 4.224
19 ago 4.296
20 ago 3.134
21 ago 3.886
22 ago 3.249
23 ago 2.870
24 ago 4.194
25 ago 2.712

Potencial · sin medición propia

  • Por tramo

    probabilidad de corte con la evidencia y la versión de cada dato usado

Cronología

Cómo ha evolucionado

  1. Arranque con las primeras fuentes y el motor de probabilidad por tramo.

  2. Panel rehecho, explorador 3D con Cesium y exportación de alertas en CAP 1.2.

  3. Primer parámetro ajustado con datos, la propagación de crecidas entre estaciones.

  4. Instalación completa en un servidor Windows en servicio 24/7.

  5. Operación continua con copia diaria de la base.

Evolución prevista

Lo siguiente

Trabajo planificado, todavía no disponible.

  1. Previsto · 01

    Entrega de alertas

    Configurar el destino del webhook, que ya tiene lista blanca de hosts y texto redactado, para que las alertas emitidas lleguen a una persona y no solo al panel.

  2. Previsto · 02

    Primer backtest calculable

    Añadir la forma de firmar que el catálogo de impactos está completo para una ventana, hoy sin comando ni pantalla, y publicar las seis métricas con la historia ya acumulada.

  3. Previsto · 03

    Ubicar los partes provinciales

    Geolocalizar los partes que describen el lugar en prosa: de las vialidades provinciales conectadas, solo la que publica la traza del tramo llega hoy al motor.

Proyectos relacionados

Más trabajo en esta línea

Ver todos los proyectos
  • Datos de demostración Tablero del CRM con las órdenes repartidas por estación del taller (preparación, diamantado, pintura, montaje, control de calidad y terminado), con operario y tiempo en curso.

    The Wheel Lab En producción

    CRM y ERP a medida para un taller de llantas

    Automoción y posventa · CRM/ERP a medida

    CRM y ERP a medida para un taller de reparación de llantas: de la consulta al cobro, con QR por llanta, recogidas con conductor y facturación por sucursal.

    • Python
    • FastAPI
    • SQLModel
    • Pydantic
  • Sunkiss MVP

    CRM omnicanal Sunkiss

    Cosmética y comercio electrónico · CRM/ERP a medida

    CRM y gestión de stock para una marca argentina que vende en Tiendanube y Mercado Libre: lotes con FEFO, ventas unificadas, cobros conciliados y anuncios.

    • Python
    • FastAPI
    • Pydantic
    • JWT
  • Panel «Licitaciones» del radar: contadores de licitaciones a las que presentarse, que cierran esta semana y presupuesto en juego, filtros por tipo de trabajo y tarjetas con encaje, dificultad, órgano, presupuesto y días para el cierre.

    Producto propio MVP

    Radar de licitaciones

    Contratación pública · Plataforma de análisis con IA

    Radar de licitaciones públicas que lee la Plataforma de Contratación, puntúa cada oportunidad, lee los pliegos con IA citando la página y prepara la oferta.

    • Python
    • FastAPI
    • Pydantic
    • PostgreSQL

Hablemos

¿Necesitas desarrollar una solución similar?

Cuéntanos el problema. Te respondemos con un planteamiento claro: qué haríamos, en cuánto tiempo y con qué entregables.