Correções, melhorias e direcionamento técnico

Blueprint de Evolução UX

Guia prático, tela a tela, com problemas identificados, recomendações de interface e instruções claras para o time de desenvolvimento executar melhorias de experiência no app da Contabileasy. 

18 de abril de 2026
app.contabileasy.com.br
Versão 2.0
Avaliação UI/UX
5
Ajustes Críticos
20
Melhorias UI/UX
9
Quick Wins
6
Telas Cobertas

01 · Executive Summary

Resumo executivo

Este documento evolui a análise inicial do app da Contabileasy (v1.1) para um roteiro objetivo de melhorias. Cada tela é tratada como um bloco independente, com problema identificado, princípio de UX violado, recomendação prática e orientação direta ao desenvolvedor responsável pela implementação.

Como ler este material: cada seção de tela contém três camadas - o que observamos, o que precisa melhorar e como executar. A leitura completa dá contexto estratégico; a consulta por ID (ex.: UX-M-017) permite ao dev trabalhar ajuste a ajuste, sem perder o panorama.

Distribuição das melhorias

Severidade
25%
5 críticos · 9 altos · 6 médios
Esforço de dev
55%
11 quick wins · 4 médios · 2 grandes · 3 absorvidos
Impacto no usuário
Alto
Atinge fluxos centrais do app

02 · Framework de análise

Metodologia aplicada

As recomendações deste relatório são fundamentadas em análise técnica de UI/UX e validadas contra heurísticas consagradas da indústria.

Heurísticas de referência

  • 10 Heurísticas de Nielsen - usabilidade
  • Lei de Fitts - tamanho e alvo de toque
  • Lei de Hick - complexidade de decisão
  • Princípios Gestalt - agrupamento visual
  • WCAG 2.2 - acessibilidade e contraste

Critérios de severidade

  • Crítico - bloqueia ou confunde tarefa central
  • Alto - fricção evidente, afeta conversão
  • Médio - polimento necessário
  • Baixo - refinamento fino
Diagnóstico técnico Recomendação prática Estimativa de esforço Referência visual
ID único por ajuste: cada recomendação recebe um identificador no padrão UX-{severidade}-{nº} - por exemplo UX-C-001 (crítico), UX-A-012 (alto), UX-M-034 (médio). Isso permite ao dev referenciar ajustes em PRs e commits.

03 · Screen by screen

Análise por tela

Cada tela é um bloco independente. A estrutura é sempre a mesma: contexto da tela → problemas identificados → recomendações para o dev → referência visual ampliada dentro de cada achado.

Tela 01

Calendário de Pagamentos

 Home do app

Tela principal do app e rosto do produto no dia a dia do cliente. Apresenta os pagamentos do mês em um calendário, com os guias empilhados dentro da célula do dia de vencimento. Ao clicar num dia, um modal lista os guias daquele dia; ao selecionar um guia, o modal fecha e o painel da direita exibe os detalhes (PDF, código de barras, status). Esta seção identifica cinco pontos de evolução - dois críticos, dois de alto impacto e uma proposta estrutural (drawer) que resolve os dois principais.

Calendário de Pagamentos - visão geral
01 · Visão geral
Calendário mensal com guias empilhados dentro da célula do dia.
Modal listando guias do dia
02 · Modal do dia
Ao clicar no dia, o modal lista os guias disponíveis.
Painel da direita com detalhes do guia
03 · Painel da direita
Após selecionar, o painel mostra PDF, código de barras e status.
Overflow de guias na célula
04 · Overflow
Evidência de UX-A-001: o terceiro guia é cortado na borda inferior da célula.
Proposta de drawer lateral
05 · Proposta de drawer
Referência para UX-M-003: drawer com abas expansíveis por guia.
Bug ação invertida Pago / Não pago
06 · Bug de status
Evidência de UX-C-005: clicar em "Marcar como não pago" marca como pago.
Mockup cores por status
07 · Mockup de cores
Referência para UX-A-004: manter verde (pago) e vermelho (vencido); trocar azul de pendente por amarelo.
Alto UX-A-001 Visibilidade
Guias ocultos por overflow na célula do dia
Nielsen · Visibilidade do estado do sistema
Evidência · Overflow na célula do dia
Evidência · Overflow na célula do dia
Observe como o terceiro guia do dia 20 aparece cortado na borda inferior da célula, sem indicador visual de que há mais itens.

Quando um dia concentra três ou mais guias, a célula do calendário limita a altura e os itens adicionais ficam truncados na borda inferior, sem nenhum indicador de que há mais. O usuário não tem sinal visual de pagamentos além dos que aparecem.

Impacto: risco real de perder vencimentos - especialmente em dias de múltiplos tributos (fechamento mensal com FGTS, DAS e DARF, por exemplo).

Recomendação para o dev · ref. UX-A-001

Limitar a 2 guias visíveis por célula e exibir um chip contador para o restante.

Dentro de cada célula do calendário, renderizar no máximo 2 cards de guia. Se houver mais, mostrar abaixo um chip no padrão + N guias que, ao ser clicado, abre o drawer do dia (ver UX-M-003) com a lista completa. O chip deve ter cor neutra e aria-label descritivo para leitores de tela.

 Esforço S · Baixo (≤ 1h)  Quick win
Crítico UX-C-002 Feedback visual
Atualização do painel direito é imperceptível ao trocar de guia
Nielsen · Visibilidade do estado do sistema
Antes · Modal aberto
Antes · Modal aberto
Usuário clica num guia dentro do modal.
Depois · Painel atualizado
Depois · Painel atualizado
O painel da direita é atualizado, mas a estrutura é sempre a mesma - troca silenciosa.

Ao clicar num dia do calendário, abre um modal com a lista de guias. Selecionar um guia fecha o modal e atualiza o painel da direita com as informações daquela guia - comportamento funcional correto. O problema aparece quando o usuário volta ao calendário, reabre o modal no mesmo dia e seleciona um segundo guia: a coluna da direita é atualizada, mas como todas as guias compartilham a mesma estrutura visual (nome do arquivo, código de barras, status), a troca é praticamente indistinguível a olho nu. Nomes de arquivo parecidos (guia-darf-03-2026.pdf vs guia-das-03-2026.pdf) reforçam a ambiguidade.

Impacto: o usuário perde a referência de qual guia está ativa no painel. Risco alto de copiar o código de barras errado, baixar o PDF errado ou marcar o status na guia errada.

Recomendação para o dev · ref. UX-C-002

A correção definitiva é estrutural e está em UX-M-003 (drawer).

