Repository navigation
feat(balcao): estorno, confirmacao com Desfazer, pontos pelo valor e clientes recentes (tasks 4 a 7) - #28
Merged
Conversation
Task 4 do backlog: o lojista estorna pelo extrato um lancamento das ultimas 24 h. O estorno vira um registro novo (reversal) apontando para o lancamento, nada e apagado, e o saldo nunca fica negativo. Migration 004. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Task 5 do backlog: depois de lancar, a tela do cliente mostra os pontos lancados, o saldo novo e quanto falta para o proximo premio, com um botao Desfazer por 30 s (usa o estorno da task 4). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Task 7 do backlog: abaixo do campo de telefone aparecem os 5 ultimos clientes atendidos (com movimentacao), e um toque abre a tela do cliente. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Task 6 do backlog: a loja define a regra (a cada R$ X, 1 ponto, de R$ 0,01 em diante) e no balcao digita o valor da compra; a tela mostra a previa e o servidor recalcula, sempre arredondando para baixo. Lancar pontos direto continua valendo. Migration 005. Tambem corrige a rolagem horizontal do extrato a 360 px: o rotulo escondido da coluna de acoes escapava do scroll da tabela. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
traz o controle de migrations, a configuracao por ambiente e o ip por proxy confiavel (#29). - 004_estorno e 005_regra_pontos registradas no schema_migrations do schema.sql - cabecalho das migrations 004 e 005 aponta para o php bin/migrate.php - LoyaltyCardModel::log grava reverses_id e o ip resolvido pelo ClientIp - docs com as instrucoes de migration da main Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eat/balcao-estorno-regra-recentes - MerchantModel::findById devolve points_rule_cents e password_hash (regra de pontos e assinatura da senha) - authGuard confere a assinatura da senha antes de guardar a loja da requisicao - constantes, rotas do README e codigos de flash das duas branches mantidos Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
sousa7tz
commented
Oct 6, 2026
sousa7tz
left a comment
Collaborator
Author
There was a problem hiding this comment.
Revisão (feita com o Claude Code; o GitHub não deixa o autor aprovar a própria PR, então fica como comentário).
Conferido e ok
reverse(): elegibilidade (desta loja,earn, ainda não estornado, até 24 h, cartão não anonimizado) +FOR UPDATEno cartão antes de checar o saldo; dois estornos simultâneos esbarram noUNIQUEdereverses_ide viramalready. Estorno concorrente com anonimização cai eminsufficient(saldo zerado), sem saldo negativo.- O
log_iddo POST é conferido contra o cartão do cliente (logBelongsToCard) e o model confere a loja de novo. - Os pontos pela regra são calculados no servidor, com
intdiv(sempre pra baixo) e em centavos inteiros, sem float; o limite deMAX_POINTS_PER_ENTRYtambém vale nesse caminho. - A anonimização agora limpa também a descrição dos estornos (
Estorno: <texto livre>). points_issuednos relatórios desconta os estornos.- Migrations 004/005 registradas no
schema.sql; toda saída nova das views passa pore()ou(int). - CI verde (PHP 8.1, 8.3 e masks.js); 283 testes passando localmente.
Melhorias menores, não bloqueiam
Money::toCents("-10")devolve 1000: o sinal é descartado junto com o resto. Melhor recusar comvalor_invalido.- Compra que passa de 10.000 pontos pela regra devolve
pontos_invalidos, mensagem genérica para quem digitou um valor em R$. logBelongsToCardfaz SQL direto no controller; o padrão do projeto é deixar isso noPointsLogModel.- O Desfazer some em 30 s só no navegador; no servidor o estorno vale por 24 h. É coerente com o extrato, mas vale deixar claro no texto do botão.
Sem bloqueios: pode mergear.
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.
Tasks 4, 5, 6 e 7 do backlog (melhorias do balcão), um commit por task.
Task 4: estorno de lançamento (
d62fda9)reversalnopoints_log, comreverses_idapontando para o lançamento. Saldo e total acumulado voltam ao que eram.UNIQUEemreverses_idgarante isso, inclusive com dois cliques simultâneos.004_estorno.sql.Task 5: confirmação com novo saldo e Desfazer (
c3c17d3)Task 7: clientes atendidos recentemente (
51f7ab0)Task 6: pontos pelo valor da compra (
e325bdd)merchant/points-rule. A tela tem link a partir de Prêmios, da tela do cliente e do guia de primeiros passos, onde a regra é um passo opcional.App\Support\Money).005_regra_pontos.sql.Testes
main, ficam iguais, coluna a coluna, a uma instalação nova.Banco local: rodar
004_estorno.sqle005_regra_pontos.sql. O banco de dev do autor já está migrado.🤖 Generated with Claude Code