Skip to content

feat(resultado): a página Resultado vira a casa da DRE + recorte que não mente - #42

Merged
BarryBits merged 2 commits into
mainfrom
feat/resultado-casa-da-dre
Aug 5, 2026
Merged

feat(resultado): a página Resultado vira a casa da DRE + recorte que não mente#42
BarryBits merged 2 commits into
mainfrom
feat/resultado-casa-da-dre

Conversation

@BarryBits

Copy link
Copy Markdown
Owner

A DRE morava só dentro da Apuração, que é um lugar de fazer (subir extrato → categorizar → ver). Quem só queria ler o número atravessava o ritual inteiro pra chegar nele. Agora ela é espelhada na página Resultado, que é o lugar de leitura — e junto vão dois defeitos que apareceram ao usar a tela de verdade.

Dois commits, um por assunto.


91008ba — Resultado vira a casa da DRE

Espelhada, não movida: /financeiro/apuracao segue com a aba dre intacta, porque tirar de lá deixaria o ritual sem desfecho. A página abre na DRE e mantém o Painel da seção Resultado (acompanhamento mês a mês · ABC de despesas) na segunda aba. ?aba= faz deep-link em qualquer uma.

Isso destampou um bug que só existe nesta moldura: a DRE tem um botão "ir para Categorização", e categorizacao não é uma aba de /financeiro/resultado. O setAbaEscolhida renderizaria o conteúdo da Categorização sem entrada na barra de abas — o dono cairia numa tela sem volta a não ser pela sidebar. O irParaAba resolve: se a aba existe nesta moldura, troca; se não, navega pra rota dona dela.


f8d9619 — o recorte para de mentir

Duas metades do mesmo defeito: a tela não dizia a verdade sobre qual período estava mostrando.

Âncora — "Últimos 3 meses" entregava um mês

Os presets resolviam contra new Date(). Com dado até junho e hoje em agosto:

Preset Antes Agora
Mês atual ago/26 (vazio) jun/26
Mês passado jul/26 (vazio) mai/26
Últimos 3 meses jun–ago → 1 coluna abr–jun (3)
Últimos 6 meses mar–ago → 4 jan–jun (6)
Últimos 12 meses set/25–ago/26 → 10 jul/25–jun/26 (12)
YTD jan–ago → 6 de 8 jan–jun (6 de 6)

Ancoram no último mês com dado. Com ingestão em dia a âncora é o mês corrente e nada muda; mês futuro no dado não empurra a âncora. YEAR/COMPARE_YEARS/CUSTOM seguem no calendário — são absolutos por definição.

A convenção já existia na casa (defaultPeriodSelection escolhe o último fechado; a Visão do Projeto trava o YTD em maxMes) — o picker da DRE era o fora-da-curva.

Isso destampou uma incoerência: o default abria em junho com presetId: LAST_MONTH (ancorava em julho e pedia "mês passado"). Com a âncora nova, reescolher "Mês passado" daria maio — mesma opção, duas respostas. O default virou THIS_MONTH ancorado no mês fechado, com teste travando a coerência. Também sumiu o "(em curso)" sobre um mês já encerrado, e os "últimos N" passaram a mostrar a janela concreta (abr/26 – jun/26) em vez de repetir o texto do dropdown.

Drill-down — sempre abria o período inteiro

A linha toda era um alvo único: olhando "últimos 6 meses" não havia como ver a composição de um mês. Agora o drill-down herda o escopo da célula — coluna de mês abre aquele mês, coluna Total (e o nome da linha) abre o recorte inteiro. Célula zerada não é clicável.

A peça que faltava era a conversão chave → intervalo: a tabela guarda a coluna como chave ("2026-01", "2026-W03") e o drill-down filtra por data. rangeDaChaveDePeriodo é o inverso de getPeriodoKey, coberto por round-trip contra o gerador real — todo dia de 13 meses, nas quatro granularidades. A semana ISO é a traiçoeira (semana 1 contém 4 de janeiro e atravessa a virada do ano). Chave que não casa com a granularidade devolve null e cai no período cheio, em vez de inventar intervalo.

Os dois cliques abririam telas visualmente idênticas, então o subtítulo do modal passou a carregar o recorte: Custos (CMV/CPV/CSP) · Jan/26.


Escopo da varredura de seletores

Só o picker da DRE ancorava no calendário. Visão do Projeto e Raio-X do Mês já ancoravam no dado; /comparativo é placeholder sem seletor; o new Date() do ListaPorBancoView é legítimo (calcula a parcela corrente de um contrato hoje).

Gate

  • 1486/1486 testes (+21 novos) · tsc limpo · next build ok
  • 0 erro e 0 warning novo de eslint (os 2 erros no DREPivotTable são pré-existentes no HEAD — regras de DS sobre overlay e .cockpit-card; confirmado com stash)
  • 91008ba verificado verde isoladamente num worktree — sem commit intermediário quebrado
  • Validado na tela pelo Lucas antes do commit

