Pular para o conteúdo principal

Billing

O Building Block Billing fornece funcionalidades completas para gerenciamento de faturamento, assinaturas e cobrança na Catalisa Platform.

Visão Geral

O Billing é um módulo tenant-scoped, ou seja, requer um token com organizationId. Ele é responsável por:

  • Contas de faturamento (Billing Accounts) - cadastro de clientes para cobrança
  • Produtos de cobrança (Billing Products) - catálogo de produtos com diferentes modelos de precificação
  • Planos de assinatura (Subscription Plans) - configuração de planos recorrentes
  • Assinaturas (Subscriptions) - gestão do ciclo de vida de assinaturas
  • Medidores de uso (Usage Meters) - rastreamento de consumo para cobrança por uso
  • Eventos de uso (Usage Events) - registro de consumo em tempo real
  • Faturas (Invoices) - geração e gestão de faturas
  • Pagamentos (Payments) - registro de pagamentos e reembolsos

Base URL

https://api.catalisa.io/billing

Recursos

RecursoDescrição
ContasGerenciamento de contas de faturamento
PlanosPlanos de assinatura
AssinaturasGestão de assinaturas
FaturamentoFaturas e pagamentos

Permissões

PermissãoDescrição
BILLING_ACCOUNTS_CREATECriar contas de faturamento
BILLING_ACCOUNTS_READListar e visualizar contas
BILLING_ACCOUNTS_UPDATEAtualizar contas
BILLING_ACCOUNTS_DELETEExcluir contas
BILLING_PRODUCTS_CREATECriar produtos de cobrança
BILLING_PRODUCTS_READListar e visualizar produtos
BILLING_PRODUCTS_UPDATEAtualizar produtos
BILLING_PRODUCTS_DELETEExcluir produtos
SUBSCRIPTION_PLANS_CREATECriar planos de assinatura
SUBSCRIPTION_PLANS_READListar e visualizar planos
SUBSCRIPTION_PLANS_UPDATEAtualizar planos
SUBSCRIPTION_PLANS_DELETEExcluir planos
SUBSCRIPTIONS_CREATECriar assinaturas
SUBSCRIPTIONS_READListar e visualizar assinaturas
SUBSCRIPTIONS_UPDATEAtualizar assinaturas
SUBSCRIPTIONS_CANCELCancelar assinaturas
USAGE_METERS_CREATECriar medidores de uso
USAGE_METERS_READListar e visualizar medidores
USAGE_METERS_UPDATEAtualizar medidores
USAGE_METERS_DELETEExcluir medidores
USAGE_EVENTS_CREATERegistrar eventos de uso
USAGE_EVENTS_READVisualizar eventos e resumos
INVOICES_CREATECriar faturas
INVOICES_READListar e visualizar faturas
INVOICES_UPDATEAtualizar faturas
INVOICES_FINALIZEFinalizar faturas
INVOICES_VOIDAnular faturas
PAYMENTS_CREATERegistrar pagamentos
PAYMENTS_READListar e visualizar pagamentos
PAYMENTS_REFUNDProcessar reembolsos

Exemplo Rápido

Fluxo completo para criar uma assinatura e gerar fatura:

// 1. Criar uma conta de faturamento
const accountResponse = await fetch('https://api.catalisa.io/billing/api/v1/billing-accounts', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
data: {
type: 'billing-accounts',
attributes: {
name: 'Empresa ABC Ltda',
email: 'financeiro@empresa-abc.com.br',
currency: 'BRL',
taxId: '12.345.678/0001-90',
taxIdType: 'CNPJ',
},
},
}),
});

const { data: account } = await accountResponse.json();

// 2. Criar um plano de assinatura
const planResponse = await fetch('https://api.catalisa.io/billing/api/v1/subscription-plans', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
data: {
type: 'subscription-plans',
attributes: {
name: 'Plano Pro',
description: 'Acesso completo a todos os recursos',
billingInterval: 'MONTHLY',
billingCycleType: 'ANNIVERSARY',
basePrice: 299.90,
currency: 'BRL',
trialDays: 14,
},
},
}),
});

const { data: plan } = await planResponse.json();

// 3. Criar uma assinatura
const subscriptionResponse = await fetch('https://api.catalisa.io/billing/api/v1/subscriptions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
data: {
type: 'subscriptions',
attributes: {
billingAccountId: account.id,
planId: plan.id,
quantity: 1,
},
},
}),
});

const { data: subscription } = await subscriptionResponse.json();
console.log(`Assinatura criada: ${subscription.id}`);
console.log(`Status: ${subscription.attributes.status}`);

