<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: PasosHoy</title>
    <description>The latest articles on DEV Community by PasosHoy (@pasoshoy).</description>
    <link>https://dev.to/pasoshoy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4218082%2F62807c40-37e3-48bd-a357-d221b054d254.png</url>
      <title>DEV Community: PasosHoy</title>
      <link>https://dev.to/pasoshoy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pasoshoy"/>
    <language>en</language>
    <item>
      <title>Monitorear pasos fronterizos con datos abiertos: por qué mostramos Sin confirmar antes que Abierto</title>
      <dc:creator>PasosHoy</dc:creator>
      <pubDate>Sat, 31 Oct 2026 00:28:18 +0000</pubDate>
      <link>https://dev.to/pasoshoy/monitorear-pasos-fronterizos-con-datos-abiertos-por-que-mostramos-sin-confirmar-antes-que-abierto-15i8</link>
      <guid>https://dev.to/pasoshoy/monitorear-pasos-fronterizos-con-datos-abiertos-por-que-mostramos-sin-confirmar-antes-que-abierto-15i8</guid>
      <description>&lt;p&gt;Si un sitio te dice que un paso de cordillera está abierto y no lo está, perdés el día de viaje o algo peor. Por eso la regla central de nuestro tablero de pasos entre Argentina y Chile es una: ante la duda, el paso figura "Sin confirmar", nunca "Abierto". Este artículo cuenta cómo leemos las fuentes oficiales, cómo guardamos la hora de cada dato y qué hacemos cuando dos organismos dicen cosas distintas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué fuentes leemos
&lt;/h2&gt;

&lt;p&gt;Del lado argentino, el Ministerio de Seguridad de la Nación publica en argentina.gob.ar tres cosas que usamos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Un listado JSON (&lt;code&gt;/seguridad/pasosinternacionales/listado&lt;/code&gt;) con 155 pasos, 75 de ellos con Chile. Trae el estado (&lt;code&gt;estado_prioridad&lt;/code&gt;), el horario de Seguridad, el horario de Cancillería y un campo &lt;code&gt;fecha_hora_consulta&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;La ficha HTML de cada paso, con el bloque "Información provista por": qué organismo informa el estado (en la mayoría, Gendarmería Nacional) y cuándo lo actualizó por última vez, más la hora y el aviso de Vialidad Nacional.&lt;/li&gt;
&lt;li&gt;Un detalle JSON por paso (&lt;code&gt;detalle_consolidado&lt;/code&gt;) con demoras, horario de atención y el parte de Vialidad del tramo que llega al límite.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El clima es el de Locationforecast 2.0 de MET Norway, en el punto y a la altura del paso. El parte de Vialidad de Chile (MOP) no lo leemos: no declara licencia de reutilización, así que el colector queda apagado (&lt;code&gt;COLLECT_CL_MOP = "false"&lt;/code&gt;) hasta tener permiso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cada cuánto
&lt;/h2&gt;

&lt;p&gt;Un Cron Trigger de Cloudflare Workers corre cada 15 minutos (&lt;code&gt;*/15 * * * *&lt;/code&gt;) y en cada corrida:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;se lee el listado completo;&lt;/li&gt;
&lt;li&gt;se leen fichas y detalles por tandas, primero las de los pasos con página propia y después las demás, la menos reciente primero;&lt;/li&gt;
&lt;li&gt;se piden como mucho 5 pronósticos, y solo los que ya vencieron según el &lt;code&gt;Expires&lt;/code&gt; de MET Norway, con &lt;code&gt;If-Modified-Since&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cada corrida hace como mucho 36 pedidos (&lt;code&gt;FETCH_BUDGET&lt;/code&gt;), porque el plan gratuito de Workers corta en 50 subpedidos. Una ficha que falla pasa al final de la cola y no frena a las demás.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tres horas distintas para un mismo dato
&lt;/h2&gt;

&lt;p&gt;El error más fácil es mostrar una sola hora. Guardamos varias, todas en ISO 8601 UTC:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;consulted_at&lt;/code&gt;: el &lt;code&gt;fecha_hora_consulta&lt;/code&gt; del listado. Es la hora en que el sitio oficial consultó su propia base, no la hora en que cambió el estado.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fetched_at&lt;/code&gt;: cuándo leímos nosotros el listado.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;state_provider_at&lt;/code&gt;: cuándo el organismo cargó el estado, según la ficha. Esta es la que acredita el dato.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;changed_at&lt;/code&gt;: la primera lectura en la que vimos el estado actual.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cada actualización del organismo queda en &lt;code&gt;ar_provider_updates&lt;/code&gt; y cada cambio de estado u horario en &lt;code&gt;ar_changes&lt;/code&gt;. Con eso armamos el historial de cada paso, que guardamos desde el 23 de octubre de 2026. La hora de un cambio es la de la lectura en que apareció, con un margen de unos 15 minutos. Si pasó más de una hora sin lecturas, ese tramo figura "sin dato" en vez de rellenarse con el último estado.&lt;/p&gt;

