Pagamentos, caixa e juros
Dúvida: como baixar um título, o que o caixa exige, e quando cheque ou ticket não quitam na hora.
Dúvida: como registrar pagamento ou recebimento?
Ambiente: botão de baixa na tela do título. API PATCH /financial-transactions/:id/pay. Caixa da filial: /apps/financeiro/caixa. Lote: POST /financial-transactions/batch-pay (uma TX; qualquer falha desfaz tudo).
Pré-requisitos: título ABERTA ou PARCIAL. Com operador logado: sessão de caixa OPEN na mesma filial. Sem user (auto-settle): não lança caixa.
Caminho na tela
- Abra o título → baixar.
- Informe valor, forma (
PIX,CHEQUE,CUSTOMER_CREDIT/Ticket, …), desconto/juros da baixa, observações. - Confirme. Status vira
PAGAouPARCIAL. HistóricoFAB013tipoPAYMENT.
Baixa unitária (API)
PATCH /financial-transactions/:id/pay
- Atualiza
paidAmount,dueAmount,PAGAouPARCIAL. - Cria
FAB013(PAYMENT|DISCOUNT|REVERSAL). - Com
user(operador): exige caixa OPEN na filial; lançaFINCX02RECEIPT(CR) ouPAYMENT(CP) na mesma TX. - Sem
user(auto-settle / flow): não vincula caixa.
Cheque
paymentMethod=CHEQUE (sem source CHEQUE): cria FFC001 em CARTEIRA, trava o título, não quita.
source='CHEQUE': compensação — quita total/parcial sem criar outro cheque nem exigir caixa.
Título com cheque em CARTEIRA / DEPOSITADO / DEVOLVIDO: recusa mutação fora do ciclo do cheque.
Vínculo a título já PAGA: cheque inicia COMPENSADO.
Ticket / crédito
CUSTOMER_CREDIT | TICKET só em CR com cliente. Consome FIFO (FAB015) na mesma TX. Valor = líquido (paid − discount + juros da baixa).
Baixa em lote
POST /financial-transactions/batch-pay — uma TX Postgres; qualquer falha faz rollback total.
Desconto: PERCENT | AMOUNT + discountMode:
PERCENT_EACH— % em cada título (R$ vira rateio proporcional)- demais modos nas settings da filial (
FinancialSettings.batchDiscountMode) e override no DTO
Outras mutações
| Rota | Efeito |
|---|---|
PATCH :id/settle-without-movement | quita sem movimento de caixa |
PATCH :id/cancel | cancela |
POST :id/reverse | estorno |
PATCH :id/change-due-date | reprograma (guarda originalDueDate) |
PATCH :id/apply-discount | desconto |
PATCH :id/reopen | reabre |
PATCH :id/apply-interest | juros manuais (motivo ≥ obrigatório) |
PATCH :id/change-amount | altera original (motivo) |
POST settings/:filialId/apply-late-interest | mora em lote conforme snapshot da condição |
Histórico: GET :id/history · timeline · audit-log · linked-origins · origin-items.