// 4. Gerar fatura da assinatura
const invoiceResponse = await fetch('https://api.catalisa.io/billing/api/v1/invoices', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
data: {
type: 'invoices',
attributes: {
billingAccountId: account.id,
periodStart: subscription.attributes.currentPeriodStart,
periodEnd: subscription.attributes.currentPeriodEnd,
},
},
}),
});

const { data: invoice } = await invoiceResponse.json();

// 5. Finalizar a fatura
await fetch(`https://api.catalisa.io/billing/api/v1/invoices/${invoice.id}/finalize`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
},
});

// 6. Registrar pagamento
await fetch('https://api.catalisa.io/billing/api/v1/payments', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
data: {
type: 'payments',
attributes: {
billingAccountId: account.id,
invoiceId: invoice.id,
amount: invoice.attributes.total,
paymentMethod: 'PIX',
externalRef: 'E12345678901234567890123456789012',
},
},
}),
});

console.log('Pagamento registrado com sucesso!');

Arquitetura

┌─────────────────────────────────────────────────────────────────────┐
│ Billing │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Billing │ │ Billing │ │ Subscription │ │
│ │ Accounts │ │ Products │ │ Plans │ │
│ │ │ │ │ │ │ │
│ │ - name │ │ - pricing │ │ - interval │ │
│ │ - email │ │ model │ │ - basePrice │ │
│ │ - balance │ │ - tiers │ │ - trialDays │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ │ │ │ │
│ └───────────────────┼───────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Subscriptions │ │
│ │ │ │
│ │ - status │ │
│ │ - quantity │ │
│ │ - period │ │
│ └────────┬────────┘ │
│ │ │
│ ┌───────────────────┼───────────────────┐ │
│ │ │ │ │
│ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ │
│ │ Usage │ │ Invoices │ │ Payments │ │
│ │ Metering │ │ │ │ │ │
│ │ │ │ - lines │ │ - refunds │ │
│ │ - events │ │ - finalize │ │ - status │ │
│ │ - summary │ │ - void │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘

Conceitos Importantes

Status da Conta de Faturamento

StatusDescrição
ACTIVEConta ativa, pode criar assinaturas e receber cobranças
SUSPENDEDConta suspensa, assinaturas pausadas
CLOSEDConta encerrada, não aceita novas operações

Modelos de Precificação

ModeloDescrição
FLAT_FEETaxa fixa independente do uso
TIEREDPreço por faixa de uso (cada faixa tem seu preço)
VOLUMEPreço único baseado no volume total
PER_UNITPreço por unidade consumida
PACKAGEPreço por pacote de unidades

Intervalos de Cobrança

IntervaloDescrição
DAILYCobrança diária
WEEKLYCobrança semanal
MONTHLYCobrança mensal
QUARTERLYCobrança trimestral
YEARLYCobrança anual

Tipos de Ciclo de Cobrança

TipoDescrição
CALENDAR_ALIGNEDAlinhado ao calendário (ex: dia 1 de cada mês)
ANNIVERSARYBaseado na data de início da assinatura

Status da Assinatura

StatusDescrição
TRIALEm período de teste
ACTIVEAssinatura ativa
PAUSEDAssinatura pausada temporariamente
CANCELEDAssinatura cancelada
EXPIREDAssinatura expirada

Status da Fatura

StatusDescrição
DRAFTRascunho, pode ser editada
PENDINGFinalizada, aguardando pagamento
PAIDPaga integralmente
OVERDUEVencida, pagamento atrasado
CANCELEDCancelada antes da finalização
VOIDAnulada após finalização

Status do Pagamento

StatusDescrição
PENDINGAguardando processamento
PROCESSINGEm processamento
COMPLETEDConcluído com sucesso
FAILEDFalhou
REFUNDEDReembolsado

Tipos de Agregação de Uso

TipoDescrição
SUMSoma de todos os valores
MAXValor máximo no período
LASTÚltimo valor registrado
AVERAGEMédia dos valores
COUNT_DISTINCTContagem de valores únicos

Eventos do Billing

O módulo publica eventos via Redis para integração com outros módulos:

EventoDescrição
billing.account.createdConta de faturamento criada
billing.subscription.createdAssinatura criada
billing.subscription.activatedAssinatura ativada
billing.subscription.pausedAssinatura pausada
billing.subscription.canceledAssinatura cancelada
billing.invoice.createdFatura criada
billing.invoice.finalizedFatura finalizada
billing.invoice.paidFatura paga
billing.payment.completedPagamento concluído
billing.payment.refundedPagamento reembolsado