Contrato de evento
Campos que espera la consulta
| Campo | Tipo | Por que existe |
|---|---|---|
| timestamp_utc | Timestamp | Hora del evento de factura. |
| invoice_id | Utf8 | Identificador de factura de proveedor estable. |
| event_name | Utf8 | invoice_payment_failed o invoice_paid. |
| amount_usd | Float64 | Importe de factura normalizado. |
| failure_type | Utf8 | Motivo de fallo categorizado seguro. |
Copiar la consulta
WITH failures AS (
SELECT
invoice_id,
MIN(timestamp_utc) AS first_failed_at,
MAX(amount_usd) AS amount_usd,
MIN(failure_type) AS failure_type
FROM invoice_events
WHERE event_name = 'invoice_payment_failed'
AND timestamp_utc >= now() - INTERVAL '60 days'
GROUP BY invoice_id
),
recoveries AS (
SELECT
invoice_id,
MIN(timestamp_utc) AS recovered_at
FROM invoice_events
WHERE event_name = 'invoice_paid'
GROUP BY invoice_id
)
SELECT
failures.failure_type,
COUNT(*) AS failed_invoices,
SUM(CASE
WHEN recoveries.recovered_at > failures.first_failed_at THEN 1
ELSE 0
END) AS recovered_invoices,
100.0 * SUM(CASE
WHEN recoveries.recovered_at > failures.first_failed_at THEN 1
ELSE 0
END) / NULLIF(COUNT(*), 0) AS recovery_rate_pct,
SUM(CASE
WHEN recoveries.recovered_at IS NULL THEN failures.amount_usd
ELSE 0.0
END) AS unrecovered_amount_usd
FROM failures
LEFT JOIN recoveries
ON recoveries.invoice_id = failures.invoice_id
GROUP BY failures.failure_type
ORDER BY unrecovered_amount_usd DESC;Esta consulta de solo lectura se planifica y ejecuta en una tabla escrita vacía con Apache DataFusion 45.2.0. El resultado de la muestra determinista es sintético y se revisa por separado; valide tipos de campos, umbrales y definiciones comerciales con sus propios datos. Lea la metodología de prueba.
Resultado de la consulta
Tasa de recuperación de pagos por tipo de falla
Las fallas que requieren autenticación se recuperan con menos frecuencia y retienen un riesgo de ingresos significativo.
| failure_type | failed_invoices | recovered_invoices | recovery_rate_pct | unrecovered_amount_usd |
|---|---|---|---|---|
| insufficient_funds | 142 | 89 | 62,68 | 6840 |
| expired_card | 58 | 47 | 81,03 | 1320 |
| authentication_required | 36 | 18 | 50 | 2940 |
Salida de ejemplo sintético. Ejecute la consulta con su propio esquema de eventos y umbrales antes de utilizarla para decisiones operativas.
Reproducir el ejemplo
Descargar el accesorio público
El paquete JSON incluye el contrato de evento escrito, illustrative filas de entrada, SQL exacto, resultado esperado, notas de revisión y versión del motor. El CSV contiene el resultado mostrado.
Cómo funciona el SQL
- 1El CTE fallido colapsa los intentos repetidos del proveedor en una sola factura en riesgo.
- 2Una recuperación cuenta sólo cuando el pago se realiza correctamente después del primer error registrado.
- 3El monto no recuperado complementa la tarifa, por lo que una pequeña cantidad de facturas grandes permanecen visibles.
Casos extremos para decidir
- Deduplica las entregas de webhooks antes de tratarlas como nuevos intentos de pago.
- Los reembolsos y las devoluciones de cargo necesitan eventos de ciclo de vida separados después de una recuperación exitosa.
- Normalice la moneda con una tasa documentada y conserve los campos de moneda originales para la conciliación.
Panel recomendado
- Barras: recovery_rate_pct por failure_type
- Estadística: unrecovered_amount_usd
- Tabla: facturas no recuperadas de mayor valor y propietario de la cuenta
Guía de alerta
Alertar a las operaciones de ingresos cuando el valor no recuperado excede un umbral o se deteriora un tipo de falla normalmente recuperable.
Leer configuración de alertaPon la receta a trabajar
Instrumentación y guías relacionadas.
Definir los datos de origen
Esquemas de eventos para este análisis.
Continuar el análisis
Medir la recuperación del reintento del webhook
Separe las fallas permanentes del webhook de las entregas que se recuperaron en un intento posterior.
Receta abiertaCalcular la conversión de prueba a pago
Mida cuántas cuentas de prueba se convierten en clientes pagos dentro de una ventana de conversión fija.
Receta abiertaCalcular el movimiento de ingresos recurrentes mensuales
Separe los MRR nuevos, de expansión, contracción, abandono y reactivación de los eventos del ciclo de vida de facturación.
Receta abiertaEjecútelo en eventos reales.
Crea una tabla, adapta los campos y guarda el resultado.
Comience gratis, envíe eventos estructurados y utilice el resultado de la consulta como un gráfico, un widget de panel compartido o una entrada de alerta.