Saltar al contenido
Telemetry
Ingresos y facturación receta SQL

Medir la recuperación de fallos de pago

Calcule la frecuencia con la que las facturas fallidas se recuperan mediante un intento de pago exitoso posterior.

Intermedioinvoice_eventsRevisado 2026-07-27Probado con Apache DataFusion 45.2.0

Revisado por el equipo de producto Telemetry en . Compatibilidad con SQL, contrato de eventos, resultados sintéticos y advertencias operativas. Revisar los estándares y la propiedad

Pregunta respondida

¿Qué impagos se recuperan y cuántos ingresos quedan en riesgo?

Contar únicamente los incumplimientos en los pagos exagera el riesgo duradero de ingresos. El análisis de recuperación sigue la factura en intentos posteriores y preserva el monto en riesgo.

Contrato de evento

Campos que espera la consulta

CampoTipoPor que existe
timestamp_utcTimestampHora del evento de factura.
invoice_idUtf8Identificador de factura de proveedor estable.
event_nameUtf8invoice_payment_failed o invoice_paid.
amount_usdFloat64Importe de factura normalizado.
failure_typeUtf8Motivo de fallo categorizado seguro.
DataFusionSQL

Copiar la consulta

sql
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_typefailed_invoicesrecovered_invoicesrecovery_rate_pctunrecovered_amount_usd
insufficient_funds1428962,686840
expired_card584781,031320
authentication_required3618502940

Salida de ejemplo sintético. Ejecute la consulta con su propio esquema de eventos y umbrales antes de utilizarla para decisiones operativas.

Payment recovery rate by failure type: gráfico estático de valores sintéticos de recovery_rate_pct del resultado del ejemplo Measure Payment-Failure Recovery
SVG indexable de la salida del ejemplo determinista. Descárguelo para ver un artículo, un runbook o una revisión de diseño con atribución.

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

  1. 1El CTE fallido colapsa los intentos repetidos del proveedor en una sola factura en riesgo.
  2. 2Una recuperación cuenta sólo cuando el pago se realiza correctamente después del primer error registrado.
  3. 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 alerta

Pon 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

Ejecú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.

Obtén una clave API