Como mitigação imediata enquanto o drawer não é implementado, dar identidade visual explícita ao guia ativo no painel direito: exibir no topo um cabeçalho destacado com o tipo do tributo (FGTS, DAS, DARF) em cor e ícone próprios, e uma barra de cor superior que indique o status. Assim, mesmo que a estrutura dos campos se repita, o usuário reconhece imediatamente qual guia está vendo.

 Esforço M · Médio (2-4h mitigação · 1-2 dias drawer)
Solução estrutural UX-M-003 Proposto pelo cliente
Drawer lateral com abas expansíveis - resolve UX-A-001 e UX-C-002
Proposta direta do cliente · conforme referência no Print 05
Proposta visual · Drawer lateral
Proposta visual · Drawer lateral
Referência proposta pelo cliente: drawer à direita com os guias do dia como cards, expansíveis inline, com cor e tipo do tributo.

Substituir o modal centralizado por um drawer que desliza da direita ao clicar num dia com guias. O drawer lista os guias como cards empilhados; cada card mostra tipo do tributo (FGTS/DAS/DARF), nome do arquivo e cor de status. Ao clicar num card, ele se expande inline, revelando download, código de barras e seletor de status - tudo sem sair do drawer e sem depender do painel lateral.

Por que resolve os dois problemas de uma vez:

A identidade do guia ativo passa a ser o próprio card expandido - não mais um painel genérico compartilhado. O usuário sempre vê, de maneira explícita, qual card está aberto. Isso substitui a dependência cognitiva de "perceber que o conteúdo do painel mudou" por "ver qual card está expandido" - muito mais barato para o cérebro. E o overflow de guias some porque o drawer acomoda quantos itens forem necessários com scroll.

Recomendação para o dev · ref. UX-M-003

Implementar drawer lateral single-open em substituição ao modal.

Largura ~400-440px, slide-in da direita com overlay semitransparente. Cards em accordion single-open (abrir um fecha os demais). Cabeçalho fixo do drawer com data do dia e botão de fechar. Cada card do guia deve ter: ícone e label do tributo, nome do arquivo, chip de status colorido (ver UX-A-004). Ao expandir, revelar download do PDF, código de barras com botão copiar, e o seletor de status corrigido (ver UX-C-005).

 Esforço L · Alto (1-2 dias de dev) Componente: Drawer Radix / Shadcn
Atenção ao ROI: este é o ajuste de maior impacto desta tela - resolve duas dores de uma vez e prepara o terreno para toda a evolução da home. Recomendamos priorizar no Sprint 2, depois dos quick-wins do Sprint 1.
Alto UX-A-004 Cor semântica
Azul de "pendente" não comunica urgência - substituir por amarelo
Preattentive attributes · Convenção semafórica verde → amarelo → vermelho
Mockup de referência · Cores por status
Mockup de referência · Cores por status
No exemplo: Contabileasy em vermelho (vencido, já correto) e guia-darf em verde (pago, já correto). O guia-das segue em azul - justamente a cor que deve ser substituída por amarelo para comunicar "atenção".

Hoje o app já usa três cores distintas para status de guia: verde para pagas, vermelho para vencidas e azul para pendentes. As duas primeiras estão conceitualmente corretas e devem ser mantidas - o problema está no azul usado para pendentes.

Azul transmite a sensação de "documento arquivado, neutro, sem urgência" - o oposto do que um guia pendente precisa comunicar. Uma guia pendente é, por definição, algo que exige atenção antes de virar vencida. O amarelo, por outro lado, é o sinal universal de "atenção" (semáforo, placas de trânsito, avisos de sistema) e dispara um pré-atentivo completamente diferente: em vez de "mais um documento solto na tela", o cérebro lê como "isso aqui precisa da sua ação".

Impacto: o calendário hoje mostra guias, mas não prioriza visualmente o que precisa ser pago. Com a troca, a home vira um semáforo financeiro instantâneo - o usuário abre o app, bate o olho no mês e já sabe exatamente o que fazer. A escala passa a ser coerente: verde (seguro) → amarelo (atenção) → vermelho (urgente).

Recomendação para o dev · ref. UX-A-004

Substituir o azul dos guias pendentes por amarelo.

O verde de "Pago" e o vermelho de "Vencida" já estão aplicados corretamente - basta conferir se o hex bate com os tokens sugeridos abaixo (ajuste fino opcional). A mudança principal é o pendente: trocar os tokens azuis atuais pelos amarelos da tabela. Aplicar em dois lugares: blocos dentro da célula do calendário e cards dentro do drawer (UX-M-003) - consistência de leitura em toda a home.

Status Preenchimento Borda Texto Ícone Solar
Pago #DCFCE7 #16A34A #15803D check-circle-bold-duotone
Pendente #FEF3C7 #F59E0B #B45309 clock-circle-bold-duotone
Vencida #FEE2E2 #DC2626 #B91C1C danger-triangle-bold-duotone
 Esforço S · Baixo (≤ 2h)  Quick win com alto retorno visual
Crítico UX-C-005 Bug funcional
Ações "Pago" e "Marcar como não pago" com comportamento invertido (apenas em múltiplos guias)
Bug de render · Loop com chave duplicada ou closure incorreta
Evidência · Comportamento invertido
Evidência · Comportamento invertido
Após clicar em "Marcar como não pago", o status foi aplicado como PAGO (checkmark verde). O clique em "Pago" antes disso não havia produzido efeito.

Passos para reproduzir:

  • Abrir um dia que tenha 2 ou mais guias
  • Selecionar qualquer guia da lista no modal
  • Clicar em "Pago"nada acontece, o status não muda
  • Clicar em "Marcar como não pago" → o guia é marcado como pago (checkbox verde aparece, tag PAGO é aplicada)

Importante: o bug não ocorre em dias com um único guia. Isso sugere que o problema está no loop de render de múltiplas guias - provavelmente na key do .map() ou em uma closure que captura o guia errado.

Impacto: bug funcional crítico - pode causar inconsistência de dados (marcar paga a guia errada, ou não conseguir alterar o status de nenhuma). Compromete a credibilidade do app num fluxo central.

Recomendação para o dev · ref. UX-C-005

Investigar e corrigir o handler de status no componente que renderiza a lista de guias.

Três hipóteses a verificar, em ordem de probabilidade:

  1. A key do .map() está usando o índice em vez do id da guia. Isso faz o React reaproveitar o DOM de forma incorreta entre renders.
  2. O onClick dos botões está capturando uma closure antiga do loop - o botão "Pago" pode estar apontando para o handler do último item iterado.
  3. O estado do status está sendo compartilhado entre instâncias (state lifted no nível errado). Cada guia deve ter seu próprio estado isolado ou receber guiaId como argumento no handler.

