Dirección · Paso 1 de 13

Plataforma de Datos Andesmar en Google Cloud

De Betterez al tablero MicroStrategy — en tiempo casi real, auditable y automatizado. Una infraestructura propia que transforma cada venta, boleto y manifiesto en inteligencia de negocio confiable.

App 4.0.0 Schema 5.0.0 Datos al 10 jun 2026 13 jobs automatizados

Sección 02

Visión en 30 segundos

Andesmar opera hoy un pipeline de datos en Google Cloud que toma la información de ventas, boletos y manifiestos desde Betterez y la transforma en tableros de negocio.

<1%
Diferencia de montos vs Legacy en meses cerrados (comparación multi-moneda correcta)

Estados en tiempo casi real

Webhooks actualizan cancelaciones, cambios y reservas expiradas al instante — no en un batch nocturno.

Recuperación automática

13 jobs programados detectan transacciones o manifiestos faltantes y los reinyectan desde la API de Betterez.

¿Qué sistema usar para qué?

Necesidad de negocioFuente recomendada
Tablero oficial (pasajes, revenue, agencias)bi_rebuild.fact_ticket + filtros documentados
Auditoría técnica / reconciliaciónPostgreSQL public + scripts SQL
Estado vivo de un boleto hoyAPI Betterez (Operations)
Comparar con pantalla Betterez por agenciaBI con is_paid_including_partial_cancel, misma moneda y sale_date

Sección 03

Arquitectura en 4 capas

Cada capa responde una pregunta distinta. Juntas forman un sistema auditable de punta a punta.

Betterez
Fuente operativa
Capa 1 · Raw
GCS + raw_events
Capa 2 · OLTP
public
Capa 3 · BI
bi_rebuild
MicroStrategy
Tableros

↑ Jobs de red de seguridad (consulta activa a Betterez) alimentan Capas 1 y 2 ↑

Capa 1 — Raw

¿Qué nos dijo Betterez exactamente?

JSON inmutable en Google Cloud Storage. Usado por ingeniería, auditoría y recuperación.

Capa 2 — OLTP

¿Cuál es el estado actual de cada boleto?

Tablas operativas: ventas, tickets, pagos, manifiestos. Copia fiel y actualizada.

Capa 3 — BI

¿Cuánto vendimos, por agencia, ruta, estado?

Hechos y dimensiones curados para MicroStrategy. Fuente oficial de KPIs.

Capa 4 — Safety nets

¿Se nos escapó algo?

13 Cloud Run Jobs que buscan y recuperan datos automáticamente, sin intervención humana.

Sección 04

De la venta al tablero

Cuando alguien compra un pasaje en Betterez, este es el camino que recorren los datos.

1

Webhook

Betterez envía el evento con firma criptográfica HMAC

2

JSON inmutable

Se guarda el original completo en GCS antes de interpretar

3

Tablas operativas

Se extraen ventas, boletos, pagos y manifiestos a PostgreSQL

4

ETL diario

El job bi-rebuild-incremental empaqueta para MicroStrategy

¿Qué es un webhook? Es como recibir un WhatsApp cada vez que alguien compra un pasaje — Betterez nos avisa al instante. La API REST es como llamar al mostrador al día siguiente para verificar que no se nos escapó ninguna venta.

Tipos de eventos que procesamos

FamiliaEjemplosQué guardamos
Transaccionesventa completada, cancelada, actualizadaVentas, boletos, pagos, reembolsos, ítems vendidos
Ticketsboleto actualizado, movidoEstado actualizado del boleto (cancelación post-venta)
Manifiestoscreado, actualizado, cerradoPasajeros, paradas, ocupación del servicio
Horarioscambio de itinerarioCatálogo de servicios y distancias en km

Sección 05

Ecosistema Betterez integrado

Dos modos complementarios: escucha en tiempo real y consulta activa como red de seguridad.

Escucha (push)

Webhooks Betterez → POST /api/v1/webhooks/betterez

Fuente principal para ventas, tickets y manifiestos. Eventos en tiempo casi real con validación HMAC.

Consulta (pull)

Jobs y scripts contra API REST de Betterez

Red de seguridad, backfills históricos, reconciliación y sincronización de catálogos (rutas, agencias).

APIs de Betterez que usamos hoy

Operations

Manifiestos, tickets, transacciones, reintentos de webhooks

Inventory

Itinerarios, rutas, horarios y distancias en km

