Document CG observed-use session and draft action-first home flows.
Capture the 2026-07-29 hands-on findings (O9–O11, U1–U11), transcript, and UX-1 wizard sketch so the 03/08 chassis work has a single source of truth.
This commit is contained in:
parent
902ca0cc92
commit
9c563aac8c
4 changed files with 271 additions and 28 deletions
|
|
@ -7,6 +7,7 @@ alwaysApply: false
|
|||
|
||||
## Status
|
||||
|
||||
- **Sessão observada CG 2026-07-29 (Bloco B):** 1º hands-on ~54 min. Achados U1–U8 / O9–O11 — não rola; mental model **Ação→Local→Quem**; confirmações invisíveis; forms precisam ser contínuos; hit = lista sem assessor × votos 2022; mapa ≠ mesa de trabalho. Pivot: tabelas=bulk; operação=fluxos lineares tipo Nubank. Snapshot [`sessao-observada-coordenador-2026-07-29-snapshot.md`](../../../docs/plans/sessao-observada-coordenador-2026-07-29-snapshot.md); CUSTOMER.md/OST atualizados. Prazo soft: manejável até reunião assessoria **03/08**.
|
||||
- **E12+ entregue em código (2026-07-29):** escala/DRY pós-E12 — F1 forçada: `src/lib/metropolitanoTerritoryPeers.ts` unifica constantes, filtros Salvador vs demais RMS e `catalogPeersForSlug` (rollup E17/E12, `slugsForMetropolitanoSubRow`, benchmark T4). F2 não entrou — `benchmarkBySlug` já memoiza por slug. Spec `metropolitanoTerritoryPeers.unit.spec.ts`. Sem migration/UI. Plano: [`escala-dry-pos-e12.md`](../../../docs/plans/escala-dry-pos-e12.md).
|
||||
- **B17+ entregue em código (2026-07-29):** Escala/DRY pós-B17 — F1: `readCampaignColumnVisibility` antes do `Promise.all` e `loadLeadershipOptions` / `loadStateDeputyOptions` só quando a coluna de relação está visível (`resolveVisibleColumns`). F2: `CampaignListEmptyState` na prop `empty` de `CampaignTable` (e `SupporterList`) em demandas, organizações e apoiadores, para o botão "Colunas" sobreviver com zero linhas. Plano: [`escala-dry-pos-b17.md`](../../../docs/plans/escala-dry-pos-b17.md).
|
||||
- **Fill-in remover coluna Tipo entregue em código (2026-07-29):** em `/campanha/municipios`, sumiram a coluna "Tipo", o filtro single-select no header (B16), o ramo mobile em `MunicipalityFilters`, a sort key `kind` e o param `?kind=` em `municipalityListUrl` / `buildMunicipalityListWhere` / `payloadSortFieldByKey` — bookmarks antigos ignoram `kind` no parse. `municipalityKindLabels` permanece para detalhe, mapa e dossiê. `MunicipalityHeaderFilter` ficou só com filtros multi (`singleRows`/`applyMunicipalityKindFilter` deletados). B17: 11 colunas staff; e2e do picker usa Território; B18 usa `?priority=alta`. Sem migration/action/Consent. Plano: [`remover-coluna-tipo-municipios.md`](../../../docs/plans/remover-coluna-tipo-municipios.md).
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
| Phase | Skill | Status | Artifact | Date |
|
||||
| ----- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------- | ---------- |
|
||||
| 1 | jobs-to-be-done | done | CUSTOMER.md | 2026-07-19 |
|
||||
| 2 | ux-heuristics | pending — destravada 2026-07-23 (evidência da sessão âncora em CUSTOMER.md; Bloco B de uso observado ainda sem registro) | DESIGN.md, EXPERIMENTS.md | 2026-07-23 |
|
||||
| 2 | ux-heuristics | pending — evidência de uso 2026-07-29 (O9–O11; above-the-fold; ação-primeiro). Mirar fluxos do delta do dia, não polish. | DESIGN.md, EXPERIMENTS.md | 2026-07-29 |
|
||||
| 3 | design-everyday-things | pending | DESIGN.md, EXPERIMENTS.md | |
|
||||
| 4 | refactoring-ui | pending | DESIGN.md, EXPERIMENTS.md | |
|
||||
| 5 | microinteractions | pending | DESIGN.md, EXPERIMENTS.md | |
|
||||
|
|
@ -34,26 +34,28 @@ Statuses: pending · in-progress · awaiting-evidence · done · deferred: \<rea
|
|||
|
||||
## Key Decisions
|
||||
|
||||
| Date | Phase | Decision | Rationale |
|
||||
| ---------- | ------ | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 2026-07-19 | Intake | Escopo = `/campanha` (não site público) | Job e atrito são de operação de campanha |
|
||||
| 2026-07-19 | Intake | Fase 7 skipped | Sem superfícies de upsell in-app |
|
||||
| 2026-07-19 | Intake | continuous-discovery opcional recomendada | Evidência = nenhuma; testes humanos esta semana |
|
||||
| 2026-07-19 | Intake | improve-retention deferred pós-Fase 1 | Sintoma clássico de abandono por dados defasados; método completo depois do job + evidência |
|
||||
| 2026-07-19 | Intake | Plano de fases confirmado | Inclui `docs/roadmap.md` como registro vivo de ideias/pendências |
|
||||
| 2026-07-19 | Intake | Roadmap = backlog de build | Findings deste journey → EXPERIMENTS + itens/planos no roadmap quando forem para build |
|
||||
| 2026-07-19 | 1 | Job = campanha dep. federal pela Bahia | Abrangência estadual; cargo federal |
|
||||
| 2026-07-19 | 1 | Pior dimensão = emocional | Confiança no quadro atualizado; risco de ansiedade com dados mortos |
|
||||
| 2026-07-19 | 1 | Leak = Little Hire | Big Hire coberto por onboarding presencial + seed de dados iniciais |
|
||||
| 2026-07-19 | 2 | Fase 2 deferred | Esperar testes com coordenador geral + assistente (~quarta) antes da auditoria heurística |
|
||||
| 2026-07-19 | opt CD | Outcome = Little Hire até 16/08 | Sinal: ≥1 update espontâneo em 7 dias pós-quarta |
|
||||
| 2026-07-19 | opt CD | Quarta = Mom Test 25 + observe 25 | História do passado + primeira sessão sem pitch |
|
||||
| 2026-07-19 | opt CD | Cadência presencial semanal + remoto ad hoc | Coordenador geral disponível remotamente quando necessário |
|
||||
| 2026-07-19 | opt CD | Sala = product + onboarding lead + CG | CG é participante; interviewers = product + onboarding |
|
||||
| 2026-07-23 | opt CD | Sessão âncora realizada e processada | Mom Test 7/7 no Bloco A; evidência em CUSTOMER.md (Interview Evidence + Snapshot); Bloco B perdido no áudio — usabilidade (O2/O3/O4) segue sem evidência |
|
||||
| 2026-07-23 | opt CD | OST: O1/O5 confirmadas; O6–O8 novas | Dossiê pré-agenda, registro datado de deltas de voto, ilhas de comunicação — histórias reais (Cairu, Amélia Rodrigues, Santa Inês, Salvador 10×) |
|
||||
| 2026-07-23 | opt CD | Âncora de prioridade = % do voto do deputado | Derruba % do eleitorado local como critério da mesa; calibra E8/E10/B13 no roadmap |
|
||||
| 2026-07-23 | 2 | Fase 2 destravada (pending) | Evidência real disponível; auditoria heurística deve mirar os fluxos do delta-do-dia e da fila de prioridade |
|
||||
| Date | Phase | Decision | Rationale |
|
||||
| ---------- | ------ | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 2026-07-19 | Intake | Escopo = `/campanha` (não site público) | Job e atrito são de operação de campanha |
|
||||
| 2026-07-19 | Intake | Fase 7 skipped | Sem superfícies de upsell in-app |
|
||||
| 2026-07-19 | Intake | continuous-discovery opcional recomendada | Evidência = nenhuma; testes humanos esta semana |
|
||||
| 2026-07-19 | Intake | improve-retention deferred pós-Fase 1 | Sintoma clássico de abandono por dados defasados; método completo depois do job + evidência |
|
||||
| 2026-07-19 | Intake | Plano de fases confirmado | Inclui `docs/roadmap.md` como registro vivo de ideias/pendências |
|
||||
| 2026-07-19 | Intake | Roadmap = backlog de build | Findings deste journey → EXPERIMENTS + itens/planos no roadmap quando forem para build |
|
||||
| 2026-07-19 | 1 | Job = campanha dep. federal pela Bahia | Abrangência estadual; cargo federal |
|
||||
| 2026-07-19 | 1 | Pior dimensão = emocional | Confiança no quadro atualizado; risco de ansiedade com dados mortos |
|
||||
| 2026-07-19 | 1 | Leak = Little Hire | Big Hire coberto por onboarding presencial + seed de dados iniciais |
|
||||
| 2026-07-19 | 2 | Fase 2 deferred | Esperar testes com coordenador geral + assistente (~quarta) antes da auditoria heurística |
|
||||
| 2026-07-19 | opt CD | Outcome = Little Hire até 16/08 | Sinal: ≥1 update espontâneo em 7 dias pós-quarta |
|
||||
| 2026-07-19 | opt CD | Quarta = Mom Test 25 + observe 25 | História do passado + primeira sessão sem pitch |
|
||||
| 2026-07-19 | opt CD | Cadência presencial semanal + remoto ad hoc | Coordenador geral disponível remotamente quando necessário |
|
||||
| 2026-07-19 | opt CD | Sala = product + onboarding lead + CG | CG é participante; interviewers = product + onboarding |
|
||||
| 2026-07-23 | opt CD | Sessão âncora realizada e processada | Mom Test 7/7 no Bloco A; evidência em CUSTOMER.md (Interview Evidence + Snapshot); Bloco B perdido no áudio — usabilidade (O2/O3/O4) segue sem evidência |
|
||||
| 2026-07-23 | opt CD | OST: O1/O5 confirmadas; O6–O8 novas | Dossiê pré-agenda, registro datado de deltas de voto, ilhas de comunicação — histórias reais (Cairu, Amélia Rodrigues, Santa Inês, Salvador 10×) |
|
||||
| 2026-07-23 | opt CD | Âncora de prioridade = % do voto do deputado | Derruba % do eleitorado local como critério da mesa; calibra E8/E10/B13 no roadmap |
|
||||
| 2026-07-23 | 2 | Fase 2 destravada (pending) | Evidência real disponível; auditoria heurística deve mirar os fluxos do delta-do-dia e da fila de prioridade |
|
||||
| 2026-07-29 | opt CD | Bloco B / 1º hands-on observado | Snapshot + transcrição; O2/O3/O7 em uso; O9–O11 novas; pivot: tabelas=bulk, operação=fluxos ação-primeiro (Nubank). Docs: CUSTOMER.md + plans/sessao-observada-coordenador-2026-07-29-snapshot.md |
|
||||
| 2026-07-29 | 2/prod | “Edit where you see” falhou descoberta | Células auto-save existem mas não foram achadas no livre; não jogar fora — embutir nos wizards. Mapa = briefing, não mesa. Prazo soft: manejável até 03/08 |
|
||||
|
||||
## Next Actions
|
||||
|
||||
|
|
@ -62,9 +64,11 @@ Statuses: pending · in-progress · awaiting-evidence · done · deferred: \<rea
|
|||
- [x] Fase 2 deferred até evidência de quarta
|
||||
- [x] continuous-discovery → cadência + OST + roteiro em `CUSTOMER.md` (2026-07-19)
|
||||
- [x] Rodar sessão âncora (Mom Test) → Interview Evidence + Snapshot preenchidos (2026-07-23; transcrição diarizada em `output/transcribe/general-coordinator-interview-20260723/`)
|
||||
- [ ] Resgatar Bloco B (uso observado) das notas dos entrevistadores — o áudio dessa parte se perdeu; sem ele O2/O3/O4 seguem sem evidência
|
||||
- [x] Bloco B / uso observado — sessão 2026-07-29 (substitui áudio perdido); snapshot em `docs/plans/sessao-observada-coordenador-2026-07-29-snapshot.md`; transcrição em `output/transcribe/general-coordinator-observed-use-20260729/`
|
||||
- [ ] Cobrar o compromisso: planilha/tabela de prioridades prometida pelo coordenador geral ("Eu te passo em uma tabela")
|
||||
- [ ] Medir sinal Little Hire: ≥1 update espontâneo até 2026-07-30 (sem cobrar)
|
||||
- [ ] Rodar Fase 2 (ux-heuristics) sobre os fluxos que a entrevista apontou: registrar o delta do dia (O7), fila/prioridade (E9), dossiê da Praça (O6)
|
||||
- [ ] Cruzar findings com `docs/roadmap.md`: entrevista reforça C12 (registro-fundação, não cortável), E9 ("coluna da vergonha" = Salvador 10×), A10 (piso 150k + faixas) e calibra E8/E10/B13 (âncora = % do voto do deputado); registrar gap de dados novo no plano-mestre de inteligência: emendas parlamentares por município (O6)
|
||||
- [ ] Não shipar polish visual (Fase 4) sem finding de Fases 1–3
|
||||
- [ ] Little Hire: **não** medir no build atual — medir ≥1 update espontâneo nos 7 dias **após** o primeiro fluxo ação-primeiro em produção (meta soft: antes/na onda 03/08)
|
||||
- [ ] Abrir item de roadmap + plano: **fluxos ação-primeiro** (O9–O11) — Início com ações; wizard contínuo “Ajustar votos” / “Ajustar liderança” / …; listas permanecem para bulk; mapa desce a briefing · **rascunho:** `docs/plans/fluxos-acao-primeiro-inicio.md` (UX-1 no roadmap)
|
||||
- [ ] Bugs P0 sessão: comparação de candidatos no mapa; **filtro/busca município na lista (U11)**; **editar título de demanda (U10)**; overview do município sem edição in-place (U9)
|
||||
- [ ] Rodar Fase 2 (ux-heuristics) sobre: above-the-fold (U1/O10), commit invisível (U4/O11), navegação fragmentada (U3/U5), jargão (O3), editar-onde-vê na ficha (U9)
|
||||
- [ ] Cruzar findings com `docs/roadmap.md`: entrevista 23/07 reforça C12/E9/A10/E8; sessão 29/07 **reordena prioridade de IA** acima de mais inteligência (E15 etc.) até o chassis ação-primeiro existir
|
||||
- [ ] Não shipar polish visual (Fase 4) sem finding de Fases 1–3 — e **não** empilhar mais células editáveis sem porta de entrada ação-primeiro
|
||||
|
|
|
|||
237
docs/plans/fluxos-acao-primeiro-inicio.md
Normal file
237
docs/plans/fluxos-acao-primeiro-inicio.md
Normal file
|
|
@ -0,0 +1,237 @@
|
|||
# UX-1 — Ações do Início e fluxos lineares (rascunho)
|
||||
|
||||
**Status:** planejamento apenas — sem implementação neste doc.
|
||||
**Origem:** sessão observada 2026-07-29 ([snapshot](sessao-observada-coordenador-2026-07-29-snapshot.md)) · item roadmap **UX-1**.
|
||||
**Prazo soft:** manejável até reunião da assessoria **03/08/2026**.
|
||||
**Princípio-guia:** modelo mental do CG = **Ação → Local → Quem**; formulário **contínuo**; descoberta **above-the-fold**; commit **óbvio no caminho** (não “Salvar” órfão).
|
||||
|
||||
## Duas superfícies (não misturar)
|
||||
|
||||
| Superfície | Serve para | Não serve para |
|
||||
| -------------------------- | ------------------------------------------------------------------------------------- | ----------------------------------------------------- |
|
||||
| **Início — ações** | Delta do dia; um caso de cada vez | Varrer 435 linhas; comparar TIs |
|
||||
| **Listas (Municípios, …)** | Gestão do banco / bulk; “quem não está monitorado” (filtro sem assessor × votos 2022) | Ser a _única_ porta para registrar o que ligou no Zap |
|
||||
|
||||
Mapa, KPIs e sugestões no Início **descem** abaixo das ações (ou colapsam): briefing, não mesa.
|
||||
|
||||
Edição inline nas células **permanece** para quem já está na lista — e deve existir também onde a informação é só lida hoje na ficha (U9). Os wizards são a **porta de entrada**, não um segundo sistema de escrita paralelo com regras diferentes (reutilizar as mesmas actions/access).
|
||||
|
||||
---
|
||||
|
||||
## Layout do Início (above-the-fold alvo)
|
||||
|
||||
Viewport típico do CG (notebook): na primeira tela, sem rolar:
|
||||
|
||||
1. Saudação curta (1 linha)
|
||||
2. **Bloco “O que você quer fazer?”** — 4–6 botões de ação (rótulo = verbo + objeto, linguagem de mesa)
|
||||
3. Atalho secundário: **“Ver municípios sem responsável”** (deep-link já validado como hit: `?coverage=sem_assessor&sort=votos`)
|
||||
4. (Opcional, 2ª dobra) mapa / KPIs / sugestões / visitados / onde estou
|
||||
|
||||
Anti-goals do bloco de ações: cards genéricos de métrica no lugar dos botões; ícones sem verbo; mais de ~6 ações primárias; depender de sidebar para o ritual diário.
|
||||
|
||||
---
|
||||
|
||||
## Ações primárias (v1 para 03/08)
|
||||
|
||||
Prioridade pela frequência do ritual do CG (delta de voto + rede + pedido), não pela cobertura do schema.
|
||||
|
||||
| # | Rótulo no botão (pt-BR de mesa) | Job | Slice 03/08? |
|
||||
| --- | ----------------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
||||
| A1 | **Atualizar votos de um município** | Projeção mudou (Cairu −100; Salinas 300→150) | **Sim — must** |
|
||||
| A2 | **Registrar o que aconteceu** | Sinal / invasão / flip / nota urgente (Salinas) | **Sim — must** (pode ser passo opcional dentro de A1; botão próprio se o sinal vier sem mudança de número) |
|
||||
| A3 | **Mudar tendência** | Favorável / desfavorável / neutra + porquê | **Sim** (passo em A1; botão próprio se só tendência) |
|
||||
| A4 | **Atualizar liderança** | Quem coordena / status / troca principal↔secundário (Fernando→Artur/Silvio) | **Sim — must** (pacote Cairu) |
|
||||
| A5 | **Registrar pedido (demanda)** | Quadriciclo, material, diária | **Sim** se der; senão logo após 03/08 — commit óbvio + **editar título** (U10) |
|
||||
| A6 | **Ver quem ainda não está coberto** | Lista sem assessor × votos 2022 | **Sim** — não é wizard; é atalho para a lista (hit U7) |
|
||||
|
||||
### Ações secundárias (v1.1 / depois do chassis)
|
||||
|
||||
| # | Rótulo | Nota |
|
||||
| --- | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
||||
| A7 | Definir nível de envolvimento | E14; raridade + nota obrigatória — encaixa como passo opcional no fim de A1/A2, não como botão do Início no dia 1 |
|
||||
| A8 | Trocar assessor do município | Já fez na lista com guia; passo opcional em A1 ou atalho na lista |
|
||||
| A9 | Montar atividade / giro | E13; não é o ritual das 7h |
|
||||
| A10 | Convidar liderança / abrir acesso | B30; onboarding, não delta |
|
||||
| A11 | Sugestões da campanha | E11 vira **entrada alternativa** (“Amargosa: checar rede”) que **abre A1/A2/A4 pré-preenchidos**, não um terceiro modo de UI |
|
||||
|
||||
Assessor vê o mesmo bloco, escopo já filtrado pela carteira. Leader: fora de escopo (lockdown).
|
||||
|
||||
---
|
||||
|
||||
## Contrato compartilhado de todo wizard
|
||||
|
||||
Aplicar a A1–A5 (e futuros):
|
||||
|
||||
1. **Uma coluna / um passo visível** — pergunta em linguagem de mesa; avançar = Continuar / próximo campo; voltar = passo anterior (sem sidebar).
|
||||
2. **Local cedo** — depois da ação, “Em qual município?” (busca por nome, acento-insensível; **tem que funcionar** — U11).
|
||||
3. **Quem quando importar** — liderança/assessor só nos passos que pedem pessoa (A4; opcional em A1/A5).
|
||||
4. **Continuidade** — no fim de A1, oferecer em sequência (checkboxes ou passos “Quer também…?”): sinal? tendência? liderança? assessor? — sem mandar para outra rota no meio.
|
||||
5. **Commit final único e gritante** — rótulo tipo **“Registrar atualização”** / **“Enviar pedido”** (não “Salvar” / “Concluir” genérico). Passos intermediários auto-avançam ou gravam rascunho sem verbo órfão (U4/O11).
|
||||
6. **Resumo antes do commit** — 4–6 linhas do que vai mudar (município, números, sinal, tendência).
|
||||
7. **Pós-commit** — “Atualização registrada em Cairu” + **Fazer outra** / **Ir ao município** / **Voltar ao Início**. Sem sumir num detalhe cheio de abas.
|
||||
8. **Interrupção** — rascunho recuperável (Zap vai tocar no meio); mínimo = município + ação lembrados ao reabrir.
|
||||
9. **Mesmas rules de access/actions** que hoje — wizard é casca, não bypass.
|
||||
|
||||
Copy: zero “broker”, “campo sem captura”, “LQ” nos passos. Se precisar do número inteligente, uma linha de ajuda em português de mesa (“pessoas que votaram no presidente do campo e não votaram no Solla”).
|
||||
|
||||
---
|
||||
|
||||
## Fluxo A1 — Atualizar votos de um município
|
||||
|
||||
**Abre:** botão Início · ou sugestão E11 “atualizar projeção” · ou deep-link.
|
||||
|
||||
| Passo | Pergunta | UI | Escrita (já existe / quase) |
|
||||
| ----- | ----------------------------------- | ---------------------------------------------- | ------------------------------------------------ |
|
||||
| 1 | Em qual município? | Busca + 3 recentes / prioritários | — |
|
||||
| 2 | Qual a nova estimativa **média**? | Número; mostra valor atual | `expectedVotes.central` |
|
||||
| 3 | E o **pessimista**? | Número; default = atual ou coerência com média | `expectedVotes.pessimistic` |
|
||||
| 4 | E o **otimista**? | Número | `expectedVotes.optimistic` |
|
||||
| 5 | Quer registrar **o que aconteceu**? | Sim → mini A2 embutido / Não | `municipalityUpdate` sinal |
|
||||
| 6 | Quer mudar a **tendência**? | Sim → A3 embutido / Não | `politicalTrend` + nota |
|
||||
| 7 | Quer ajustar **liderança** agora? | Sim → A4 embutido (curto) / Não | leadership / pledge |
|
||||
| 8 | Resumo → **Registrar atualização** | CTA único | transação ou sequência das actions já existentes |
|
||||
|
||||
**Corte 03/08 se apertar:** passos 1–4 + 8; 5–7 como “Quer também?” com um campo cada, sem sub-wizard profundo.
|
||||
|
||||
**Não fazer:** três telas separadas que exijam “Salvar” por cenário; abrir `/municipios/[slug]/editar`.
|
||||
|
||||
---
|
||||
|
||||
## Fluxo A2 — Registrar o que aconteceu (sinal)
|
||||
|
||||
| Passo | Pergunta | UI |
|
||||
| ----- | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 1 | Em qual município? | Busca (pular se veio de A1) |
|
||||
| 2 | O que aconteceu? (título curto) | Texto — “Vereador foi apoiar outro candidato” |
|
||||
| 3 | Que tipo? | Lista curta em linguagem de mesa: Invasão · Perda de apoio · Novo apoio · Dificuldade · Outro (mapear para `kind`/enum existente) |
|
||||
| 4 | Quem contou? (fonte) | Texto livre |
|
||||
| 5 | Confirmou com outra pessoa? | Sim / Não (triangulação) |
|
||||
| 6 | Urgente? | Sim / Não |
|
||||
| 7 | Resumo → **Registrar** | |
|
||||
|
||||
Opcional ao fim: “Isso muda a projeção de votos?” → entra em A1 passo 2.
|
||||
|
||||
---
|
||||
|
||||
## Fluxo A3 — Mudar tendência
|
||||
|
||||
| Passo | Pergunta |
|
||||
| ----- | ---------------------------------------------------------------------------------- |
|
||||
| 1 | Município? |
|
||||
| 2 | Nova tendência? Favorável / Mantém / Desfavorável (labels da planilha, não jargão) |
|
||||
| 3 | Por quê? (obrigatório se mudou) |
|
||||
| 4 | **Registrar tendência** |
|
||||
|
||||
Curto de propósito; também passo embutido de A1.
|
||||
|
||||
---
|
||||
|
||||
## Fluxo A4 — Atualizar liderança
|
||||
|
||||
Cobre o pacote Cairu sem exigir que ele ache a ficha da pessoa primeiro.
|
||||
|
||||
| Passo | Pergunta | Nota |
|
||||
| ----- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 1 | Em qual município? | |
|
||||
| 2 | O que você quer fazer? | **Trocar quem coordena** · **Mudar status de apoio** · **Anotar votos que a pessoa declara** · **Incluir nova liderança** |
|
||||
| 3a | Quem? | Busca no município; se não achar → nome + telefone (create mínimo) |
|
||||
| 3b | (ramo status) Novo status? | Engajado / … (labels atuais, plain language) |
|
||||
| 3c | (ramo votos) Quantos votos essa pessoa declara? | `declaredVotes`; staff pode seguir com estimativa se quiser — **estimativa nunca como passo da liderança** |
|
||||
| 3d | (ramo troca) Quem deixa de ser o principal / quem entra? | Observação interna (“mordeu a isca”, “secundário”) |
|
||||
| 4 | Resumo → **Registrar** | |
|
||||
|
||||
**Corte 03/08:** ramos “status” + “observação / papel” + busca; create completo e pledge rico podem ser v1.1.
|
||||
|
||||
---
|
||||
|
||||
## Fluxo A5 — Registrar pedido (demanda)
|
||||
|
||||
| Passo | Pergunta |
|
||||
| ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 1 | Município? |
|
||||
| 2 | O que precisam? (título — **editável depois**, U10) |
|
||||
| 3 | Detalhe / por quê? |
|
||||
| 4 | Tipo? (transporte, material, …) |
|
||||
| 5 | Valor aproximado? (opcional) |
|
||||
| 6 | Ligado a quem? (liderança opcional) |
|
||||
| 7 | Resumo → **Enviar pedido** (um CTA; aprovação do CG é passo seguinte **na mesma conversa** se for o CG: “Aprovar agora?” Sim/Não — não esconder em outro card) |
|
||||
|
||||
Bug/gap paralelo: **editar demanda existente** (pelo menos título e detalhe) sem rejeitar+recriar.
|
||||
|
||||
---
|
||||
|
||||
## Fluxo A6 — Atalho de lista (não wizard)
|
||||
|
||||
Botão: **“Municípios sem responsável”** (ou “Quem ainda não está coberto”).
|
||||
|
||||
→ `/campanha/municipios?coverage=sem_assessor&sort=votos` (ou equivalente canônico atual), com a **tabela above-the-fold**.
|
||||
Opcional: gravar como filtro salvo padrão no onboarding (B18).
|
||||
|
||||
Segundo atalho útil (não precisa de botão no dia 1): “Prioritários” → `?priority=alta`.
|
||||
|
||||
---
|
||||
|
||||
## Como as sugestões (E11) encaixam
|
||||
|
||||
Não competir com os botões.
|
||||
|
||||
- Card de sugestão: **Aceitar** abre o wizard certo com município (e padrão) pré-selecionados.
|
||||
- “Checar rede / segunda liderança” → A4
|
||||
- “Atualizar / risco de perda” → A1 ou A2
|
||||
- **Adiar / Descartar** ficam no card (já existem).
|
||||
- Copy do card: reescrever para linguagem de mesa quando o wizard existir.
|
||||
|
||||
---
|
||||
|
||||
## Início — o que sobe / o que desce
|
||||
|
||||
| Agora (aprox.) | Depois |
|
||||
| ------------------------------------- | --------------------------------------------- |
|
||||
| Mapa primeiro | Ações primeiro |
|
||||
| KPIs / cobertura | 2ª dobra ou strip compacta sob as ações |
|
||||
| Sugestões como painel | Atalhos que disparam wizards **ou** 2ª dobra |
|
||||
| Prioritários / visitados / onde estou | Mantém; abaixo das ações |
|
||||
| Sidebar como descoberta de trabalho | Sidebar = arquivo; trabalho começa nos botões |
|
||||
|
||||
---
|
||||
|
||||
## Bugs / gaps que o rascunho assume corrigidos (não são o wizard)
|
||||
|
||||
| ID | Item | Por quê |
|
||||
| --- | ------------------------------------------------------------------ | ---------------------------------------------- |
|
||||
| U10 | Editar título (e campos) de demanda | Sem isso A5 morre no segundo uso |
|
||||
| U11 | Filtro/busca de município na lista | Mesmo controle de busca do passo 1 dos wizards |
|
||||
| U9 | Overview do município editável in-place **ou** só saída via wizard | Evitar botão “Editar” como único caminho |
|
||||
| — | Comparação de candidatos no mapa | P0 demo; não bloqueia UX-1 |
|
||||
|
||||
---
|
||||
|
||||
## Ordem de entrega sugerida (ainda planejamento)
|
||||
|
||||
1. **Chassis do wizard** (shell de passos + busca de município + CTA final + resumo)
|
||||
2. **A1** (votos) com “quer também?” sinal + tendência
|
||||
3. **A6** atalho + tabela above-the-fold na lista
|
||||
4. **A2** standalone (se não ficou bom só embutido)
|
||||
5. **A4** curto (status / observação / quem coordena)
|
||||
6. **A5** + edição de demanda
|
||||
7. Ligar E11 → wizards
|
||||
8. Copy pass + A3 standalone se ainda fizer falta
|
||||
|
||||
---
|
||||
|
||||
## Perguntas em aberto (decidir antes de implementar)
|
||||
|
||||
1. **Um wizard “Atualizar município”** que sempre oferece votos+sinal+tendência+liderança, ou **botões separados** A1–A4 no Início? (Recomendação: botões separados + “quer também?” no fim de A1 — casa com U2 e com o pacote Cairu.)
|
||||
2. Wizards são **rota** (`/campanha/acoes/atualizar-votos`) ou **Sheet/Drawer** em cima do Início? (Recomendação: rota — sobrevive a refresh/interrupção Zap; URL compartilhável com assessor.)
|
||||
3. Assessor pode ver os mesmos botões? (Recomendação: sim, escopo da carteira na busca.)
|
||||
4. Após commit, **revalidate** só do município ou também empurrar para a lista filtrada? (Recomendação: toast + opção “ver na lista”.)
|
||||
|
||||
---
|
||||
|
||||
## Fora de escopo deste rascunho
|
||||
|
||||
- Redesign completo do detalhe / abas
|
||||
- Remover o mapa
|
||||
- Substituir o sistema de listas
|
||||
- App nativo / WhatsApp bridge (D3)
|
||||
- Treinar o CG no IA atual
|
||||
|
|
@ -83,6 +83,7 @@ O discovery literatura→persona→entrevista ([relatório aprovado](research/re
|
|||
|
||||
### Demais itens abertos
|
||||
|
||||
- **UX-1 fluxos ação-primeiro (prioridade pós-sessão 29/07)** — evidência: [snapshot](plans/sessao-observada-coordenador-2026-07-29-snapshot.md) · O9–O11 em CUSTOMER.md · **rascunho de ações/fluxos:** [fluxos-acao-primeiro-inicio.md](plans/fluxos-acao-primeiro-inicio.md). CG pensa **Ação → Local → Quem**; não rola; não clica Salvar/Aprovar; tenta editar onde vê (U9); quer formulário contínuo. Bugs de sessão: demanda sem editar título (U10); filtro município na lista (U11). Soft deadline: **03/08**.
|
||||
- ~~**E4R** import único da planilha de projeção~~ — **entregue 2026-07-24** (`pnpm db:seed:projecao`; overwrite-always; [plano](plans/import-planilha-projecao.md))
|
||||
- ~~**A11** posição em votos do município (rank absoluto + % da própria votação) + ordenação da lista por votação~~ — **entregue 2026-07-24** (helper `municipalityVoteRank`; baseline + coluna lista; default `?sort=votos` desc; header=`2022`; consome contrato B15) · [plano](plans/ranking-votos-municipio.md)
|
||||
- ~~**E17** tabela comparativa dos Territórios de Identidade no Início (pedido do candidato) · somas/razões apenas, Metropolitano decomposto (salvaguardas MAUP) · ~1d · Janela 1–2 · primeira fatia de E12 · [plano](plans/tabela-ti-inicio.md)~~ — **entregue 2026-07-24** (`territoryOverview.ts` + `loadTerritoryOverview.ts` + `TerritoryOverviewTable.tsx`; rollup puro client-safe, loader `overrideAccess: true`, Metropolitano decomposto, ordenação client-side; sem migration)
|
||||
|
|
@ -94,11 +95,11 @@ O discovery literatura→persona→entrevista ([relatório aprovado](research/re
|
|||
- ~~**B8 F2** polígonos dos Municípios-zona de Salvador (ZE 1–19)~~ — **entregue 2026-07-26** (artefato `bahia-municipality-zones.topo.json` por dissolve IBGE↔TRE RA 02/2017; coroplético keyed por map key `slug`|`ibgeCode`; polígono municipal de Salvador mantido como base sem interação; rank competitivo segue por cidade com int pinando o fato) · ~~débito F2-D1: ZE exata no card "Onde estou" (B14)~~ **fechado 2026-07-29** · débito aberto: rank por ZE · [plano](plans/poligonos-pracas-zona.md)
|
||||
- **C5** operação dia D / GOTV _(validar com produto)_ · design [`Dia-D-GOTV`](design-refs/latest/Dia-D-GOTV.png) · depende de C2 dados reais
|
||||
- **D2** push + sino in-app · soft: chave `campanha-notificacoes-push` (Onda 0) · [plano](plans/notifications.md)
|
||||
- **Programa WhatsApp interno (D3–D5)** · baixa/média prioridade · 1:1 staff↔lideranças via bridge **não oficial** · **número pessoal** de cada assessor/CG (QR no app, parece chat pessoal) · não Business API / não massa / não chip institucional · fecha Little Hire · gatilho honesto (2026-07-24): "ZAP é o campo" é fato confirmado — D3 entra se os deltas do ZAP **não** estiverem sendo absorvidos pelo fluxo sede-digita (C12) após uso real · plano-mestre [whatsapp-interno-campanha.md](plans/whatsapp-interno-campanha.md)
|
||||
- **Programa WhatsApp interno (D3–D5)** · baixa/média prioridade · 1:1 staff↔lideranças via bridge **não oficial** · **número pessoal** de cada assessor/CG (QR no app, parece chat pessoal) · não Business API / não massa / não chip institucional · fecha Little Hire · gatilho atualizado (2026-07-29): sessão observada mostrou que o delta **quer** entrar no Teqo mas a **IA** impede — D3 sobe se UX-1 não absorver o Zap após o chassis ação-primeiro; senão D3 continua plano B · plano-mestre [whatsapp-interno-campanha.md](plans/whatsapp-interno-campanha.md)
|
||||
- **D3** fundação multi-sessão (QR por `campaignUser` + log + Consent `campanha-whatsapp-canal`) · [plano](plans/whatsapp-canal-fundacao.md)
|
||||
- **D4** envio 1:1 pela sessão do ator · depende de D3 · [plano](plans/whatsapp-envio-liderancas.md)
|
||||
- **D5** inbox da própria sessão → rascunhos (`municipalityUpdate`/demanda) com humano no loop · depende de D3 · [plano](plans/whatsapp-sugestao-atualizacoes.md)
|
||||
- **R6** critique/polish visual da vertical remodelada (ciclo /impeccable completo por superfície; smoke visual coordenador feito em 2026-07-21) · absorve os débitos de produto/UX remanescentes de FD2 ([field-desk-ux-pos-critique.md](plans/field-desk-ux-pos-critique.md)): glossário inline (O3 — hipótese ainda sem evidência), triagem em lote, empty states de coordenador · gatilho: antes de 16/08
|
||||
- **R6** critique/polish visual da vertical remodelada (ciclo /impeccable completo por superfície; smoke visual coordenador feito em 2026-07-21) · absorve débitos FD2 ([field-desk-ux-pos-critique.md](plans/field-desk-ux-pos-critique.md)): glossário (O3 **confirmada 29/07**), triagem em lote, empty states · **subordinado a UX-1** (não polish células se a porta de entrada continuar entidade-primeiro) · gatilho: antes de 16/08; soft 03/08
|
||||
- ~~**B38** sidebar recolhido em tablet~~ — **entregue 2026-07-26** (`collapsible="offcanvas"` no `CampaignSidebar`; `SidebarTrigger` no inset `md+`; `defaultOpen` lê cookie `sidebar_state`; `CampaignSidebarViewportDefault` colapsa uma vez em 768–1023 sem cookie; mobile Sheet inalterado; sem migration) · [plano](plans/sidebar-recolhido-tablet.md)
|
||||
- ~~**B14**~~ ✓ município mais próximo (geolocalização → card "Onde estou" no Início staff, entregue 2026-07-26; **débito B8 F2-D1** ZE exata em Salvador fechado 2026-07-29) · pede permissão **1× por sessão** se ainda não concedida; matching client-side **por point-in-polygon** (malha municipal + malha das 19 ZE em Salvador; centroides ordenam fallback de carteira e ZE mais próxima) · [plano](plans/municipio-mais-proximo.md)
|
||||
- ~~**B20** Municípios prioritários no Início~~ — **entregue 2026-07-25** (`pickDashboardPriorityMunicipalities` + amostra 8 por déficit `central`; Badge com total; “Ver todas” → `?priority=alta`; `list-none` na strip) · [plano](plans/municipios-prioritarios-inicio.md)
|
||||
|
|
|
|||
Loading…
Reference in a new issue