Substitui o match de nome no frontend por uma busca real no backend.
handleAtender agora chama getPacientes(pacienteNome), seta o paciente
diretamente no store e navega — LancarGTO abre com o card já preenchido.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- LancarGTO: substitui <select> de beneficiário por botão que abre modal de busca
com filtro em tempo real por nome/CPF; avatar com inicial do paciente
- LancarGTO store: adiciona pendingSearch para receber paciente pré-selecionado
de outra view; auto-seleciona por correspondência exata ou abre modal com
o nome pré-preenchido
- AgendaView: adiciona botão "ATENDER PACIENTE" no painel de detalhes do
agendamento (visível para todos os roles exceto paciente); ao clicar define
o pendingSearch e navega para /lancar-gto com o paciente do horário
- App.tsx: passa onNavigate para AgendaView; adiciona lancar-gto às permissões
do role dentista
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AgendaView:
- Fix agendamentos?.filter(...).map(...) crash: optional chain didn't guard .map when agendamentos is null on initial render
- Fix getPacientes fetcher to extract .data array — API now returns {data, total} not Paciente[], causing searchResults.map crash
LoginView:
- Restore 3s preloader splash screen with {APP_VERSION} instead of hardcoded version string
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>