Pular para o conteúdo principal

Faturas

Faturas representam cobranças enviadas aos clientes. Cada fatura contém line items detalhando os produtos e valores cobrados.

Estados da Fatura

draft → open → paid
↓ ↓
void uncollectible
StatusDescrição
draftRascunho. Pode ser editada, ter itens adicionados/removidos
openFinalizada. Cobrável, pode receber pagamentos e ter créditos aplicados
paidTotalmente paga
voidAnulada. Créditos aplicados são restaurados, parcelas canceladas
uncollectibleMarcada como incobrável (write-off)

Campos da Fatura

Identificação

CampoDescrição
NúmeroNúmero sequencial único (formato: INV-YYYY-NNNNNN)
Conta de cobrançaCliente que receberá a fatura
AssinaturaAssinatura associada (opcional)
EmpresaEmpresa emissora (para multi-empresa)

Valores (em centavos, ÷100 para reais)

CampoDescrição
SubtotalSoma dos line items antes de descontos e impostos
DescontoTotal de desconto aplicado
ImpostosTotal de impostos calculados
Total retidoImpostos retidos (PIS/COFINS/IRPJ)
Valor líquidoValor líquido após retenções
TotalValor final (subtotal - desconto + impostos)
Valor devidoMontante total a pagar
Valor pagoMontante já recebido
Valor restanteSaldo pendente

Configuração

CampoDescrição
Método de cobrançacharge_automatically, manual_charge ou manual_invoice
Razão de cobrançasubscription_cycle, subscription_create, subscription_update ou manual
Política de NF-edisabled, on_finalization, on_full_payment ou per_installment
Data de vencimentoCalculada a partir dos dias de prazo do cliente

Line Items

Cada fatura contém itens de linha que detalham as cobranças:

CampoDescrição
Tiposubscription ou invoiceitem
DescriçãoTexto descritivo
QuantidadeQuantidade cobrada
Valor unitárioPreço por unidade (em centavos)
Valor totalQuantidade × valor unitário
ProrationSe o item é um rateio proporcional
PeríodoInício e fim do período cobrado

Operações

Criar Fatura

Ao criar uma fatura, informe:

  • Conta de cobrança (obrigatório)
  • Line items com descrição, quantidade e valor
  • Data de vencimento (ou usa os dias de prazo do cliente)
  • Parcelas (opcional, mínimo 2, soma deve ser igual ao total)
  • Política de NF-e (opcional)

O número da fatura é gerado automaticamente usando lock advisory do PostgreSQL para prevenir duplicação.

Finalizar (draftopen)

Ao finalizar uma fatura:

  1. Valida que existe pelo menos 1 line item
  2. Valida que a soma das parcelas = total (se parcelada)
  3. Calcula impostos automaticamente
  4. Aplica créditos automaticamente (FIFO: expiração mais próxima primeiro, depois mais antigo)
  5. Se o método for charge_automatically: tenta cobrar imediatamente

Marcar como Paga

  • Suporta pagamentos parciais
  • Ao receber o valor total, o status muda para paid
  • Cria um registro de transação

Anular (Void)

Ao anular uma fatura:

  • Créditos aplicados são restaurados automaticamente
  • Parcelas pendentes são canceladas
  • O motivo da anulação é armazenado

Desfazer Pagamento

Reverte uma fatura de paid para open:

  • Reseta o valor pago para zero
  • Cria uma transação de ajuste (valor negativo)
  • Armazena o motivo no metadata

Marcar como Incobrável

Marca a fatura como write-off. Irreversível. Nenhuma tentativa automática de pagamento será feita.

Geração Automática de Números

Os números de fatura são gerados sequencialmente por ano usando advisory locks do PostgreSQL. Formato: INV-{ano}-{sequencial com 6 dígitos}.

Exemplo: INV-2026-000147

Capturas de tela

Lista de faturas

A tela /dashboard/invoices lista todas as faturas com filtros por status, conta de cobrança, empresa emissora, período e meio de pagamento. Cada linha mostra número, cliente, valor, vencimento, status e ações rápidas (baixar PDF, copiar boleto/PIX, marcar como paga).

Lista de faturas do dashboard com filtros e ações

Detalhe da fatura

A página /dashboard/invoices/[id] mostra a fatura completa: itens (com quantidade e valor unitário), totais, descontos, créditos aplicados, impostos retidos, histórico de pagamentos, NF-e vinculada e linha do tempo de eventos.

Detalhe de uma fatura com itens, totais e histórico