feat(devedores): ajuste de saldo via conciliação no pagamento#26
Merged
Conversation
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>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 dedebtorEntries) 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) numadb.transaction. Sem migration.Commits
8b776ddtotalCharged/chargeCount); factorycreateAdjustment310361fcreateDebtPaymentconcilia a diferença como abatimento (server-computed, atômico)d4401e0e50611aDebtPaymentDialog71599d6DebtEntryListrenderiza o lançamento de ajuste com valor com sinal5286df0settledChargesdo pagamento não inclui o ajuste (filtrotype='charge') + guards de testeVerificação
npm run lint,npm run format:check,npm run typecheck,npm test(312 testes unitários).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 paramain(não em PR, conformeCLAUDE.md). Cobrem: contadores do saldo, conciliação atômica (com e sem underpayment + overpayment), cascata de exclusão, e o guard desettledCharges.DebtPaymentDialog,DebtEntryList) passaram pelods-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 dechargesTotalsão escopados poruserId+type='charge', mas não porpersonId. 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