Checkout
O Checkout gerencia o processo de pagamento de uma venda, controlando os metodos de pagamento e a finalizacao.
Descricao
O checkout e criado automaticamente quando uma venda e finalizada (status "pending"). Ele coordena a coleta de pagamentos e determina quando a venda pode ser marcada como paga.
Dados
Informacoes do Checkout
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
| total | Monetario | Calculado | Total a ser pago (igual ao total da venda) |
| paid_total | Monetario | Calculado | Soma dos pagamentos recebidos |
| remaining | Monetario | Calculado | Total - Paid Total |
| change | Monetario | Calculado | Troco a devolver (se pago a mais) |
Relacionamentos
Pertence a
| Entidade | Obrigatorio | Descricao |
|---|---|---|
| Sale | Sim | Venda associada |
| Account | Sim | Conta do petshop |
| Store | Sim | Filial |
Possui
| Entidade | Descricao |
|---|---|
| Payments | Pagamentos registrados |
Ciclo de Vida
Regras de Negocio
Criacao Automatica
- Checkout e criado quando
sale.statusmuda para "pending" - Somente para vendas do tipo "sale" (nao para orcamentos)
Destruicao Automatica
- Checkout e destruido quando
sale.statusvolta para "open" - Todos os pagamentos associados sao removidos
Validacao de Pagamento
valid_to_pay = sum(payments.value) >= sale.total
Quando valid_to_pay = true:
- Botao "Pagar" fica habilitado
- Usuario pode confirmar o pagamento
- Venda muda para status "paid"
Calculos
Total Pago
paid_total = sum(payments.value)
Valor Restante
remaining = total - paid_total
se remaining < 0: remaining = 0
Troco
change = paid_total - total
se change < 0: change = 0
Metodos de Pagamento Suportados
O checkout suporta multiplos pagamentos com diferentes metodos:
| Metodo | Descricao |
|---|---|
| Dinheiro | Pagamento em especie |
| Debito | Cartao de debito |
| Credito | Cartao de credito (a vista ou parcelado) |
| PIX | Pagamento instantaneo |
| Credito Cliente | Uso de credito do cliente |
| Cashback | Uso de cashback do cliente |
| Voucher | Uso de voucher/vale |
| Convenio | Pagamento via convenio |
Parcelamento
Regras de Parcelamento
- Apenas cartao de credito pode ser parcelado
- Numero de parcelas definido no PaymentMethod
- Taxas de parcelamento aplicadas conforme configuracao
- Cada parcela gera uma transacao financeira futura
Calculo de Parcelas
valor_parcela = valor_total / numero_parcelas
Integracao com Financeiro
Ao confirmar pagamento:
- Para cada Payment no checkout
- Cria FinancialTransaction correspondente
- Tipo = "revenue" (receita)
- Data base = data do pagamento
- Conta destino = conforme metodo de pagamento
Uso de Credito do Cliente
Validacoes
- Cliente deve ter credito disponivel
- Valor usado nao pode exceder credito total
- Credito e abatido do total
Fluxo
Uso de Cashback
Validacoes
- Cliente deve ter cashback disponivel
- Valor usado nao pode exceder cashback total
- Cashback e abatido do total
Acoes do Checkout
| Acao | Descricao |
|---|---|
| Adicionar Pagamento | Registrar novo pagamento |
| Remover Pagamento | Excluir pagamento adicionado |
| Confirmar Pagamento | Finalizar e marcar venda como paga |
| Cancelar | Voltar venda para status "open" |
Estados do Botao Pagar
| Condicao | Estado do Botao |
|---|---|
| paid_total < total | Desabilitado |
| paid_total >= total | Habilitado |
| Pagamento confirmado | Oculto |
Tratamento de Erros
Pagamento Insuficiente
- Nao permite confirmar pagamento
- Mostra valor restante
Erro na Integracao
- Pagamento com cartao pode falhar
- Sistema exibe mensagem de erro
- Usuario pode tentar novamente
Relatorio de Fechamento
O checkout armazena informacoes usadas no fechamento de caixa:
- Valores por metodo de pagamento
- Horario do pagamento
- Operador responsavel