# Backlog de protótipos

Surfaces priorizadas por fase. Numeração espelha [`docs/flowmaps/wireframes/`](../) (pasta pai) — 11 pastas (`01-auth/` a `11-blog/`). Status: 🔴 não-iniciado · 🟡 em iteração · 🟢 aprovado · ⚪ acesso direto (sem link no nav user).

> **Pivô 2026-04-26:** geração de protótipos vai começar **do zero a partir de `01-auth/`**, alinhada integralmente com `design-system/`. Protótipo `04.1-listagem-populated` anterior foi **deletado** (vai ser regerado quando chegar a vez no fluxo natural — auth → onboarding → form → painel). Mapa de telas (`index.html`) também removido — vai ser regerado depois com craft world-class.

---

## F1.0 — P0 (bloqueio dev)

### `01-auth/` — Autenticação (sem senha) — **EM ITERAÇÃO**

| Status | Slug | Descrição | ADRs |
|---|---|---|---|
| 🟡 | `01.1-auth-login` | Login via magic link (6 estados: default, magic-sent, error, loading, rate-limit, OAuth F2+) | Auth.js |
| 🟡 | `01.2-auth-otp-verify` | OTP email fallback (7 estados: default, typing, loading, error, expired, lockout, success) | Auth.js |
| 🟡 | `01.3-auth-totp-2fa` | TOTP app authenticator (RFC 6238 via otplib) — verify (4 estados) + setup wizard 4 steps | Auth.js, otplib |

### `02-onboarding/` — Cadastro empresa + A1 — **EM ITERAÇÃO** (4 surfaces pós ADR-0021)

| Status | Slug | Descrição | ADRs |
|---|---|---|---|
| 🟡 | `02.1-onboarding-administrador` | **NOVO (ADR-0021).** Step ZERO — captura nome + WhatsApp + consent_marketing antes de pedir CNPJ. Lead row em `leads` canal='onboarding' pra resgate pós-abandono via cron Inngest F1.1+. 4 estados: default, preenchido, loading, erro. | 0021, 0018 |
| 🟡 | `02.2-onboarding-empresa-cnpj-cep` | CNPJ + CEP + IE/IM + RPS + email fiscal (single-page 3 sections gated) com enrichment BrasilAPI/ViaCEP. 5 estados: default, loading, enriched, inválido, inativo. | 0009, 0010, 0019, fmap03+16 |
| 🟡 | `02.3-onboarding-a1-upload` | Drag-drop PFX + senha + validação progressiva 4-step + envelope encryption KMS. 6 estados: default, file-selected, validating, validated ✓, erro senha, A1 vencido. | KMS-day0 |
| 🟡 | `02.4-onboarding-confirmacao` | 3 review cards (empresa/fiscal/A1) com edit jumps + creating overlay rotativo + success celebrate animation. Conversão lead → account no submit. 4 estados: review, creating, success, erro Focus. | KMS-day0, 0008, 0021 |

### `03-form/` — Form emissão NF (web)

| Status | Slug | Descrição | ADRs |
|---|---|---|---|
| 🔴 | `03.1-form-emissao-nfse` | Form NFS-e multi-step (cliente + serviço + LC 116 + valores) | fmap04 |
| 🔴 | `03.2-form-emissao-nfe` | Form NF-e multi-step (cliente + produtos + NCM + valores) | fmap04 |
| 🔴 | `03.3-form-recovery-camada1` | Recovery camada 1 (known errors) inline no form | 0011, fmap18 |
| 🔴 | `03.4-form-recovery-camada2` | Recovery camada 2 (schema regex) | 0011, fmap18 |
| 🔴 | `03.5-form-recovery-camada3-llm` | Recovery camada 3 (LLM + sugestão validada local) | 0011, fmap18 |

### `04-painel/` — Painel cliente (listagem + detalhe)

| Status | Slug | Descrição | ADRs |
|---|---|---|---|
| 🔴 | `04.1-painel-listagem-populated` | Listagem populated single-CNPJ (regerar do zero pós-pivô) | 0019 |
| 🔴 | `04.1-painel-listagem-empty` | Estado zero NFs (primeiro acesso) | — |
| 🔴 | `04.1-painel-listagem-loading` | Skeletons enquanto Drizzle query roda | — |
| 🔴 | `04.1-painel-listagem-aggregate` | Listagem aggregate (≥2 CNPJs + coluna Empresa) | 0020 |
| 🔴 | `04.2-painel-detalhe-nf` | Detalhe NF (drill-down + ações cancelar/baixar/reenviar) | — |
| 🔴 | `04.3-painel-aggregate-emit-modal` | Modal escolher CNPJ pré-emit (aggregate) | 0020 |

## F1.1 — Chat simulado

### `05-chat/` — Chat conversacional

| Status | Slug | Descrição | ADRs |
|---|---|---|---|
| 🔴 | `05.1-chat-onboarding` | Onboarding empresa via chat | fmap03 |
| 🔴 | `05.2-chat-emissao-nfse` | Emissão NFS-e via chat (MockFiscalEmitter) | fmap04 |
| 🔴 | `05.3-chat-emissao-nfe` | Emissão NF-e via chat | fmap04 |
| 🔴 | `05.4-chat-recovery` | Error recovery conversacional 3 camadas | 0011, fmap18 |
| 🔴 | `05.5-chat-multimodal-input` | Upload texto/áudio/foto/PDF | fmap04 |

## F2 — Beta + LP + Blog + Painel cliente avançado + Ops

### `06-clientes/` — CRM clientes (PJ + PF)

