Este plano assume a adoção integral das opções selecionadas:
1aTop app bar + navigation rail/drawer + conteúdo principal em superfícies tonais distintas.2aSistema de superfícies completo em tokens MD3.3aEscala tipográfica MD3.4aControles no padrão MD3 com moléculas consistentes.5aClasses e cenários em chips; antimicrobianos em lista selecionável.6aMétrica-alvo em destaque como card principal.7aNarrativa principal fora do canvas para limpar o gráfico.8aFeedback clínico unificado em componentes MD3.9aMobile com modal bottom sheet MD3.10aTema Material You com tokens tonais e seed color.
- Sprint 0 concluido no codigo: harness de UI com vitest + jsdom, fixture do shell real e smoke tests de app shell, tema e navegacao mobile.
- Sprint 1 concluido no codigo: tokens MD3, tipografia base, contrato de tema claro/escuro por tokens e integracao do grafico ao tema.
- Porte adicional vindo de main: caminhos relativos de assets, correcao do yMax do grafico para comparacao/incerteza/alvos e resincronizacao visual ao aplicar cenarios clinicos.
- Não alterar cálculo PK/PD nem contrato clínico do simulador.
- A migração é prioritariamente de design system, shell, UX e semântica de componentes.
- O gráfico continua em
Chart.js. - O estado continua inicialmente em JS imperativo; refatoração de framework não faz parte deste plano.
- A suíte atual cobre motor e helpers, mas praticamente não cobre DOM/UI. Isso precisa ser corrigido antes da mudança visual pesada.
A ordem mais segura é:
- Congelar baseline funcional e criar infraestrutura de testes de UI.
- Introduzir tokens MD3 e tema sem trocar layout inteiro de uma vez.
- Migrar o shell da aplicação.
- Migrar controles e padrões de seleção.
- Migrar leitura clínica e componentes de feedback.
- Refatorar o gráfico para o novo modelo de leitura.
- Fechar mobile, integração e regressão visual.
2ae10aprecisam vir cedo porque o resto depende de tokens, superfícies e tema.1adepende desses tokens, mas deve acontecer antes dos componentes menores para evitar retrabalho de espaçamento e hierarquia.4ae5asão a maior superfície de interação; devem entrar quando o shell já estiver estável.6ae8adependem do novo sistema de superfícies, tipografia e componentes.7adeve vir depois, porque o gráfico precisa refletir a nova hierarquia informacional já decidida fora dele.9afecha a experiência mobile quando a versão desktop já estiver semanticamente consolidada.
Usar TDD para proteger comportamento, acessibilidade e contratos visuais estruturais, sem tentar testar CSS pixel a pixel cedo demais.
- Testes de domínio
- Reutilizar os testes atuais de
pkEngine,renalAdjust,pkpdTargetsecontrolLogic. - Não misturar mudanças visuais com alterações nesses testes, salvo necessidade de cobertura adicional de contratos usados pela UI.
- Testes de contrato de apresentação
- Validar estrutura esperada de componentes e regiões de layout.
- Validar classes/atributos semânticos, estados selecionado/expandido, presença de textos-chave e prioridade visual lógica.
- Testes de comportamento DOM
- Validar interações de app bar, drawer, bottom sheet, chips, lista de drogas, controles, feedback e painéis expansíveis.
- Validar teclado, foco,
aria-expanded,aria-selected,aria-controls, fechamento porEscape, overlay e restore de estado.
- Testes de integração
- Validar que uma sequência clínica relevante continua possível fim a fim.
- Validar que trocar droga, cenário, parâmetros e tema continua atualizando métricas, feedback e gráfico corretamente.
- Testes de regressão visual
- Adicionar por último, quando a estrutura estabilizar.
- Foco em snapshots de shell, controles, métricas e mobile sheet.
Antes da migração visual, planejar a introdução de:
vitestcom ambientejsdom.- Helpers de render DOM com fixtures do
index.html. - Biblioteca de queries e eventos para DOM.
- Matchers de acessibilidade/semântica.
- Opcional na fase final: snapshots visuais ou screenshots automatizadas.
Para cada item de UI:
- Escrever teste de contrato/uso.
- Implementar a menor mudança para passar.
- Refatorar CSS/JS/tokens mantendo os testes verdes.
- Só então mover para o próximo componente.
Regra de corte:
- Não misturar shell, componentes e gráfico no mesmo commit lógico.
- Cada sprint termina com suíte verde e sem regressões manuais críticas.
Criar a base de proteção para a migração.
- Documentar contratos atuais de UI.
- Introduzir ambiente de testes DOM.
- Criar fixtures de renderização da aplicação.
- Criar smoke tests do shell atual.
tests/ui/app-shell.test.js- renderiza header, sidebar, área principal e canvas.
- garante que os controles essenciais existem.
tests/ui/theme.test.js- garante toggle de tema, classe no
bodye atualização demeta[name="theme-color"].
- garante toggle de tema, classe no
tests/ui/navigation-smoke.test.js- garante abertura/fechamento do drawer mobile atual.
- Suíte existente continua verde.
- Nova suíte de UI consegue montar a app sem browser real.
- Existe baseline para comparar mudanças subsequentes.
2a3a10a
Criar o design system base antes de trocar layout ou componentes.
- Arquivo de tokens MD3 com papéis tonais.
- Seed color e derivação de superfícies.
- Nova escala tipográfica.
- Mapeamento de estados (
primary,secondary,tertiary,error,outline,surface-container-*). - Tema claro/escuro estruturado por tokens, não por overrides pontuais.
tests/ui/tokens.test.js- garante presença dos tokens obrigatórios.
- garante coerência entre tema claro e escuro.
tests/ui/typography.test.js- garante aplicação das classes ou tokens tipográficos principais nas regiões críticas.
tests/ui/theme-contract.test.js- garante que a troca de tema altera tokens esperados sem quebrar shell.
- Nenhum componente novo ainda.
- App visualmente consistente com novo tema base.
- Nenhuma quebra de comportamento.
1a- parte estrutural de
9a
Trocar a arquitetura visual da tela sem ainda redesenhar todos os controles.
- Top app bar MD3.
- Navigation rail no desktop ou drawer persistente conforme breakpoint.
- Região principal com superfícies tonais e hierarchy zones.
- Faixa superior de contexto clínico no conteúdo principal.
tests/ui/app-bar.test.js- renderiza top app bar com ações e título.
- valida semântica e acessibilidade das ações.
tests/ui/navigation-layout.test.js- valida presença e comportamento de rail/drawer por breakpoint lógico.
tests/ui/layout-regions.test.js- valida que classes/regiões de layout são estáveis: navegação, workspace, contexto secundário.
- Shell pronto e estável em desktop.
- Estrutura de layout sem cards arbitrários.
- Sem refatorar ainda o miolo dos controles.
4a5a
Substituir os controles fragmentados por padrões consistentes de input e seleção.
- Campos numéricos e sliders reorganizados como componentes MD3 consistentes.
- Classes e cenários em
filter chips. - Antimicrobianos em lista selecionável com título/subtítulo/estado.
- Estados selecionado, hover, foco, disabled e supporting text padronizados.
tests/ui/filter-chips.test.js- seleção de classe e cenário.
aria-pressedouaria-selectedconsistente.
tests/ui/drug-list.test.js- troca de droga atualiza seleção visual e contexto.
tests/ui/parameter-controls.test.js- sincronização entre campo numérico, presets e slider.
- dose dependente de peso continua correta.
tests/ui/loading-dose-panel.test.js- expandir/recolher dose de ataque com atributos semânticos corretos.
- Fluxo principal de parametrização completo no novo sistema de componentes.
- Nenhuma regressão em sincronização de estado.
6a8a
Reorganizar a leitura clínica para que o usuário entenda prioridade, interpretação e risco em um único sistema visual.
- Métrica-alvo em
featured card. - Métricas secundárias em cards ou lista de apoio.
- Alertas, banners, supporting text e painéis educacionais unificados em linguagem MD3.
- Severidade consistente por cor tonal, ícone e copy.
tests/ui/metric-cards.test.js- a métrica primária correta recebe destaque conforme droga.
tests/ui/clinical-feedback.test.js- alertas mudam conforme resultado simulado.
tests/ui/educational-panel.test.js- painel expande, colapsa e renderiza conteúdo correto por classe/droga.
- Leitura de prioridade clínica clara sem depender do gráfico.
- Feedback padronizado e semanticamente coerente.
7a
Limpar o gráfico e mover explicação de alto nível para uma faixa contextual externa.
- Resumo narrativo principal fora do canvas.
- Canvas reduzido a dados, linhas-alvo e marcações indispensáveis.
- Legenda e anotações revisadas com prioridade por informação.
- Ajustes de contraste para o sistema tonal MD3.
tests/ui/chart-summary.test.js- faixa narrativa externa reflete o estado PK/PD correto.
tests/ui/chart-contract.test.js- datasets essenciais continuam presentes.
- comparação, incerteza e alvos continuam acionando os elementos certos.
tests/ui/chart-legend.test.js- legenda reage corretamente a comparação salva e incerteza.
- O gráfico volta a ser o workspace principal, não um painel sobrecarregado.
- A narrativa clínica principal não depende mais de texto desenhado no canvas.
- conclusão de
9a
Fazer o mobile parecer desenhado para mobile, não apenas adaptado.
- Modal bottom sheet MD3 para parâmetros.
- Estados fechada/aberta/drag/overlay/escape consistentes.
- Ajuste de densidade tipográfica e de touch targets.
- Revisão de ordem visual das informações no viewport pequeno.
tests/ui/mobile-sheet.test.js- abre, fecha, mantém foco e fecha por overlay/escape.
tests/ui/mobile-layout.test.js- regiões críticas continuam acessíveis em viewport pequeno.
tests/ui/mobile-actions.test.js- ações principais continuam acessíveis com sheet aberta e fechada.
- Mobile utilizável com uma mão.
- Sem colisão entre sheet, gráfico e ações principais.
Consolidar a migração e reduzir regressão acumulada.
- Limpeza de CSS legado e regras duplicadas.
- Revisão de nomes de classes e contratos de componentes.
- Regressão visual para desktop e mobile.
- Checklist final de acessibilidade e consistência.
tests/ui/user-flows.test.js- fluxo beta-lactâmico.
- fluxo vancomicina.
- fluxo aminoglicosídeo.
- fluxo com comparação salva.
- snapshots estruturais ou screenshots para:
- shell desktop.
- formulário de parâmetros.
- cards de métricas.
- gráfico com comparação.
- mobile bottom sheet.
- Suíte de domínio verde.
- Suíte DOM verde.
- Regressão visual aprovada.
- Sem divergência grave entre desktop e mobile.
tests/*- configuração de
vitest
src/styles/theme.css- possível novo
src/styles/tokens.css src/ui/theme.js
index.htmlsrc/styles/base.csssrc/main.js
src/styles/controls.csssrc/ui/controls.jssrc/ui/controlLogic.jsse necessário
src/styles/chart.csssrc/ui/educPanel.jssrc/ui/controls.js
src/ui/chart.jssrc/styles/chart.css- regiões do
index.htmlligadas ao resumo externo
src/styles/controls.csssrc/styles/base.csssrc/ui/controls.js
- limpeza transversal e testes finais
- Não começar um sprint com falhas herdadas do sprint anterior.
- Não trocar shell e controles profundos no mesmo bloco de trabalho sem testes intermediários.
- Não introduzir regressão visual sem snapshot ou checklist manual correspondente.
- Não mover o gráfico antes de estabilizar métricas e feedback externo.
- Não fechar mobile antes do desktop estar semanticamente consolidado.
- Não apagar CSS legado até existir cobertura suficiente para o novo contrato visual.
- A interface expressa Material Design 3 de forma clara, não apenas cosmética.
- Existe hierarquia visual inequívoca entre navegação, parâmetros, interpretação e workspace gráfico.
- O tema usa tokens tonais coerentes em claro e escuro.
- Os componentes principais têm cobertura de teste de comportamento.
- O fluxo clínico principal permanece intacto.
- O app continua leve e legível em desktop e mobile.
Executar o Sprint 0 primeiro. Não começar a migração visual antes de fechar o harness de testes de UI.