Lanchas
Lanchas horarios · Delta del Tigre
EN VIVO
PRÓXIMA EN VIVO
↙ Llega a Tigre
04:00
Interisleña S.A.C.I. · Troncal (Paraná Mini)
↙ Llega a Tigre
04:00
Troncal (Paraná Mini)
Arroyo Estudiante
!
Los horarios son siempre desde/hacia Tigre. La duración aprox. de cada servicio (⏱) es la del tramo completo: sumala a la hora si es Ida (sale Tigre) o restala si es Vuelta (llega Tigre) para estimar cuándo pasa por un punto intermedio del recorrido.
HORA LÍNEA · SERVICIO lunmarmiejueviesabdomfer
04:00 Troncal (Paraná Mini) / Ramal 1 (Paraná Mini)
09:30 Troncal (Paraná Mini) ⏱ 02:30 / 03:00 hs
10:00 Fraccionado (Paraná de las Palmas) ⏱ 01:30 / 01:45 hs
10:45 * Fraccionado (Paraná de las Palmas) ⏱ 01:30 / 01:45 hs
14:00 Fraccionado (Paraná de las Palmas) ⏱ 01:30 / 01:45 hs
14:30 Troncal (Paraná Mini) ⏱ 02:30 / 03:00 hs
16:00 Troncal (Paraná Mini) / Fraccionado (Paraná de las Palmas)
16:30 Ramal 1 (Paraná Mini) ⏱ 02:30 hs
18:00 Troncal (Paraná Mini) ⏱ 02:30 / 03:00 hs
18:30 Fraccionado (Paraná de las Palmas) ⏱ 01:30 / 01:45 hs
// DETALLE TÉCNICO

Arquitectura e implementación

De 4 PDF oficiales del gobierno bonaerense a una tabla de horarios navegable: descarga, parsing y modelo de datos detrás de Lanchas.

pdf 4 PDF oficiales gob. Buenos Aires
sha Descarga hash SHA-256
py pdfplumber tablas + coordenadas
orm Django ORM Empresa→Línea→Servicio→Horario
ui Template HTML + JS + localStorage
FUENTE OFICIAL

Ministerio de Infraestructura (GBA)

4 PDF publicados por el gobierno bonaerense, mismo motor de generación

minfra.gba.gob.ar/web/Transporte/Fluvial/
LINEA_450.pdf · LINEA_451.pdf · LINEA_452.pdf · LINEA_453.pdf

LA APP DESCARGA

  • Jilguero (450), Interisleña (451+452 combinada) y Delta Argentino (453)
  • Hash SHA-256 por archivo — combinado para el par 451/452 — para detectar cambios reales
PARSING

Un motor común, 3 parsers

Los 3 PDF comparten layout — BaseGobiernoParser extrae, cada parser solo ajusta lo propio

comun.py Bloques de tabla, dirección ida/vuelta por color de fila, condiciones por triángulos de color, notas al pie.
jilguero.py · interislena.py · delta.py Cada uno define solo sus columnas de día (7 u 8) y correcciones puntuales de nombres.
NORMALIZACIÓN

Consistencia entre fuentes

Cada ajuste sigue un criterio explícito y documentado, no una inferencia automática

Vías equivalentes "Boca Arroyo Durazno" y "Boca de Arroyo Durazno" refieren al mismo lugar. Criterio: se compara el nombre en minúscula, sin artículos "de"/"del" y con espacios colapsados; si coincide con una vía ya registrada, se reutiliza en vez de duplicar.
Correcciones puntuales por línea Algunos nombres de lugar requieren un ajuste de clasificación (ej. "Arroyo Espera" → "Río Espera" en la línea Jilguero). Criterio: mapa CORRECCIONES_VIA por parser, cada entrada verificada contra el documento original antes de aplicarse.
Nombres de servicio duplicados Dos servicios con el mismo nombre genérico (ej. dos "Troncal") dentro de una línea. Criterio: se agrega el destino final entre paréntesis para diferenciarlos, ej. "Troncal (Paraná Miní)".
Ramales coincidentes en horario Distintos servicios de una misma línea que salen a la misma hora (o un mismo servicio con varios destinos a la vez). Criterio: se agrupan por línea, dirección y hora en una sola fila, con los nombres separados por "/".
Feriados Interisleña no publica una columna de feriados propia. Criterio: un feriado que cae viernes usa el horario de sábado, cualquier otro usa el de domingo. Jilguero y Delta Argentino sí tienen columna propia y la usan directamente.
Formato de horarios Variantes de formato en la hora (ej. "13;30", "03: 30"). Criterio: se normalizan al formato HH:MM antes de guardar.
ARQUITECTURA

Django ORM — PostgreSQL

Sin cache de archivos: los horarios se normalizan y persisten en modelos reales

Empresa → Línea → Servicio → Horario Vías (ríos/arroyos) asociadas por M2M vía RecorridoTramo, con orden de recorrido.
Deduplicación de vías Nombres casi-iguales del PDF (ej. "Boca Arroyo Durazno") se fusionan por nombre normalizado.
ActualizacionLog Auditoría de cada corrida del pipeline: errores, notas y conteos por línea.
STACK TÉCNICO

Tecnologías aplicadas

Python + Django

ORM, views, service layer y management commands.

pdfplumber

Extracción de tablas por coordenadas, no texto plano.

PostgreSQL

Mismo motor en dev y prod, vía DATABASE_URL.

Vanilla JS

Acordeón de líneas, buscador y filtros, sin dependencias.

localStorage

Favoritos 100% client-side, sin cuentas ni sesión.

CSS custom properties

Temas Día / Noche en tiempo real.

HERRAMIENTAS CLI

Management commands

Actualización y validación del catálogo sin depender de la interfaz web.

lanchas_inicializar Crea Empresa/Línea en la base — se corre una sola vez.
lanchas_descargar_pdfs [--linea N] Descarga los PDF oficiales del gobierno.
lanchas_parsear_pdfs [--linea N] [--forzar] Parsea y carga los horarios en la base.
lanchas_actualizar [--linea N] [--forzar] Descarga + parseo en un solo paso — cron semanal.
lanchas_validar Chequeo de integridad del catálogo cargado.
lanchas_listar [--empresa] [--via] Exploración rápida de los datos cargados.