From 166e1398a30649776f8dde58dd7f8685f953185d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Ign=C3=A1cio=20Fontoura=20Solla?= Date: Fri, 24 Jul 2026 18:41:35 -0300 Subject: [PATCH] Document A11/B15 post-simplify deferrals after rebase onto B15. --- docs/plans/ordenacao-colunas-lista-municipios.md | 2 +- docs/plans/ranking-votos-municipio.md | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/plans/ordenacao-colunas-lista-municipios.md b/docs/plans/ordenacao-colunas-lista-municipios.md index 9692a569..18b8fae6 100644 --- a/docs/plans/ordenacao-colunas-lista-municipios.md +++ b/docs/plans/ordenacao-colunas-lista-municipios.md @@ -130,7 +130,7 @@ Componentes: ## Notas de implementação (2026-07-24) - **Fase 1 (contrato URL):** `MunicipalityListState` ganhou `sort`/`dir`; `municipalityListParamNames` inclui as novas chaves; `parseMunicipalityListParams` e `buildMunicipalityListSearchParams` validam e omitem defaults (`sort=name`, `dir=asc`); `buildMunicipalitySortHref` toggles a direção e reseta `page` para 1. Incluída `votos` na allowlist para desbloquear A11. -- **Fase 2 (loader):** `loadMunicipalityListPageBundle` aplica Payload `sort` para `name`, `region`, `kind`, `lastUpdateAt` e `politicalTrend.status`; para `expectedVotes`, `coverage` e `votos` carrega o filtrado completo, ordena em memória com nulls-last e tie-break por `name`, depois fatia a página. `votos` usa fallback por `name` até A11 implementar o rank real. `overview`/`scopeTotal` permanecem independentes da ordenação da lista. +- **Fase 2 (loader):** `loadMunicipalityListPageBundle` aplica Payload `sort` para `name`, `region`, `kind`, `lastUpdateAt` e `politicalTrend.status`; para `expectedVotes`, `coverage` e `votos` carrega o filtrado completo, ordena em memória com nulls-last e tie-break por `name`, depois fatia a página. **A11 (2026-07-24):** `votos` passa a ordenar pelo rank/share real (`municipalityVoteRank` + `compareMunicipalityVotesForSort`), não mais stub por `name`. - **Fase 3 (desktop):** `MunicipalitySortableHead` em `MunicipalityList.tsx` substitui os headers estáticos; usa `CampaignTransitionAnchor` para participar do pending compartilhado, expõe `aria-sort` e ícone de direção. A coluna `Assessores` permanece não sortável (editor B9). A prop `state` foi acrescentada a `MunicipalityListProps` e passada pela página. - **Fase 4 (mobile):** select compacto "Ordenar" em `MunicipalityFilters.tsx`, visível apenas abaixo de `md`, espelhando as mesmas keys/direções; cards seguem a mesma ordem da URL. - **Fase 5 (verificação):** `tsc --noEmit`, `pnpm lint`, `pnpm test`, `pnpm build` e Aikido passaram; knip não introduziu dead code novo. Ajuste em `tests/unit/campaignComponents.unit.spec.ts` para fornecer `state` e envolver `MunicipalityList` em `AppRouterContext` mock (necessário porque o sort header usa `useRouter`). diff --git a/docs/plans/ranking-votos-municipio.md b/docs/plans/ranking-votos-municipio.md index 47e9f55a..986457b9 100644 --- a/docs/plans/ranking-votos-municipio.md +++ b/docs/plans/ranking-votos-municipio.md @@ -89,6 +89,15 @@ Componentes tocados: `src/lib/municipalityVoteRank.ts` (novo, puro + unit tests) - **Seletor de ano na ordenação da lista.** Gatilho: pedido da mesa por leitura de série na lista. - **Coluna de rank na fila do E9.** Entra junto com E9 (a fila referencia este helper). +- **Hidratação única do sort derivado `votos` (evitar find filtrado + `loadMunicipalityScope` redundante).** Gatilho: lista lenta no recorte amplo ou 3º path derivado no loader; B15 já documenta full-scan de `expectedVotes`/`coverage` — tratar junto. + +## Já resolvido no simplify/critique (não reabrir) + +- Hover no header `2022` (sem `?` / CampaignInfoHint) · Limpar preserva sort · chevrons ativos/dormant · label curto `2022` (não "Concentração 2022"). + +## Explicitamente fora + +- Extrair `nextMunicipalitySortDir` / fundir com `CampaignInfoHint` (Popover ≠ hover) · markup único mobile/desktop · rank em SQL (artefato em memória basta). ## Referências