🤖 Generated with Claude Code

BarryBits and others added 2 commits August 4, 2026 21:36
A DRE morava so dentro da Apuracao, que e um lugar de FAZER: o ritual
subir extrato -> categorizar -> ver o resultado. Quem so queria LER o
numero precisava atravessar o fluxo de trabalho inteiro pra chegar nele.

Agora ela e ESPELHADA em /financeiro/resultado, que e o lugar de leitura
("Estou ganhando — e por que?"). Espelhada, nao movida: a Apuracao segue
com a aba `dre` intacta, porque tirar de la deixaria o ritual sem
desfecho. A pagina abre na DRE e mantem o Painel da secao Resultado
(acompanhamento mes a mes · ABC de despesas) na segunda aba; `?aba=`
permite deep-link em qualquer uma.

Isso destampou um bug que so aparece nesta moldura: a DRE tem um botao
"ir para Categorizacao", e `categorizacao` NAO existe em
/financeiro/resultado. O `setAbaEscolhida` renderizaria o conteudo da
Categorizacao SEM entrada na barra de abas — o dono cairia numa tela sem
volta a nao ser pela sidebar. `irParaAba` resolve: se a aba existe nesta
moldura, troca; se nao, navega pra rota dona dela. O parametro e tipado
so com as tres abas do ritual, porque `painel`/`simulador` nao moram na
Apuracao e o fallback iria pro lugar errado.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…celula

Duas metades do mesmo defeito: a tela nao dizia a verdade sobre QUAL
periodo estava mostrando.

1. ANCORA — "Ultimos 3 meses" entregava UM mes

Os presets relativos resolviam contra `new Date()`. Com dado ate junho e
hoje em agosto, "Ultimos 3 meses" virava jun–ago: uma coluna, prometendo
tres. "Mes atual" e "Mes passado" caiam em meses vazios, e o YTD
arrastava colunas fantasma ate o mes corrente.

Agora ancoram no ultimo mes COM DADO (`ancoraDosPresets`). Quando a
ingestao esta em dia a ancora E o mes corrente e nada muda; mes futuro no
dado nao empurra a ancora pra frente. YEAR/COMPARE_YEARS/CUSTOM seguem no
calendario — sao absolutos por definicao.

A convencao ja existia na casa: `defaultPeriodSelection` escolhe o ultimo
mes fechado e a Visao do Projeto trava o YTD em `maxMes`. O picker da DRE
era o fora-da-curva.

Isso destampou uma incoerencia: o default abria em junho com
`presetId: LAST_MONTH` (ancorava em julho e pedia "mes passado"). Com a
ancora nova, reescolher "Mes passado" daria MAIO — mesma opcao, duas
respostas. O default virou `THIS_MONTH` ancorado no mes fechado, e tem
teste travando essa coerencia. Tambem sumiu o "(em curso)" do rotulo
quando a ancora e um mes ja encerrado, e os "ultimos N" passaram a
mostrar a janela concreta ("abr/26 – jun/26") em vez de repetir o texto
do dropdown — era ali que a tela prometia 3 e entregava 1.

2. DRILL-DOWN — sempre abria o periodo inteiro

A linha toda era um alvo unico. Olhando "ultimos 6 meses" nao havia como
ver a composicao de um mes so. Agora o drill-down herda o escopo da
CELULA: coluna de mes abre aquele mes, coluna Total (e o nome da linha)
abre o recorte inteiro. Celula zerada nao e clicavel — nao ha transacao
pra mostrar.

A peca que faltava era a conversao chave->intervalo: a tabela guarda a
coluna como chave ("2026-01", "2026-W03") e o drill-down filtra por data.
`rangeDaChaveDePeriodo` e o inverso de `getPeriodoKey`, coberto por
round-trip contra o gerador REAL — todo dia de 13 meses, nas quatro
granularidades. A semana ISO e a traicoeira (semana 1 contem 4 de janeiro
e atravessa a virada do ano); chave que nao casa com a granularidade
devolve null e cai no periodo cheio em vez de inventar intervalo.

Os dois cliques abririam telas visualmente identicas, entao o subtitulo
do modal passou a carregar o recorte ("Custos (CMV/CPV/CSP) · Jan/26").

Gate: 1486/1486 testes (+21), build ok, 0 erro/warning novo de eslint.

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

vercel Bot commented Aug 5, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
atr-os Ready Ready Preview Aug 5, 2026 12:45am

@supabase

supabase Bot commented Aug 5, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project tdlxqqgechxhkygdmsxq because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@BarryBits
BarryBits merged commit 7cc0d17 into main Aug 5, 2026
4 checks passed
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