Checagem prática: abrir o React DevTools na lista de guias, clicar em "Pago" num guia, e observar qual componente efetivamente dispara o re-render. Se o componente que renderiza é diferente do esperado, a key está errada.

 Esforço S · Baixo (≤ 2h investigação + fix)  Quick win - resolve inconsistência de dados
Tela 01 · continuação

Mobile e Legenda

 Viewport mobile  Modal de legenda

Quatro ajustes adicionais na mesma tela - dois voltados à experiência mobile e dois ao modal de legenda acionado pelo botão . No mobile, o overflow identificado em UX-A-001 fica ainda mais severo por causa do espaço limitado; a proposta é deixar o calendário mais limpo com badges contadores. Já o modal de legenda combina copy confuso com layout totalmente quebrado em telas pequenas - a saída é substituí-lo por uma legenda inline fixa.

Alto UX-A-006 Mobile
Nomes de guia lotam a célula do dia no mobile
Relacionado a UX-A-001 · Mesma patologia, severidade maior por menos espaço
Estado atual do calendário no mobile
Estado atual · mobile
O nome do arquivo da guia já consome quase toda a largura disponível da célula do dia - com duas ou mais guias, o overflow é inevitável.

O calendário mobile replica o padrão desktop de exibir o nome completo do arquivo da guia dentro da célula do dia. Como a largura útil de cada célula é de apenas alguns caracteres, basta ter duas guias para gerar truncamento severo, quebra visual e ruído. É a mesma patologia do UX-A-001, mas mais grave porque o real estate é muito menor.

Impacto: no dispositivo que o usuário mais usa no dia a dia (celular), a tela principal do app fica visualmente apertada justamente nos dias mais importantes - aqueles com múltiplos vencimentos.

Recomendação para o dev · ref. UX-A-006

Mobile deve ter tratamento próprio - ver solução estrutural em UX-M-007.

No mobile, o padrão recomendado é não mostrar o nome da guia dentro da célula. Em vez disso, o dia recebe um badge contador que sinaliza quantos pagamentos existem naquela data e a cor do status mais urgente. A lista detalhada fica em uma seção dedicada abaixo do calendário (ver UX-M-007).

 Esforço absorvido por UX-M-007
Solução estrutural UX-M-007 Proposto pelo cliente
Mobile: badge contador no dia + seção "Próximos vencimentos" abaixo
Proposta direta do cliente · conforme referência no Print 19
Proposta mobile - calendário limpo com badge
Calendário + Próximos vencimentos
Dia 09 com badge teal "2" (pendentes); dia 19 com badge vermelho "1" (vencido). Lista agrupada por data abaixo.
Drawer mobile
Drawer mobile · lista
Mesmo componente do drawer desktop (UX-M-003), responsivo - ocupa a largura do viewport no celular.
Drawer mobile com card expandido
Drawer mobile · card expandido
Ao clicar no DAS, o card se expande inline revelando PDF, código de barras e status - mesmo comportamento do desktop.

A proposta do cliente para mobile tem três camadas complementares que, juntas, transformam a home em um painel de leitura imediata:

1. Calendário limpo com badge contador. A célula do dia deixa de mostrar o nome das guias. No lugar, um pequeno badge no canto superior indica quantas guias existem naquela data. A cor do badge segue o status mais urgente presente no dia - verde se tudo pago, amarelo se há pendentes, vermelho se há alguma vencida. O mês inteiro passa a funcionar como um mapa de calor financeiro.

2. Seção "Próximos vencimentos" abaixo do calendário. Lista agrupada por data, filtrada apenas para guias não-pagas. Usa os cards coloridos da paleta semafórica (amarelo para pendentes, vermelho para vencidas). Resolve dois níveis de leitura: panorâmica no calendário e acionável na lista.

3. Drawer idêntico ao desktop. Ao clicar num dia do calendário, abre o mesmo drawer definido em UX-M-003 - só que responsivo, ocupando praticamente a largura inteira do viewport no celular. Cards de guia empilhados com cores, expandem inline ao toque.

Regra importante de negócio: quando uma guia é marcada como paga, ela deve sair da seção "Próximos vencimentos" (pois essa seção é sobre pendências). Mas ela continua acessível no drawer do dia correspondente, agora exibida como card verde - garantindo que o histórico não desapareça.
Recomendação para o dev · ref. UX-M-007

Implementar tratamento mobile-first para o calendário com três entregáveis.

Entregável A - Badge contador na célula do dia: componente pequeno, posicionado absoluto no canto superior direito. Cor derivada do status mais urgente do dia (vencido > pendente > pago). Acessível via aria-label descritivo.

Entregável B - Seção "Próximos vencimentos": lista agrupada por data, ordenada crescente. Filtra apenas guias com status diferente de "pago". Cada item é um card colorido (amarelo para pendente, vermelho para vencido) que, ao clicar, abre o drawer do dia correspondente com aquele guia pré-expandido.

Entregável C - Drawer responsivo: mesmo componente do UX-M-003. No breakpoint mobile, ocupa ~92% da largura do viewport e tem handle superior opcional para arrastar-para-fechar. Animação de entrada da direita mantém-se.

 Esforço L · Alto (2-3 dias de dev) Depende de UX-M-003 (drawer base) e UX-A-004 (tokens de cor)
Alto UX-A-008 Copy Responsividade
Modal "Legenda" combina copy confuso com layout quebrado no mobile
Nielsen · Match between system and the real world (linguagem) + Responsividade
Modal de legenda no desktop
Desktop · copy confuso
"No vencimento, a vencer ou vencido, porém pago" - três condições temporais diferentes, todas pagas. Confunde em vez de esclarecer.
Modal de legenda quebrado no mobile
Mobile · totalmente quebrado
Título truncado, barra lateral de navegação vazada por trás, tipografia estourada - a tela fica visualmente rachada.
Botão info ao lado da data
Gatilho · botão ⓘ
O botão ao lado de "ABR/2026" abre o modal - um clique necessário para entender algo que deveria estar sempre visível.

O botão ao lado do mês abre um modal de legenda com dois problemas simultâneos:

Problema de linguagem. As descrições das cores tentam cobrir todas as condições temporais possíveis e terminam confundindo o leitor:

  • "No vencimento, a vencer ou vencido, porém pago" → é só "Pago", em qualquer contexto temporal
  • "No vencimento ou a vencer e não pago" → é só "Pendente"
  • "Vencido e não pago" → esta está clara

O esforço em descrever o estado combinado (quando venceu + se pagou) não ajuda - o usuário só precisa saber o estado final: Pago, Pendente ou Vencido.

