Skip to content

Billing & Assinaturas

Visao Geral

O modulo de Billing (Domain/Billing) gerencia assinaturas SaaS e cobrancas via Asaas (gateway brasileiro). Igrejas pagam mensalidade por PIX ou cartao de credito. O sistema detecta inadimplencia e aplica restricoes graduais automaticamente.

AsaasService

App\Domain\Billing\Services\AsaasService — cliente HTTP para a API Asaas v3.

MetodoEndpoint AsaasUso
createCustomer(data)POST /customersCadastrar igreja como customer
createSubscription(customerId, data)POST /subscriptionsCriar assinatura recorrente
updateSubscription(id, data)PUT /subscriptions/Alterar plano/valor
cancelSubscription(id)DELETE /subscriptions/Cancelar assinatura
createPayment(customerId, data)POST /paymentsCobranca avulsa
getPaymentStatus(id)GET /payments/Consultar status
getPixQrCode(id)GET /payments/{id}/pixQrCodeQR code PIX
createSubAccount(data)POST /accountsSub-conta para igreja (13B-2)
get(path)GETConsulta generica

Configuracao via Http::asaas() macro (retry 3x em 5xx, header access_token).

Models (Banco Central)

Subscription

CampoTipoDescricao
ulidstring(26)Identificador publico
tenant_idFK → tenantsIgreja
plan_idFK → plansPlano
asaas_subscription_idstringID no Asaas
asaas_customer_idstringCustomer ID no Asaas
statusenumtrialing, active, past_due, suspended, cancelled
billing_cycleenummonthly, yearly
pricedecimal(8,2)Valor
trial_ends_attimestampFim do trial
current_period_start/endtimestampPeriodo atual
cancelled_attimestampData cancelamento

Invoice

CampoTipoDescricao
ulidstring(26)Identificador publico
subscription_idFKAssinatura
tenant_idFKIgreja
asaas_payment_idstringID pagamento no Asaas
statusenumpending, confirmed, overdue, refunded, cancelled
amountdecimal(8,2)Valor
payment_methodenumpix, credit_card, boleto
due_datedateVencimento
paid_attimestampData pagamento

Enums

  • SubscriptionStatus: Trialing, Active, PastDue, Suspended, Cancelled
  • InvoiceStatus: Pending, Confirmed, Overdue, Refunded, Cancelled
  • BillingCycle: Monthly, Yearly
  • PaymentMethod: Pix, CreditCard, Boleto

Actions

ActionDescricao
CreateSubscriptionActionCria customer + subscription no Asaas (ou local-only para plano free)
ChangeSubscriptionPlanActionUpgrade/downgrade — atualiza Asaas + Subscription + Tenant
CancelSubscriptionActionCancela no Asaas, marca cancelled_at
HandlePaymentConfirmedActionWebhook — marca Invoice paga, reverte restricoes
HandlePaymentOverdueActionWebhook — marca Invoice vencida, subscription past_due
RevertOverdueRestrictionsActionRemove banner, read_only, suspended_at
ActivateOverdueBannerActionAtiva flag show_overdue_banner no tenant
ActivateReadOnlyModeActionAtiva read_only + banner no tenant

Webhooks

Rota publica: POST /webhooks/asaas (validado por asaas-access-token header).

Evento AsaasAction
PAYMENT_CONFIRMEDHandlePaymentConfirmedAction
PAYMENT_RECEIVEDHandlePaymentConfirmedAction
PAYMENT_OVERDUEHandlePaymentOverdueAction

Pipeline de Inadimplencia

Job diario ProcessOverdueSubscriptionsJob (06:00):

Dias apos vencimentoAcaoImpacto
1-3Email lembreteNenhum
4-7Banner de avisoVisual
8-15Modo somente leituraBloqueia escrita
16+Suspensao totalLogin bloqueado

Pagamento reverte tudo automaticamente.

Middleware

  • EnsureNotReadOnly — bloqueia POST/PUT/PATCH/DELETE quando tenant read_only = true
  • Billing status no Inertia shared props: billing.show_overdue_banner, billing.read_only

Endpoints (Tenant)

MetodoRotaDescricao
GET/settings/subscriptionPainel de assinatura
POST/settings/subscription/change-planTrocar plano
POST/settings/subscription/cancelCancelar assinatura

Endpoints (Admin Central)

MetodoRotaDescricao
GET/admin/billingDashboard KPIs
GET/admin/billing/subscriptionsListagem assinaturas
GET/admin/billing/invoicesListagem faturas
POST/admin/billing/subscriptions/{ulid}/cancelCancelar assinatura

Permissions

PermissaoRoles
manage-billingadmin-igreja

Painel Central Financeiro

O dashboard do admin central (/admin) exibe KPIs financeiros consolidados da plataforma:

Receita:

KPIFonteDescricao
MRR (Assinaturas)Subscription::active()->sum('price')Receita recorrente mensal de assinaturas
Receita de SplitDoacoes * 3%Receita do Decaelo sobre doacoes processadas
Receita TotalMRR + SplitReceita combinada da plataforma

Volume:

KPIDescricao
Doacoes ProcessadasValor total de doacoes confirmadas cross-tenant
Doacoes no MesQuantidade de doacoes confirmadas no mes atual
Recorrencias AtivasDizimos recorrentes ativos em todos os tenants

Cada KPI de receita exibe variacao percentual vs mes anterior.

Variaveis de Ambiente

env
ASAAS_API_KEY=
ASAAS_ENVIRONMENT=sandbox
ASAAS_WEBHOOK_TOKEN=
ASAAS_WALLET_ID=
ASAAS_SPLIT_PERCENTAGE=3.0