| Status | Slug | Descrição | ADRs |
|---|---|---|---|
| 🔴 | `06.1-clientes-listagem` | Listagem clientes + busca + apelido | 0013 |
| 🔴 | `06.2-clientes-detalhe` | Detalhe cliente + histórico NFs emitidas | 0013 |
| 🔴 | `06.3-clientes-cadastro-manual` | Form cadastro manual first-class | 0013 |

### `07-admin/` — Multi-user + multi-CNPJ + roles

| Status | Slug | Descrição | ADRs |
|---|---|---|---|
| 🔴 | `07.1-admin-empresas` | Listagem CNPJs do account | F3 |
| 🔴 | `07.2-admin-switcher-cnpj-aberto` | Dropdown ≥2 + opção "Todas as empresas" | 0020 |
| 🔴 | `07.3-admin-notificacoes` | Centro de notificações | — |
| 🔴 | `07.4-admin-funcionarios` | Convidar funcionário + per-CNPJ access | F3 |

### `08-configuracoes/` — Settings + perfil + plano

| Status | Slug | Descrição | ADRs |
|---|---|---|---|
| 🔴 | `08.1-configuracoes-perfil` | Perfil user + email + 2FA | — |
| 🔴 | `08.2-configuracoes-user-dropdown` | Dropdown avatar (perfil/plano/sair) | — |
| 🔴 | `08.3-configuracoes-mais-drawer` | Drawer mobile "Mais" agrupando settings | — |
| 🔴 | `08.4-configuracoes-plano` | Plano + checkout Efí | F3 |
| 🔴 | `08.5-configuracoes-certificado-A1` | Gerenciar A1 + alerta expiração | KMS |
| 🔴 | `08.6-configuracoes-api-keys` | API keys (F3+) | F3 |

### `09-ops/` — Painel operacional ⚪ (acesso direto)

| Status | Slug | Descrição | ADRs |
|---|---|---|---|
| 🔴 | `09.1-ops-dashboard` ⚪ | Dashboard ops (MRR + NFs/dia + alertas) | — |
| 🔴 | `09.2-ops-empresas` ⚪ | Gestão CNPJs cross-account | — |
| 🔴 | `09.8-ops-empresa-avancado` ⚪ | Toggle ambiente ops-only | 0019 |
| 🔴 | `09.9-ops-impersonate` ⚪ | Impersonate user (audit trail) | — |

### `10-marketing/` — LP + Demo público

| Status | Slug | Descrição | ADRs |
|---|---|---|---|
| 🔴 | `10.1-marketing-landing` | LP marketing CF Pages | — |
| 🔴 | `10.2-marketing-demo-landing` | Demo público apex `/demo` | 0017, 0018 |
| 🔴 | `10.3-marketing-demo-form-nfse` | Form NFS-e simulado (cap 5 NFs/sessão) | 0017 |
| 🔴 | `10.4-marketing-demo-lead-capture` | Lead capture pós-1ª NF (opt-in) | 0017, 0018 |
| 🔴 | `10.5-marketing-pricing` | Pricing tiers (F3+) | F3 |

### `11-blog/` — Blog público + admin Payload

| Status | Slug | Descrição | ADRs |
|---|---|---|---|
| 🔴 | `11.1-blog-list` | Listagem blog público URL canônica `/blog` | 0014 |
| 🔴 | `11.2-blog-post` | Post detalhe + JSON-LD + canonical | 0014 |
| 🔴 | `11.3-blog-admin-payload` ⚪ | Admin Payload `blog./admin` (mock) | 0014 |

## F4 — WhatsApp Cloud API

| Status | Slug | Descrição |
|---|---|---|
| 🔴 | `05.10-whatsapp-onboarding` | Mockup chat WhatsApp |
| 🔴 | `05.11-whatsapp-emissao` | Mockup emissão WhatsApp |

---

## Status global

- **F1.0 P0:** 7/20 em iteração — 0/20 aprovado (auth 01.1+01.2+01.3 + onboarding 02.1 admin + 02.2 empresa + 02.3 A1 + 02.4 confirmação gerados 2026-04-26 — onboarding ganhou step ADR-0021 admin/lead-capture)
- **Total surfaces backlog:** ~52
- **Próximo a gerar:** começar pela autenticação seguindo fluxo natural. Ordem sugerida F1.0 P0:
  1. `01.1-auth-login-magic-link`
  2. `01.2-auth-otp-fallback`
  3. `02.1-onboarding-empresa-cnpj-cep`
  4. `02.2-onboarding-a1-upload`
  5. `02.3-onboarding-confirmacao`
  6. `03.1-form-emissao-nfse`
  7. `03.2-form-emissao-nfe`
  8. `04.1-painel-listagem-populated`
  9. `04.2-painel-detalhe-nf`
  10. ... (continua per-pasta)

Cada surface vai ter:
- HTML em `<pasta>/<slug>.html` (mesma pasta numerada)
- Wireframe `.md` companion em `docs/flowmaps/wireframes/<pasta>/<slug>.md`
- Componentes do DS reusados (não inventados)
- Mobile-first (Regra 1) + logo SVG correta (Regra 2) + zero anotações marginais (Regra 3)

---

## Convenções

- ⚪ = surface acessível só por URL direta (sem link na nav user). No mapa de telas (`index.html` futuro) terá dot azul.
- Numeração `XX.Y-pasta-descricao` espelha `docs/flowmaps/wireframes/XX-pasta/`. Slug coincide com `data-slug` do HTML.
- Filename em pasta: `XX.Y-descricao.html` (sem repetir nome da pasta).
