Workers que cuidan tu billing 24/7.
Dunning con 5 reintentos, generación de facturas diaria, NFe automática, alerta de tarjeta por vencer, expiración de propuesta. Todo ejecutándose sin que tengas que recordarlo.
Funcionalidad

35
workers activos
18
jobs programados
5
reintentos estándar
24/7
sin intervención manual
Qué está automatizado
Dunning (Recuperación de Pagos)
DunningConfig por organización: maxRetries (default 5), retryIntervalDays ([1,2,3,5,7]), suspendAfterRetries, gracePeriodDays (30).
- Worker payment-retry cada 6h
- Múltiples métodos en retry (tarjeta → boleto → PIX)
- DelinquentAccount + RecoveryRecord para auditoría
- Webhook en cada intento
Régua de Comunicación Multi-Canal
NotificationChannel: email, in_app, webhook. EmailTemplate por evento + organización. El cliente puede hacer opt-out granular.
- 11 NotificationTypes (invoice_created, payment_failed, trial_ending)
- Templates HTML + texto editables
- NotificationPreference por billing account
Generación Automática de Facturas
Worker invoice-generation diario a las 01:00 UTC. Recorre subscriptions, genera factura idempotente, aplica cupones/créditos, emite NFe (si policy).
- Idempotencia por (subscription, period_start)
- Skip de trial sin tarjeta
- Webhook invoice.created + email
Renovación de Suscripciones
Worker subscription-renewal diario a las 00:00 UTC. Avanza current_period_* en el ciclo. Commitment respetado (12 meses, etc).
- Soporta auto-renew y prompt
- Cancel scheduled procesado antes
- Webhook subscription.renewed
Alerta de Tarjeta por Vencer
Worker card-expiring semanal (lunes 10:00 UTC). Detecta tarjetas con expirationYear/Month en ≤ 30 días. Notifica vía régua.
- Reduce churn por expiración
- Email + in-app con link directo
- Recordatorio configurable
Suspensión Automática
Worker suspension-check diario a las 02:00 UTC. Suspende BillingAccount después de agotado el grace period.
- suspendedAt + razón registrados
- Webhook billing_account.suspended
- Reactivación automática en pago
Expiración de Propuestas
Worker proposal-expiration diario a las 00:30 UTC. Marca proposals como expired después de expires_at. Worker proposal-reminder (09:00) envía recordatorio antes.
- Aumenta tasa de cierre
- Email con link de la propuesta
- Métricas de tiempo promedio
Snapshots de Uso (Analytics)
UsageDailySnapshot + UsageMonthlySnapshot calculados vía worker. Base para analytics, MRR y cohorts.
- Daily snapshot en background
- Monthly snapshot consolidado
- Reduce costo de queries en dashboard
Callbacks de Gateway
Worker callback procesa payloads recibidos de gateways. Handlers dedicados por provider (Pagar.me, Kobana, NFe.io).
- Idempotencia por idempotencyKey
- Retry automático en fallo
- Logs completos en Callback model
Worker Custom Domain (DNS + SSL)
Workers custom-domain-dns + custom-domain-ssl validan DNS, emiten cert Let's Encrypt, renuevan automáticamente.
- ACME protocol (acme-client)
- Renovación 30 días antes de expirar
- Estado: pending → verified → active
Reintentar un pago vía API
bash
curl -X POST https://api.billing.kobana.com.br/v1/payments/4b5c6d7e-8f90-4a1b-b2c3-d4e5f6a7b8c9/retry \
-H "Authorization: Bearer $KOBANA_TOKEN" \
-H "Content-Type: application/json" \
-H "X-Idempotency-Key: $(uuidgen)" \
-d '{
"payment_method_id": "6a7b8c9d-0e1f-4a2b-8c3d-4e5f6a7b8c9d"
}'response
{
"data": {
"id": "4b5c6d7e-8f90-4a1b-b2c3-d4e5f6a7b8c9",
"invoice_id": "2d3e4f5a-6b7c-4d8e-9f0a-1b2c3d4e5f6a",
"payment_method_type": "card",
"amount": 299.9,
"currency": "BRL",
"status": "processing"
}
}