Problema de layout no mobile. O modal não é responsivo. No celular, o título quebra linha de forma estranha, o conteúdo transborda, a sidebar de navegação aparece por trás (vazando elementos visuais), e a tipografia é cortada. O usuário vê uma tela rachada.

Impacto: o componente que deveria ajudar a entender o calendário acaba adicionando fricção - seja pela redação, seja pela experiência mobile. É fácil resolver os dois problemas de uma vez com a proposta do UX-M-009.

Recomendação para o dev · ref. UX-A-008

Não corrigir este modal - removê-lo e usar a solução de UX-M-009.

Tentar consertar o copy + deixar o modal responsivo é esforço desperdiçado. A estratégia é eliminar o modal inteiro e substituí-lo por uma legenda inline fixa abaixo do calendário, resolvendo os dois problemas com menos código e menos componentes na árvore.

Sugestão de destino para a seção "Documentos": a lista "DAS - Documento de Arrecadação do Simples Nacional" e similares tem valor e não precisa ser descartada. Pode migrar para um tooltip no próprio card do guia (ao passar o mouse/manter o toque no tipo do tributo, mostra a definição) ou virar uma FAQ acessível por link no rodapé do app.

Solução estrutural UX-M-009 Proposto pelo cliente
Substituir o modal por uma legenda inline compacta abaixo do calendário
Proposta direta do cliente · conforme referência no Print 26
Proposta de legenda inline
Proposta · legenda inline
Três chips horizontais, sempre visíveis: ponto vermelho · VENCIDO · ponto amarelo · PENDENTE DE PAGAMENTO · ponto verde · PAGO.

Remover completamente o modal e o botão . No lugar, adicionar uma faixa de legenda inline logo abaixo do calendário - sempre visível, compacta, com três indicadores horizontais:

VENCIDO   ·   PENDENTE DE PAGAMENTO   ·   PAGO

Benefícios acumulados:

  • Elimina um componente quebrado - o modal responsivo inteiro sai de cena, sem necessidade de correção
  • Elimina a fricção do clique - a legenda que antes exigia abrir um modal agora está à vista o tempo todo
  • Copy enxuto - uma palavra-estado por cor, sem descrições temporais
  • Funciona em qualquer viewport - três chips em linha no desktop, podem quebrar em duas linhas no mobile se necessário
  • Reforça o aprendizado - o usuário vê a legenda enquanto olha para o calendário, associando cor → significado de forma imediata
Recomendação para o dev · ref. UX-M-009

Remover modal + botão ⓘ; inserir legenda inline abaixo do calendário.

Layout: uma faixa horizontal ocupando a largura do calendário, padding vertical ~12px, fundo neutro ou transparente, alinhamento à esquerda ou centralizado. Três indicadores como dot + label, separados por espaço generoso ou ponto mediano.

Responsividade: no mobile, os três chips podem ficar em linha se couberem; se não couberem, quebrar em duas linhas (dois em cima, um embaixo) sem perder legibilidade. Fonte em caixa alta, letter-spacing leve, cor do texto em cinza médio.

Cores dos dots: os mesmos tokens do UX-A-004. Consistência total entre legenda, cards de guia no calendário e cards dentro do drawer.

 Esforço S · Baixo (≤ 2h)  Quick win - remove componente + resolve dois problemas
Tela 02

Documentos

 Centro de documentos

Página onde o cliente acessa todos os documentos da empresa - guias fiscais (DAS, DARF, impostos em geral) convivem com documentos estáticos (Alvará, Cartão CNPJ, QSA, Contrato Social). A análise identifica quatro pontos: uma inadequação estrutural (colunas que não se aplicam a todos os tipos), duas instâncias do mesmo padrão de modal info quebrado no mobile (um deles com bug crítico de z-index) e a ausência de sinalização de status na listagem de guias - que força o usuário a rolar horizontalmente para descobrir o que está pago ou vencido.

Lista de documentos no mobile
01 · Listagem mobile
Colunas "Data" aparecem em documentos que não têm vencimento - ruído.
Modal info Atualizar quebrado
02 · Modal "Atualizar"
Título truncado, layout estourado - mesma patologia do modal de legenda.
Bug z-index modal Documentos Empresa
03 · Bug Z-INDEX
Modal renderiza atrás do menu lateral. Crítico.
Guias sem status visível
04 · Guias sem status
No primeiro contato, impossível saber se a guia está paga ou vencida.
Status só visível após scroll horizontal
05 · Status após scroll
Só rolando horizontalmente o usuário descobre "VENCIDO" / "A PAGAR".
Médio UX-M-010 Arquitetura de informação
Colunas "Data de Vencimento" e "Status" em documentos que não as têm
Nielsen · Aesthetic and minimalist design
Documentos com colunas desnecessárias
Documentos estáticos com colunas fiscais
Alvará, CNPJ, QSA não têm vencimento nem status de pagamento - mas as colunas aparecem assim mesmo.

A tabela de documentos usa um layout rígido: mostra sempre as mesmas colunas - Nome, Data de Vencimento e Status - independentemente do tipo de documento listado. Isso funciona para guias fiscais (DAS, DARF, impostos em geral), que de fato têm vencimento e status. Mas falha para documentos estáticos como Alvará, Cartão CNPJ, QSA, Contrato Social - que existem, mas não têm nenhum desses atributos. O resultado são colunas vazias ou com dados que não se aplicam, gerando ruído visual e confusão sobre o que cada campo significa.

Impacto: a experiência perde nitidez. O usuário deveria olhar para uma lista de CNPJs/Alvarás e ver apenas o que importa (nome, data de adição, talvez emissor). A presença de colunas irrelevantes polui a leitura e abre espaço para dúvidas do tipo "por que esse alvará está sem status?".

Recomendação para o dev · ref. UX-M-010

Renderizar colunas condicionalmente conforme o tipo de documento da pasta ativa.

Cada categoria de documento tem uma natureza diferente. Guias fiscais são vivos (têm prazo, mudam de status). Documentos institucionais são estáticos (só existem). A tabela precisa refletir isso: em pastas de guias, mostrar Nome + Data de Vencimento + Status; em pastas de documentos institucionais, mostrar Nome + Data de Upload/Atualização (sem Status).

Sugestão de regra: a configuração das colunas pode viver no próprio tipo/categoria da pasta - um metadado hasDueDate e hasStatus (booleanos). A tabela lê esse metadado e decide quais colunas renderizar. Futuramente, outras pastas podem ser adicionadas sem mexer no componente.

 Esforço S · Baixo (≤ 3h)  Quick win