&lt;p&gt;Las horas de la fuente vienen en hora argentina sin zona ("25/10/2026 16:08:44"). Argentina usa UTC-3 todo el año, así que la conversión es fija. Chile continental cambia de horario, así que la diferencia entre los dos países se calcula para cada fecha. Una hora del organismo que queda más de 15 minutos en el futuro no se toma.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cuándo un "Abierto" pasa a "Sin confirmar"
&lt;/h2&gt;

&lt;p&gt;La función que decide el estado parte del dato oficial y solo puede bajarlo. Un "Abierto" pasa a "Sin confirmar" si:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no tuvimos una lectura del listado en las últimas 2 horas;&lt;/li&gt;
&lt;li&gt;el organismo no lo actualizó en más de 24 horas, o la ficha no trae hora;&lt;/li&gt;
&lt;li&gt;Cancillería lo publica como cerrado;&lt;/li&gt;
&lt;li&gt;Vialidad Nacional informa corte total en el tramo que llega al límite;&lt;/li&gt;
&lt;li&gt;el horario oficial lo da cerrado en esta época del año, o ya terminó o todavía no empezó el horario de hoy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un "Cerrado" viejo, en cambio, queda como "Cerrado" con el aviso de desde cuándo no hay cambios. La razón está en los datos: el 23 de octubre, 40 de los 75 pasos con Chile tenían la última actualización de hace más de 24 horas, varios desde julio. Muchos cierran por temporada y nadie vuelve a tocar el dato. Un cerrado desactualizado no manda a nadie a la montaña; un abierto desactualizado sí.&lt;/p&gt;

&lt;p&gt;La versión simplificada de la regla, sin los detalles de horarios:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;HORA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="nx"&gt;e3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;estadoVisible&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dato&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ahora&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// dato: { estado, leidoEn, organismoEn, cancilleriaCerrado, rutaCortada }&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;estado&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ABIERTO&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;dato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;estado&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CERRADO&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cerrado&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sin confirmar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dudas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;dato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;leidoEn&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;ahora&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;dato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;leidoEn&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;HORA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;// lectura vieja&lt;/span&gt;
    &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;dato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;organismoEn&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;ahora&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;dato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;organismoEn&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;HORA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// organismo sin actualizar&lt;/span&gt;
    &lt;span class="nx"&gt;dato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cancilleriaCerrado&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                                     &lt;span class="c1"&gt;// otra fuente oficial lo da cerrado&lt;/span&gt;
    &lt;span class="nx"&gt;dato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rutaCortada&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                                            &lt;span class="c1"&gt;// Vialidad: corte total al límite&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;dudas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sin confirmar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Abierto&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Junto a un "Sin confirmar" mostramos siempre el último dato oficial, con sus palabras y su fecha, para comprobarlo en la fuente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cuando dos organismos no coinciden
&lt;/h2&gt;

&lt;p&gt;No elegimos por nadie. Si Cancillería dice "Cerrado por temporada invernal" o "Habilitado solo para transporte de cargas", la nota va al lado, textual, y un "Abierto" de Gendarmería con Cancillería en contra queda "Sin confirmar".&lt;/p&gt;

&lt;p&gt;La única excepción salió de un caso real. El 27 de octubre de 2026, en Pino Hachado, Gendarmería no actualizaba el estado desde el 5 de octubre, pero esa mañana Vialidad Nacional había informado habilitada la RN 242. El sitio oficial lo mostraba abierto y nuestra regla lo bajaba a "Sin confirmar". Desde entonces, si el organismo no actualizó un "Abierto" pero Vialidad informó habilitado el tramo que llega al límite en las últimas 24 horas, el paso sigue "Abierto", con la fecha vieja del organismo a la vista.&lt;/p&gt;

&lt;p&gt;Para eso no sirve el campo &lt;code&gt;estado_vialidad&lt;/code&gt; del listado: el 27 de octubre decía "HABILITADA" en todos los pasos menos uno, el túnel de Cristo Redentor, en corte total por nevadas. Usamos el parte del detalle, leído en las últimas 2 horas y solo si el tramo es el que llega al límite.&lt;/p&gt;

&lt;h2&gt;
  
  
  El resultado, un viernes de octubre
&lt;/h2&gt;

&lt;p&gt;El 30 de octubre a las 21:00 (hora de Argentina), el tablero mostraba 34 pasos para cruzar en vehículo: 1 abierto, 14 cerrados y 19 sin confirmar. Diecinueve "Sin confirmar" parece mucho, pero es lo que dicen las fuentes cuando se leen con fecha, y preferimos ese número a un tablero verde que nadie puede respaldar.&lt;/p&gt;

&lt;p&gt;Las reglas completas y la tabla de fuentes con sus licencias están en la metodología de &lt;a href="https://pasoshoy.com/metodologia/" rel="noopener noreferrer"&gt;PasosHoy&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Fuente de los datos de los pasos: Ministerio de Seguridad de la Nación, con información de Gendarmería Nacional, Vialidad Nacional y otros organismos (argentina.gob.ar). Los contenidos de argentina.gob.ar tienen licencia Creative Commons Atribución 4.0 Internacional (CC BY 4.0). Pronóstico: MET Norway (CC BY 4.0).&lt;/p&gt;

</description>
      <category>opendata</category>
      <category>javascript</category>
      <category>cloudflare</category>
      <category>spanish</category>
    </item>
  </channel>
</rss>