Accounts

Catálogo de ~300 agencias con nombres canónicos

Webhooks API

Diagnóstico de eventos no entregados

Matriz: problema → herramienta

SituaciónCómo lo resolvemos
Venta no llegó por webhookJob diario transactions-safety-net + API GET /transactions
Estado de boleto desactualizadoWebhook ticket.* + job status-reconciliation cada 6 h
Manifiesto sin actualizarSync cada 30 min + job manifests-safety-net diario
Agencia renombrada en BetterezJob mensual agency-catalog-sync
Webhook perdido ayerJob undelivered-webhooks (desplegado; scheduler PAUSED hasta smoke — ver runbook)
Itinerario o km faltanteJob semanal schedules-safety-net + Inventory API

Sección 06

Principio Raw First

Guardamos el original antes de interpretar. Es la base de la confiabilidad del sistema.

1. Guardar primero

Cada evento de Betterez se persiste completo en Google Cloud Storage y en raw_events antes de extraer tablas de negocio.

2. Reprocesar sin perder

Si mañana cambia una regla de BI, podemos reprocesar desde el JSON original. El dato histórico nunca se pierde.

3. Idempotencia

Mismo payload → mismo hash SHA256. Los reintentos de Betterez se deduplican automáticamente: un evento nunca se cuenta dos veces.

"Antes de escribir en tablas de negocio, el JSON completo del evento se guarda en almacenamiento en la nube. Si mañana cambia una regla de BI, podemos reprocesar desde el original."
Webhook Betterez GCS JSON inmutable raw_events Trazabilidad Tablas OLTP sales · tickets · manifiestos

Sección 07

Red de seguridad automatizada

13 Cloud Run Jobs activos en Google Cloud. Si algo no llegó por webhook, lo buscamos y lo traemos automáticamente.

Safety-nets = "¿se nos cayó algo?" → lo buscan y lo traen.
Reconciliación = "¿coincide con Betterez?" → corrigen drift.
Incremental = empaqueta OLTP para MicroStrategy.

Ingesta de manifiestos

  • andesmar-manifests-sync — cada 30 min
  • betterez-manifests-safety-net — diario
  • andesmar-manifest-labels-sync — semanal
  • manifest-leg-guard — semanal

Ventas y webhooks

  • betterez-transactions-safety-net — diario 06:30
  • betterez-undelivered-webhooks — diario 07:00 (scheduler PAUSED jun-2026)
  • betterez-status-reconciliation — cada 6 h
  • betterez-raw-events-relational-catchup — cada 15 min

Catálogos y metadatos

  • andesmar-agency-catalog-sync — mensual
  • andesmar-route-catalog-sync — mensual
  • andesmar-manifest-tag-catalog-sync — mensual
  • schedules-safety-net — semanal

Capa analítica

  • bi-rebuild-incremental — 2× al día (00:00 y 12:00 ART)

Reconstruye tablas bi_rebuild con tickets y manifiestos del lookback.

Sección 08

Capa BI bi_rebuild

La capa analítica activa — única fuente para tableros MicroStrategy nuevos. Datos limpios, con reglas de negocio y nombres estables.

1.175.029
Boletos en fact_ticket
876.436
Ventas en fact_sale
519.457
Paradas en fact_manifest_leg
93,2%
Boletos con manifiesto asignado

297 agencias

Catálogo canónico con agency_label unificado para rankings y filtros en MSTR.

13 etiquetas de servicio

Nacional, internacional, línea provincial, La Cuyanita, encomiendas, IP y más.

Multi-moneda

ARS, CLP, BOB y USD con currency explícita en cada hecho.

Capacidades analíticas

Seguros y menores

50.828 seguros VIAJE PROTEGIDO · 4.611 menores <3 años · 7.015 tarifas niño

Ocupación por parada

fact_manifest_leg: cuántos suben y bajan en cada estación de cada servicio.

Cambios de boleto

Trazabilidad de sucesores cuando un pasaje se cambia por otro (fase 1 y 2 implementadas).

Pregunta de negocio → dónde mirar

PreguntaTabla BIFiltro clave
¿Cuántos pasajes vendimos?fact_ticketis_paid = true + una moneda
¿Cuánto facturamos?fact_ticketSum(ticket_amount) pagados
¿Por agencia / ranking?fact_sale + dim_agencyagency_label canónico
¿Nacional vs internacional?fact_tickethas_nacional / has_internacional
¿Seguros vendidos?fact_sold_itemis_insurance = true
¿Ocupación por parada?fact_manifest_legFiltro por manifest_date