Alto UX-A-011 Responsividade
Modal info "Botão Atualizar" quebrado no mobile
Padrão sistêmico · ver também UX-A-008 e UX-C-012
Modal info Atualizar quebrado mobile
Mobile · layout estourado
Título "Botão Atualizar" aparece como "tão Atualizar" - cortado. O conteúdo transborda, a sidebar vaza por trás.

Clicar no botão da página de Documentos abre um modal explicativo sobre a função "Atualizar". No desktop o comportamento é aceitável, mas no mobile o modal estoura o layout: título truncado, conteúdo cortado, sidebar de navegação aparecendo por trás dos elementos.

Impacto: o componente desenhado para ajudar o usuário acaba confundindo ainda mais, principalmente no dispositivo em que ele mais usa o app.

Observação sistêmica: este é o terceiro modal info do app com o mesmo problema de responsividade (ver UX-A-008 na Tela 01 e UX-C-012 nesta mesma tela). O padrão sugere que todos podem ser instâncias de um componente base compartilhado que não foi projetado mobile-first. Se for o caso, corrigir a raiz resolve toda a família de modais de uma vez.
Recomendação para o dev · ref. UX-A-011

Investigar se os modais info do app compartilham o mesmo componente. Se sim, corrigir na raiz.

O comportamento responsivo esperado do modal info: no mobile, ocupar a largura quase total do viewport (padding lateral de ~16px), permitir scroll vertical interno se o conteúdo for longo, impedir que a sidebar ou qualquer outro elemento vaze por trás (overlay com position:fixed cobrindo tudo), e respeitar safe-areas de notch.

Alternativa: substituir modais info simples por tooltips/popovers inline nos casos em que o texto é curto. Ou eliminar completamente quando a informação puder ser exibida sempre visível (como fizemos no UX-M-009 com a legenda do calendário).

Crítico UX-C-012 Bug Z-Index Responsividade
Modal "Documentos da Empresa" renderiza atrás do menu lateral
Bug de camada de apresentação · z-index incorreto
Modal atrás do menu
Bug evidente · menu lateral por cima do modal
Sua anotação deixa clara a severidade: "popup precisa estar no plano superior".

O modal informativo da pasta "Documentos da Empresa" apresenta dois problemas ao mesmo tempo:

1. Bug crítico de z-index. O menu lateral de navegação do app aparece na frente do modal. Isso quebra a camada de apresentação da interface - o usuário vê elementos de navegação atravessando um modal que deveria estar em foco exclusivo. Qualquer modal, por definição, deve ficar acima de todos os outros elementos da UI até ser fechado.

2. Responsividade mobile quebrada. Tal como o modal de UX-A-011, este também não se adapta bem a telas pequenas. Título comprimido, conteúdo cortado, botão "Ok" flutuando de forma desconexa.

Impacto: além do desconforto visual, o bug de z-index compromete a credibilidade do produto. Quando o usuário vê a interface "furada", cria-se a impressão de um app mal construído, afetando a confiança num fluxo sensível (documentos fiscais da empresa).

Recomendação para o dev · ref. UX-C-012

Corrigir z-index do modal para ficar acima do sidebar e aplicar regras de responsividade de UX-A-011.

A regra é: o modal (e seu overlay) devem estar na camada mais alta da pilha visual. Se o app usa escala de z-index definida (ex.: 10, 100, 1000), o modal pertence ao topo; o sidebar deve estar em uma camada abaixo. Se não há escala documentada, é um bom momento para criar - evita bugs futuros do mesmo tipo.

Cheque também: overlay opaco/semitransparente cobrindo toda a tela (inclusive a área do sidebar), clique no overlay fecha o modal, foco é movido para dentro do modal ao abrir (acessibilidade).

 Esforço S · Baixo (≤ 2h)  Quick win crítico
Alto UX-A-013 Mobile Status
Status das guias só aparece com scroll horizontal - usuário se perde
Nielsen · Visibilidade do estado do sistema
Primeira visão sem status
Primeira visão · sem status
"qual desses guias está pago e qual está vencido?" - impossível saber.
Status revelado após scroll
Após scroll horizontal
Só aí aparece "VENCIDO" em vermelho e "A PAGAR" em amarelo - tarde demais.

A página de guias (ex: pasta DARF) mostra uma tabela com Nome + Data de Vencimento. O campo Status, que é a informação mais importante para decisão, fica à direita e só aparece se o usuário rolar horizontalmente. No primeiro contato, pela largura de uma tela mobile, o usuário vê só os nomes e as datas - sem nenhuma pista sobre o que está pago, pendente ou vencido.

Impacto: num fluxo crítico (pagamento de impostos), obrigar o usuário a scroll horizontal para descobrir o status é fricção alta. Há risco real do cliente não ver o scroll e se confundir ("achei que esse guia estava pago").

Recomendação para o dev · ref. UX-A-013

Trazer o status para dentro da primeira dobra, sem depender de scroll horizontal.

Opção A (mais rápida) - Chip de status inline: adicionar um chip colorido (verde/amarelo/vermelho, usando os tokens de UX-A-004) ao lado do nome da guia ou logo abaixo. Assim o status fica visível mesmo na tela estreita do mobile, sem mover outras colunas.

Opção B (mais robusta) - Transformar em cards empilhados no mobile: no breakpoint mobile, substituir a tabela por cards verticais - cada card mostra nome, data e status em blocos visíveis. Esse padrão é o padrão-ouro de listas no celular (ver Gmail, Notion, Linear). Tabelas são para desktop; cards são para mobile.

Sugestão: aplicar A como correção imediata (Sprint 2) e planejar B para uma onda posterior de mobile-first. Ambos aproveitam os tokens de cor do UX-A-004.

 Esforço M · Médio (A: 3-4h · B: 1 dia)
Tela 03

Notícias

 Central de comunicados

Canal usado pela contabilidade para enviar comunicados ao cliente. Dois pontos: um comportamento crítico de interação (a linha da notícia não é clicável - só o ícone de ação depois de scroll horizontal) e o modal de visualização, que funciona mas pode ser melhor trabalhado visualmente.

Crítico UX-C-014 Affordance
Linha da notícia não é clicável - abrir depende de scroll lateral e clique no "olhinho"
Nielsen · User control and freedom + affordance do componente
Lista de notícias
Fluxo atual · abrir notícia
Sua anotação ilustra o caminho: a linha não responde ao clique; é preciso rolar horizontalmente até aparecer o ícone do olhinho.

