# Spec de Telas — App Gestão CFC Produtivo

> **Documento de desenho e projeto.** Descreve as telas, componentes, estados e conteúdo do novo app de gestão, para servir de base a protótipos.
>
> Viabilidade técnica, esforço, riscos e dependências de integração estão fora deste documento — vivem em [analise-api-app-gestao-instrutor.md](../analises/analise-api-app-gestao-instrutor.md), que permanece a peça canônica de análise, e em [analise-bloqueio-aula-por-slot.md](../analises/analise-bloqueio-aula-por-slot.md), para o bloqueio de agenda.
>
> Data: 2026-09-06 · **Revisão: 2026-09-08**

> **O que mudou na revisão de 2026-09-08**
>
> 1. **Bloco F — Documentos e upload** (novo). O fluxo de upload existe em produção e existe no Figma, mas tinha ficado de fora desta spec. Voltou ao escopo, com a lacuna de listagem/exclusão registrada em F5.
> 2. **Bloco G — Bloqueio de agenda** (novo). Bloqueio pontual por slot, no painel e no app.
> 3. **Seção 2** ganhou a paleta e os padrões visuais extraídos do Figma *CFC Produtivo — Aplicativo do Gestor*.
> 4. Navegação, componentes, microcopy e matriz tela × papel atualizados para os dois recursos.
> 5. **Vocabulário de situação corrigido** para os rótulos reais da tabela `clientes_registros_aulas_status`: *Aberta* e *Executada* no lugar de "Agendada" e "Realizada", que vinham de um segundo vocabulário divergente existente no código PHP. Afeta chips, filtros, botões de fechamento e microcopy.

---

## Sumário