Sección 09

Calidad de datos — evidencia

Comparaciones reproducibles entre GCP, Legacy y Betterez. Los números están auditados y documentados.

GCP vs Legacy — meses cerrados

+0,25%
Diferencia de conteos ene–may 2026 (~1.400 tickets en ~500.000)
<1%
Diferencia bruta de montos (comparación multi-moneda correcta)
0
Diferencias de monto en 2.502 boletos emparejados (día 03/06/2026)

Día calendario 03/06/2026 — cruce detallado

MétricaLegacyGCPResultado
Boletos del día2.5042.53498,7% emparejados
Montos en intersección$139.751.830$139.751.830Coincidencia exacta
Estados distintos37 boletosGCP refleja cancelaciones y cambios en tiempo real
payment expiredNo modelado27 boletosMayor fidelidad al producto Betterez

Remediación y backfills completados (jun 2026)

  • Drift is_cancelled: 14 → 0 tickets
  • Backfill manifiestos ene–may: 525.610 filas hasta 31-may
  • Sync BI path-aware: +2.622 manifest_id asignados
  • Bridge paso 9: 540k tickets actualizados en fact_ticket_mstr
  • Backfill webhooks abr–jun: cientos de transacciones recuperadas
  • GCP +3.626 TX vs Legacy en 2026 (más completo)
  • Legacy sin equivalente en GCP en 2026: 0 transacciones
  • bi_match_gap_has_me ene–jun: 0

Sección 10

Seguridad y calidad de desarrollo

Ingeniería de nivel empresarial: seguridad en capas, tests automatizados y documentación extensa.

Seguridad en capas

HTTPS/TLS — Cloud Run con certificados gestionados por Google Cloud
HMAC-SHA256 — Firma criptográfica en cada webhook. Enforce activo: 65×200 OK en staging
API Key — Secret Manager para consultas internas. Endpoints protegidos
Health checks/ready verifica PostgreSQL y GCS antes de recibir tráfico

Calidad de ingeniería

pytest

Tests unitarios e integración

E2E

Suite end-to-end local

ruff

Lint automático de código

pip-audit

Auditoría CVE en CI

Alembic — Migraciones versionadas de base de datos. 6+ migraciones activas con trazabilidad completa de cambios de schema.

Documentación canónica

Arquitectura

Informe vivo, modelo de datos, ingesta webhooks, seguridad

BI / MicroStrategy

Guías de métricas, estados de boleto, agencias, seguros, ocupación

Operación

Runbooks de jobs, reconciliación, manifiestos, ETL incremental

Sección 11

Línea de tiempo — Ene a Jun 2026

Seis meses de construcción continua: de las fundaciones OLTP al ecosistema completo automatizado.

Enero
  • Fundaciones OLTP y raw-first
  • Alembic + migraciones
  • Validación HMAC webhooks
  • Primeros tests pytest
Febrero
  • Módulo manifiestos completo
  • JWT Betterez + cliente HTTP
  • Primer ETL BI incremental
  • Guías de seguridad
Marzo
  • ETL canónico con lookback
  • Backfills históricos
  • Guías MicroStrategy
  • Dim schedule + km
Abr–May
  • Reconciliación masiva
  • Auditorías Legacy vs GCP
  • Backfill webhooks abr–jun
  • Posicionamiento BI oficial
Junio
  • 13 jobs automatizados activos
  • Seguridad staging (HMAC + API Key)
  • Remediación datos Oleadas 1–2
  • Backfill manifiestos cerrado
504 h
Horas de desarrollo estimadas (ene–abr 2026)
58
Entregables discretos inventariados
5 sprints
De fundaciones a ecosistema completo

Sección 12

bi_rebuild es la fuente oficial

Una plataforma de datos propia, auditable y automatizada que transforma Betterez en inteligencia de negocio confiable para Andesmar.

Captura

Webhooks en tiempo casi real + 13 jobs de recuperación automática

Transformación

ETL diario con reglas de negocio, multi-moneda y 13 etiquetas de servicio

Confianza

Raw-first, auditorías Legacy vs GCP, seguridad HMAC y tests automatizados

Andesmar API · Google Cloud · Betterez · MicroStrategy · Junio 2026