Skip to content

feat(devedores): ajuste de saldo via conciliação no pagamento#26

Merged
Guiroos merged 9 commits into
mainfrom
feat/devedores-ajuste-conciliacao
Jul 5, 2026
Merged

feat(devedores): ajuste de saldo via conciliação no pagamento#26
Guiroos merged 9 commits into
mainfrom
feat/devedores-ajuste-conciliacao

Conversation

@Guiroos

@Guiroos Guiroos commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Objetivo

Permitir conciliar a diferença de um pagamento parcial contra cobranças abertas, registrando um lançamento de adjustment (abatimento) para que o saldo do devedor zere corretamente.

O tipo adjustment (já existente no enum de debtorEntries) passa a ter semântica de valor com sinal: negativo reduz o saldo, positivo aumenta. A conciliação vive no dialog de pagamento, mas o servidor calcula o abatimento a partir das cobranças selecionadas e grava duas entradas atômicas (payment + adjustment) numa db.transaction. Sem migration.

Commits

Commit O quê
8b776dd Ajuste com sinal não contamina os contadores de cobrança (totalCharged/chargeCount); factory createAdjustment
310361f createDebtPayment concilia a diferença como abatimento (server-computed, atômico)
d4401e0 Deletar pagamento remove o ajuste vinculado e reabre as cobranças (cascata type-aware)
e50611a Toggle de conciliação no DebtPaymentDialog
71599d6 DebtEntryList renderiza o lançamento de ajuste com valor com sinal
5286df0 settledCharges do pagamento não inclui o ajuste (filtro type='charge') + guards de teste

Verificação

  • Local (verde): npm run lint, npm run format:check, npm run typecheck, npm test (312 testes unitários).
  • Testes de integração — CI-gated: os segredos de integração (NEON_*, ENCRYPTION_MASTER_KEY) não estão na máquina de desenvolvimento. Os testes de integração de devedores foram escritos e revisados por leitura, mas rodam apenas no CI em push para main (não em PR, conforme CLAUDE.md). Cobrem: contadores do saldo, conciliação atômica (com e sem underpayment + overpayment), cascata de exclusão, e o guard de settledCharges.
  • UI: ambas as mudanças de componente (DebtPaymentDialog, DebtEntryList) passaram pelo ds-reviewer (DS Maré) — aprovadas sem violações.

Fora de escopo (intencional)

Botão de ajuste standalone, ajuste de acréscimo pela UI, dívida bidirecional, tratamento de overpayment como crédito.

Follow-up (não bloqueante, pré-existente)

Em createDebtPayment, o UPDATE de quitação e o SELECT de chargesTotal são escopados por userId + type='charge', mas não por personId. A UI só fornece cobranças da pessoa atual, então é teórico — mas um cliente malicioso poderia quitar cobranças de outra pessoa do mesmo usuário. Vale um hardening à parte.

🤖 Generated with Claude Code

Guilherme Roos and others added 9 commits July 5, 2026 12:16
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…d adjustment)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…branças

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…nciliação

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
mare Ready Ready Preview, Comment Jul 5, 2026 4:44pm

@Guiroos Guiroos merged commit d8dc640 into main Jul 5, 2026
7 checks passed
@Guiroos Guiroos deleted the feat/devedores-ajuste-conciliacao branch July 5, 2026 17:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant