Pular para o conteúdo principal

Ciclo de Vida da Assinatura

Estados

draft → confirmed → trialing → active ↔ past_due → canceled

paused
EstadoDescrição
draftRascunho. Pode ser editada livremente antes de ser confirmada
confirmedConfirmada, aguardando ativação
trialingEm período de trial gratuito
activeAtiva, gerando cobranças recorrentes
past_dueCom pagamento atrasado
pausedPausada temporariamente (sem cobranças)
canceledCancelada (estado terminal)

Criando uma Assinatura

Para criar uma assinatura, informe:

CampoObrigatórioDescrição
Conta de cobrançaSimA conta do cliente que será cobrada
PlanoNãoPlano pré-configurado (ou itens avulsos)
Ciclo de cobrançaSimmonthly, quarterly, semiannual ou annual
Método de cobrançaSimcharge_automatically, manual_charge ou manual_invoice
Período de trialNão0 a 90 dias de teste gratuito
Código de descontoNãoDesconto a ser aplicado
ItensNãoProdutos, preços e quantidades (se não usar plano)
EmpresaNãoEmpresa emissora (para multi-empresa)

Fluxo de Criação

  1. A assinatura é criada no status draft
  2. Os itens são criados a partir dos itens fornecidos ou dos itens do plano
  3. O uso do código de desconto é incrementado (se fornecido)
  4. Um evento subscription.db.created é emitido

Confirmação e Ativação

Confirmar (draftconfirmed)

Confirma a assinatura, opcionalmente criando a primeira fatura.

Ativar (draft/confirmedtrialing/active)

  • Se tiver período de trial: status muda para trialing, com trialStart e trialEnd definidos
  • Se não tiver trial: status muda diretamente para active
  • Define as datas do período de cobrança (currentPeriodStart, currentPeriodEnd)

Preview da Ativação

Antes de ativar, é possível visualizar:

  • Data de início, se haverá trial, duração do trial
  • Datas do período de cobrança
  • Data da primeira fatura
  • Totais de setup e recorrentes

Renovação

A renovação é automática via worker diário (00:00 UTC):

  1. Busca assinaturas ativas com currentPeriodEnd ≤ agora
  2. Se cancelAtPeriodEnd = true: cancela a assinatura
  3. Caso contrário: avança para o próximo período de cobrança
  4. Usa lock otimista para prevenir renovações duplicadas

Cálculo dos Períodos

CicloDuração
monthly+1 mês
quarterly+3 meses
semiannual+6 meses
annual+1 ano

Cancelamento

Cancelar no Fim do Período (cancelAtPeriodEnd: true)

  • Define a flag cancelAtPeriodEnd
  • A assinatura continua ativa até o fim do período atual
  • Na renovação, o status muda para canceled
  • Pode ser revertido antes da data de cancelamento

Cancelar Imediatamente (cancelAtPeriodEnd: false)

  • Status muda para canceled imediatamente
  • A data de cancelamento é registrada
  • O motivo do cancelamento é armazenado

Reverter para Confirmado

Assinaturas ativas podem ser revertidas para confirmed para permitir edição antes de reativar. Útil para corrigir erros antes da próxima renovação.

Deleção

Apenas assinaturas em draft, confirmed ou canceled podem ser deletadas, e somente se não houver faturas com pagamentos.

Cálculo do MRR

O MRR (Monthly Recurring Revenue) é calculado normalizando o valor total para mensal:

CicloFórmula
monthlyTotal dos itens
quarterlyTotal ÷ 3
semiannualTotal ÷ 6
annualTotal ÷ 12

Eventos Emitidos

EventoQuando
subscription.db.createdAssinatura criada
subscription.confirmedConfirmada
subscription.activatedAtivada
subscription.renewedRenovada
subscription.pausedPausada
subscription.resumedRetomada
subscription.canceledCancelada
subscription.pending_cancellationMarcada para cancelar no fim do período
subscription.plan_changedPlano alterado
subscription_status_changedQualquer mudança de status