Commit Graph

244 Commits

Author SHA1 Message Date
VPS 4 Builder 4f5f68978b [version-bump] V1.0.8 2026-05-15 06:29:04 +02:00
VPS 4 Builder 891dcffeb2 merge: reordenação do sidebar + fixes desta sessão 2026-05-15 06:28:56 +02:00
VPS 4 Builder 6788e29fb9 feat(sidebar): reordenar itens — Agenda, Pacientes, GTO, Ortodontia, Financeiro, Relatórios, Contratos 2026-05-15 06:28:41 +02:00
VPS 4 Builder fdecffa71c [version-bump] V1.0.7 2026-05-15 05:31:13 +02:00
VPS 4 Builder 0f08b96f90 chore(build): remover update-version.js do build — versão incrementa no deploy-script 2026-05-15 05:30:38 +02:00
VPS 4 Builder c208fee63c merge: num_faces dentistica + num_raizes endodontia + oculta ARCO 2026-05-15 05:20:59 +02:00
VPS 4 Builder 8fad5a2529 feat(admin-procedimentos): num_faces (dentística) e num_raizes (endodontia) + oculta ARCO
- Dropdown 1-5 de faces visível quando especialidade é Dentística
- Dropdown 1-5 de raízes visível quando especialidade é Endodontia
- Opção ARCO COMPLETO oculta nos dois casos (não se aplica)
- Select de especialidade agora controlado — reseta num_faces/num_raizes ao trocar
- DB: ALTER TABLE procedimentos ADD COLUMN num_faces INTEGER, num_raizes INTEGER (executado)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 05:20:55 +02:00
VPS 4 Builder 7e069a59ff merge: rascunho live com checkboxes de face por dente 2026-05-15 05:09:13 +02:00
VPS 4 Builder ed6631f9ce feat(lancar-gto): dente click = add imediato ao rascunho com checkboxes de face
- Clicar dente adiciona GTOItem diretamente ao rascunho (sem botão "adicionar")
- Clicar dente já adicionado remove o item do rascunho
- Cada item no rascunho tem checkboxes O,M,D,V,L,P com comportamento radio (seleciona 1, desmarca outros)
- Observação editável inline abaixo de cada item
- Dentista avaliador (selecionado) aparece em cada linha do rascunho
- ADICIONAR ITEM mantido apenas para procedimentos ARCO/GERAL
- Validação de face obrigatória movida para FINALIZAR GTO

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 05:09:09 +02:00
VPS 4 Builder 520581a569 merge: faces/obs por dente + descricao_mobile + layout mobile 3 slides 2026-05-15 04:43:56 +02:00
VPS 4 Builder fbaf478eaf feat(lancar-gto): faces/obs por dente, campo descricao_mobile e layout mobile em 3 slides
- Cada dente selecionado tem seu próprio input de face e observação (não mais unificado)
- ADICIONAR ITEM cria um GTOItem por dente com face/obs individual
- Layout mobile em 3 páginas: pág 1 paciente/especialidade/dentista, pág 2 odontograma, pág 3 faces/obs + rascunho
- Navegação mobile com footer fixo: VOLTAR | indicador de página | PRÓXIMO / FINALIZAR
- Campo descricao_mobile no cadastro de procedimentos (versão curta para celular)
- ALTER TABLE procedimentos ADD COLUMN descricao_mobile TEXT (já executado no DB)
- Desktop mantém layout coluna dupla original sem mudança

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 04:43:50 +02:00
VPS 4 Builder 83e334038e Merge branch 'claude/admiring-chaplygin-7fde72' 2026-05-15 04:00:59 +02:00
VPS 4 Builder 4ff45e2c16 feat(odontograma): dentição mista + fix mobile + fix dentes decíduos Q4
- Botão expansor por modo: adulto mostra "+ INCLUIR DENTES DECÍDUOS",
  criança mostra "+ INCLUIR DENTES PERMANENTES" (Opção B)
- Seção expandida exibe odontograma complementar com separadores âmbar
  e cor diferenciada: azul=permanente, âmbar=decíduo
- Fechar expansão limpa automaticamente os dentes do tipo removido
- Fix clínico: DENTES_CRIANCA.q4 corrigido de 41-46 (permanentes)
  para 81-85 (decíduos inferiores direitos)
- Mobile: p-3 sm:p-8, gap-x-2 sm:gap-x-12, gap-1 sm:gap-2,
  w-7 h-7 sm:w-9 sm:h-9, text-[9px] sm:text-[11px]

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 04:00:55 +02:00
VPS 4 Builder 46099b562e Merge branch 'claude/admiring-chaplygin-7fde72' 2026-05-14 22:53:22 +02:00
VPS 4 Builder d0f7914c58 fix(agenda): atender paciente busca via API antes de navegar para GTO
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>
2026-05-14 22:53:19 +02:00
VPS 4 Builder 83f3402fc5 Merge branch 'claude/admiring-chaplygin-7fde72' 2026-05-14 22:46:47 +02:00
VPS 4 Builder 6dcfb27ca8 fix(lancar-gto): auto-seleção robusta de paciente vindo da agenda
- Adiciona normalize() para remover acentos antes de comparar nomes,
  resolvendo falhas quando o agendamento usa "Joao" e o cadastro "João"
