Vendendo no atacado pra cliente recorrente, duas ferramentas financeiras protegem o caixa: limite de crédito por cliente e parcelamento do fiado em N recebíveis escalonados.
Definir o limite de crédito
Clientes → editar → Limite de crédito (R$).
- Null / vazio → sem limite (default).
- Valor em R$ → o sistema calcula o saldo em aberto do cliente (soma dos
AccountReceivablePENDING ou OVERDUE) e recusa novas vendas fiado que ultrapassariam esse teto.
Exemplo: cliente com limite R$ 5.000 já tem R$ 3.200 em aberto. Nova venda fiado de R$ 2.000 é aprovada (R$ 5.200 — espera, não: 3200 + 2000 = 5200 > 5000). Então ela seria recusada com 422 credit_limit_exceeded.
O que o usuário vê
No PDV (ainda não tem cliente pré-checkout) ou no dialog de faturamento do pedido, quando o cliente tem limite:
LIMITE DE CRÉDITO
Limite: R$ 5.000,00
Em aberto: R$ 3.200,00
Após: R$ 5.200,00 ← vermelho quando estoura
Banner amarelo = vai ficar próximo do limite, operador decide. Banner vermelho = vai estourar, submit bloqueado.
Sobrepor o limite
Quando o operador é MANAGER (ou OWNER/ADMIN), aparece um checkbox “Sobrepor limite (responsabilidade do gerente)”. Marcando, o submit libera.
SELLER e CASHIER não veem o checkbox — eles precisam pedir aprovação física pro gerente, que marca e confirma.
Parcelamento
No dialog de faturamento (pedido) ou futura integração com boleto, ao escolher FIADO, aparecem campos extras:
- Parcelas (1 a 36).
- A cada N dias (default 30).
Com 3 parcelas e 30 dias, o sistema cria 3 receivables:
parcela 1 → vence em 30 dias
parcela 2 → vence em 60 dias
parcela 3 → vence em 90 dias
Valor dividido em partes iguais, com a última absorvendo centavo residual (ex.: R$100/3 = 33,33 + 33,33 + 33,34). Total sempre bate.
Consultar histórico de crédito
Financeiro → Contas a receber filtrado por cliente mostra tudo: parcelas abertas, pagas, vencidas. paid_amount acumula pagamentos parciais (cliente paga R$500 de uma parcela de R$800, saldo fica R$300 até fechar).
Cancelamento automático
Quando você cancela uma venda (ou invoice cancela um pedido), todas as parcelas em PENDING viram CANCELED. Parcelas que já foram pagas (paid_amount > 0) não são tocadas — vira caso pra contador decidir se devolve, compensa ou dá crédito.
Integração futura com boleto
O parcelamento hoje só funciona em fiado genérico (vira AccountReceivable sem canal de cobrança). Quando a integração Asaas entrar no ar (prevista pós-deploy), cada parcela vira BOLETO registrado com:
- Link pro boleto em
payment.boleto_url - Código de barras
- Webhook de baixa automática quando o cliente paga
Sem mudar nada no fluxo de UI.