Auditoría de montos · Reunión negocio

¿Coinciden las ventas entre Legacy y la plataforma GCP?

Un recorrido pedagógico por cómo medimos el dinero de los boletos, por qué a veces los números “no cierran” entre sistemas, y qué fuente usar para cada decisión de negocio.

Corte GCP: 11 jun 2026 · 23:52 UTC Ene – Jun 2026 Fuentes: Legacy SAP · GCP OLTP · BI bi_rebuild
1

Resumen ejecutivo

Lo esencial en 30 segundos

Conclusión principal: no hay pérdida masiva de ventas entre Legacy y GCP. En meses cerrados (enero–mayo 2026), el monto bruto difiere menos del 1,3% cuando se compara correctamente. GCP captura el mismo universo de operaciones, con mejor detalle de moneda, estados y devoluciones.
< 1,3%
Brecha bruto Legacy vs GCP
ene–may 2026 (comparación correcta)
28,9 M
Boletos vendidos GCP
ene–jun 2026 (todas las monedas)
~$28,9 B
Monto bruto acumulado GCP
nominal multi-moneda
~6,5%
Diferencia bruto → neto
por devoluciones (GCP ARS)

Preguntas frecuentes del negocio — respuestas directas:

¿Perdimos ventas en la migración?
No. Misma magnitud de boletos y montos.
Validado mes a mes ene–may.
¿El tablero refleja lo vendido?
Sí, con reglas de negocio explícitas.
Usa is_paid — excluye cancelados/devueltos.
¿Por qué Legacy “parece” más grande?
Error de comparación de moneda.
Legacy mezcla ARS+CLP+BOB+USD sin etiquetar.
¿Qué fuente usar hoy?
GCP bi_rebuild + moneda explícita.
Legacy solo para auditoría histórica.
2

Tres fuentes de verdad (y para qué sirve cada una)

Antes de comparar números, hay que saber qué sistema responde qué pregunta

Origen
Betterez
Sistema de venta de pasajes
webhooks
GCP · Capa operativa
public (OLTP)
Copia fiel en tiempo casi real
ETL diario
GCP · Capa analítica
bi_rebuild
Tableros MicroStrategy

Legacy SAP (BetterezSAP)

Sistema histórico pre-GCP. Recibía lotes de ventas y guardaba cada operación como fila en una tabla de tickets.

  • Fecha: cuándo el batch guardó el evento (event.created)
  • Sin campo moneda ISO — solo país AR
  • Devoluciones: filas nuevas con prefijo R- y monto negativo
  • No recibe actualizaciones posteriores de estado

Uso: auditoría histórica

GCP + BI (plataforma actual)

Recibe cada venta y cambio de estado vía webhooks. Una fila por boleto, con moneda, refunds y estados curados para reportes.

  • Fecha de venta: sale_date (hora Argentina en tablero)
  • Moneda explícita: ARS, CLP, BOB, USD
  • Devoluciones en tabla separada (refund_details)
  • Estados actualizados (cancel, changed, expired)

Uso: KPIs y tableros

3

La comparación correcta (y la incorrecta)

Cómo se audita Legacy vs GCP — reglas que evitan conclusiones erróneas

⚠️
Regla de oro: nunca comparar Legacy contra GCP filtrando solo currency = ARS. Legacy no distingue monedas; su campo accountCountry = AR agrupa pesos argentinos, pesos chilenos, bolivianos y dólares en una sola suma nominal.
Aspecto Comparación correcta ✓ Comparación incorrecta ✗
Universo GCP Todas las monedas (suma nominal) Solo ARS
Filtro Legacy isRefund = false (filas de venta) Incluir filas R- en el bruto
Filtro GCP Venta padre, no PI-, no deleted Mezclar transacciones de seguros (PI-)
Fecha Legacy: event.created · GCP: sale_date Asumir misma frontera de mes
Brecha típica ene–may < 1,3% bruto +4% a +7% (artefacto)

Detrás de escena (técnico): el SQL reproducible está en scripts/sql/bi_rebuild/operativo/validate_amounts_legacy_vs_gcp_monthly.sql. La auditoría documentada completa: docs/comunicaciones/2026-06-03_auditoria_montos_efectivos_legacy_vs_gcp.md.

4

La trampa de la moneda — explicación pedagógica

