A venda do PDV é imediata (paga, decrementa estoque, emite nota na hora). Pra B2B, o fluxo natural é mais longo: orçamento → cliente aprova → separa mercadoria → fatura. O Pedido de venda cobre esse caminho.
Ciclo de vida
DRAFT ──confirm──▶ CONFIRMED ──invoice──▶ INVOICED (gera Sale + NF-e)
│ │
└───cancel──▶ CANCELED ◀───cancel─┘
- DRAFT — rascunho. Edita livremente (items, cliente, notas, frete). Não mexe em estoque.
- CONFIRMED — aceito pelo cliente. Preços congelados (snapshot). Só dá pra cancelar ou faturar.
- INVOICED — faturado. Gerou uma
Salevinculada, decrementou estoque, emitiu a NF-e (opcional). Final. - CANCELED — cancelado antes de faturar. Terminal.
Criar um pedido
Pedidos → Novo pedido:
- Selecione o cliente (opcional — pode fazer orçamento pra cliente anônimo e identificar depois).
- Adicione items com produto + quantidade.
- Informe frete, se houver.
- Observações livres.
O total exibido é estimado (preços padrão); o resolver real roda no backend aplicando a tabela do cliente, tiers de atacado e promoções.
Ao criar, fica em DRAFT. Você ainda pode editar à vontade.
Confirmar
Pedidos → abrir → Confirmar. Preços são congelados no pedido — daquela hora em diante, mesmo que a tabela do cliente mude ou o produto entre em promoção, o valor do orçamento continua o mesmo.
Isso protege o contrato: cliente aprovou R$1.500, cliente paga R$1.500.
Faturar
Pedidos → abrir (CONFIRMED) → Faturar:
- Dialog abre pedindo as formas de pagamento (igual ao PDV — dinheiro, PIX, cartão, fiado).
- Valida:
- Caixa aberto do operador.
- Estoque suficiente (decremento atômico race-safe).
- Limite de crédito do cliente (se houver fiado — veja Limite de crédito).
- Cria uma Sale vinculada (
sales_order_idguardado), com:- Items do pedido (preços do snapshot).
- StockMovement de saída por venda.
- AccountReceivable se houver fiado (N parcelas se configurado).
- Comissão de vendedor snapshot.
- Frete copiado do pedido.
- Pedido vira INVOICED com
invoiced_atesale_id. - A Sale pode emitir NF-e normalmente depois.
Se estoque falhou no meio, tudo volta atrás (rollback de transação) — pedido continua CONFIRMED, você resolve o estoque e tenta de novo.
Parcelamento no faturamento
Se o cliente pagou em 3x no boleto/fiado, o dialog de faturamento aceita:
- Parcelas: 1-36.
- Intervalo em dias: default 30 (gera 30/60/90).
O sistema cria N AccountReceivable escalonados com valor distribuído (última parcela absorve o centavo residual pra somar exato — ex.: R$100 em 3x = R$33,33 + R$33,33 + R$33,34).
Cancelar
Em DRAFT ou CONFIRMED, clique Cancelar pedido. Informe o motivo (obrigatório, mín. 1 char). Pedido vira CANCELED.
Em INVOICED o botão não aparece — pra reverter uma venda faturada, cancele a Sale no módulo Vendas (isso devolve estoque, cancela receivables, zera comissão — mas não desfaz a NF-e, que precisa de cancelamento fiscal separado).