Na lista de notícias, o comportamento esperado por qualquer usuário é: clicar na linha abre a notícia. Mas no app atual, a linha inteira não reage ao clique. O único elemento interativo é o ícone de olhinho na coluna "Ações", que só é visível depois que o usuário rola a lista horizontalmente. O usuário precisa adivinhar duas coisas: (1) que existe uma coluna escondida à direita e (2) que o "olhinho" é o trigger de abertura.

Impacto: é um caso clássico de interface que parece quebrada. Como a feature não tem affordance visível, o usuário pode concluir "as notícias não abrem" e abandonar a seção. Severidade crítica porque compromete o entendimento de que a funcionalidade existe - é pior do que estar realmente quebrada.

Recomendação para o dev · ref. UX-C-014

Tornar a linha inteira clicável e remover o ícone "olhinho" como trigger exclusivo.

Comportamento esperado: clicar em qualquer ponto da linha abre a notícia. O cursor sobre a linha muda para pointer. Em mobile, o tap é largo - mínimo 44px de altura (Fitts).

Sobre o ícone "olhinho": pode ser mantido como confirmação visual da ação (redundância não atrapalha), ou removido - já que a linha inteira assume o papel. Em qualquer caso, a coluna "Ações" não é mais necessária ocupar espaço na tabela.

Acessibilidade: usar role="button" na linha se o elemento não for um link nativo, e permitir abrir com Enter/Space pelo teclado.

 Esforço S · Baixo (≤ 2h)  Quick win crítico
Médio UX-M-015 Polimento visual
Modal de visualização da notícia precisa de trabalho de hierarquia e respiração
Hierarquia visual · convenções de viewers de e-mail
Modal de notícia atual
Modal atual · básico
Estrutura funcional, mas tipografia uniforme e contêineres aninhados competem por atenção.

Ao abrir uma notícia, o modal mostra: "Prévia do E-mail" como rótulo geral, "Data de Recebimento" e "Enviado por" em duas colunas com tipografia idêntica, e um segundo contêiner embutido com o conteúdo em si - que traz logo, título-banner e corpo da notícia. O modal funciona, mas está visualmente plano: tudo usa praticamente o mesmo peso tipográfico, os metadados disputam espaço com o conteúdo principal, e anexos ficam apertados no rodapé.

Impacto: a notícia em si deveria ser a estrela do modal - em vez disso, o leitor precisa processar rótulos e metadados antes de chegar ao que importa.

Recomendação para o dev · ref. UX-M-015

Reordenar a hierarquia do modal colocando o conteúdo da notícia em primeiro plano.

Hierarquia sugerida de cima para baixo:

  1. Título da notícia em destaque (heading maior, peso bold)
  2. Metadados discretos logo abaixo do título - "Enviado por Sistema · 06/03/2026" em uma linha só, tipografia menor e cor mais clara
  3. Conteúdo da notícia - corpo principal, com boa respiração e line-height confortável para leitura
  4. Anexos ao final, em uma pequena seção com título "Anexos" e chips/cards dos arquivos

O rótulo "Prévia do E-mail" pode ser removido - não agrega informação, já está implícito que o modal mostra a notícia. Logo-banner do cabeçalho da notícia pode continuar como está (parece ser parte do conteúdo enviado).

 Esforço M · Médio (3-5h)
Tela 04

Configurações · Segurança e Notificações

 Preferências do usuário

Três ajustes na página de configurações: Redundância no fluxo de redefinição de senha, problema de hierarquia da ação de salvar e uma simplificação necessária nas preferências de notificação - onde o controle granular atual pode prejudicar o próprio usuário.

Alto UX-A-016 Fluxo redundante
Campo "Repetir senha atual" é redundante - remover
Convenção de produto · fluxos de redefinição de senha
Quatro campos de senha
Fluxo atual · 4 campos
Sua anotação é direta: "não faz sentido repetir senha atual".

Hoje o fluxo de redefinição de senha pede quatro campos: Senha atual + Repetir senha atual + Nova senha + Repetir nova senha. A senha atual é um campo de autenticação - pede-se uma vez para confirmar que é o dono da conta. Repetir não aumenta segurança; só aumenta fricção. O padrão universal (Google, Apple, bancos, qualquer produto sério) é:

  1. Senha atual (1 campo, para autenticar)
  2. Nova senha (1 campo, para definir)
  3. Confirmar nova senha (1 campo, para evitar erro de digitação)

Impacto: o fluxo atual tem 33% mais fricção que o padrão do mercado. Em dispositivos móveis, onde digitar senha é mais trabalhoso, a diferença é ainda mais sentida. Usuários com gestores de senha passam por 4 operações de preenchimento em vez de 3.

Recomendação para o dev · ref. UX-A-016

Remover o campo "Repetir senha atual". Manter apenas os 3 campos padrão.

Ao submeter, a validação da senha atual continua sendo feita no backend (1 único campo é suficiente). A validação de "nova == confirmar nova" é feita no frontend, como já é hoje.

Bônus: aproveitar para garantir que os atributos autocomplete estejam corretos nos campos - current-password no primeiro, new-password nos outros dois. Isso ajuda gestores de senha e navegadores a autopreencherem corretamente.

 Esforço S · Baixo (≤ 1h)  Quick win
Alto UX-A-017 Hierarquia de ação
Botão "Salvar" está fora do quadro de Segurança - parece um salvar global
Nielsen · Match between system and the real world + Gestalt de proximidade
Botão salvar fora do quadro
Hierarquia confusa
Botão "Salvar" está fora do quadro de Segurança - parece um salvar global

A página de Configurações tem múltiplas seções em cards (Segurança, Notificações, etc.). Hoje, o botão "Salvar" aparece fora desses cards, no rodapé da página - posicionado como se fosse um "salvar global" que afeta todas as preferências da tela de uma vez. Isso gera duas dúvidas no usuário:

  • "Se eu só alterei Segurança, esse botão vai salvar também o que está na seção de Notificações?"
  • "Se eu sair da página sem clicar aqui, perco o que alterei em qualquer seção?"

Impacto: a hierarquia da ação de salvar não está clara. O princípio de Gestalt da proximidade sugere que o botão de uma ação pertence ao contexto da ação - não a um contêiner genérico distante.

Recomendação para o dev · ref. UX-A-017

Mover a ação de salvar para dentro de cada quadro/seção de configuração.

Cada card tem seus próprios campos e seu próprio "Salvar" (e "Cancelar", se aplicável) dentro do próprio contêiner. Isso deixa explícito que a ação se refere ao escopo específico daquela seção - alterações em Segurança são salvas pelo botão de Segurança, alterações em Notificações pelo botão de Notificações, e assim por diante.

Estado dos botões: desabilitar o "Salvar" enquanto não há mudanças no card (dirty state = false). Habilita apenas quando o usuário modifica algo. Reduz cliques desnecessários.

 Esforço S · Baixo (≤ 2h)  Quick win
