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

  1. Abra o título → baixar.
  2. Informe valor, forma (PIX, CHEQUE, CUSTOMER_CREDIT/Ticket, …), desconto/juros da baixa, observações.
  3. Confirme. Status vira PAGA ou PARCIAL. Histórico FAB013 tipo PAYMENT.

Baixa unitária (API)

PATCH /financial-transactions/:id/pay

  • Atualiza paidAmount, dueAmount, PAGA ou PARCIAL.
  • Cria FAB013 (PAYMENT | DISCOUNT | REVERSAL).
  • Com user (operador): exige caixa OPEN na filial; lança FINCX02 RECEIPT (CR) ou PAYMENT (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

RotaEfeito
PATCH :id/settle-without-movementquita sem movimento de caixa
PATCH :id/cancelcancela
POST :id/reverseestorno
PATCH :id/change-due-datereprograma (guarda originalDueDate)
PATCH :id/apply-discountdesconto
PATCH :id/reopenreabre
PATCH :id/apply-interestjuros manuais (motivo ≥ obrigatório)
PATCH :id/change-amountaltera original (motivo)
POST settings/:filialId/apply-late-interestmora em lote conforme snapshot da condição

Histórico: GET :id/history · timeline · audit-log · linked-origins · origin-items.