- Troca correspondência exata por filtro com includes() em ambas as direções
- Seleciona diretamente se há exatamente 1 match (sem abrir modal)
- Se múltiplos matches: abre modal com busca pré-preenchida
- Se nenhum match: abre modal vazio para busca manual
- Aplica normalize() também no filteredPatients para consistência

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 22:46:44 +02:00
VPS 4 Builder d2586cb558 chore(version): fixar base em V1.0.6 para próximo build gerar V1.0.7 e quebrar cache 2026-05-14 21:54:38 +02:00
VPS 4 Builder 36c4435787 feat(gto+agenda): busca de paciente por modal + botão ATENDER na agenda
- 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>
2026-05-14 20:53:48 +02:00
VPS 4 Builder a47f225bf9 fix(lancar-gto): corrigir crash .map — getPacientes retorna {data,total} não array 2026-05-14 20:12:36 +02:00
VPS 4 Builder 646458e669 feat: sistema completo de contratos odontológicos 2026-05-14 20:07:54 +02:00
VPS 4 Builder d064aa9058 feat(contratos): sistema completo de contratos odontológicos
- Tabelas contratos e contrato_itens com migrações automáticas
- Endpoints CRUD com itens em transação
- ContratosView: listagem, filtro por status, cards, stats
- ContratoModal: wizard 3 abas (Dados/Itens/Cláusulas), catálogo de
  procedimentos, DnD para reordenar, financeiro completo, print A4
- Sidebar: novo item CONTRATOS
- App.tsx: nova rota /contratos com permissões dentista/funcionario
- PatientsView: botão CONTRATOS no menu financeiro

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 20:04:57 +02:00
VPS 4 Builder 1cafef7ca4 feat: modal de lançamento de procedimento financeiro completo 2026-05-14 18:29:15 +02:00
VPS 4 Builder d6d2bc1e78 feat(financeiro): modal de lançamento de procedimento completo
- Catálogo de procedimentos por especialidade com busca e filtros
- Preço automático pelo convênio/plano do paciente (valoresPlanos)
- Campos de região: dente (texto livre), arcada (Superior/Inferior/Ambas),
  face (V/L/M/D/O multi-select) conforme tipo_regiao e exige_face
- Quantidade por item com +/-
- Painel financeiro: desconto (R$ ou %), entrada (auto-marcada Pago),
  parcelamento até 48x com vencimentos mensais automáticos
- Ao salvar: gera uma entrada de financeiro por parcela + entrada separada
- Integrado no botão LANÇAR do menu financeiro dos pacientes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 18:29:10 +02:00
VPS 4 Builder aedd9ece11 feat: menu clínico com 8 botões — tratamentos, GTOs, agendamentos, relatórios 2026-05-14 18:17:22 +02:00
VPS 4 Builder 6cb8169d62 feat(clinico): adicionar botões tratamentos, GTOs, agendamentos e relatórios ao menu clínico
- Menu clínico expandido para 8 botões em grade 4 colunas (2 no mobile)
- AGENDAMENTOS: reutiliza HistoricoModal existente
- GTOs: exporta useGTOStore do LancarGTO, pré-preenche paciente e navega
  para /lancargto via hash
- TRATAMENTOS: novo modal com stats (total/concluídos/faltas), resumo de
  procedimentos realizados e histórico cronológico
- RELATÓRIOS: novo modal com visão completa imprimível — dados pessoais,
  endereço, vínculos, resumo de atendimentos e observações clínicas

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 18:17:15 +02:00
VPS 4 Builder df9c0c47d2 fix(ui): modais responsivos — 96×98 desktop, tela cheia mobile 2026-05-14 17:24:28 +02:00
VPS 4 Builder 173c1c777e fix(ui): modais responsivos — 96×98 em desktop, tela cheia em mobile 2026-05-14 17:22:41 +02:00
VPS 4 Builder 646e4d207a fix: null[0] em dentistas nos modais de receita e exame 2026-05-14 17:02:49 +02:00
VPS 4 Builder df5c4bacb8 fix(modais): corrigir crash null[0] em dentistas ao abrir ReceitaModal e PedidoExameModal
useHybridBackend inicializa data como null, não undefined — o default = []
na desestruturação não se aplica a null, causando TypeError ao fazer
dentistas[0]. Substituído por operador ?? após a desestruturação.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 17:02:44 +02:00
VPS 4 Builder a7d2172da8 feat: receitas, pedido de exame, edição multi-página de paciente 2026-05-14 16:53:33 +02:00
VPS 4 Builder 15a8527f1c feat(pacientes): modais de receita, pedido de exame e edição em 4 páginas
- ReceitaModal: gerenciamento de modelos de receita por especialidade com
  drag-and-drop para reordenar medicamentos e preview de impressão
- PedidoExameModal: pedido de exames por catálogo (Raio-X / Tomografia /
  Outros) com DnD para ordenar, campos de região/observação por item e
  preview de impressão