Alto UX-A-018 Arquitetura de preferências
Controle granular de notificações prejudica o próprio usuário
Princípio do design paternalista positivo · proteger o usuário de escolhas que o prejudicam
Notificações granulares
Configuração atual · 4 checkboxes
O usuário pode desativar a notificação de vencimento de guia - e só quem perde é ele próprio.

O card de Notificações oferece quatro checkboxes, todos editáveis pelo cliente:

  1. Vencimento de uma Guia
  2. Upload de um arquivo em uma pasta
  3. Atualização de nome de um arquivo em uma pasta
  4. Atualização de nome de uma pasta

A primeira opção é problemática: se o usuário desmarca "Vencimento de uma Guia", ele simplesmente para de ser avisado dos pagamentos que precisa fazer. A consequência direta é inadimplência. Não há ganho para o cliente em desligar esse alerta - só prejuízo. Em termos de produto, deixar esse controle exposto é o mesmo que oferecer ao usuário uma opção "esquecer meus impostos".

As outras três opções são de granularidade excessivamente fina. Atualização de nome de arquivo ou renomeação de pasta são eventos de pouco valor informacional - a maioria dos usuários não tem opinião sobre querer ou não receber esse tipo de alerta.

Impacto: a seção de notificações, em vez de oferecer controle útil, oferece formas do usuário se prejudicar (caso 1) ou escolhas sem sentido (casos 2 a 4).

Recomendação para o dev · ref. UX-A-018

Reestruturar a lista de notificações em duas categorias: obrigatórias (não-editáveis) e opcionais (editáveis).

Obrigatórias (ficam sempre ativas, sem checkbox):

  • Vencimento de uma Guia - exibir em uma linha com ícone de lock ou com texto "sempre ativo"
  • Qualquer outra notificação crítica que proteja o usuário de consequências fiscais

Opcionais (checkbox, valor default = ativado):

  • Nova notícia publicada
  • Resumo semanal por e-mail
  • Outras notificações "nice-to-have" que a contabilidade queira oferecer

Remover: Upload de arquivo, atualização de nome - granularidade não pertinente. Se esses alertas existirem de fato, devem ser automáticos, sem controle do usuário.

Micro-copy da seção: usar uma frase curta explicando: "Controle quais e-mails/avisos você quer receber. Alertas críticos de prazos fiscais ficam sempre ativos para proteger sua empresa."

 Esforço S · Baixo (≤ 2h)  Quick win
Tela 05

Ajuda e Suporte

 Canais de atendimento

Página com os canais de contato com a contabilidade (WhatsApp, E-mail, Telefone, Reunião de Vídeo, Ouvidoria) e um link para o Blog. Hoje no mobile a página fica em uma única coluna de cards, subaproveitando o espaço e criando uma lista longa desnecessariamente.

Médio UX-M-019 Responsividade Densidade visual
Mobile em 1 coluna subaproveita espaço - passar para grid 2 colunas
Densidade visual · convenções de mobile-first
Ajuda mobile 1 coluna
Atual · 1 coluna
Cinco cards empilhados em lista única - scrollable mas pouco econômico.
Proposta grid 2 colunas
Proposta · grid 2x2 + 1
Mesmos cards, mais organizados, primeira dobra mostra mais opções.

Os cinco canais de atendimento são cards pequenos, com ícone e label - exatamente o formato ideal para grid. Hoje no mobile eles vêm empilhados em uma única coluna, o que alonga desnecessariamente a página e obriga o usuário a rolar para ver todos. A sua proposta é reorganizar em grid de 2 colunas - 4 cards em cima (2×2) e o quinto isolado ou também em linha.

Impacto: a primeira dobra passa a mostrar mais opções de atendimento. O layout fica mais equilibrado visualmente. O padrão de grid responsivo é o esperado para cards desse tipo em produtos modernos.

Recomendação para o dev · ref. UX-M-019

Aplicar grid responsivo de 2 colunas no breakpoint mobile.

Implementar com CSS Grid ou Flexbox: no desktop, pode ser 3 ou 5 colunas (todos em linha); no mobile (≤ 768px), 2 colunas; em viewports muito estreitos (≤ 360px), pode voltar a 1 coluna se necessário.

Você notou algo importante no DevTools: já existe uma media query (max-width: 768px) aplicando width: 70px; min-width: 110px nos cards - mas é justamente isso que está impedindo o grid fluir. O ideal é deixar os cards com largura flexível (flex: 1 ou grid-column definido) e deixar o container com grid-template-columns: repeat(2, 1fr).

Cards: altura mínima consistente (~120px), centralização do ícone e label, feedback de toque visível (hover/active).

 Esforço S · Baixo (≤ 2h)  Quick win visual
Tela 06

Central de Notificações

 Painel do sino

Painel acionado pelo ícone de sino no canto superior. Exibe uma lista de eventos recentes - arquivos adicionados, atualizações de pasta e similares. O componente hoje é display-only: apenas mostra a lista sem permitir qualquer interação. Um centro de notificações sem interação contraria a expectativa universal do padrão.

Crítico UX-C-020 Feature incompleta
Notificações não marcam como lidas, não somem e não direcionam para o objeto
Padrão universal de notification centers · Nielsen: User control and freedom
Central de notificações
Central atual · sem interação
Cada item tem uma bolinha vermelha (indicador de não-lido) que não responde a cliques. A lista não leva a lugar algum.

O sino no cabeçalho do app mostra um contador vermelho (hoje marcando "7"). Clicar abre o painel com a lista de notificações - "O arquivo X foi adicionado à pasta Y", por exemplo. Cada item tem um pontinho vermelho indicando que é não-lido. O problema é que o componente para por aí:

  • As bolinhas vermelhas não somem ao clicar numa notificação
  • Notificações não ficam marcadas como lidas - o contador no sino continua em 7 indefinidamente
  • Clicar numa notificação não faz nada - não direciona para o arquivo/pasta mencionado

O padrão universal de notification centers (Gmail, WhatsApp, sistema operacional, qualquer SaaS moderno) garante três comportamentos mínimos: cada item é clicável, cada clique marca como lido (apaga o dot), e cada clique leva o usuário ao objeto referenciado.

Impacto: o contador "7" vira ruído visual permanente. O usuário aprende a ignorá-lo - e aí perde o valor do próprio canal de notificação. É um caso claro de feature aparentemente implementada, mas funcionalmente incompleta.

Recomendação para o dev · ref. UX-C-020

Implementar os três comportamentos mínimos de um centro de notificações.

