Ir al contenido

Pipeline de Alertas Waypoint (GPS)

Flujo: IMAP (waypoint.cl) -> RAW parquet -> Parser HTML -> Excel multi-hoja + Data Warehouse (fact_alertas_waypoint + dim_vehiculo) -> Supabase -> Power BI

:::note Pipeline-REFERENCIA del patrón Hexagonal F2.1 Primer pipeline migrado a IMAPConnector directo (no usa el shim legacy run_imap_ingest). Sesión 2026-05-27.

  • Constructor con connector=None opcional (DI ligero para tests).
  • ingest() delega al helper ingest_with_connector(self.imap_source, self.config, self.log).
  • Ya no importa core.ingest_imap.

Para crear pipelines nuevos: copiar este patrón. Ver openspec/specs/imap-connector/spec.md (8 Requirements) y Plan-Migracion-F2.2-F2.6 para los 5 pipelines IMAP que aún usan el shim. ADR base: ADR-Source-Connectors (accepted). :::

Correos automaticos de alerta.sistemas@waypoint.cl a la cuenta de Nestor Cumin (nestor.cumin@ingelsur.cl). Plataforma Waypoint Net (servicio GPS via Tranciti para Grupo SAESA).

TipoSubject patternVolumen (feb-may 2026)
Encendido No AutorizadoEncendido no autorizado {PPU}811
Exceso de VelocidadExceso de Velocidad en Zona (Flota) {zona}, {PPU}, {vel} Km/Hr915

Body HTML con pares Etiqueta: / Valor separados por lineas. Sin adjuntos.

CampoEjemplo
Fecha Referencia del Evento16:52:02 25-02-2026 (GMT-03:00) America/Santiago
PatenteJWRP23
Marca / Modelo / AnoMitsubishi / KATANA CRT 4X4 / 2018
GrupoBBPP Chiloe
FlotaCAMIONETA GG
ConductorPAISIL RODRIGUEZ RAUL
Zona de ReferenciaCastro
DireccionManuel Rodriguez, Castro, Provincia de Chiloe...
Altitud / Horometro / Odometro82.0 mts / 206 Hrs / 286629 Kms
CampoEjemplo
ZonaCiudad de Castro
Velocidad60km/h (Configurada: 50 km/h)

process_alertas_waypoint_from_raw.py:

  1. Carga RAW parquet (correos descargados)
  2. Clasifica tipo de alerta por subject
  3. Parsea HTML: extrae texto con BeautifulSoup, luego pares etiqueta/valor por linea
  4. Campos derivados: exceso_kmh = velocidad real - configurada
  5. Parsea fechas Waypoint (HH:MM:SS dd-mm-yyyy) a datetime

Excel en SALIDAS/alertas_waypoint_{timestamp}.xlsx con 3 hojas:

HojaContenidoColumnas extra
Encendido No AutorizadoSolo alertas de encendido
Exceso VelocidadSolo excesoszona_velocidad, velocidad_real/config/exceso
Todas las AlertasAmbos tipos combinadosTodos los campos

4.2 Data Warehouse (Power BI) — desde 2026-06-01

Sección titulada «4.2 Data Warehouse (Power BI) — desde 2026-06-01»

:::note Integración al DW — ADR ADR-Integracion-Alertas-Waypoint-DW (SDD alertas-waypoint-al-dw, archive #1326) El pipeline ahora también alimenta el star schema analítico para Power BI, vía una constelación propia (grano evento-vehículo, sin OT — reusa dim_calendario). :::

scripts/db/data_warehouse.py --alertas-waypoint construye en SALIDAS/db/data_warehouse.db:

TablaTipoContenido
fact_alertas_waypointhecho1 fila por alerta (dedup message_id + fallback hash sha1); medidas velocidad/exceso; latitud/longitud para mapa (extraídas del link Google Maps del HTML, q=LAT,LONG); conductor; FK fecha→dim_calendario
dim_vehiculodimensión1 fila por patente (PK upper().strip(), SCD1 replace): marca, modelo, anio, grupo, flota

Validado con datos reales (1726 alertas): geo 100%, FK fecha 100%, 74 vehículos. Registrado en MAPPINGS_DATA_WAREHOUSE (scripts/db/migrate_config.py) → arrastrado al sync Supabase → Power BI Service.

Arquitectura clave: el parseo vive una sola vez en build_df_alertas_waypoint (función pura); el DW la importa (data_warehouse.pydomains/, unidireccional). _extract_latlong, _build_fact_alertas_waypoint y _build_dim_vehiculo son funciones puras aparte (SRP/testabilidad).

Ventana de terminal
# Run con defaults (desde 01-02-2026)
python main_alertas_waypoint.py
# Historico completo
python main_alertas_waypoint.py --all
# Reprocesar sin descargar
python main_alertas_waypoint.py --offline
# Via orquestador (incluido en --all, Wave 2)
python run_pipeline.py alertas_waypoint
python run_pipeline.py --all
ArchivoUbicacion
Spec YAMLconfig/pipelines/alertas_waypoint.yaml
CLI standalonemain_alertas_waypoint.py
Pipeline classdomains/alertas_waypoint/pipeline.py
Parser/Excel/build_dfdomains/alertas_waypoint/process_alertas_waypoint_from_raw.py
Builder DW (fact+dim)scripts/db/data_warehouse.py (export_alertas_waypoint)
Registro sink Supabasescripts/db/migrate_config.py (MAPPINGS_DATA_WAREHOUSE)
RAW datadata_raw/emails_alertas_waypoint_raw/
Output ExcelSALIDAS/alertas_waypoint_*.xlsx
Output DWSALIDAS/db/data_warehouse.db (fact_alertas_waypoint, dim_vehiculo)
Teststests/test_alertas_waypoint_build_df.py, tests/test_export_alertas_waypoint.py
  • Usuario: Nestor (en config.py)
  • Email: nestor.cumin@ingelsur.cl
  • Host: imap.gmail.com
  • Remitente: alerta.sistemas@waypoint.cl