Regla crítica: PI- no significa “seguro”
En Betterez, todo producto adicional (
Nunca filtres solo
paid_in) se guarda como venta con prefijo PI- en transaction_id. Eso incluye seguros, menores, impuestos (RG3819) y otros ítems.Nunca filtres solo
transaction_id LIKE 'PI-%' para medir seguros.
Los dos productos principales
Seguro de pasajero
Nombre Betterez: VIAJE PROTEGIDO
Filtro BI: is_insurance = true
Typical: ~$500 ARS por ítem
Flag wide: has_viaje_protegido en fact_ticket_mstr
Menor de 3 años
Nombre Betterez: BOLETO SEGURO%
Filtro BI: is_minor_boleto_seguro = true
Typical: tarifa reducida / boleto acompañante
Flag wide: has_boleto_seguro en fact_ticket_mstr
Objetos en base de datos
| Tabla / vista | Grano | Cuándo usarla |
|---|---|---|
fact_sold_item | 1 ítem vendido | Hecho principal — cantidad y recaudación por producto |
v_insurance_kpi | Agregado por sale_date | Cubo simple solo seguros |
v_minor_kpi | Agregado por sale_date | Cubo simple solo menores |
fact_ticket | 1 boleto | Pasajes, rutas — no mezclar sumas con sold_item |
fact_ticket_mstr | 1 boleto (wide) | Flags has_viaje_protegido / has_boleto_seguro por ticket |
fact_sale | 1 venta | Cuidado: incluye filas PI- → doble conteo si se suma con padre |
Venta padre
fact_sale
→
fact_sale
Boleto
fact_ticket
fact_ticket
Seguro
fact_sold_item
fact_sold_item
Menor
fact_sold_item
fact_sold_item
Métricas recomendadas
Seguros (VIAJE PROTEGIDO)
| Métrica | Definición |
|---|---|
| Cantidad seguros vendidos | COUNT(sold_item_id) WHERE is_insurance AND status='paid' |
| Recaudación seguros | SUM(item_amount) mismo filtro |
| Tickets con seguro | COUNT(ticket_id) WHERE has_viaje_protegido en mstr |
| Tasa de penetración | Tickets con seguro / tickets pagados (mismo periodo sale_date) |
Menores de 3 años (BOLETO SEGURO)
| Métrica | Definición |
|---|---|
| Cantidad menores | COUNT(sold_item_id) WHERE is_minor_boleto_seguro |
| Recaudación menores | SUM(item_amount) mismo filtro |
| Tickets con menor | has_boleto_seguro en fact_ticket_mstr |
Filtros transversales:
is_paid = true en pasajes; lower(status) = 'paid' en ítems; currency = 'ARS' para montos; eje sale_date (fecha de venta del ítem).
Menor <3 vs tarifa niño (is_child_fare)
| Concepto | Dónde | Qué mide |
|---|---|---|
| Menor <3 (BOLETO SEGURO) | fact_sold_item | Ítem adicional vendido junto al pasaje del adulto |
| Tarifa niño | fact_ticket.is_child_fare | El pasaje mismo tiene tarifa reducida (3–12 años típico) |
Son preguntas distintas: un niño de 5 años puede tener is_child_fare=true sin ser un “menor <3”. Un bebé puede llevar BOLETO SEGURO sin ser tarifa niño en el sentido de descuento de pasaje.
Errores comunes en tableros
- Sumar
fact_salepadre + hijos PI- → doble conteo de revenue - Contar pasajes con filtro PI- → mezcla impuestos y seguros
- Usar
fact_ticket.ticket_amountpara medir seguros → es el monto del pasaje, no del ítem - Mezclar monedas en Sum(item_amount)
- Confundir
has_boleto_seguro(menor) con seguro de viaje (has_viaje_protegido)