1. Mark-as-read ao clicar. Quando o usuário clica numa notificação, ela é marcada como lida: a bolinha vermelha some e o contador no sino decrementa. Persistir o estado no backend.

2. Navegação para o objeto. Cada notificação tem um objeto referenciado (arquivo, pasta, guia). Clicar deve navegar para esse objeto - ex.: "Arquivo CARTÃO CNPJ.pdf adicionado à pasta Documentos da Empresa" → clique abre a pasta ou o preview do arquivo.

3. "Marcar todas como lidas". Botão secundário no topo do painel para zerar o contador de uma vez - padrão esperado quando o usuário já sabe o que aconteceu e só quer limpar.

Bônus futuro (fora do escopo mínimo): agrupamento por data ("Hoje", "Ontem", "Esta semana"), filtros por tipo de notificação, arquivamento/deleção de itens antigos.

 Esforço M · Médio (1-2 dias)

04 · Consolidated fixes

Ajustes consolidados

Tabela mestre com todos os ajustes identificados, ordenados por severidade e com estimativa de esforço de implementação. Serve como checklist operacional para o time de desenvolvimento.

ID Ajuste Tela Severidade Esforço Status
UX-C-005 Bug: "Pago" e "Marcar como não pago" com ação invertida em múltiplos guias Calendário · Painel direito Crítico S Aberto
UX-C-002 Atualização do painel direito é imperceptível ao trocar de guia Calendário · Modal Crítico M Aberto
UX-A-001 Guias ocultos por overflow na célula do dia (sem indicador de "+N") Calendário · Célula do dia Alto S Aberto
UX-A-004 Substituir azul de "pendente" por amarelo (atenção) - manter verde/vermelho atuais Calendário · Cards de guia Alto S Aberto
UX-M-003 Drawer lateral em substituição ao modal (resolve UX-A-001 e UX-C-002) Calendário · Estrutura Estrutural L Aberto
UX-A-008 Modal "Legenda": copy confuso + layout totalmente quebrado no mobile Calendário · Modal ⓘ Alto Absorvido Aberto
UX-A-006 Mobile: nomes de guia lotam a célula pequena - overflow severo Calendário · Mobile Alto Absorvido Aberto
UX-M-009 Substituir modal de legenda por faixa inline compacta abaixo do calendário Calendário · Legenda Estrutural S Aberto
UX-M-007 Mobile: badge contador + seção "Próximos vencimentos" + drawer responsivo Calendário · Mobile Estrutural L Aberto
UX-C-012 Modal "Documentos da Empresa": bug crítico de z-index (atrás do menu) + mobile quebrado Documentos · Modal ⓘ Crítico S Aberto
UX-C-014 Notícias: linha da notícia não é clicável - só o "olhinho" após scroll Notícias · Lista Crítico S Aberto
UX-C-020 Central de notificações sem interação: não marca como lido, não direciona Notificações · Sino Crítico M Aberto
UX-A-011 Modal info "Botão Atualizar" quebrado no mobile (padrão sistêmico) Documentos · Modal ⓘ Alto Absorvido Aberto
UX-A-013 Guias sem status visível - usuário precisa scroll horizontal para descobrir Documentos · Guias Alto M Aberto
UX-A-016 Campo "Repetir senha atual" redundante - remover para voltar ao padrão de 3 campos Segurança · Senha Alto S Aberto
UX-A-017 Botão "Salvar" fora do quadro - mover para dentro de cada seção Segurança · Layout Alto S Aberto
UX-A-018 Notificações granulares prejudicam usuário - separar obrigatórias das opcionais Configurações · Notificações Alto S Aberto
UX-M-010 Documentos: colunas condicionais por tipo (remover "Data/Status" em documentos estáticos) Documentos · Tabela Médio S Aberto
UX-M-015 Modal de visualização de notícia: reorganizar hierarquia tipográfica Notícias · Modal Médio M Aberto
UX-M-019 Ajuda e Suporte: grid 2 colunas no mobile (atualmente em 1 coluna) Ajuda · Mobile Médio S Aberto

05 · Implementation roadmap

Roadmap para o dev

Sugestão de ordenação em quatro sprints, priorizando quick-wins e ajustes críticos antes de refinamentos. Cada sprint contém IDs específicos do relatório para execução direta.

Sprint 1 · Quick wins
Fricção imediata
  • UX-C-005 · Bug status invertido em múltiplos guias
  • UX-C-012 · Z-index do modal "Documentos da Empresa"
  • UX-C-014 · Linha da notícia clicável
  • UX-A-004 · Azul de pendente → amarelo
  • UX-A-001 · Chip "+N guias" na célula
  • UX-A-016 · Remover "Repetir senha atual"
  • UX-A-017 · Salvar dentro do quadro
  • UX-A-018 · Simplificar notificações granulares
  • UX-M-009 · Legenda inline do calendário
  • UX-M-010 · Colunas condicionais em Documentos
  • UX-M-019 · Ajuda: grid 2 colunas mobile
dev · frontend QA
Sprint 2 · UX essencial
Clareza operacional
  • UX-M-003 · Drawer lateral (calendário)
  • UX-C-002 · Absorvido pelo drawer
  • UX-A-008 · Absorvido pela legenda inline
  • UX-A-013 · Chip de status em guias de impostos
  • UX-C-020 · Central de notificações funcional
dev · frontend design
Sprint 3 · Mobile e responsividade
Experiência no celular
  • UX-M-007 · Badge contador + "Próximos vencimentos"
  • UX-A-006 · Absorvido pela estrutura mobile
  • UX-A-011 · Modal info "Atualizar" responsivo
  • Padronização do componente modal info (raiz)
dev · mobile design
Sprint 4 · Refinos
Polimento e evolução
  • UX-M-015 · Polir modal de visualização de notícia
  • Buffer para próximas telas
dev · design system

06 · Technical appendix

Apêndice técnico

Referências rápidas para o dev - tokens de design sugeridos, padrões de componentes e snippets de código reutilizáveis. Consulta opcional; os blocos da seção 03 já indicam o que usar em cada contexto.

Tokens de referência

#4EBBB6 teal primário #424242 texto principal #06393B teal escuro radius 16px Outfit body Roboto Slab display

Padrões de componentes recomendados

Botões

  • Altura mínima 44px (Fitts · mobile)
  • Padding horizontal 20-24px
  • Estado hover, focus e disabled explícitos
  • Ícone à esquerda do label quando existir

Inputs

  • Label sempre visível (não usar só placeholder)
  • Mensagem de erro abaixo, em vermelho
  • Autocomplete configurado para credenciais
  • Envelopar em <form> válido