mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 06:43:06 +00:00
docs(plans): intenção município detalhe v2 (B147–B152)
Plano pai + seis fatias para a rota paralela /campanha/municipio/<slug>/v2 (briefing denso, edit-where-you-see; cutover após OK produto).
This commit is contained in:
parent
ad0b1d84a1
commit
522e5939c9
7 changed files with 614 additions and 0 deletions
99
docs/plans/municipio-detalhe-v2.md
Normal file
99
docs/plans/municipio-detalhe-v2.md
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
# Município detalhe v2 — plano master
|
||||
|
||||
Status: registrado
|
||||
Atualizado em: 2026-08-02
|
||||
Issue: — (lote: #330–#335 / B147–B152; sem Issue-pai no GitHub)
|
||||
Priority: P1 (lote)
|
||||
Model: — (por filho)
|
||||
Impeccable: C — superfície nova em rota paralela
|
||||
Appetite: lote ~4–6 dias eng em fatias; cutover só após OK produto
|
||||
Responsável: —
|
||||
|
||||
## Intenção
|
||||
|
||||
O detalhe atual de município (`/campanha/municipios/[slug]`) tem **6 abas** e uma Visão geral em torre de cards. O **Coordenador Geral** não explora bem abas nem scroll longo: lideranças, conta e próximo passo ficam fora do caminho.
|
||||
|
||||
Queremos um **briefing de operação em um olhar** — status → conta → rede → agora — com **edit where you see**, motivo opcional nas mudanças de conjuntura, e ações secundárias no FAB. Desenvolvemos em rota paralela **`/campanha/municipio/<slug>/v2`**; só após confirmação de produto a v2 substitui a canônica.
|
||||
|
||||
Este arquivo é o **pai de intenção** do lote. Cada Issue filha tem plano próprio e aponta para cá. Planos de **implementação** (`*-impl.md`) nascem em `work-issue` / `agent-work-issue`, não aqui.
|
||||
|
||||
## Persona e fluxo (lote)
|
||||
|
||||
- **Persona / contexto:** Coordenador Geral (e Candidato / assessor staff) na mesa ou no celular, vindo da lista ou do mapa, com pouco tempo.
|
||||
- **Job principal do lote:** abrir um município e, sem trocar aba, saber como estamos, quem segura, o que falta na meta, e o que fazer agora — e agir no lugar.
|
||||
- **Fluxo desejado (lote):**
|
||||
|
||||
```text
|
||||
[Lista/mapa] → /campanha/municipio/<slug>/v2
|
||||
→ STATUS (nível · tendência · sinal · classe · agregado)
|
||||
→ CONTA (meta P/M/O · cobertura do cenário ativo · classe)
|
||||
→ REDE (lista; votos na célula)
|
||||
→ AGORA (encaminhamento · sugestão · visita condensada)
|
||||
→ FAB (dossiê / eleições / …)
|
||||
[Outcome] decide ou age sem explorar abas
|
||||
```
|
||||
|
||||
- **Anti-goals de produto (lote):** não redesign do shell inteiro; não spreadsheet mode; não segundo cadastro de pessoa; não % estadual absoluto; não obrigar motivo nas mudanças; não expor estimado a `leader`; não matar a rota antiga até o cutover.
|
||||
|
||||
## Filhos do lote
|
||||
|
||||
| ID | Plano | Outcome em uma linha |
|
||||
| ---- | ----- | -------------------- |
|
||||
| B147 (#330) | [municipio-v2-shell-status.md](municipio-v2-shell-status.md) | Rota v2 + faixa de status operável |
|
||||
| B148 (#331) | [municipio-v2-conta-local.md](municipio-v2-conta-local.md) | Meta P/M/O + cobertura + classe na 1ª dobra |
|
||||
| B149 (#332) | [municipio-v2-rede.md](municipio-v2-rede.md) | Rede em lista editável (sem aba) |
|
||||
| B150 (#333) | [municipio-v2-agora.md](municipio-v2-agora.md) | Encaminhamento + sugestão + visita condensada |
|
||||
| B151 (#334) | [municipio-v2-fab-secundario.md](municipio-v2-fab-secundario.md) | Secundárias no FAB (não na dobra) |
|
||||
| B152 (#335) | [municipio-v2-cutover.md](municipio-v2-cutover.md) | v2 vira canônica após OK produto |
|
||||
|
||||
**Ordem:** B147 primeiro (shell). B148–B151 dependem de B147 e **serializam** entre si na mesma rota v2 (um agente de cada vez no surface). B152 por último, após validação humana.
|
||||
|
||||
## Decisões de produto do lote _(confirmadas no gate 2026-08-02)_
|
||||
|
||||
1. Rota paralela: `/campanha/municipio/<slug>/v2` (singular) até B152.
|
||||
2. Sinal = **mesmo padrão de seletor** que nível e tendência (não pill → fluxo distinto).
|
||||
3. Mudança de nível / tendência / sinal → **modal de motivo opcional** (política alinhada a B134).
|
||||
4. Texto sob o status = **agregado** das últimas notas (nível · tendência · sinal).
|
||||
5. Explicações = **tooltip** + link para `/campanha/conceitos#…` (não painel inline).
|
||||
6. Clique no campo P/M/O **ativa** aquele cenário na cobertura.
|
||||
7. Classe territorial visível na 1ª dobra (Expansão / Reduto / …).
|
||||
8. Nome / TI **não** competem no corpo — soft-dep B145 (título no header).
|
||||
9. Página antiga intacta até B152.
|
||||
|
||||
## Soft-deps externos
|
||||
|
||||
- **B145** (#315) — título da entidade no header; v2 não redesenha chrome de nome.
|
||||
- **B134** (#288) — motivo opcional (wizard/nível); v2 **herda a política**, não espera o merge para começar o shell.
|
||||
|
||||
## Dados (intenção do lote)
|
||||
|
||||
- **Vou apresentar dados?** Sim, nas fatias B148 (conta/classe) e B149 (pledges); status qualitativo em B147.
|
||||
- **Decisões desbloqueadas:** ver planos filhos.
|
||||
- **Forma:** adiada aos `*-impl.md`. Restrição de produto: leitura relativa/local; sem % estadual absoluto.
|
||||
|
||||
## Direção no codebase (hipótese do lote)
|
||||
|
||||
- **Áreas prováveis:** nova rota sob `src/app/(campaign)/campanha/(app)/`, composição em `src/components/campaign/municipality/`, loaders já usados pelo detalhe atual / dossiê / conta / pledges / sugestões / visita.
|
||||
- **Precedente:** detalhe atual + E16 dossiê + E8 conta + lista B9 edit-in-place + FAB B126; canvas de produto na sessão de shaping.
|
||||
- **Risco de acoplamento:** `leader` lockdown; não duplicar política de voto estimado; não quebrar links da rota antiga até o cutover.
|
||||
|
||||
## Fora de escopo (lote)
|
||||
|
||||
- Implementação técnica detalhada (fica nos `*-impl.md`).
|
||||
- Redesign de lista/mapa/Início.
|
||||
- Mudança de glossário de conceitos (só linkar).
|
||||
- Import CSV, demandas embutidas, comparativo eleitoral na 1ª dobra.
|
||||
|
||||
## Rabbit holes de produto
|
||||
|
||||
- **Epic único “refazer detalhe”.** Explode appetite e review. **Corte:** seis Issues com aceite próprio.
|
||||
- **Trazer o dossiê inteiro para a dobra.** Mata densidade. **Corte:** dossiê/eleições só no FAB até cutover decidir destinos.
|
||||
- **Auto-save ao tocar o select.** Perde o rito de motivo. **Corte:** select abre modal; confirmação grava.
|
||||
|
||||
## Referências
|
||||
|
||||
- Issues: [#330](https://github.com/fsolla/teqo/issues/330)–[#335](https://github.com/fsolla/teqo/issues/335) (B147–B152)
|
||||
- Gate / shaping: sessão canvas `municipio-detalhe-briefing` (ajustes Select+tooltip na intenção).
|
||||
- Soft: `docs/plans/motivo-opcional-tendencia-e-nivel.md` (B134), issue B145.
|
||||
- Entregas reusadas: E8, E10/E11, E13, E14, E16, B9, B126.
|
||||
- Rotas atuais: `/campanha/municipios/[slug]` (abas).
|
||||
85
docs/plans/municipio-v2-agora.md
Normal file
85
docs/plans/municipio-v2-agora.md
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
# Município v2 — Agora (encaminhamento + sugestão + visita)
|
||||
|
||||
Status: registrado
|
||||
Atualizado em: 2026-08-02
|
||||
Issue: #333
|
||||
Priority: P1
|
||||
Model: composer-2.5
|
||||
Impeccable: B — bloco na rota v2
|
||||
Appetite: ~0,5–1 dia eng
|
||||
Responsável: —
|
||||
|
||||
**Plano pai:** [municipio-detalhe-v2.md](municipio-detalhe-v2.md) (lote B147–B152)
|
||||
|
||||
## Intenção
|
||||
|
||||
Depois de status, conta e rede, o coordenador precisa de um bloco **“o que fazer agora”**: próximo passo humano, o que o sistema está pedindo (sugestão), e se a visita do candidato faz sentido — **condensado**, sem a torre de cards da Visão geral atual.
|
||||
|
||||
## Persona e fluxo
|
||||
|
||||
- **Persona / contexto:** CG na mesa, fechando a leitura do município.
|
||||
- **Job principal:** sair da página com um encaminhamento claro e, se couber, resolver/dispensar uma sugestão.
|
||||
- **Fluxo desejado:**
|
||||
1. Lê/edita **encaminhamento** (próximo passo) no lugar.
|
||||
2. Vê **no máximo 1–2** sugestões acionáveis (ou silêncio explícito).
|
||||
3. Vê visita do candidato em **uma linha** (elegível / não + motivo curto); detalhe e compositor ficam no FAB (B151).
|
||||
- **Anti-goals de produto:** lista completa do catálogo E11 na dobra; card de elegibilidade com as cinco condições expandidas sempre; segundo lugar para editar estratégia além deste bloco + status.
|
||||
|
||||
### Esboço de fluxo (B)
|
||||
|
||||
```text
|
||||
[Agora]
|
||||
→ Encaminhamento (texto editável / auto-save)
|
||||
→ Sugestão (0–2) → Resolver | Dispensar
|
||||
→ Visita: Elegível|Não · uma linha · “abrir giros” no FAB
|
||||
```
|
||||
|
||||
## Objetivo e aceite
|
||||
|
||||
- Encaminhamento editável no lugar na v2 (staff com permissão).
|
||||
- Sugestões: no máximo duas na dobra; resto não compete (Início / FAB se necessário).
|
||||
- Visita condensada (estado + uma frase); não replica o card E13 completo na dobra.
|
||||
- Mobile: bloco empilha abaixo da rede sem perder o encaminhamento acima da dobra secundária.
|
||||
|
||||
## Dados (intenção)
|
||||
|
||||
- **Vou apresentar dados?** Sim, derivados (sugestões, elegibilidade resumida).
|
||||
- **Decisões desbloqueadas:**
|
||||
- CG: “qual o próximo passo que a equipe combinou?”
|
||||
- CG: “resolvo esta sugestão agora ou dispenso?”
|
||||
- CG: “vale levar o candidato — ou só abrir o compositor depois?”
|
||||
- **Forma:** *adiada ao impl*. Restrição: silêncio é pergunta (não empty state vazio mudo).
|
||||
|
||||
## Direção no codebase (hipótese)
|
||||
|
||||
- **Áreas prováveis:** bloco na v2; `nextSteps` / estratégia; sugestões E11; elegibilidade E13 resumida.
|
||||
- **Precedente:** OverviewTab atual (sugestões + visita + strategy next steps); motor de sugestões.
|
||||
- **Risco de acoplamento:** não inventar segundo motor de sugestão; resolve/dispensa reutiliza o fluxo já existente.
|
||||
|
||||
## Dependências
|
||||
|
||||
- Hard: **B147**.
|
||||
- Pai: [municipio-detalhe-v2.md](municipio-detalhe-v2.md).
|
||||
- Soft: B151 (atalho giros/dossiê).
|
||||
- Serializes com irmãos na rota v2.
|
||||
|
||||
## Fora de escopo
|
||||
|
||||
- Compositor de giros completo (só atalho).
|
||||
- Feed de atualizações completo.
|
||||
- Triagem statewide (continua no Início).
|
||||
|
||||
## Rabbit holes de produto
|
||||
|
||||
- **Painel E11 completo no município.** **Corte:** 0–2 itens.
|
||||
- **Checklist E13 expandida sempre.** **Corte:** uma linha + FAB.
|
||||
|
||||
## Questões em aberto (produto)
|
||||
|
||||
- **Encaminhamento = campo `nextSteps` da estratégia ou nota separada?** **Opções:** A) reusar `nextSteps` | B) novo conceito. **Recomendação:** A — um só lugar de verdade. _(assumido)_
|
||||
|
||||
## Referências
|
||||
|
||||
- GitHub Issue #333
|
||||
- Pai: [municipio-detalhe-v2.md](municipio-detalhe-v2.md)
|
||||
- E11 motor de sugestões; E13 elegibilidade / giros
|
||||
91
docs/plans/municipio-v2-conta-local.md
Normal file
91
docs/plans/municipio-v2-conta-local.md
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
# Município v2 — conta local (P/M/O + cobertura + classe)
|
||||
|
||||
Status: registrado
|
||||
Atualizado em: 2026-08-02
|
||||
Issue: #331
|
||||
Priority: P1
|
||||
Model: composer-2.5
|
||||
Impeccable: B — bloco na rota v2 (shell B147)
|
||||
Appetite: ~1 dia eng; conta densa na 1ª dobra
|
||||
Responsável: —
|
||||
|
||||
**Plano pai:** [municipio-detalhe-v2.md](municipio-detalhe-v2.md) (lote B147–B152)
|
||||
|
||||
## Intenção
|
||||
|
||||
Na v2, o coordenador precisa ver **meta nos três cenários**, **quanto já está comprometido** e **que classe territorial** é aquele município — sem abrir a conta da cadeira completa nem a aba de eleições. Esta fatia densifica a **conta local** na dobra principal.
|
||||
|
||||
## Persona e fluxo
|
||||
|
||||
- **Persona / contexto:** CG / Candidato / assessor staff no detalhe v2, depois de ler o status.
|
||||
- **Job principal:** responder “qual a meta?”, “falta quanto no cenário que estou olhando?” e “isto é expansão, reduto, marginal…?”.
|
||||
- **Fluxo desejado:**
|
||||
1. Vê P / M / O como campos editáveis no lugar.
|
||||
2. **Clicar** (ou focar) um dos três **ativa** aquele cenário para cobertura/déficit.
|
||||
3. Lê pledges (cenário de estimativa já usado na campanha) vs meta ativa → cobertura / déficit.
|
||||
4. Vê **classe territorial** com destaque (não só num canto do status).
|
||||
5. Hover → tooltip (meta, cobertura, classe) + link a conceitos.
|
||||
- **Anti-goals de produto:** esconder P/M/O atrás de um único número; forçar a grade diagnóstica inteira (potencial, benchmark, etc.) na 1ª dobra; % estadual absoluto; gauge SaaS.
|
||||
|
||||
### Esboço de fluxo (B)
|
||||
|
||||
```text
|
||||
[Status B147]
|
||||
→ Conta: [P] [M] [O] (clique ativa)
|
||||
→ Meta ativa · pledges · déficit/cobertura
|
||||
→ Classe (pill + fatores curtos opcionais)
|
||||
→ “mais detalhe da conta” sob demanda (não obrigatório nesta Issue)
|
||||
```
|
||||
|
||||
## Objetivo e aceite
|
||||
|
||||
- Três metas (pessimista / média / otimista) visíveis e editáveis no lugar (staff com permissão).
|
||||
- Cenário ativo da cobertura = o P/M/O clicado/focado; feedback claro de qual está ativo.
|
||||
- Cobertura e déficit/folga do cenário ativo legíveis sem sair da dobra.
|
||||
- Classe territorial (Reduto / Expansão / Manutenção / Marginal / Sem base) visível nesta seção (além ou em conjunto com o status).
|
||||
- Tooltips com one-liner + link `#meta`, `#cobertura-da-meta`, `#classe-territorial`.
|
||||
- Não exige abrir aba Eleições para a leitura local básica.
|
||||
|
||||
## Dados (intenção)
|
||||
|
||||
- **Vou apresentar dados?** Sim, superfície neste item.
|
||||
- **Decisões desbloqueadas:**
|
||||
- CG: “aperto ou alivio a meta neste cenário?”
|
||||
- CG/assessor: “a rede cobre a meta ou há déficit material?”
|
||||
- CG: “aloco perna como expansão ou defendo reduto?” (classe)
|
||||
- **Forma:** *adiada ao impl*. Restrições: leitura relativa/local; classe nunca “órfã” sem poder explicar (tooltip/fatores); sem % estadual absoluto.
|
||||
|
||||
## Direção no codebase (hipótese)
|
||||
|
||||
- **Áreas prováveis:** bloco na composição da rota v2; reuso da conta/goal coverage / expectedVotes / classificação territorial já usados no detalhe e na lista.
|
||||
- **Precedente:** E8 conta da cadeira; coluna Classe na lista; edit-in-place de expectedVotes (B9).
|
||||
- **Risco de acoplamento:** permissões de edição de meta; não inventar segundo significado de “cenário” divergente do resto da campanha.
|
||||
|
||||
## Dependências
|
||||
|
||||
- Hard: **B147** (shell v2).
|
||||
- Pai: [municipio-detalhe-v2.md](municipio-detalhe-v2.md).
|
||||
- Serializes com B149–B151 na mesma rota v2.
|
||||
|
||||
## Fora de escopo
|
||||
|
||||
- Baseline TSE / comparativo de candidatos (permanecem secundários / FAB / cutover).
|
||||
- Rede de lideranças (B149).
|
||||
- Sugestões e visita (B150).
|
||||
- Redesenhar o card completo da conta da cadeira na dobra (detalhe sob demanda OK).
|
||||
|
||||
## Rabbit holes de produto
|
||||
|
||||
- **Trazer todos os diagnósticos E8 para a dobra.** **Corte:** P/M/O + cobertura + classe; resto sob demanda.
|
||||
- **Três coberturas simultâneas (uma por cenário) sempre.** **Corte:** uma cobertura do cenário ativo; os três números de meta ficam visíveis.
|
||||
|
||||
## Questões em aberto (produto)
|
||||
|
||||
- **Classe só na conta, só no status, ou nos dois?** **Opções:** A) nos dois (status = glance, conta = com fatores) | B) só na conta. **Recomendação:** A — status já prevê pill; conta reforça com contexto. _(confirmado no shaping — manter)_
|
||||
|
||||
## Referências
|
||||
|
||||
- GitHub Issue #331
|
||||
- Pai: [municipio-detalhe-v2.md](municipio-detalhe-v2.md)
|
||||
- `docs/plans/conta-da-cadeira.md` (E8, histórico)
|
||||
- Conceitos: `#meta`, `#cobertura-da-meta`, `#classe-territorial`
|
||||
79
docs/plans/municipio-v2-cutover.md
Normal file
79
docs/plans/municipio-v2-cutover.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
# Município v2 — cutover para detalhe canônico
|
||||
|
||||
Status: registrado
|
||||
Atualizado em: 2026-08-02
|
||||
Issue: #335
|
||||
Priority: P2
|
||||
Model: composer-2.5
|
||||
Impeccable: A — N/A (migração de rota / remoção do paralelo)
|
||||
Appetite: ~0,5–1 dia eng; só após OK produto humano
|
||||
Responsável: —
|
||||
|
||||
**Plano pai:** [municipio-detalhe-v2.md](municipio-detalhe-v2.md) (lote B147–B152)
|
||||
|
||||
## Intenção
|
||||
|
||||
Enquanto a v2 vive em `/campanha/municipio/<slug>/v2`, a campanha tem **dois detalhes**. Depois que produto confirmar que a v2 é melhor, **uma** URL canônica deve bastar: a experiência nova no lugar da de abas, sem obrigar o time a lembrar do `/v2`.
|
||||
|
||||
## Persona e fluxo
|
||||
|
||||
- **Persona / contexto:** time de campanha + agentes; CG não deve “escolher versão”.
|
||||
- **Job principal:** passar a abrir sempre o briefing novo; links antigos não quebram.
|
||||
- **Fluxo desejado:**
|
||||
1. Produto valida B147–B151 em uso real (demo / semana de paralelo).
|
||||
2. Cutover: canônica passa a ser a experiência v2; `/v2` redireciona ou some; links internos (lista, mapa, giros, dossiê, recentes) apontam certo.
|
||||
3. Abas antigas saem do caminho (não ficam como segunda UI).
|
||||
- **Anti-goals de produto:** manter duas UIs indefinidamente; cutover sem OK humano; quebrar bookmarks sem redirect.
|
||||
|
||||
### Esboço de fluxo
|
||||
|
||||
```text
|
||||
[OK produto] → canônica = briefing
|
||||
→ redirects dos URLs antigos/paralelos
|
||||
→ limpeza da UI de abas do caminho principal
|
||||
→ smoke: lista → detalhe → leader lockdown → print dossiê
|
||||
```
|
||||
|
||||
## Objetivo e aceite
|
||||
|
||||
- Após merge desta Issue, staff chega ao briefing **sem** precisar de `/v2` na URL.
|
||||
- Links internos relevantes atualizados ou cobertos por redirect.
|
||||
- Lockdown de `leader` intacto.
|
||||
- Não reintroduz tab nav de 6 itens como modelo default.
|
||||
- Critério de go/no-go: confirmação explícita de produto (comentário na Issue / checklist).
|
||||
|
||||
## Dados (intenção)
|
||||
|
||||
- **Dados: N/A** — roteamento e aposentadoria de UI.
|
||||
|
||||
## Direção no codebase (hipótese)
|
||||
|
||||
- **Áreas prováveis:** rotas campaign município(s); links em lista/mapa/giros/quick actions/recent visits; remoção ou redirect da UI de abas.
|
||||
- **Precedente:** renomes de rota na campanha (ex. planos→atividades); B129 remover overview.
|
||||
- **Risco de acoplamento:** não deixar `/v2` e abas convivendo sem redirect; não esquecer print do dossiê.
|
||||
|
||||
## Dependências
|
||||
|
||||
- Hard: **B147, B148, B149, B150, B151** entregues.
|
||||
- Pai: [municipio-detalhe-v2.md](municipio-detalhe-v2.md).
|
||||
- Gate humano: OK produto antes do claim/exec desta Issue (marcar blocked até lá, se útil).
|
||||
|
||||
## Fora de escopo
|
||||
|
||||
- Novas features de briefing (vão em Issues novas pós-cutover).
|
||||
- Redesign do dossiê em si.
|
||||
|
||||
## Rabbit holes de produto
|
||||
|
||||
- **Big-bang sem semana de paralelo.** **Corte:** B152 só após OK; paralelo existe de propósito.
|
||||
- **Preservar abas “por um tempo” ao lado da v2 canônica.** **Corte:** uma experiência; secundárias no FAB.
|
||||
|
||||
## Questões em aberto (produto)
|
||||
|
||||
- **URL canônica final?** **Opções:** A) `/campanha/municipios/[slug]` (plural histórico) com UI nova | B) `/campanha/municipio/[slug]` (singular da v2). **Recomendação:** A — menos churn de links externos/hábitos; singular `/municipio/.../v2` foi só paralelo. _(assumido — validar no OK de cutover)_
|
||||
|
||||
## Referências
|
||||
|
||||
- GitHub Issue #335
|
||||
- Pai: [municipio-detalhe-v2.md](municipio-detalhe-v2.md)
|
||||
- Filhos B147–B151
|
||||
79
docs/plans/municipio-v2-fab-secundario.md
Normal file
79
docs/plans/municipio-v2-fab-secundario.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
# Município v2 — ações secundárias no FAB
|
||||
|
||||
Status: registrado
|
||||
Atualizado em: 2026-08-02
|
||||
Issue: #334
|
||||
Priority: P2
|
||||
Model: composer-2.5
|
||||
Impeccable: B — encaixe no FAB da campanha / detalhe v2
|
||||
Appetite: ~0,5 dia eng
|
||||
Responsável: —
|
||||
|
||||
**Plano pai:** [municipio-detalhe-v2.md](municipio-detalhe-v2.md) (lote B147–B152)
|
||||
|
||||
## Intenção
|
||||
|
||||
Abas (dossiê, eleições, atualizações, …) e CTAs secundários **não devem competir** com a dobra de operação. Na v2, o que era “outra aba” vira **ação no FAB** (ou equivalente já estabelecido na campanha), para quem deliberadamente quer preparar visita, ver eleições, etc.
|
||||
|
||||
## Persona e fluxo
|
||||
|
||||
- **Persona / contexto:** CG que às vezes precisa do dossiê ou do comparativo — mas não na maioria das aberturas.
|
||||
- **Job principal:** alcançar secundárias **sem** poluir status/conta/rede/agora.
|
||||
- **Fluxo desejado:**
|
||||
1. Na v2, abre o FAB (precedente B126 / ações rápidas).
|
||||
2. Escolhe: preparar visita (dossiê), ver eleições, registrar sinal (atalho), nova liderança, compositor de giros — conforme papel.
|
||||
3. Print / leitura de dossiê não mostra o FAB.
|
||||
- **Anti-goals de produto:** recriar a barra de 6 abas no topo da v2; esconder ações críticas de operação no FAB (nível/meta/rede ficam na dobra); FAB como único jeito de editar status.
|
||||
|
||||
### Esboço de fluxo (B)
|
||||
|
||||
```text
|
||||
[Dobla principal intacta]
|
||||
→ FAB (+) → lista curta de secundárias do município
|
||||
→ navega / abre superfície já existente (dossiê, eleições, …)
|
||||
```
|
||||
|
||||
## Objetivo e aceite
|
||||
|
||||
- Na v2, secundárias listadas acima estão alcançáveis via FAB (ou chassis de ações rápidas já adotado), **sem** tab nav de 6 itens.
|
||||
- Itens respeitam papel (ex.: escrita de nível/sinal só quem pode).
|
||||
- Não remove a dobra de operação; complementar a B147–B150.
|
||||
- Dossiê/print sem chrome de FAB.
|
||||
|
||||
## Dados (intenção)
|
||||
|
||||
- **Dados: N/A** — navegação / atalhos; dados vivem nas superfícies destino.
|
||||
|
||||
## Direção no codebase (hipótese)
|
||||
|
||||
- **Áreas prováveis:** integração com FAB / quick actions do município; links para dossiê/eleições/giros/nova liderança já existentes.
|
||||
- **Precedente:** B126 FAB; B80 ações rápidas municípios; tab nav atual a **não** replicar.
|
||||
- **Risco de acoplamento:** não duplicar um segundo FAB só da v2 se o chassis global já cobre; não quebrar mobile Sheet.
|
||||
|
||||
## Dependências
|
||||
|
||||
- Hard: **B147**.
|
||||
- Pai: [municipio-detalhe-v2.md](municipio-detalhe-v2.md).
|
||||
- Soft: B150 (visita condensada aponta para cá).
|
||||
- Serializes com irmãos na rota v2.
|
||||
|
||||
## Fora de escopo
|
||||
|
||||
- Reescrever dossiê ou eleições.
|
||||
- Cutover de URLs (B152).
|
||||
- Novas ações de domínio não listadas no shaping.
|
||||
|
||||
## Rabbit holes de produto
|
||||
|
||||
- **FAB com dezenas de ações.** **Corte:** só as que eram abas/CTAs secundários do detalhe.
|
||||
- **Registrar sinal só no FAB e tirar o select da faixa.** **Corte:** select na faixa (B147); FAB é atalho opcional.
|
||||
|
||||
## Questões em aberto (produto)
|
||||
|
||||
- **“Registrar sinal” no FAB se já há select na faixa?** **Opções:** A) omitir do FAB | B) atalho que foca/abre o mesmo fluxo. **Recomendação:** B só se o FAB for o hábito mobile; senão A. _(assumido: A na v1 do FAB da v2)_
|
||||
|
||||
## Referências
|
||||
|
||||
- GitHub Issue #334
|
||||
- Pai: [municipio-detalhe-v2.md](municipio-detalhe-v2.md)
|
||||
- B126 FAB; ações rápidas municípios
|
||||
87
docs/plans/municipio-v2-rede.md
Normal file
87
docs/plans/municipio-v2-rede.md
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
# Município v2 — rede (lista edit-in-place)
|
||||
|
||||
Status: registrado
|
||||
Atualizado em: 2026-08-02
|
||||
Issue: #332
|
||||
Priority: P1
|
||||
Model: composer-2.5
|
||||
Impeccable: B — bloco na rota v2
|
||||
Appetite: ~1 dia eng; top-N + edição no lugar
|
||||
Responsável: —
|
||||
|
||||
**Plano pai:** [municipio-detalhe-v2.md](municipio-detalhe-v2.md) (lote B147–B152)
|
||||
|
||||
## Intenção
|
||||
|
||||
Hoje as lideranças do município moram numa **aba** que o coordenador não abre. Na v2, a **rede** precisa estar na dobra principal, em **lista densa**, com declarado/estimado editáveis **onde se vê** — sem card por pessoa e sem mandar para outra rota só para ajustar um número.
|
||||
|
||||
## Persona e fluxo
|
||||
|
||||
- **Persona / contexto:** CG / assessor no detalhe v2, depois de status/conta (ou direto na rede).
|
||||
- **Job principal:** ver quem segura o município e ajustar pledges sem mudar de aba.
|
||||
- **Fluxo desejado:**
|
||||
1. Vê lista (desktop: tabela; mobile: lista densa) com top-N lideranças relevantes (ex. por estimado/declarado).
|
||||
2. Edita declarado e estimado **na célula / na linha** (auto-save no espírito B9).
|
||||
3. “Ver todas” / criar liderança **não** incham a dobra (CTA ou FAB — B151).
|
||||
- **Anti-goals de produto:** card empilhado por liderança; spreadsheet de todas as colunas da ficha; expor estimado a `leader`; edição em massa sem pedido.
|
||||
|
||||
### Esboço de fluxo (B)
|
||||
|
||||
```text
|
||||
[Rede]
|
||||
→ lista top-N (nome · status · declarado · estimado)
|
||||
→ edita número na célula → grava / feedback
|
||||
→ [Ver todas] / [Nova] → fora da dobra principal (CTA/FAB)
|
||||
```
|
||||
|
||||
## Objetivo e aceite
|
||||
|
||||
- Rede visível na v2 sem aba “Lideranças”.
|
||||
- Forma de **lista** (não cards), utilizável no mobile.
|
||||
- Declarado e estimado (staff) editáveis no lugar, com feedback de pending/erro.
|
||||
- `leader` não vê nem edita estimado (assimetria intacta).
|
||||
- Top-N com caminho claro para o restante do cadastro.
|
||||
- Não substitui a ficha completa da liderança (link para detalhe da pessoa quando fizer sentido).
|
||||
|
||||
## Dados (intenção)
|
||||
|
||||
- **Vou apresentar dados?** Sim — pledges por liderança × município.
|
||||
- **Decisões desbloqueadas:**
|
||||
- Staff: “quem está abaixo do combinado?” / “atualizo a estimativa agora?”
|
||||
- CG: “a rede cobre o discurso da meta (B148)?”
|
||||
- **Forma:** *adiada ao impl*. Restrição: lista densa; sem dashboard de vaidade de rede.
|
||||
|
||||
## Direção no codebase (hipótese)
|
||||
|
||||
- **Áreas prováveis:** painel/lista na composição v2; loaders de leaderships/pledges do detalhe atual; padrões de edit-in-place da lista de municípios / painel de pledges.
|
||||
- **Precedente:** aba Lideranças do detalhe atual; B9 edit-where-you-see; assimetria de votos.
|
||||
- **Risco de acoplamento:** access de pledge; não abrir escrita a quem não pode; não duplicar ficha de liderança.
|
||||
|
||||
## Dependências
|
||||
|
||||
- Hard: **B147**.
|
||||
- Pai: [municipio-detalhe-v2.md](municipio-detalhe-v2.md).
|
||||
- Soft: B151 para “nova liderança” no FAB (CTA textual nesta Issue basta se FAB ainda não existir).
|
||||
- Serializes com B148/B150/B151 na rota v2.
|
||||
|
||||
## Fora de escopo
|
||||
|
||||
- Wizard completo de nova liderança (pode só encaixar entrada).
|
||||
- Feed de atualizações / sinais (status B147 + FAB).
|
||||
- Conta P/M/O (B148).
|
||||
- Import CSV de apoiadores.
|
||||
|
||||
## Rabbit holes de produto
|
||||
|
||||
- **Trazer todas as colunas da lista global de lideranças.** **Corte:** nome, status de apoio, declarado, estimado.
|
||||
- **Optimistic UI sem refresh do agregado da conta.** **Corte:** honestidade do resultado (Feel the action) — conta pode atualizar após revalidate.
|
||||
|
||||
## Questões em aberto (produto)
|
||||
|
||||
- **Ordenação default do top-N?** **Opções:** A) estimado (senão declarado) desc | B) última atividade. **Recomendação:** A — conversa direto com a conta. _(assumido)_
|
||||
|
||||
## Referências
|
||||
|
||||
- GitHub Issue #332
|
||||
- Pai: [municipio-detalhe-v2.md](municipio-detalhe-v2.md)
|
||||
- Detalhe atual: aba leaderships / pledges panel
|
||||
94
docs/plans/municipio-v2-shell-status.md
Normal file
94
docs/plans/municipio-v2-shell-status.md
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
# Município v2 — shell + faixa de status
|
||||
|
||||
Status: registrado
|
||||
Atualizado em: 2026-08-02
|
||||
Issue: #330
|
||||
Priority: P1
|
||||
Model: cursor-grok-4.5-medium
|
||||
Impeccable: C — fluxo novo na rota `/campanha/municipio/<slug>/v2`
|
||||
Appetite: ~1–1,5 dia eng; rota + status operável (sem conta/rede/agora)
|
||||
Responsável: —
|
||||
|
||||
**Plano pai:** [municipio-detalhe-v2.md](municipio-detalhe-v2.md) (lote B147–B152)
|
||||
|
||||
## Intenção
|
||||
|
||||
Abrir o município na v2 e, na **primeira dobra**, ler e alterar a conjuntura (nível, tendência, sinal) sem abas, sem `/editar` e sem scroll de cards. Esta fatia entrega o **chão** da v2: rota paralela + faixa de status densa. Conta, rede, agora e FAB ficam nos filhos.
|
||||
|
||||
## Persona e fluxo
|
||||
|
||||
- **Persona / contexto:** Coordenador Geral (e staff unrestricted / assessor no município), vindo da lista ou do mapa, com pressa.
|
||||
- **Job principal:** em poucos segundos responder “como estamos neste município?” e registrar mudança de nível, tendência ou sinal.
|
||||
- **Fluxo desejado:**
|
||||
1. Abre `/campanha/municipio/<slug>/v2`.
|
||||
2. Vê três **seletores** equivalentes (nível, tendência, sinal) + classe territorial + indicador de silêncio/frescor.
|
||||
3. Ao mudar qualquer um dos três → **modal de motivo opcional** → Confirmar (vazio OK).
|
||||
4. Sob os controles, lê o **agregado** das últimas notas (nível · tendência · sinal).
|
||||
5. Hover/focus em cada chip/controle → **tooltip** com one-liner + link para o conceito em `/campanha/conceitos`.
|
||||
- **Anti-goals de produto:** painel de ajuda inline no lugar de tooltip; fluxo de sinal diferente do de nível/tendência; motivo obrigatório; hero com nome/TI no corpo (B145); auto-gravar ao tocar o select.
|
||||
|
||||
### Esboço de fluxo (C)
|
||||
|
||||
```text
|
||||
[Abrir v2]
|
||||
→ faixa: [Select nível] [Select tendência] [Select sinal] [Classe] …
|
||||
→ [mudou select] → [Modal motivo opcional] → [Confirmar]
|
||||
→ agregado atualiza
|
||||
→ (placeholders ou vazio para conta/rede/agora — filhos)
|
||||
```
|
||||
|
||||
## Objetivo e aceite
|
||||
|
||||
- Rota v2 acessível a staff do município; **leader** não entra (lockdown).
|
||||
- Nível, tendência e sinal usam o **mesmo padrão de seletor** + modal de motivo opcional.
|
||||
- Agregado de texto mostra as últimas notas disponíveis dos três eixos (e ausência de sinal / idade quando couber).
|
||||
- Tooltips nos sinais da faixa (nível, tendência, sinal, classe) com resumo + link a conceitos.
|
||||
- Página `/campanha/municipios/[slug]` **intacta**.
|
||||
- Mobile: faixa legível sem exigir scroll horizontal de abas.
|
||||
- Nome do município / TI não competem como hero no corpo (respeitar B145 / chrome existente).
|
||||
|
||||
## Dados (intenção)
|
||||
|
||||
- **Vou apresentar dados?** Sim, sobretudo qualitativos (nível, tendência, tipo/idade de sinal, classe).
|
||||
- **Decisões desbloqueadas:**
|
||||
- CG: “subo/desço envolvimento?” / “marco conjuntura?” / “registro sinal agora?”
|
||||
- Staff: “este município está frio (silêncio)?”
|
||||
- **Forma:** *adiada ao plano de implementação*. Restrição: silêncio/frescor alinhado à regra de produto já usada na lista (ordem de grandeza de dias frios).
|
||||
|
||||
## Direção no codebase (hipótese)
|
||||
|
||||
- **Áreas prováveis:** nova rota sob `src/app/(campaign)/campanha/(app)/municipio/…/v2`; composição em `components/campaign/municipality/`; reuso de loaders/view models de detalhe/estratégia/updates; tooltips no precedente de hover da campanha; glossário via conceitos.
|
||||
- **Precedente a olhar:** detalhe atual; B134 (motivo opcional); B145 (título no header); E14 nível; registro de sinal na lista.
|
||||
- **Risco de acoplamento:** escrita de nível só unrestricted; não expor campos staff a leader; não quebrar rota antiga.
|
||||
|
||||
## Dependências
|
||||
|
||||
- Soft: B145 (chrome de título), B134 (política de motivo opcional).
|
||||
- Pai: [municipio-detalhe-v2.md](municipio-detalhe-v2.md).
|
||||
- Filhos que esperam este: B148–B151 (hard), B152 (hard).
|
||||
|
||||
## Fora de escopo
|
||||
|
||||
- Conta P/M/O e cobertura (B148).
|
||||
- Lista de lideranças / pledges (B149).
|
||||
- Encaminhamento, sugestões, visita (B150).
|
||||
- FAB de secundárias (B151).
|
||||
- Cutover (B152).
|
||||
- Comparativo eleitoral / dossiê completo na dobra.
|
||||
|
||||
## Rabbit holes de produto
|
||||
|
||||
- **Reimplementar o dossiê na home da v2.** **Corte:** só status nesta Issue.
|
||||
- **Wizard completo de nível (histerese/override) redesenhado do zero.** **Corte:** respeitar ritos de produto já decididos (E14 + B134); só o encaixe na faixa.
|
||||
- **Tooltip = página de conceito embutida.** **Corte:** one-liner + link.
|
||||
|
||||
## Questões em aberto (produto)
|
||||
|
||||
- **Select de sinal com município “frio” mostra o quê como valor atual?** **Opções:** A) valor sentinela “Sem sinal / frio (N dias)” | B) último tipo + idade na label. **Recomendação:** A na faixa + idade no agregado/tooltip — deixa óbvio que dá para registrar. _(assumido — validar na demo da v2)_
|
||||
|
||||
## Referências
|
||||
|
||||
- GitHub Issue #330
|
||||
- Pai: [municipio-detalhe-v2.md](municipio-detalhe-v2.md)
|
||||
- B134 / `docs/plans/motivo-opcional-tendencia-e-nivel.md`
|
||||
- Conceitos: `#nivel-de-envolvimento`, `#classe-territorial`, `#pauta-do-silencio`
|
||||
Loading…
Reference in a new issue