1. [Propósito e público](#1-propósito-e-público)
2. [Identidade visual white-label](#2-identidade-visual-white-label)
3. [Perfis e modelo de papéis](#3-perfis-e-modelo-de-papéis)
4. [Mapa de navegação](#4-mapa-de-navegação)
5. [Bloco A — Entrada e identidade](#5-bloco-a--entrada-e-identidade)
6. [Bloco B — Telas comuns aos dois papéis](#6-bloco-b--telas-comuns-aos-dois-papéis)
7. [Bloco C — Papel Instrutor](#7-bloco-c--papel-instrutor)
8. [Bloco D — Papel Gestor](#8-bloco-d--papel-gestor)
9. [Bloco E — Financeiro (papel Gestor)](#9-bloco-e--financeiro-papel-gestor)
10. [Bloco F — Documentos e upload](#10-bloco-f--documentos-e-upload)
11. [Bloco G — Bloqueio de agenda](#11-bloco-g--bloqueio-de-agenda)
12. [Componentes reutilizáveis](#12-componentes-reutilizáveis)
13. [Estados globais](#13-estados-globais)
14. [Configurações do CFC que alteram a interface](#14-configurações-do-cfc-que-alteram-a-interface)
15. [Microcopy de referência](#15-microcopy-de-referência)
16. [Matriz tela × papel](#16-matriz-tela--papel)
17. [Entregáveis sugeridos](#17-entregáveis-sugeridos-para-a-fase-de-protótipo)

---

## 1. Propósito e público

O app substitui a experiência atual do App de Gestão, hoje limitada à consulta de agenda e ao fechamento de aulas pelo instrutor. O novo app atende **dois papéis** dentro de um mesmo CFC:

| Papel | Quem é | O que quer resolver no celular |
|---|---|---|
| **Instrutor** | Profissional que ministra aulas práticas | Ver a agenda do dia, saber quem é o próximo aluno, marcar e desmarcar aulas, registrar o que aconteceu na aula |
| **Gestor** | Dono, sócio, diretor ou gerente do CFC | Saber como a operação está indo sem abrir o painel web (aulas, leads, matrículas, inadimplência) e **operar o caixa no dia a dia**: lançar uma entrada ou saída na hora, quitar o que o aluno acabou de pagar e conferir o fluxo de caixa |

**Caso central de desenho:** em CFCs pequenos e médios, o gestor **também dá aula**. O app precisa atender esse duplo papel sem poluir a experiência de quem exerce só um deles.

### Princípios de desenho

1. **Agenda é a tela-mãe do instrutor; dashboard é a tela-mãe do gestor.** Cada papel abre no que importa para ele.
2. **Uma identidade, dois contextos.** Nunca pedir novo login para trocar de papel.
3. **O switcher não existe para quem não precisa dele.** Instrutor puro e gestor puro jamais veem o controle de papel.
4. **Otimizado para uso em pé, com uma mão, entre aulas.** Alvos de toque generosos, ações primárias ao alcance do polegar, leitura possível sob sol.
5. **Baixo consumo de rede.** A tela inicial de cada papel resolve com uma requisição.
6. **Dinheiro exige confirmação e rastro.** Toda operação financeira mostra o que vai acontecer antes de acontecer, e deixa registro de quem fez. Nenhum lançamento nasce de um toque acidental.
7. **Valores são sensíveis em público.** O gestor consulta o app no balcão, na frente de aluno. Todo agregado financeiro é ocultável com um toque.

---

## 2. Identidade visual white-label

O app é branco de marca: cada CFC aplica sua identidade. Os dados de marca chegam no login e valem para toda a sessão.

| Elemento | Origem | Uso na interface |
|---|---|---|
| Logo do CFC | `dadosCliente.imagem` (URL CloudFront) | Cabeçalho da home, tela de login após identificar o CFC, tela de conta |
| Nome do CFC | `dadosCliente.nome` | Cabeçalho, seletor de papel, tela de conta |
| Cor primária | `configs.cor1` | Barra superior, botões primários, item ativo da tab bar |
| Cor secundária | `configs.cor2` | Destaques, chips selecionados, gráficos |
| Cor terciária | `configs.cor3` | Fundos de apoio, superfícies elevadas |
| WhatsApp do CFC | `configs.whatsapp` | Ação "Falar com a secretaria" na tela de conta |

**Diretriz para o protótipo:** desenhar com uma paleta neutra de referência e demonstrar ao menos **duas variações de marca** (uma clara, uma escura), provando que o layout aguenta cores arbitrárias vindas do cliente. Textos e ícones precisam manter contraste adequado sobre `cor1` em ambos os casos — prever token de "cor de conteúdo sobre primária" calculado, não fixo.

### 2.1 Paleta de referência — Figma *CFC Produtivo — Aplicativo do Gestor*

Cores medidas diretamente no arquivo exportado ([local-docs/design/](../design/)). Esta é a marca-casa do CFC Produtivo: serve de **referência de desenho e de caso-base do white-label**, não de valor fixo no código.

| Papel | Hex | Onde aparece |
|---|---|---|
| **Primária (navy)** | `#303870` | Barra superior, botões primários, "Upload de arquivo", valores em destaque |
| **Acento (laranja)** | `#F29100` — variação `#F29D1E` | Faixa curva do cabeçalho, título da tela, setas de navegação, valores de saída |
| **Ação/dado (azul)** | `#1976D2` | Links "Ver detalhes", chips numéricos, barras de gráfico, títulos de seção de gráfico |
| **Azul de apoio** | `#7ABAF2` | Segunda série dos gráficos |
| **Sucesso (verde)** | `#1CBF6E` | "Nova movimentação", entradas consolidadas, barra de meta, blocos numéricos positivos |
| **Superfície** | `#FFFFFF` | Cards |
| **Fundo** | `#F5F5F5` | Fundo da tela |

**Mapeamento para o white-label:** `cor1` → primária, `cor2` → acento, `cor3` → fundos de apoio. Azul de dado, verde de sucesso e vermelho de erro são **cores semânticas do sistema**, não de marca — não devem variar por CFC. Um gráfico não pode mudar de significado porque o cliente escolheu outra cor.

### 2.2 Padrões visuais do Figma

| Padrão | Descrição |
|---|---|
| **Cabeçalho em duas faixas** | Faixa navy com logo circular, nome do CFC, CNPJ, chevron de troca de CFC e engrenagem; abaixo, faixa laranja de **canto inferior arredondado** com a saudação ou o título da tela e a seta de voltar |
| **Tab bar** | Barra branca flutuante, cantos superiores arredondados, **5 ícones sem rótulo**, traço fino: carteira (Financeiro), funil (Leads), pessoa (Alunos), livro (Teóricas), carro (Práticas) |
| **Cards** | Brancos, cantos ~12px, sombra suave, respiro vertical generoso entre eles |
| **Título de card** | Negrito escuro + subtítulo cinza de contexto ("Total dos últimos 3 meses") + link **Ver detalhes** azul, sublinhado, à direita |
| **Bloco numérico** | Quadrado colorido de canto arredondado com o número grande em branco, e ao lado uma coluna de pares rótulo/valor separada por régua vertical |
| **Séries de gráfico** | **Rampa monocromática de azul** (do `#1976D2` ao azul bem claro), nunca cores categóricas arbitrárias. Legenda em coluna à esquerda no formato "Nome (valor)" |
| **Navegação temporal** | Links sublinhados com seta laranja: **"Próximo mês →"**, **"Voltar ao início →"** |
| **Botão primário** | Pílula totalmente arredondada, navy, alinhada à direita nos formulários |
| **Campo de formulário** | Rótulo cinza acima, caixa branca de borda fina e canto arredondado, placeholder cinza-claro, chevron à direita nos seletores |
| **Ocultar valores** | Ícone de olho ao lado do título "Financeiro" alterna os valores para `*****` — ver princípio 7 |

**Ausências no Figma que esta spec preenche:** estados de carregamento, vazio, erro e offline; o modo de bloqueio (Bloco G); os fluxos de fechamento de aula e quitação de parcela; e a troca de papel. O Figma cobre as telas de leitura do gestor e o upload — não o papel Instrutor completo.

---

## 3. Perfis e modelo de papéis

### 3.1 As três formas do app

| Forma | Quando ocorre | O que o usuário vê |
|---|---|---|
| **Instrutor puro** | Usuário com cadastro de instrutor vinculado, sem acesso à gestão | Tab bar de instrutor. Nenhum controle de papel em lugar nenhum |
| **Gestor puro** | Usuário de gestão sem cadastro de instrutor vinculado | Tab bar de gestor. Nenhum controle de papel |
| **Duplo papel** | Usuário de gestão **com** cadastro de instrutor vinculado | Tab bar do papel ativo + controle de troca de papel |

O app decide a forma no login, a partir das capacidades que o servidor devolve (`perfis` e `instrutor`). Não há tela de configuração para isso — a forma é consequência do cadastro feito no painel web pelo gestor do CFC.

### 3.2 O controle de troca de papel

**Padrão adotado:** *context switcher* no cabeçalho, ao lado da identidade — o mesmo modelo do seletor de organização do GitHub ou de workspace do Slack. É reconhecível, não consome espaço da navegação principal e deixa o contexto ativo sempre visível.

**Onde fica:** um **chip de contexto** no canto esquerdo da barra superior da home, exibindo o papel ativo com ícone e rótulo, com um chevron indicando que é acionável.

```
┌──────────────────────────────────────────────┐
│  ⌄ Instrutor        [logo CFC]        (foto) │
│  ────────────────────────────────────────────│
```

**Ao tocar:** abre um *bottom sheet* curto — não uma tela cheia. Trocar de papel é ação frequente e precisa custar um toque e meio.

```
┌──────────────────────────────────────────────┐
│               Trocar de papel                │
│                                              │
│  ┌────────────────────────────────────────┐  │
│  │ 👤  Instrutor                       ✓  │  │
│  │     Sua agenda e suas aulas            │  │
│  └────────────────────────────────────────┘  │
│  ┌────────────────────────────────────────┐  │
│  │ 📊  Gestão                             │  │
│  │     Indicadores e operação do CFC      │  │
│  └────────────────────────────────────────┘  │
│                                              │
│            Autoescola Modelo · Ana Paula     │
└──────────────────────────────────────────────┘
```

**Comportamento da troca:**

- Troca **toda a casca do app**: tab bar, home e cor de acento do papel. Não é um filtro dentro da mesma tela.
- Transição breve (~200 ms) com o novo contexto entrando — o usuário precisa perceber que mudou de mundo.
- O papel ativo **persiste no dispositivo**: reabrir o app volta ao último papel usado. Um mesmo usuário pode estar em papéis diferentes no tablet e no celular.
- Nenhuma confirmação, nenhum recarregamento de sessão, nenhuma senha.
- O chip de contexto continua visível na home do papel novo, para que a troca de volta seja igualmente barata.

**Regra de exibição:** o chip só é renderizado quando o usuário possui os dois papéis. Nas formas puras, o espaço é ocupado apenas pela identidade do CFC — sem placeholder, sem controle desabilitado.

### 3.3 Primeira entrada de um usuário de duplo papel

Na primeira sessão após ganhar o segundo papel, exibir uma **folha de apresentação única** (uma vez só, nunca mais):

> **Você tem dois papéis neste CFC**
> Como **gestor**, acompanha os indicadores da autoescola.
> Como **instrutor**, gerencia sua própria agenda de aulas.
> Toque no seletor no topo da tela para alternar quando quiser.
>
> `[ Começar como Gestor ]`  `[ Começar como Instrutor ]`

A escolha define o papel inicial e já ensina onde fica o controle.

---

## 4. Mapa de navegação

### 4.1 Tab bar — papel Instrutor

| Aba | Ícone | Tela |
|---|---|---|
| **Agenda** | calendário | C1 — Agenda do instrutor *(home)* |
| **Fechar** | check-duplo | C4 — Fila de fechamento *(badge com contagem)* |
| **Teóricas** | quadro/sala | C7 — Aulas teóricas |
| **Conta** | avatar | B1 — Conta e preferências |

Ação primária flutuante sobre a Agenda: **+ Nova aula** (C5).

Na Agenda, o **toque longo em um slot livre** abre **Bloquear horário** (G3). A mesma ação está no menu da barra superior, para quem não descobre o toque longo.

O instrutor puro **não** tem a capacidade `upload`; o Bloco F não aparece para ele.

### 4.2 Tab bar — papel Gestor

| Aba | Ícone | Tela |
|---|---|---|
| **Painel** | gráfico | D1 — Dashboard *(home)* |
| **Financeiro** | cifrão | E1 — Fluxo de caixa |
| **Operação** | calendário | D3 — Agenda geral |
| **Comercial** | funil | D4 — Leads e matrículas |
| **Conta** | avatar | B1 — Conta e preferências |

Cinco abas é o limite prático da tab bar; a ordem segue a frequência de uso real de um gestor de CFC. Ação primária flutuante sobre Painel e Financeiro: **+ Lançamento** (E2).

**Quando o usuário não tem acesso ao financeiro**, a aba Financeiro não é renderizada e a tab bar volta a quatro itens — sem espaço vazio, sem aba desabilitada.

**Ações rápidas no topo do Painel** (F1): **Upload de arquivo** (F2) e **Nova movimentação** (E2), cada uma condicionada à sua capacidade. Na Agenda geral (D3), o gestor bloqueia horários de qualquer instrutor ou veículo (G5).

> **Duas portas para o mesmo destino, de propósito.** O upload aparece como botão no Painel, não como aba: é uma ação ocasional, não um lugar onde se mora. Lançamento financeiro tem botão flutuante **e** botão no Painel porque é a ação mais frequente do gestor no balcão.

### 4.3 Fluxo geral

```
Splash (A1)
   │
   ├─ sem sessão ──► Login (A2) ──► Recuperar senha (A3)
   │                    │
   │                    ▼
   │            [resolve capacidades]
   │                    │
   │      ┌─────────────┼─────────────┐
   │      ▼             ▼             ▼
   │  instrutor      gestor       duplo papel
   │   puro           puro             │
   │      │             │        Apresentação (A4)
   │      │             │         [1ª vez apenas]
   │      ▼             ▼              │
   │  Agenda (C1)   Painel (D1) ◄──────┘
   │                    │
   │                    └─► Financeiro (E1) ─► Lançar (E2) · Quitar (E5)
   │      ▲             ▲
   │      └──── troca de papel (B2) ────┘
   │
   └─ com sessão ──► home do último papel usado
```

---

## 5. Bloco A — Entrada e identidade

### A1 — Splash

Logo do app sobre a cor primária. Enquanto exibe, valida a sessão local e resolve o papel salvo. Duração máxima percebida: 1,5 s — passando disso, mostrar indicador de progresso discreto.

### A2 — Login

Tela única, sem abas, sem cadastro (contas são criadas pelo CFC no painel web).

| Elemento | Detalhe |
|---|---|
| Marca | Logo do app (o logo do CFC ainda não é conhecido neste momento) |
| Campo **E-mail / login** | Teclado de e-mail, sem autocapitalização, autocompletar de credencial ativo |
| Campo **Senha** | Com alternância de visibilidade |
| **Manter conectado** | Ativado por padrão |
| Botão primário | **Entrar** — largura total, estado de carregamento no próprio botão |
| Link secundário | **Esqueci minha senha** → A3 |
| Rodapé | Versão do app e "CFC Produtivo" |

**Mensagens de erro** — abaixo do formulário, nunca em alerta modal:

| Situação | Texto |
|---|---|
| Credencial incorreta | "E-mail ou senha incorretos. Verifique e tente novamente." |
| Conta inativa | "Sua conta está inativa. Procure a secretaria do seu CFC." |
| Sem perfil de app | "Sua conta não tem acesso ao aplicativo. Procure a secretaria do seu CFC." |
| Sem conexão | "Sem conexão. Verifique sua internet e tente novamente." |

### A3 — Recuperar senha

Campo único de e-mail + botão **Enviar link**. Em sucesso, troca o conteúdo por estado de confirmação:

> **Verifique seu e-mail**
> Se houver uma conta para *ana@autoescola.com.br*, enviamos as instruções de recuperação.
> `[ Voltar ao login ]`

Mensagem deliberadamente neutra quanto à existência da conta.

### A4 — Apresentação de duplo papel

Descrita em [3.3](#33-primeira-entrada-de-um-usuário-de-duplo-papel). Folha modal, ilustração leve, dois botões de ação. Não reaparece.

---

## 6. Bloco B — Telas comuns aos dois papéis

### B1 — Conta e preferências

| Seção | Conteúdo |
|---|---|
| **Cabeçalho** | Avatar (iniciais), nome do usuário, e-mail, chip com o papel ativo |
| **CFC** | Logo, nome do CFC. Se duplo papel: linha "Papéis: Gestão · Instrutor" |
| **Meu cadastro de instrutor** *(só duplo papel ou instrutor)* | Nome do cadastro vinculado e categorias habilitadas, em modo leitura. Nota: "Cadastro mantido pela secretaria" |
| **Preferências** | Tema (Sistema / Claro / Escuro) · Papel de abertura (Último usado / Gestão / Instrutor) — este último só no duplo papel |
| **Suporte** | "Falar com a secretaria" → abre WhatsApp do CFC |
| **Sobre** | Versão do app, termos de uso |
| **Sair** | Ação destrutiva, ao final, com confirmação |

### B2 — Trocar de papel

*Bottom sheet* descrito em [3.2](#32-o-controle-de-troca-de-papel). Altura ajustada ao conteúdo, arrasto para fechar, toque fora fecha.

---

## 7. Bloco C — Papel Instrutor

### C1 — Agenda do instrutor *(home)*

A tela mais usada do app inteiro. Precisa responder em um relance: **qual é a próxima aula e com quem**.

**Estrutura:**

```
┌──────────────────────────────────────────────┐
│  ⌄ Instrutor      [logo CFC]          (foto) │
├──────────────────────────────────────────────┤
│  ‹  Seg 8    Ter 9    QUA 10   Qui 11   ›    │  ← faixa de dias
│         •       ••      •••      •            │  ← densidade
├──────────────────────────────────────────────┤
│  Quarta, 10 de setembro          4 aulas     │
│                                              │
│  ┌────────────────────────────────────────┐  │
│  │ AGORA · 14:00                          │  │
│  │ Marcos Vinícius Alves      (Aula 12)   │  │
│  │ CPF 123.456.789-00 · Renach 1234567    │  │
│  │ 🚗 Gol Prata — ABC-1D23                │  │
│  │ 📍 Pátio Central (Av. Brasil, 1200)    │  │
│  │                       [ Fechar aula ]  │  │
│  └────────────────────────────────────────┘  │
│                                              │
│  ┌────────────────────────────────────────┐  │
│  │ 15:00                    ⚠ em débito   │  │
│  │ Juliana Prado               (Aula 3)   │  │
│  │ 🚗 Onix Branco — DEF-4G56              │  │
│  └────────────────────────────────────────┘  │
│                                              │
│                                    ( + )     │
└──────────────────────────────────────────────┘
```

**Faixa de dias:** rolagem horizontal, dia atual destacado, pontos indicando densidade de aulas (1 ponto = 1–2 aulas, 2 = 3–4, 3 = 5+). Toque no cabeçalho da data abre seletor de calendário para saltos maiores. A extensão navegável para trás e para frente é definida pelo CFC.

**Aula em andamento:** o card cuja janela de horário contém o momento atual recebe rótulo **AGORA**, borda na cor primária e sobe para o topo com leve elevação.

**Agrupamento:** por dia, com cabeçalho fixo (data por extenso + contagem de aulas).

**Ordenação:** cronológica ascendente.

**Ações do card:**
- Toque → C2 (detalhe)
- Botão **Fechar aula** aparece no card apenas quando o fechamento está habilitado pelo CFC e a aula está em situação fechável
- Deslize para a esquerda → ações rápidas: **Fechar** · **Desmarcar**

**Ação flutuante:** **+ Nova aula** → C5.

**Filtro:** ícone na barra superior abre folha com filtro por situação (Aberta / Executada / Falta / Bloqueada) e por categoria. Filtro ativo vira chip removível abaixo da faixa de dias.

**Vazio do dia:** ilustração leve + "Nenhuma aula neste dia." + botão **Marcar aula**.

### C2 — Detalhe da aula

Tela cheia, com a informação organizada em blocos. É a tela que o instrutor abre quando o aluno chega.

| Bloco | Conteúdo |
|---|---|
| **Cabeçalho** | Data e hora por extenso · chip de situação colorido · ordem da aula ("Aula 12") |
| **Aluno** | Foto (ou iniciais), nome completo, CPF formatado, Renach, número de registro. Ações: **Ligar** e **WhatsApp** (visíveis conforme configuração do CFC) |
| **Situação financeira** | Faixa de alerta "Aluno em débito" quando aplicável. Saldo de aulas por categoria, quando o CFC permite exibir |
| **Aula** | Categoria (com ícone), tipo de aula (comum, extra, noturna, simulador, automático), duração |
| **Recursos** | Veículo (título e placa) e local (nome e endereço, com atalho para o mapa) |
| **Observações** | Texto da secretaria, quando o CFC permite exibir |
| **Ações** | Barra fixa inferior: **Fechar aula** (primária) e **Desmarcar** (secundária, com tratamento destrutivo) |

### C3 — Fechamento da aula

*Bottom sheet* acionado de C1, C2 ou C4. Precisa ser resolvível em dois toques.

```
┌──────────────────────────────────────────────┐
│              Fechar aula                     │
│   Marcos Vinícius Alves · Qua 10, 14:00      │
│                                              │
│  ┌────────────────────────────────────────┐  │
│  │ ✅  Executada                           │  │
│  │     O aluno compareceu e fez a aula    │  │
│  └────────────────────────────────────────┘  │
│  ┌────────────────────────────────────────┐  │
│  │ ⛔  Falta                               │  │
│  │     O aluno não compareceu             │  │
│  └────────────────────────────────────────┘  │
│                                              │
│              [ Confirmar ]                   │
└──────────────────────────────────────────────┘
```

- Duas opções grandes, mutuamente exclusivas, com descrição de apoio — o instrutor não deve precisar interpretar rótulo seco.
- **Confirmar** só habilita após seleção.
- Sucesso: fecha a folha, o card na lista anterior anima para a nova cor de situação, e um *snackbar* oferece **Desfazer** por alguns segundos.
- A tela inteira não existe quando o CFC não habilita o fechamento pelo app — o botão simplesmente não é renderizado.

### C4 — Fila de fechamento

Lista de aulas que já aconteceram e seguem sem registro. Existe porque o instrutor tipicamente fecha várias de uma vez, no fim do turno.

- **Cabeçalho:** "3 aulas aguardando fechamento" + botão de texto **Fechar todas como executadas** (com confirmação, para o caso comum de um dia sem intercorrência).
- **Itens:** card compacto — hora, nome do aluno, ordem, veículo — com dois botões inline: **Executada** e **Falta**. Fechar item a item não deve exigir abrir folha.
- **Agrupamento:** por dia, do mais recente para o mais antigo.
- **Badge na tab bar:** contagem de pendências.
- **Vazio:** "Tudo em dia. Nenhuma aula aguardando fechamento." com ilustração de conclusão.

### C5 — Nova aula *(fluxo em etapas)*

Fluxo guiado, uma decisão por tela, com barra de progresso no topo e possibilidade de voltar sem perder o preenchido.

#### Etapa 1 — Aluno

- Campo de busca com foco automático, aceitando **nome ou CPF**.
- Resultados como lista de linhas: foto/iniciais, nome, CPF, e chips de contexto (categoria em curso, "em débito" quando aplicável).
- Seção **Recentes** acima dos resultados: últimos alunos atendidos por este instrutor.
- Vazio: "Nenhum aluno encontrado para *maria*."

#### Etapa 2 — Categoria e tipo de aula

- **Categorias** como cartões selecionáveis, cada um com o ícone da categoria, o rótulo (A, B, AB…), o saldo de créditos do aluno e o progresso ("7 de 20 aulas").
- Categoria sem crédito aparece esmaecida, com o motivo em texto de apoio.
- **Tipo de aula** logo abaixo, como chips: Comum · Extra · Noturna · Simulador · Automático — apenas os tipos que o CFC oferece e para os quais o aluno tem saldo.

#### Etapa 3 — Data

- Calendário mensal. Dias fora da janela permitida ficam desabilitados.
- Legenda discreta indicando disponibilidade por dia.

#### Etapa 4 — Horário

- Grade de horários do dia escolhido, em blocos tocáveis, agrupados por período (**Manhã / Tarde / Noite**).
- Horário indisponível permanece visível mas desabilitado — o instrutor entende a grade melhor vendo o que está ocupado do que vendo lacunas.
- Ao selecionar um horário, revelar em linha o **veículo** que será usado; se houver mais de uma opção, permitir escolher.
- Vazio: "Nenhum horário disponível nesta data." + atalho **Ver próxima data com vagas**.

#### Etapa 5 — Revisão

Resumo em cartão único — aluno, categoria, tipo, data, hora, instrutor, veículo, local — e botão primário **Confirmar agendamento**.

Erros de regra de negócio aparecem **nesta tela**, em faixa acima do botão, com texto direto e ação corretiva quando existir (ex.: "O veículo já tem agendamento neste horário." → **Escolher outro horário**).

#### Sucesso

Tela de confirmação breve: marca de conclusão, resumo em uma linha, e dois botões — **Ver na agenda** e **Marcar outra aula** (que retorna à Etapa 1 já com a data preservada).

### C6 — Desmarcar aula

Diálogo de confirmação com peso destrutivo:

> **Desmarcar esta aula?**
> Marcos Vinícius Alves · Quarta, 10 de setembro, 14:00
> O horário voltará a ficar disponível na grade.
>
> `[ Manter ]`  `[ Desmarcar ]`

Sucesso retorna à origem com *snackbar* e opção de desfazer.

### C7 — Aulas teóricas

Lista simples, de leitura, no mesmo formato de agrupamento por dia da C1.

- **Card:** data e hora, categoria/simulado, sala, turma, quantidade de alunos, situação.
- **Detalhe:** dados da aula e lista de alunos.
- Ação de desmarcar disponível quando cabível, com o mesmo padrão da C6.
- **Vazio:** "Você não tem aulas teóricas agendadas."

---

## 8. Bloco D — Papel Gestor

### D1 — Painel *(home)*

Resposta à pergunta "como está o CFC hoje?" em uma tela, sem rolagem obrigatória para o essencial.

**Cabeçalho:** chip de contexto (quando duplo papel), logo do CFC, avatar. Abaixo, **seletor de período**: `Hoje · Semana · Mês` (padrão: Mês), com a competência escrita por extenso ao lado.

**Organização em seções roláveis:**

#### Seção 1 — Operação (primeiro bloco, sempre visível)

Quatro indicadores em grade 2×2, formato de bloco numérico grande:

| Indicador | Conteúdo |
|---|---|
| Aulas no período | Total, com variação percentual contra o período anterior |
| Aulas executadas | Total e proporção sobre o aberto |
| Faltas | Total, com destaque negativo quando acima do usual |
| Aulas por instrutor | Miniatura de barras horizontais, top 5 |

#### Seção 2 — Comercial

| Indicador | Conteúdo |
|---|---|
| Leads novos | Total no período |
| Conversão de leads | Percentual, com barra de progresso |
| Matrículas | Total no período, com variação |

#### Seção 3 — Financeiro

Resumo de leitura. **A operação financeira vive na aba Financeiro (Bloco E)** — aqui o gestor só confere, e cada linha é um atalho para lá.

| Indicador | Conteúdo | Leva a |
|---|---|---|
| Entradas | Realizado × previsto, em barras sobrepostas | E3 · A receber |
| Saídas | Realizado × previsto | E3 · A pagar |
| Contas a pagar | Valor total e quantidade de títulos, com destaque para vencidos | E3 · A pagar, filtrado por vencidos |
| Saldo em contas | Valor consolidado, sujeito à permissão de exibir saldo | E1 |

O estado de ocultação de valores é **o mesmo** da E1: alternar em qualquer uma das duas afeta as duas.

#### Seção 4 — Alunos

| Indicador | Conteúdo |
|---|---|
| Inadimplência | Quantidade de alunos e valor total |
| RENACH vencendo | Quantidade nos próximos 30 dias |

**Comportamento comum a todos os blocos:**
- Cada bloco é tocável e leva a D2.
- Rodapé discreto da tela: "Atualizado às 14:32" + gesto de puxar para atualizar.
- Valores financeiros ganham alternância de visibilidade (ícone de olho no cabeçalho da seção) — gestor consulta em público.

**Ordem das seções é fixa nesta versão.** Personalização fica para iteração futura.

### D2 — Detalhe do indicador

Tela cheia por indicador, com estrutura padronizada:

| Bloco | Conteúdo |
|---|---|
| **Cabeçalho** | Nome do indicador, valor principal em tipografia grande, variação contra período anterior |
| **Período** | Mesmo seletor da D1, mantendo a escolha feita lá |
| **Série** | Gráfico de evolução no tempo |
| **Composição** | Quebra por dimensão relevante (instrutor, veículo, categoria, origem, usuário) em barras horizontais ordenadas |
| **Lista** | Registros que compõem o número, quando fizer sentido (ex.: alunos inadimplentes, títulos a pagar) |

### D3 — Agenda geral

Visão da operação inteira, não apenas de um instrutor.

- **Alternância de visualização:** `Por instrutor` · `Por veículo` — controle segmentado no topo.
- **Visão do dia** em faixas: cada linha é um instrutor (ou veículo), cada bloco é uma aula posicionada no horário. Rolagem horizontal para o tempo, vertical para os recursos.
- Toque em um bloco abre o detalhe da aula (mesma C2, em modo leitura).
- **Resumo do dia** no topo: total de aulas, ocupação percentual da grade, quantidade de horários livres.
- **Vazio:** "Nenhuma aula agendada neste dia."

### D4 — Comercial

Duas abas internas:

**Leads**
- Blocos de resumo: novos, em atendimento, convertidos, perdidos.
- Lista de leads recentes: nome, origem, responsável, tempo desde o último contato. Lead sem contato há muito tempo recebe marcação de atenção.

**Matrículas**
- Total no período e evolução.
- Quebra por origem e por usuário responsável, em barras ordenadas.

---

## 9. Bloco E — Financeiro (papel Gestor)

O financeiro no app **não replica o painel web**. O painel continua sendo o lugar do fechamento contábil, dos relatórios, do DRE e dos carnês. O app cobre as três operações que o gestor precisa fazer longe do computador:

| Necessidade | Tela | Situação típica |
|---|---|---|
| **Lançar rápido** | E2 | Pagou o borracheiro em dinheiro; recebeu R$ 200 de um aluno no balcão |
| **Quitar o que já existe** | E5 | O aluno chegou e pagou a parcela do mês |
| **Conferir o caixa** | E1, E6 | "Quanto entrou hoje?" · "Quanto tenho em conta?" · "O que vence esta semana?" |

Tudo o que não couber nessas três frentes fica no painel web, e o app diz isso explicitamente quando o usuário esbarra no limite.

### E1 — Fluxo de caixa *(home do financeiro)*

Tela-mãe do módulo. Responde "como está o caixa" antes de qualquer rolagem.

```
┌──────────────────────────────────────────────┐
│  Financeiro                        👁  ⚙     │
│  ┌────────────────────────────────────────┐  │
│  │  Hoje  │  Semana  │ ● Mês │  Período   │  │
│  └────────────────────────────────────────┘  │
│                                              │
│   Saldo em contas                            │
│   R$ 48.320,15                               │
│   4 contas · atualizado às 14:32             │
│                                              │
│  ┌──────────────────┐  ┌──────────────────┐  │
│  │ ENTRADAS         │  │ SAÍDAS           │  │
│  │ R$ 62.400,00     │  │ R$ 18.750,30     │  │
│  │ ▲ 12% vs. ant.   │  │ ▼ 4% vs. ant.    │  │
│  └──────────────────┘  └──────────────────┘  │
│                                              │
│   Resultado do período     + R$ 43.649,70    │
│   ████████████████████░░░░░░                 │
│                                              │
│  ─── Precisa de atenção ────────────────────  │
│   ⚠ A receber vencido        R$ 8.410,00     │
│      12 parcelas             ›               │
│   ⚠ A pagar vencido          R$ 1.230,00     │
│      3 títulos               ›               │
│   • Vence nos próximos 7 dias  R$ 9.800,00   │
│                                              │
│  ─── Saldo por conta ───────────────────────  │
│   Caixa                       R$ 1.420,15    │
│   Banco do Brasil            R$ 32.900,00    │
│   PagSeguro                  R$ 14.000,00    │
│                                              │
│                                    ( + )     │
└──────────────────────────────────────────────┘
```

**Estrutura:**

| Bloco | Conteúdo | Comportamento |
|---|---|---|
| **Seletor de período** | `Hoje · Semana · Mês · Período` | Mesmo componente do painel do gestor; a escolha é compartilhada entre D1, E1 e E3 na sessão |
| **Saldo em contas** | Soma dos saldos de todas as contas do CFC, quantidade de contas, horário da apuração | Toca e abre a lista completa de contas |
| **Entradas / Saídas** | Total do período em cada direção, com variação contra o período anterior | Cada bloco leva a E3 já filtrado |
| **Resultado do período** | Entradas menos saídas, com sinal e cor semântica, e barra de proporção | Positivo em verde, negativo em vermelho, com o sinal sempre escrito |
| **Precisa de atenção** | A receber vencido, a pagar vencido, e o que vence nos próximos 7 dias — valor e contagem | Cada linha leva a E3 pré-filtrada |
| **Saldo por conta** | Lista de contas com saldo individual | Toca e filtra E3 pela conta |

**Ocultar valores:** ícone de olho no cabeçalho substitui todos os números por `••••••` — decisão persistida no dispositivo, restaurada a cada abertura. Este é o único controle da tela que afeta a leitura inteira, por isso fica no cabeçalho e não dentro de uma seção.

**Filtros avançados** (ícone de engrenagem): conta, forma de pagamento, categoria financeira, unidade de custo, aluno, fornecedor e — para quem tem permissão para ver movimentações de outros — usuário responsável. Filtro ativo vira chip removível logo abaixo do seletor de período.

**Ação flutuante:** **+ Lançamento** → E2.

**Sem permissão para ver resumos:** os blocos de saldo, entradas, saídas e resultado não são renderizados. A tela abre direto em "Precisa de atenção" e "Saldo por conta" — ou, se também não houver permissão para saldo de contas, direto na E3.

### E2 — Lançamento rápido

A tela mais exigente de desenho do módulo: precisa ser rápida para o caso comum (uma saída em dinheiro, quitada na hora) e completa o suficiente para o caso menos comum, sem que a complexidade apareça antes da hora.

**Estratégia:** formulário único, progressivo. O essencial cabe na primeira dobra; o resto vive em uma seção **"Mais opções"** recolhida.

```
┌──────────────────────────────────────────────┐
│  ✕            Novo lançamento                │
│  ┌────────────────────────────────────────┐  │
│  │   ● Entrada    │      Saída            │  │
│  └────────────────────────────────────────┘  │
│                                              │
│              R$ 200,00                       │  ← protagonista
│              ─────────────                   │
│                                              │
│  Descrição                                   │
│  ┌────────────────────────────────────────┐  │
│  │ Pagamento parcela — João Silva         │  │
│  └────────────────────────────────────────┘  │
│                                              │
│  Data          Hoje, 06/09/2026          ›   │
│  Conta         Caixa                     ›   │
│  Forma         Dinheiro                  ›   │
│  Categoria     Mensalidades              ›   │
│  Aluno         João Silva                ›   │
│                                              │
│  Situação                                    │
│  ┌────────────────────────────────────────┐  │
│  │  ● Quitada agora  │   Pendente         │  │
│  └────────────────────────────────────────┘  │
│                                              │
│  ⌄ Mais opções                               │
│                                              │
│  ┌────────────────────────────────────────┐  │
│  │            Lançar entrada              │  │
│  └────────────────────────────────────────┘  │
└──────────────────────────────────────────────┘
```

**Campos, em ordem de aparição:**

| Campo | Controle | Comportamento |
|---|---|---|
| **Tipo** | Segmentado `Entrada / Saída` | Primeira decisão, no topo. Muda o rótulo do botão final, a cor de acento do formulário e o campo de vínculo (aluno × fornecedor) |
| **Valor** | Teclado numérico, tipografia grande, máscara de moeda | Recebe foco automático ao abrir. É o protagonista visual da tela |
| **Descrição** | Texto livre, uma linha | Sugestões recentes aparecem como chips abaixo do campo |
| **Data de referência** | Linha tocável, padrão "Hoje" | Abre seletor de data |
| **Conta** | Linha tocável | Padrão: conta marcada como principal. A folha de seleção mostra o saldo atual de cada conta |
| **Forma de pagamento** | Linha tocável | Padrão: última usada pelo usuário |
| **Categoria financeira** | Linha tocável | Centro de custo, com hierarquia pai/filho na folha de seleção e busca |
| **Aluno** *(entrada)* / **Fornecedor** *(saída)* | Linha tocável, opcional | Abre E7. O rótulo muda conforme o tipo escolhido no topo |
| **Situação** | Segmentado `Quitada agora / Pendente` | Em "Pendente", revela o campo **Vencimento** logo abaixo |

**Seção "Mais opções"** (recolhida por padrão):

| Campo | Quando aparece |
|---|---|
| **Unidade de custo** | Sempre, para quem usa o recurso |
| **Parcelamento** | Interruptor. Ao ligar, revela: quantidade de parcelas, valor de entrada, valor da parcela e juros. O app mostra a **prévia das parcelas geradas** (datas e valores) antes de confirmar |
| **Lançamento retroativo** | Só para quem tem permissão. Faz a data de pagamento acompanhar a data de referência escolhida |
| **Observação** | Texto livre, multilinha |

**Confirmação:** botão de largura total com rótulo específico — **Lançar entrada** ou **Lançar saída** — nunca "Salvar". Antes de gravar, se o valor for atipicamente alto para aquele CFC ou se a data for retroativa, exibir confirmação com o resumo do que será lançado.

**Sucesso:** tela de confirmação breve com o valor, o tipo, a conta e o novo saldo da conta afetada. Dois botões: **Concluir** e **Lançar outro** (que volta ao formulário preservando conta, forma e categoria — o padrão de quem lança vários seguidos).

**Criação de cadastros a partir do app:** quando a conta, a categoria, a forma de pagamento ou o fornecedor necessários não existem, a folha de seleção traz a opção **+ Criar** ao final da lista, com um formulário mínimo (apenas o título e o que for obrigatório). Isso evita que o gestor abandone o lançamento para abrir o painel web.

### E3 — A receber e a pagar

Lista operacional. É onde o gestor entra quando quer agir sobre títulos específicos.

**Abas internas:** `A receber` · `A pagar` · `Quitados`

**Cabeçalho:** total da aba no período selecionado + contagem de parcelas.

**Filtro por situação**, em chips horizontais: `Vencidos` · `Vence hoje` · `A vencer` · `Todos`. O chip **Vencidos** já vem com a contagem embutida e destaque quando maior que zero.

**Card de parcela:**

```
┌────────────────────────────────────────────┐
│ ▌ Vence 05/09          ⚠ vencida há 1 dia  │
│ ▌ João Silva                    Parcela 3/10│
│ ▌ Mensalidade — Categoria B                │
│ ▌ R$ 200,00  + R$ 6,40 de acréscimos       │
│ ▌ R$ 206,40                    [ Quitar ]  │
└────────────────────────────────────────────┘
```

- Barra lateral colorida pela situação: a vencer (neutro), vence hoje (âmbar), vencida (vermelho), quitada (verde).
- Acréscimos aparecem **apenas quando existem**, sempre decompostos do valor original — o gestor precisa ver que R$ 206,40 é R$ 200,00 mais R$ 6,40, nunca só o total.
- Botão **Quitar** inline abre E5 direto. Tocar no restante do card abre E4.
- Deslize para a esquerda: **Quitar** · **Ver movimentação**.

**Agrupamento:** por data de vencimento, com cabeçalho fixo ("Vencidos", "Hoje", "Amanhã", depois por data).

**Vazio:** "Nada a receber neste período." / "Nada a pagar neste período."

### E4 — Detalhe da movimentação

Leitura completa de um lançamento e das suas parcelas.

| Bloco | Conteúdo |
|---|---|
| **Cabeçalho** | Descrição, chip de tipo (Entrada/Saída), valor total, data de referência |
| **Vínculo** | Aluno ou fornecedor, com atalho para ligar ou abrir o WhatsApp |
| **Classificação** | Categoria financeira, unidade de custo, conta e forma de pagamento |
| **Parcelas** | Lista com ordem, vencimento, valor, situação e ação **Quitar** nas que estão em aberto. Barra de progresso "3 de 10 quitadas" no topo da lista |
| **Totais** | Total da movimentação, total pago, total em aberto, total em atraso |
| **Histórico** | Linha do tempo das operações da movimentação — quitações, estornos, alterações — com data, usuário responsável e observação |
| **Rodapé** | Aviso discreto: "Edição, estorno e exclusão são feitos no painel web." |

### E5 — Quitação de parcela

*Bottom sheet*, acionado de E1, E3 ou E4. É a operação financeira mais frequente do balcão e precisa ser resolvível sem rolagem no caso simples.

```
┌──────────────────────────────────────────────┐
│              Quitar parcela                  │
│      João Silva · Parcela 3/10               │
│                                              │
│   Valor original              R$ 200,00      │
│   Multa (2%)                  R$   4,00      │
│   Mora (1 dia)                R$   2,40      │
│   ──────────────────────────────────────     │
│   Total a receber             R$ 206,40      │
│                                              │
│   Conta         Caixa                    ›   │
│   Forma         Dinheiro                 ›   │
│   Observação    (opcional)               ›   │
│                                              │
│  ┌────────────────────────────────────────┐  │
│  │        Confirmar quitação              │  │
│  └────────────────────────────────────────┘  │
└──────────────────────────────────────────────┘
```

**Decomposição do valor:** sempre visível e sempre discriminada — valor original, multa, mora e juros em linhas separadas, com o total destacado. Quando a parcela está em dia, o bloco reduz a uma única linha com o valor.

**Campos:** conta de destino (padrão: a da parcela, ou a principal), forma de pagamento (padrão: a da parcela) e observação opcional.

**Controles condicionais à permissão do usuário** — quando ausentes, simplesmente não são renderizados:

| Controle | Efeito |
|---|---|
| **Data da quitação** | Permite registrar em data anterior a hoje. Datas futuras nunca são aceitas |
| **Editar valor recebido** | Permite quitar por valor diferente do previsto |
| **Remover acréscimos** | Zera multa e mora, recalculando o total na hora, com o valor removido mostrado riscado |

**Forma de pagamento integrada ao CFC Pay:** ao escolher uma forma processada pelo gateway, a folha **muda de comportamento** — o botão passa a ser **Gerar cobrança**, e a confirmação exibe o meio de envio ao aluno em vez de dar a parcela por quitada. A distinção precisa ser evidente antes do toque: forma integrada recebe um selo "Cobrança online" na lista de seleção.

**Sucesso:** folha fecha, o card de origem anima para a situação quitada, e um *snackbar* oferece **Ver recibo** — que abre o comprovante em tela cheia, com opção de compartilhar.

### E6 — Caixa do dia

Fechamento informal do dia. É o que o gestor olha no fim do expediente.

**Cabeçalho:** seletor de data (padrão: hoje), com navegação para dias anteriores.

**Blocos:**

| Bloco | Conteúdo |
|---|---|
| **Resumo** | Entradas, saídas e saldo do dia, em três blocos numéricos |
| **Por conta** | Quanto entrou e saiu em cada conta |
| **Por forma de pagamento** | Dinheiro, cartão, PIX, boleto — entradas e saídas separadas. É o bloco que fecha a gaveta |
| **Por categoria** | Centro de custo, ordenado por valor |
| **Operações do dia** | Lista cronológica de cada lançamento e quitação, com horário, valor, descrição e usuário responsável |

Cada linha de qualquer bloco é tocável e leva à E3 filtrada pela dimensão correspondente.

**Compartilhar:** ação no cabeçalho gera um resumo em texto do dia, para enviar por WhatsApp ao sócio ou ao contador.

### E7 — Selecionar aluno ou fornecedor

Folha de seleção, reutilizada por E2 e pelos filtros.

- Campo de busca com foco automático — nome ou CPF para aluno, nome para fornecedor.
- **Recentes** no topo: últimos vinculados pelo usuário.
- Linha de resultado: avatar/iniciais, nome, documento e — para alunos — chip "em débito" quando aplicável, com o valor.
- Rodapé fixo: **+ Criar fornecedor** (apenas no contexto de saída).
- Vazio: "Nenhum aluno encontrado para *joão*." com atalho **Criar sem vincular**.

---

## 10. Bloco F — Documentos e upload

> **Recurso já em produção** que se perdeu na primeira versão desta spec. Existe no backend (`app-gestao-upload-referencias` e `app-gestao-upload-armazenamento`) e existe no Figma, na tela **"Upload de Arquivo"**. Está aqui para voltar ao escopo.

O upload permite anexar um documento — foto de CNH, laudo, comprovante, foto do veículo — a um **aluno**, **instrutor** ou **veículo**. O arquivo vai para o S3 e aparece no armazenamento do painel web.

**Quem vê:** apenas usuários com capacidade `upload` (hoje níveis 11, 12 e 14). Instrutor puro **não** tem essa capacidade. Quando ausente, o ponto de entrada não é renderizado — não aparece desabilitado.

### F1 — Ponto de entrada

Card de ações rápidas no topo do Painel (D1), com dois botões lado a lado, como no Figma:

```
┌──────────────────────────────────────────────┐
│  ┌────────────────┐  ┌────────────────────┐  │
│  │       ☁︎        │  │         💲        │  │
│  │ Upload de      │  │  Nova              │  │
│  │ arquivo        │  │  movimentação      │  │
│  └────────────────┘  └────────────────────┘  │
└──────────────────────────────────────────────┘
```

- **Upload de arquivo** — superfície primária (navy), ícone de nuvem com seta para cima. Abre F2.
- **Nova movimentação** — superfície de sucesso (verde), abre E2.

Cada botão só aparece se o usuário tiver a capacidade correspondente. Com apenas um, ele ocupa a largura inteira do card; com nenhum, o card não é renderizado.

### F2 — Upload de arquivo

Tela de formulário, cabeçalho laranja com seta de voltar e título **"Upload de Arquivo"**.

```
┌──────────────────────────────────────────────┐
│  ←  Upload de Arquivo                        │
├──────────────────────────────────────────────┤
│  Título                                      │
│  ┌────────────────────────────────────────┐  │
│  │ Ex: Descrição do documento             │  │
│  └────────────────────────────────────────┘  │
│                                              │
│  Tipo                                        │
│  ┌────────────────────────────────────────┐  │
│  │ Selecione                           ▾  │  │
│  └────────────────────────────────────────┘  │
│                                              │
│  Referência                                  │
│  ┌────────────────────────────────────────┐  │
│  │ Selecione                           ▾  │  │
│  └────────────────────────────────────────┘  │
│                                              │
│  ┌────────────────────────────────────────┐  │
│  │                 ▣                      │  │
│  │           Capturar imagem              │  │
│  └────────────────────────────────────────┘  │
│                                              │
│                        ┌─────────────────┐   │
│                        │     Salvar      │   │
│                        └─────────────────┘   │
└──────────────────────────────────────────────┘
```

| Campo | Regra |
|---|---|
| **Título** | Obrigatório. Texto livre. Placeholder "Ex: Descrição do documento". É o que identifica o arquivo no painel |
| **Tipo** | Obrigatório. Lista fechada: **Aluno**, **Instrutor**, **Veículo**. Define qual referência será buscada |
| **Referência** | Obrigatório. **Desabilitado até o Tipo ser escolhido.** Abre a folha de seleção com busca (componente 12.9). Trocar o Tipo limpa a Referência escolhida |
| **Arquivo** | Obrigatório. Área tocável que abre a folha de origem (F3) |

**Botão Salvar** desabilitado até que os quatro campos estejam preenchidos. Habilitado, é pílula navy alinhada à direita.

**Ordem visual × ordem lógica:** o Figma coloca Título primeiro, mas a dependência real é Tipo → Referência. Manter a ordem do Figma e resolver com o estado desabilitado da Referência é suficiente; não inverter os campos.

**Rótulos da referência:**

| Tipo | O que a lista mostra |
|---|---|
| Aluno | Nome + CPF, com busca por ambos |
| Instrutor | Nome |
| Veículo | Título + placa |

### F3 — Origem do arquivo

Folha inferior com as opções de origem. O Figma mostra só "Capturar imagem"; a spec amplia para o que o backend já aceita:

| Opção | Comportamento |
|---|---|
| **Tirar foto** | Abre a câmera. Caminho principal — é o gesto real de quem está no pátio com o documento na mão |
| **Escolher da galeria** | Seletor de imagens do sistema |
| **Escolher arquivo** | Seletor de documentos (PDF) — ver questão em aberto Q-2 |

Escolhido o arquivo, a área de captura vira **pré-visualização**: miniatura, nome, tamanho e um **✕** para trocar. Nunca some — o usuário precisa ver o que vai enviar antes de salvar.

### F4 — Envio

O envio é multipart e pode ser lento em rede de pátio. Estados:

| Estado | Interface |
|---|---|
| **Enviando** | Barra de progresso determinada sobre o botão, rótulo "Enviando… 40%". Formulário travado. **Não bloquear a navegação:** o envio continua se o usuário sair da tela |
| **Sucesso** | Volta ao Painel com faixa verde "Documento enviado." e o título do arquivo |
| **Falha de rede** | Permanece na tela, faixa vermelha "Não foi possível enviar. Verifique a conexão." + botão **Tentar novamente**. O formulário e o arquivo escolhido são preservados |
| **Arquivo recusado** | "Este arquivo não pôde ser enviado." com o motivo devolvido pela API |
| **Sem conexão ao abrir** | A tela abre, mas o botão Salvar fica desabilitado com a explicação "Sem conexão — o envio precisa de internet". Sem fila offline na primeira versão (ver Q-3) |

### F5 — Envios recentes *(depende de endpoint novo)*

> ⚠️ **Lacuna de produto.** Hoje o upload é **write-only**: existem 12 endpoints no app de gestão e **nenhum** lista ou remove arquivos de `clientes_armazenamento`. O gestor envia e não tem como conferir se deu certo, nem corrigir um envio errado, a não ser abrindo o painel web.

Proposta mínima: lista dos **últimos envios feitos por este usuário neste app** — título, tipo, referência, data e miniatura. Toque abre a pré-visualização. Deslize revela **Excluir**, sujeito à permissão.

Sem isso, a tela de sucesso de F4 é a única confirmação que o gestor recebe, e um envio para a referência errada só se descobre no painel. **Recomenda-se entregar F5 junto com o recurso**, não depois.

### F6 — Questões em aberto deste bloco

| # | Questão |
|---|---|
| Q-1 | Quais tipos de armazenamento o app deve oferecer? O endpoint hoje só resolve **Aluno**, **Instrutor** e **Veículo**, mas a tabela tem outros (currículos, WhatsApp, assinatura). Depende da pendência U-P1 da análise |
| Q-2 | O app aceita **PDF**, ou só imagem? O backend aceita qualquer arquivo; o Figma mostra apenas "Capturar imagem". Se PDF entrar, a pré-visualização precisa de tratamento próprio — miniatura de imagem não serve |
| Q-3 | Envio deve entrar em **fila offline** e disparar quando a conexão voltar? A spec assume que **não** na primeira versão: fila offline exige persistir o arquivo, resolver conflito de referência apagada e explicar o estado "pendente" na interface. Muito custo para um caso que o pátio resolve andando dez metros |

---

## 11. Bloco G — Bloqueio de agenda

> Recurso **novo**, especificado em [analise-bloqueio-aula-por-slot.md](../analises/analise-bloqueio-aula-por-slot.md). Um bloqueio é um registro de aula com status **Bloqueada**, sem aluno, que ocupa o instrutor e o veículo naquele horário.

**O problema que resolve:** hoje, tirar um instrutor ou um carro da agenda por uma tarde exige abrir o painel web e criar uma *faixa de bloqueio* com data, horário, recursos e motivo. É desproporcional para "o carro foi para a oficina hoje à tarde".

**Distinção que a interface precisa sustentar:**

| | Faixa de bloqueio | Bloqueio de aula *(novo)* |
|---|---|---|
| Onde se cria | Painel web | Grade em lote e app |
| Natureza | Regra recorrente ou por período | Registro pontual, slot a slot |
| Serve para | "Sábado à tarde ninguém trabalha" | "Este carro está na oficina agora" |

Ambos aparecem igual **para quem consulta** — slot indisponível com motivo à vista. A diferença só importa para quem cria.

### G1 — Modo de bloqueio na grade em lote *(painel web)*

Fora do escopo do app, mas especificado aqui para manter o comportamento coerente entre as duas pontas.

Na barra de filtros que já tem categoria, tipo de aula, instrutor, veículo e aluno, entra um **interruptor "Bloquear aulas"**.

| Estado | Comportamento |
|---|---|
| **Indisponível** | Enquanto categoria, instrutor **e** veículo não estiverem escolhidos. Com dica ao toque: "Escolha categoria, instrutor e veículo para bloquear horários" |
| **Disponível, desligado** | Grade opera normalmente: clique agenda aula |
| **Ligado** | Aparece o seletor de **Motivo** (obrigatório). O seletor de **aluno é desabilitado e limpo**. A grade entra em modo de bloqueio: o clique no slot cria um bloqueio |

> **O aluno precisa ser limpo, não só ignorado.** Com um aluno selecionado, a grade filtra os registros por aquele aluno — e um bloqueio, que não tem aluno, sumiria da tela, fazendo o slot parecer livre. É a diferença entre a interface estar certa e estar mentindo.

**Sinal de que o modo está ligado:** a área da grade ganha borda de aviso e uma faixa fixa no topo — "Modo bloqueio: os horários clicados serão bloqueados." O modo é **persistente até ser desligado**; não se desarma sozinho após um clique. Bloquear é uma ação em série — a tarde inteira, o dia inteiro.

### G2 — Slot bloqueado

Estado visual novo do card de aula (componente 12.1), aplicável no painel e no app.

- **Preenchimento hachurado** em cinza neutro, distinto de Aberta (laranja), Executada (verde) e Falta (vermelho). Não usar vermelho: bloqueio não é falha.
- **Ícone de cadeado** e o **motivo** como texto principal, no lugar onde apareceria o nome do aluno.
- Sem foto, sem ordem de aula, sem categoria em destaque.
- Rodapé: instrutor e veículo bloqueados.

```
┌──────────────────────────────────────────────┐
│ ▨▨▨ 14:00                                    │
│ 🔒  Veículo em manutenção                    │
│     Carlos Silva · Gol ABC-1234              │
└──────────────────────────────────────────────┘
```

**Para o aluno**, no app do aluno, o slot é apenas indisponível com o motivo — indistinguível de um bloqueio por faixa. Ele não precisa saber qual mecanismo bloqueou.

### G3 — Bloquear horário *(app, papel Instrutor)*

O instrutor bloqueia **os próprios horários**, sem abrir o painel.

**Entrada:** na Agenda (C1), toque longo em um slot livre, ou a ação **Bloquear horário** no menu da barra superior.

```
┌──────────────────────────────────────────────┐
│  ←  Bloquear horário                         │
├──────────────────────────────────────────────┤
│  Quando                                      │
│  Qua, 10 de setembro · 14:00                 │
│                                              │
│  Instrutor                                   │
│  Carlos Silva                       (fixo)   │
│                                              │
│  Veículo                                     │
│  ┌────────────────────────────────────────┐  │
│  │ Gol ABC-1234                        ▾  │  │
│  └────────────────────────────────────────┘  │
│                                              │
│  Motivo                                      │
│  ┌────────────────────────────────────────┐  │
│  │ Selecione                           ▾  │  │
│  └────────────────────────────────────────┘  │
│                                              │
│  ┌────────────────────────────────────────┐  │
│  │           Bloquear horário             │  │
│  └────────────────────────────────────────┘  │
└──────────────────────────────────────────────┘
```

| Campo | Regra |
|---|---|
| **Quando** | Somente leitura, vem do slot tocado |
| **Instrutor** | **Fixo, não editável, exibido como informação.** O instrutor bloqueia só a si mesmo. Não é um seletor desabilitado — é um dado |
| **Veículo** | Obrigatório. Pré-selecionado com o veículo habitual do instrutor. Sem veículo o carro continua agendável, e o bloqueio fica pela metade |
| **Motivo** | Obrigatório, lista do CFC. Sem motivo, o bloqueio vira reserva informal e a ocupação real do CFC fica mascarada |

**Bloquear em série:** após confirmar, oferecer **"Bloquear também o próximo horário"** na faixa de sucesso. Resolve o caso comum — a tarde inteira — sem transformar a tela em um seletor de intervalo.

**Recusas possíveis:**

| Situação | Mensagem |
|---|---|
| Já existe aula no horário | "Há uma aula marcada neste horário." + ação **Ver aula**. Desmarcar primeiro é decisão consciente |
| Horário no passado | "Não é possível bloquear horários que já passaram." |
| Sem permissão | A ação não é renderizada |

### G4 — Remover bloqueio

Toque em um slot bloqueado abre folha com o motivo, quem bloqueou e quando, e a ação **Remover bloqueio**, sujeita a permissão.

Confirmação: "Remover o bloqueio deste horário? Ele volta a ficar disponível para agendamento." O bloqueio some da agenda, mas permanece no histórico — é rastro de decisão de gestão, não lixo.

### G5 — Bloqueio na Agenda geral *(app, papel Gestor)*

Na Agenda geral (D3), o gestor bloqueia **qualquer** instrutor ou veículo. Mesma tela de G3, com uma diferença: **Instrutor vira seletor**, não campo fixo.

Aplica-se a mesma regra de motivo obrigatório. Um gestor que também é instrutor vê a versão do papel ativo no momento — pelo papel Instrutor, bloqueia só a si; pelo papel Gestor, bloqueia qualquer um.

### G6 — Questões em aberto deste bloco

| # | Questão |
|---|---|
| Q-4 | O instrutor precisa de permissão dedicada para bloquear, ou basta ser instrutor? A análise recomenda permissão dedicada |
| Q-5 | Bloqueio deve ter prazo de validade opcional, para não virar permanente por esquecimento? |
| Q-6 | Bloqueio criado pelo instrutor precisa aparecer em alguma fila de revisão do gestor? A recomendação é **não** — motivo obrigatório e relatório de horas bloqueadas dão visibilidade sem criar burocracia |

---

## 12. Componentes reutilizáveis

### 12.1 Card de aula

Componente mais repetido do app. Três densidades:

| Densidade | Onde | Mostra |
|---|---|---|
| **Completa** | C1 (agenda) | Hora, aluno, ordem, documentos, veículo, local, observação, ação |
| **Compacta** | C4 (fechamento), D3 | Hora, aluno, ordem, veículo |
| **Mínima** | Resultados de busca | Hora, aluno |

**Anatomia da versão completa:**

```
┌────────────────────────────────────────────┐
│ ▌ 14:00                        ⚠ em débito │  ← barra lateral = cor da situação
│ ▌ Marcos Vinícius Alves        (Aula 12)   │
│ ▌ CPF 123.456.789-00 · Renach 1234567      │
│ ▌ 🚗 Gol Prata — ABC-1D23                  │
│ ▌ 📍 Pátio Central (Av. Brasil, 1200)      │
│ ▌ 💬 Aluno pediu foco em baliza            │
│ ▌                        [ Fechar aula ]   │
└────────────────────────────────────────────┘
```

Linhas de veículo, local e observação são condicionais: quando o dado não existe ou o CFC não o exibe, a linha desaparece — sem placeholder, sem "não informado".

**Variante bloqueada** (Bloco G): não é uma quarta densidade, é um estado. O card perde aluno, ordem, documentos e ação; ganha cadeado e motivo. O preenchimento é **hachurado**, para se distinguir de qualquer situação de aula mesmo em preto e branco ou sob sol.

```
┌────────────────────────────────────────────┐
│ ▨ 14:00                                    │
│ ▨ 🔒 Veículo em manutenção                 │
│ ▨ Carlos Silva · Gol Prata — ABC-1D23      │
└────────────────────────────────────────────┘
```

### 12.2 Chip de situação

| id | Situação | Cor de referência | Uso |
|:---:|---|---|---|
| 1 | **Aberta** | âmbar `#f89406` | Aula futura confirmada |
| 2 | *Atrasada* | âmbar `#f89406` | Ver nota abaixo — não desenhar fluxo para ela |
| 3 | **Executada** | verde `#62c462` | Aula concluída |
| 4 | **Falta** | vermelho `#900` | Aluno ausente |
| 5 | **Cancelada** | cinza `#999` | Cancelada pelo CFC |
| 6 | **Desmarcada** | cinza `#999` | Removida da agenda |
| 7 | **Arquivada** | azul `#89acff` | Fora do fluxo corrente |
| 8 | **Bloqueada** | cinza neutro `#6c757d` + hachura | Horário indisponível por decisão de gestão |

Rótulos conforme a tabela `clientes_registros_aulas_status` — a fonte que o painel web usa nos relatórios. **O app deve falar o mesmo vocabulário do painel.**

> ⚠️ **Atenção ao implementar.** O código PHP tem um segundo vocabulário, divergente: `$_STATUS_LABEL` chama o 1 de "Agendada" e o 3 de "Realizada". Esses rótulos aparecem hoje apenas nas telas de telemetria do painel. **Não use essa fonte no app** — a análise recomenda alinhá-la ao banco. Detalhes em [analise-bloqueio-aula-por-slot.md § 1.3](../analises/analise-bloqueio-aula-por-slot.md).

**Sobre "Atrasada" (2):** existe na tabela, mas nenhum código do sistema a grava. O app deve **renderizá-la se ela aparecer** em dado legado — nunca quebrar diante de um status desconhecido —, mas não há fluxo, filtro ou ação a desenhar para ela. Regra geral: status não mapeado renderiza como chip cinza com o rótulo que vier da API.

Cores herdadas do painel web, para que gestor e instrutor leiam o mesmo código visual nos dois ambientes. **Nunca usar cor como único portador de significado** — o chip sempre traz o rótulo escrito.

**Bloqueada não usa vermelho.** Bloqueio é decisão de gestão, não falha; disputar o vermelho com "Falta" confundiria as duas leituras. A hachura carrega a distinção sem depender de cor.

**Os botões de ação usam as mesmas palavras dos chips.** O instrutor toca em **Executada**, e o chip que aparece diz **Executada**. Parece óbvio, mas a versão anterior desta spec tinha botão "Realizada" gerando chip que o painel exibe como "Executada" — usuário nenhum deveria precisar aprender que são a mesma coisa. Se o negócio preferir "Realizada" como palavra de interface, a troca deve ser feita **nos três lugares ao mesmo tempo**: banco, painel e app.

### 12.3 Faixa de dias

Rolagem horizontal, item = sigla do dia + número, dia ativo com fundo na cor primária, pontos de densidade abaixo. Toque longo abre calendário completo.

### 12.4 Bloco numérico (dashboard)

Rótulo em caixa alta discreta, valor em tipografia grande, variação com seta e cor semântica, e — quando houver — miniatura de série ao fundo em opacidade baixa. Tocável por inteiro.

### 12.5 Linha de aluno

Avatar (foto ou iniciais sobre cor derivada do nome), nome em destaque, CPF em apoio, chips de contexto à direita. Usada em busca, listas e composições de indicador.

### 12.6 Seletor de período

Controle segmentado `Hoje · Semana · Mês · Período`, com a competência por extenso ao lado. A escolha é global do papel gestor e persiste entre D1, D2, D4, E1 e E3 durante a sessão. A opção **Período** abre seletor de data inicial e final.

### 12.7 Card de parcela

Usado em E3, E4 e nas listas de "precisa de atenção" da E1. Barra lateral colorida pela situação, vencimento e alerta de atraso no topo, vínculo (aluno ou fornecedor) e ordem da parcela, descrição, e o valor **sempre decomposto** quando há acréscimos. Botão de quitação inline nas parcelas em aberto.

### 12.8 Linha de valor monetário

Componente de exibição, não de entrada. Regras fixas em todo o app:

- Sempre `R$ 0.000,00`, com separador de milhar.
- Sinal explícito em resultados (`+ R$ 43.649,70` / `− R$ 1.230,00`), nunca apenas cor.
- Acréscimos e descontos aparecem decompostos do valor original, nunca embutidos no total.
- Sujeito ao estado global de ocultação — quando ativo, vira `••••••` mantendo a largura, para o layout não saltar.

### 12.9 Folha de seleção com busca

Padrão único para escolher conta, forma de pagamento, categoria, aluno e fornecedor. Campo de busca no topo, seção **Recentes**, lista com informação de apoio à direita (saldo da conta, hierarquia da categoria, documento do aluno) e, quando cabível, **+ Criar** fixo ao final.

### 12.10 Teclado de valor

Entrada monetária em tela cheia ou em bloco dedicado: dígitos grandes, formatação em tempo real da direita para a esquerda, sem separador digitado pelo usuário. Nunca usar campo de texto comum para dinheiro.

---

## 13. Estados globais

Todos os componentes de lista e todas as telas de dado precisam dos cinco estados:

| Estado | Tratamento |
|---|---|
| **Carregando (primeira vez)** | Esqueleto com a forma do conteúdo real — nunca spinner centralizado em tela cheia |
| **Carregando (atualização)** | Indicador no topo, conteúdo anterior permanece visível e legível |
| **Vazio** | Ilustração leve, frase específica do contexto (não "nenhum resultado"), e ação sugerida quando existir |
| **Erro** | Frase em linguagem comum, sem código técnico, e botão **Tentar novamente** |
| **Sem conexão** | Faixa persistente no topo: "Sem conexão — exibindo dados de 14:32". Conteúdo em cache continua navegável; ações de escrita ficam desabilitadas com explicação ao toque |

**Sessão expirada:** retorno ao login com aviso — "Sua sessão expirou. Entre novamente." — preservando o papel ativo para restaurá-lo após o novo login.

**Ação sem permissão:** o app não renderiza controles que o papel não possui. Não existe estado de "botão desabilitado por permissão".

**Envio em andamento:** o upload (F4) é a única escrita que sobrevive à saída da tela. Sair não cancela o envio; a confirmação chega onde o usuário estiver. É a exceção deliberada à regra de que ações de escrita se resolvem na tela onde nasceram — arquivo grande em rede de pátio pode levar minutos, e prender o gestor na tela seria pior.

---

## 14. Configurações do CFC que alteram a interface

Cada CFC configura o próprio comportamento no painel web. O protótipo precisa demonstrar as variações — o mesmo app tem aparências diferentes entre clientes.

| Configuração | Efeito na interface |
|---|---|
| Fechamento de aulas pelo instrutor | Liga/desliga o botão **Fechar aula** (C1, C2), a aba **Fechar** (C4) e o *sheet* C3. Desligado, a aba some da tab bar |
| Exibir saldos do aluno | Liga/desliga o bloco de saldo em C2 e o saldo nos cartões de categoria em C5 |
| Exibir observação da aula | Liga/desliga a linha de observação no card e no detalhe |
| Exibir telefone do aluno | Liga/desliga o telefone e as ações **Ligar** / **WhatsApp** |
| Dias anteriores visíveis na agenda | Define até onde a faixa de dias navega para trás |
| Dias seguintes visíveis na agenda | Define até onde a faixa de dias navega para frente |
| Cores e logo do CFC | Aplicam a identidade em todo o app |
| Motivos de bloqueio cadastrados | Alimentam o seletor de motivo em G3/G5. **Sem nenhum motivo cadastrado, o bloqueio não pode ser criado** — a ação aparece com a explicação "Cadastre ao menos um motivo de bloqueio no painel" |
| Tipos de armazenamento ativos | Definem as opções do campo **Tipo** em F2 (Aluno, Instrutor, Veículo) |

### 14.1 Permissões do usuário que alteram o financeiro

Além das configurações do CFC, o financeiro responde a permissões concedidas por usuário. **Controle sem permissão não é desabilitado — é ausente.** O app nunca mostra um botão que o usuário não pode acionar.

| Permissão | O que libera na interface |
|---|---|
| Visualizar resumo | Blocos de saldo, entradas, saídas e resultado na E1. Sem ela, a E1 abre direto nas listas |
| Exibir saldo de contas | Bloco "Saldo em contas" (E1), saldo por conta e o saldo mostrado na folha de seleção de conta |
| Lançamento retroativo | Campo de data retroativa em "Mais opções" (E2) |
| Quitar com outra data | Campo "Data da quitação" (E5) |
| Editar valor na quitação | Campo de valor editável (E5) |
| Remover acréscimos | Ação de zerar multa e mora (E5) |
| Ver movimentações de outros usuários | Filtro "Usuário responsável" (E1, E3) e coluna de responsável nas listas |

**Recomendação para o protótipo:** montar **duas personas de CFC** — uma com tudo habilitado (CFC grande, instrutor autônomo, gestor com permissão financeira plena) e uma minimalista (CFC pequeno, secretaria centralizadora, gestor sem permissão de resumo) — e navegar as mesmas telas nas duas. É a forma mais rápida de validar que o layout não quebra quando blocos desaparecem.

---

## 15. Microcopy de referência

**Princípios:** segunda pessoa, verbo no imperativo nas ações, sem jargão de sistema, sem culpar o usuário. "Aula" e "aluno" são as palavras do domínio — não substituir por "evento" ou "cliente".

| Contexto | Texto |
|---|---|
| Agenda vazia (hoje) | "Nenhuma aula hoje." |
| Agenda vazia (outro dia) | "Nenhuma aula neste dia." |
| Fila de fechamento vazia | "Tudo em dia. Nenhuma aula aguardando fechamento." |
| Busca sem resultado | "Nenhum aluno encontrado para *maria*." |
| Sem horários | "Nenhum horário disponível nesta data." |
| Confirmação de fechamento | "Aula registrada como executada." |
| Confirmação de agendamento | "Aula marcada para quarta, 10 de setembro, às 14:00." |
| Confirmação de desmarcação | "Aula desmarcada. O horário voltou para a grade." |
| Aluno em débito | "Aluno em débito" |
| Sem saldo na categoria | "Sem créditos disponíveis nesta categoria." |
| Troca de papel | "Você está em **Gestão**." / "Você está em **Instrutor**." |
| Vínculo de instrutor removido | "Seu cadastro de instrutor não está mais ativo. Procure a secretaria." |
| Nada a receber | "Nada a receber neste período." |
| Nada a pagar | "Nada a pagar neste período." |
| Confirmação de lançamento | "Entrada de R$ 200,00 lançada em Caixa." / "Saída de R$ 85,00 lançada em Caixa." |
| Confirmação de quitação | "Parcela quitada. R$ 206,40 recebidos em Caixa." |
| Cobrança online gerada | "Cobrança de R$ 206,40 gerada. O aluno já pode pagar pelo link." |
| Parcela vencida | "Vencida há 1 dia" / "Vencida há 12 dias" |
| Acréscimos removidos | "Multa e mora removidas. Novo total: R$ 200,00." |
| Limite do app | "Edição, estorno e exclusão são feitos no painel web." |
| Valor atípico | "Este valor é bem acima do usual para este CFC. Confirma?" |
| Lançamento retroativo | "Este lançamento será registrado em 28/08/2026, não hoje. Confirma?" |
| Fornecedor inexistente | "Nenhum fornecedor encontrado. Você pode criar agora." |
| Upload — placeholder do título | "Ex: Descrição do documento" |
| Upload — referência travada | "Escolha o tipo primeiro." |
| Upload — enviando | "Enviando… 40%" |
| Upload — sucesso | "Documento enviado." |
| Upload — falha de rede | "Não foi possível enviar. Verifique a conexão." |
| Upload — sem conexão | "Sem conexão — o envio precisa de internet." |
| Upload — nenhum envio ainda | "Você ainda não enviou nenhum documento por aqui." |
| Bloqueio — modo ligado | "Modo bloqueio: os horários clicados serão bloqueados." |
| Bloqueio — pré-requisito | "Escolha categoria, instrutor e veículo para bloquear horários." |
| Bloqueio — confirmação | "Horário bloqueado: quarta, 10 de setembro, às 14:00." |
| Bloqueio — encadear | "Bloquear também o próximo horário" |
| Bloqueio — slot ocupado | "Há uma aula marcada neste horário." |
| Bloqueio — passado | "Não é possível bloquear horários que já passaram." |
| Bloqueio — sem motivos cadastrados | "Cadastre ao menos um motivo de bloqueio no painel." |
| Bloqueio — remover | "Remover o bloqueio deste horário? Ele volta a ficar disponível para agendamento." |
| Bloqueio — removido | "Bloqueio removido. O horário voltou para a grade." |
| Bloqueio — visto pelo aluno | "Horário indisponível — *veículo em manutenção*." |

---

## 16. Matriz tela × papel

| Tela | Instrutor puro | Gestor puro | Duplo papel |
|---|:---:|:---:|:---:|
| A1 Splash | ✅ | ✅ | ✅ |
| A2 Login | ✅ | ✅ | ✅ |
| A3 Recuperar senha | ✅ | ✅ | ✅ |
| A4 Apresentação de papéis | — | — | ✅ (1ª vez) |
| B1 Conta | ✅ | ✅ | ✅ |
| B2 Trocar de papel | — | — | ✅ |
| C1 Agenda do instrutor | ✅ *(home)* | — | ✅ *(home do papel)* |
| C2 Detalhe da aula | ✅ | ✅ *(leitura, via D3)* | ✅ |
| C3 Fechamento | ✅ | — | ✅ *(papel instrutor)* |
| C4 Fila de fechamento | ✅ | — | ✅ *(papel instrutor)* |
| C5 Nova aula | ✅ | — | ✅ *(papel instrutor)* |
| C6 Desmarcar | ✅ | — | ✅ *(papel instrutor)* |
| C7 Aulas teóricas | ✅ | — | ✅ *(papel instrutor)* |
| D1 Painel | — | ✅ *(home)* | ✅ *(home do papel)* |
| D2 Detalhe do indicador | — | ✅ | ✅ *(papel gestor)* |
| D3 Agenda geral | — | ✅ | ✅ *(papel gestor)* |
| D4 Comercial | — | ✅ | ✅ *(papel gestor)* |
| E1 Fluxo de caixa | — | ✅ | ✅ *(papel gestor)* |
| E2 Lançamento rápido | — | ✅ | ✅ *(papel gestor)* |
| E3 A receber / a pagar | — | ✅ | ✅ *(papel gestor)* |
| E4 Detalhe da movimentação | — | ✅ | ✅ *(papel gestor)* |
| E5 Quitação de parcela | — | ✅ | ✅ *(papel gestor)* |
| E6 Caixa do dia | — | ✅ | ✅ *(papel gestor)* |
| E7 Selecionar aluno/fornecedor | — | ✅ | ✅ *(papel gestor)* |
| F1 Ações rápidas no Painel | — | ✅ | ✅ *(papel gestor)* |
| F2 Upload de arquivo | — | ✅ *(com capacidade `upload`)* | ✅ *(papel gestor)* |
| F3 Origem do arquivo | — | ✅ *(idem)* | ✅ *(papel gestor)* |
| F5 Envios recentes | — | ✅ *(idem, depende de endpoint novo)* | ✅ *(papel gestor)* |
| G2 Slot bloqueado *(leitura)* | ✅ | ✅ | ✅ |
| G3 Bloquear horário *(próprio)* | ✅ | — | ✅ *(papel instrutor)* |
| G4 Remover bloqueio | ✅ *(com permissão)* | ✅ | ✅ |
| G5 Bloquear na agenda geral | — | ✅ | ✅ *(papel gestor)* |

O bloco E inteiro depende de o usuário ter acesso ao financeiro. Um gestor sem esse acesso vê a tab bar de quatro itens, sem a aba Financeiro.

O bloco F depende da capacidade `upload`, que hoje é dos níveis de gestão (11, 12, 14) e **não** do instrutor. O bloco G depende de permissão de bloqueio — ver questão Q-4.

**Leitura × escrita no bloco G:** todo mundo *vê* um slot bloqueado (G2); quem *cria* depende do papel e da permissão. Essa separação é o que permite ao bloqueio funcionar como informação para uns e ferramenta para outros.

---

## 17. Entregáveis sugeridos para a fase de protótipo

1. **Fluxo de entrada completo** — A1 → A2 → A4 → home, nas três formas do app.
2. **Agenda do instrutor** (C1) em quatro estados: dia cheio, dia vazio, carregando, sem conexão.
3. **Fluxo de marcação** (C5) nas cinco etapas, incluindo uma tela de erro de regra.
4. **Painel do gestor** (D1) com as quatro seções e o seletor de período.
5. **Troca de papel** (B2) demonstrada em animação, saindo de C1 e chegando em D1.
6. **Lançamento rápido** (E2) em dois caminhos: o simples (saída em dinheiro, quitada na hora) e o completo com "Mais opções" aberto e parcelamento ligado.
7. **Quitação de parcela** (E5) em três variações: parcela em dia, parcela vencida com acréscimos decompostos, e forma de pagamento integrada ao gateway.
8. **Fluxo de caixa** (E1) com valores visíveis e com valores ocultos, provando o estado de privacidade.
9. **Duas variações de marca**, provando o white-label.
10. **Uma persona de CFC minimalista**, provando o comportamento com configurações e permissões desligadas — incluindo a tab bar sem a aba Financeiro.
11. **Upload de arquivo** (F2 → F3 → F4) em três estados: formulário incompleto com Salvar desabilitado, envio em progresso, e falha de rede com o arquivo preservado.
12. **Modo de bloqueio na grade em lote** (G1), mostrando o antes e o depois de ligar o interruptor — com destaque para o seletor de aluno limpo e desabilitado.
13. **Bloqueio pelo app** (G3) e o **slot bloqueado** (G2) lado a lado com um slot agendado e um realizado, provando que os três se distinguem sem depender de cor.

> Os itens 11 a 13 cobrem os recursos incluídos na revisão de 2026-09-08. Os itens 1 a 10 permanecem como estavam.