- EditarPacienteModal: reformulado em 4 páginas (Dados / Família /
  Endereço / Histórico) com navegação anterior/próximo e modal 2xl
- Backend: tabelas modelos_receita, items_receita, pedidos_exame,
  items_pedido_exame criadas na migração; colunas de endereço adicionadas
  em pacientes; endpoints CRUD para receitas e pedidos de exame
- Integração: botões Receita e Raio-X no menu clínico agora abrem os
  novos modais reais em vez do placeholder

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 16:53:28 +02:00
VPS 4 Builder 3cfc247b6e Merge claude/goofy-sinoussi-94238f: date fix, convenio dropdown, grupo familiar redesign 2026-05-14 16:11:47 +02:00
VPS 4 Builder 3d287a4579 chore: bump APP_VERSION V1.0.3 → V1.0.4
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 15:59:24 +02:00
VPS 4 Builder ee3f6c3bb2 feat(patients): fix date bug, convenio dropdown, redesign grupo familiar
- Fix dataNascimento date format error: convert dd/MM/yyyy → yyyy-MM-dd when
  loading EditarPacienteModal so <input type="date"> validates correctly
- Change convênio field from free text to dropdown populated from planos table
- Redesign grupo familiar: search a patient as family member instead of named
  group, with parentesco field (datalist with common options, accepts custom)
- GET /api/pacientes: proper camelCase aliases, LEFT JOINs for grupoFamiliarNome
  and indicadoPorNome, sort parameter support (az/za/convenio/recentes)
- Add startup migrations: ADD COLUMN IF NOT EXISTS for grupofamiliarid,
  grupofamiliarrelacao, indicadorporid on pacientes table
- savePaciente: preserve caller-supplied id instead of overwriting with Math.random
- Add grupoFamiliarRelacao to Paciente type

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 15:54:54 +02:00
VPS 4 Builder 1e873cb653 fix(login): resolve merge conflict — preloader now uses APP_VERSION
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 08:01:55 +02:00
VPS 4 Builder 15ba7ffe95 fix(agenda): fix $.map crash and getPacientes type mismatch; restore preloader
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>
2026-05-14 08:01:18 +02:00
VPS 4 Builder 3229572d3b Merge branch 'claude/youthful-mendel-0c569f' 2026-05-14 07:50:25 +02:00
VPS 4 Builder e0be095055 fix(patients): prevent $.map crash in AgendamentoModal and AutocompleteField
- Fix agendamentos?.filter(...).map(...) — optional chain didn't protect .map, crashing when agendamentos is null on first render
- Add Array.isArray guard in AutocompleteField before setResults to prevent non-array from backend error responses breaking subsequent .map
- Add array guard in getGruposFamiliares to return [] on backend error instead of propagating error object

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 07:50:22 +02:00
VPS 4 Builder cabd2b9118 Merge claude/youthful-mendel-0c569f: grupo familiar + indicado por
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 07:32:30 +02:00
VPS 4 Builder 4c39a04654 feat(pacientes): grupo familiar + indicado por — DB migration, routes, autocomplete UI, family modal
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 07:32:27 +02:00
VPS 4 Builder 11b0c2d2bf Merge claude/youthful-mendel-0c569f: patient UI overhaul
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 07:19:14 +02:00
VPS 4 Builder b411ab3c01 feat(pacientes): compact cards (6/screen), sort pills, clean search bar, 20-default limit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 07:19:11 +02:00
VPS 4 Builder 58d875b4fc Merge claude/youthful-mendel-0c569f: patient card redesign + dataNascimento fix
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 07:12:01 +02:00
VPS 4 Builder 51cbd07125 fix(pacientes): alias dataNascimento in query; show full name; add CopyField component per data field
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 07:11:58 +02:00
VPS 4 Builder 6b67fbc26e fix(sync): truncate fields in import-legacy to match column VARCHAR limits
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 07:05:31 +02:00
VPS 4 Builder ca584dca72 Merge claude/youthful-mendel-0c569f: import-legacy + server-side pacientes search
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 07:03:58 +02:00
VPS 4 Builder 162404f4e8 feat(sync): add import-legacy route for Apps Script patients; fix pacientes API to use server-side search
- POST /api/sync/import-legacy: reads PACIENTES-CONSULTT-CLINIC tab (1755 patients),
  maps Nome+SobreNome→nome, CPF, Credenciada→convenio, DataNasci, TefefonePrincipal→telefone
- GET /api/pacientes: now supports ?q= server-side search, returns {data, total} — avoids loading all 1755 rows in client
- PatientsView: uses {data, total} response, shows count of all patients in header
- SyncView: adds "Importar Planilha Legada" button (amber)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 07:03:51 +02:00
VPS 4 Builder 1d2d164a73 fix(docker): expand frontend build context to root so update-version.js is accessible
WORKDIR changed to /app/frontend so ../update-version.js resolves correctly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 06:52:58 +02:00
VPS 4 Builder 1b56d729bf Merge claude/youthful-mendel-0c569f: add update-version.js build bump
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 06:52:07 +02:00