Por qué en enero Legacy “parecía” 4% más grande que GCP (y no lo era)

Analogía: imaginen que Legacy es una caja registradora que suma “todo lo vendido en operaciones argentinas” sin distinguir si el billete es peso, peso chileno o dólar. GCP tiene cajones separados por moneda. Si comparan Legacy contra solo el cajón de pesos argentinos, parece que falta plata — pero en realidad está en los otros cajones.

Enero 2026 — desglose GCP por moneda

Moneda Tickets Monto bruto Nota
ARS 131.950 $ 7.151,7 M Pesos argentinos
CLP 9.243 $ 311,9 M Pesos chilenos (nominal)
BOB 488 $ 0,7 M Bolivianos
USD 222 $ 0,5 M Dólares
Total GCP (correcto) 141.903 $ 7.464,7 M Comparar con Legacy
Legacy venta (AR) 141.586 $ 7.433,8 M Δ +0,42%

Si comparáramos Legacy ($ 7.433,8 M) contra solo ARS ($ 7.151,7 M), la brecha sería +3,9% — completamente artificial.

5

Tres formas de medir el mismo mes en GCP

No es un error: son tres preguntas de negocio distintas

1. Monto bruto — “¿Cuánto se vendió?”
$ 7.151,7 M
Suma de todos los boletos vendidos en ARS (enero 2026)
SUM(tickets.total) · venta padre · no PI-
2. Monto neto — “¿Cuánto quedó después de devoluciones?”
$ 6.687,1 M
−$ 464,6 M (−6,5%) por refunds registrados
bruto − SUM(refund_details) por boleto
3. BI oficial — “¿Cuánto revenue reconoce el tablero?”
$ 6.633,9 M
−$ 53,2 M adicional (−0,8%) — excluye tickets con cancel/devolución
SUM(ticket_amount) WHERE is_paid = true

¿Por qué neto ≠ BI oficial?

El neto resta el monto devuelto pero puede dejar valor residual en cancelaciones parciales (penalidad retenida). El BI oficial (is_paid) excluye todo el boleto del revenue si hubo cualquier devolución o cancelación — regla conservadora para KPIs de ventas netas.

Para cuadrar con la web de Betterez por agencia: usar is_paid_including_partial_cancel (incluye parciales).

6

Tabla mensual completa — GCP 2026

Datos en vivo al corte del 11-jun-2026 23:52 UTC

Corte de datos: OLTP GCP hasta 2026-06-11 23:52 UTC · BI fact_ticket hasta 2026-06-11 (date) · Legacy: última corrida exitosa 2026-06-11 ~17:17 UTC (VPN; no disponible al refresh nocturno).

GCP OLTP — bruto y neto por mes

Todas las monedas (nominal) + desglose ARS

Mes Tickets
all
Bruto
all
Neto
all
Tickets
ARS
Bruto
ARS
Neto
ARS
Tickets
no-ARS

GCP BI — tablero MicroStrategy

Mes Tickets BI BI oficial
all · is_paid
BI oficial
ARS
Neto BI
all
7

Legacy vs GCP — comparación mes a mes

Metodología correcta: Legacy bruto venta vs GCP bruto nominal all

Mes Tkt Legacy Tkt GCP Bruto Legacy Bruto GCP Δ bruto % Δ Neto Legacy Neto GCP Estado
Interpretación para negocio: en enero–mayo, GCP está consistentemente un poco por encima de Legacy (+0,4% a +1,3%). Eso es ruido normal: diferencia de reloj entre fecha de venta y fecha de batch, más micro-drift de ingesta. No indica ventas faltantes en GCP — al contrario, GCP captura más eventos post-venta.

Junio 2026 — mes en curso

Junio muestra brecha mayor (~6–11%) porque el mes no está cerrado: Legacy y GCP cortan en momentos distintos del día, y hay ~1.976 tickets ARS en OLTP que aún no llegaron al tablero BI (lag ETL diario, ~$104 M). No interpretar como pérdida de ventas.

8

OLTP vs tablero BI — calidad del tablero

¿El tablero refleja lo que está en la base operativa?

0
Diferencias de monto
matched ene–may ARS
< 0,2%
Drift bruto mensual
ene–may 2026
−6,7%
Drift junio ARS
lag ETL (transitorio)

Drift public ↔ bi_rebuild (ARS)

Mes Tkt OLTP Tkt BI Δ tickets Bruto OLTP Bruto BI Δ bruto % drift

Detrás de escena: el ETL incremental corre 2×/día (00:00 y 12:00 ART). La ventana de lookback la define etl_control.lookback_interval (prod jun-2026: 2 días). Ventas tardías del mismo día pueden aparecer en OLTP pero no en BI hasta la corrida nocturna. Junio acumula ~1.976 tickets ARS sin fila BI (~$104 M) al corte.

9

Por qué hay brechas — seis causas explicadas

Cada diferencia tiene origen distinto; no es un solo bug

1. Moneda mal comparada
+4% a +7% inventado
Legacy AR vs GCP solo ARS. No es bug. Solución: comparar all nominal.
2. Reloj de fecha distinto
±0,2–0,4% por mes
Venta 31/ene 23:50 puede caer en feb en Legacy y ene en GCP. Reasignación de mes.
3. Modelo de devolución
Legacy: filas R- · GCP: refund_details
Bruto coincide; neto también. Conteos de “cancelados” divergen.
4. Estados post-venta
Legacy stale · GCP actualizado
Afecta KPIs de estado, no el bruto total histórico.
5. Tres métricas GCP
Bruto / neto / is_paid
~6,5% bruto→neto (refunds) + ~0,8% neto→BI. Reglas de negocio.
6. Lag ETL (solo GCP)
−6,7% junio transitorio
OLTP vs BI. Se corrige con corrida nocturna. Operativo, no estructural.

Matriz rápida — ¿es un problema?

Si ves esto…¿Bug?Acción
Legacy “mucho mayor” que GCP ARSNoCorregir metodología de comparación
Legacy vs GCP all < 1,5%NoEsperado — ruido normal
Bruto ≫ neto (~6,5%)NoDevoluciones del mes
Neto ≫ BI oficial (~0,8%)NoRegla is_paid
BI < OLTP en junioOperativoEsperar ETL nocturno
10

Qué usar en MicroStrategy y reuniones

Guía práctica para cada pregunta de negocio

Pregunta de negocioMétricaFiltros clave
Revenue de pasajes oficial Sum(ticket_amount) is_paid = true + currency explícita
Cuadrar con Betterez web Sum(ticket_amount) is_paid_including_partial_cancel
Caja / efectivo neto Sum(ticket_amount − refund_amount) sale_date + moneda
Comparar vs Legacy histórico Bruto nominal multi-moneda GCP Mes cerrado · documentar corte
Outliers ejecutivos ARS Cap opcional 500.000 Pasajes largos legítimos post-remediación
  • Usar siempre moneda explícita en tableros — nunca mezclar ARS + CLP en una suma
  • Para KPIs de revenue: is_paid = true en bi_rebuild.fact_ticket
  • Legacy solo para auditoría histórica — no para cerrar gaps del día
  • No comparar Legacy vs GCP ARS-solo en presentaciones ejecutivas
  • Junio (mes parcial): esperar cierre de mes + ETL para cifras definitivas
11

Glosario

Términos técnicos en lenguaje de negocio

Monto bruto
Suma de todos los boletos vendidos, antes de restar devoluciones.
Monto neto
Bruto menos devoluciones. Puede quedar valor en cancelaciones parciales.
BI oficial / is_paid
Revenue reconocido por el tablero. Excluye boletos cancelados o devueltos.
Nominal multi-moneda
Sumar montos en distintas monedas sin convertir (como hace Legacy).
Filas R- (Legacy)
Devoluciones guardadas como ticket nuevo con monto negativo y prefijo R-.
refund_details (GCP)
Tabla de devoluciones vinculada al boleto original (modelo upsert).
OLTP / public
Base operativa GCP. Copia fiel de Betterez en tiempo casi real.
bi_rebuild
Capa analítica para MicroStrategy. Tablas en singular (fact_ticket, etc.).
ETL
Proceso 2×/día que sincroniza OLTP → BI. Lookback vía etl_control.lookback_interval (prod ~2 días).
PI- (sold item)
Transacción de ítem adicional (seguro, impuesto). Excluida de métricas de pasaje.
sale_date
Fecha de venta. Eje temporal canónico del tablero (hora Argentina).
Drift
Diferencia entre OLTP y BI. Normal < 0,2% en meses cerrados.