15 Commits

Author SHA1 Message Date
VPS 4 Builder 3e64514b08 feat(financeiro+salas): motor financeiro V1/V2, glosas, GTO→financeiro, contratos de convênio e redesenho de Salas
Financeiro V1 (Épicos 1–4):
- FKs de origem no lançamento (paciente/profissional/procedimento/agendamento/contrato/realizado), soft delete e cron "Atrasado"
- prontuário de procedimentos realizados (fotos antes/depois) + regra sem-comissão (garantia/reabertura do mesmo profissional)
- normalizeFinanceiro: corrige CHECK capitalizado vs enforceUppercase (lançamentos não salvavam pela UI)
- baixa de pagamento (pago_em), despesas (fornecedor/centro de custo/recorrente), competência por data de conclusão
- relatório financeiro (período, paciente, profissional, forma, convênio, glosa)
- orçamento Assinado -> contas a receber; contrato vigente -> cobrança recorrente; renovação automática de contrato

Financeiro V2 (Comissão/Repasse):
- regras de % (padrão/procedimento/override por profissional) + custo de laboratório
- base selecionável (recebido/produção), fechamento persistido, pagar (gera despesa) + comprovante + estorno

Glosas de convênio: por item de GTO, recurso/protocolo/prazo, recuperar/estornar, impacto no relatório

GTO -> Financeiro: finalizar gera RECEITA (convênio a receber); LancarGTO passa a persistir; convênios reais (planos)

Contratos: modelo "Atendimento a Convênios / Repasse (Dentista Credenciado)" + variáveis de convênio

Salas (redesenho): perfil "Dono de Sala"; locação sempre ativa; menus MINHAS/ALUGAR SALAS;
sala como workspace isolado (seletor agrupado Clínicas x Salas, tenantGuard por dono); financeiro de
locação (reserva confirmada -> recebível); Painel da Sala (KPIs, agenda visual, recebíveis, relatório por sala)

Docs: BACKLOG-FINANCEIRO-V1, AUDITORIA-FUNCIONAL-SCOREODONTO, CHECKLIST-DEPLOY-PRODUCAO

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 00:28:07 +02:00
VPS 4 Builder cb00d9f383 feat: ViaCEP em todos os forms de endereço + menus por papel + fix preview de plugins
ViaCEP (auto-preenche endereço ao completar 8 dígitos):
- novo util services/viacep.ts (buscarCep), reutilizado
- ligado em Pacientes, Salas, Profissionais(perfil); Configurações migrada p/ o util
- filtro 'CEP (região)' do marketplace mantido como busca (sem auto-fill)

Menus por papel:
- biomédico: sem Ortodontia, RX e 'Ser Tutor Orto' (não são escopo)
- protético: passa a ver Dashboard/Agenda/Tratamentos/Lançar GTO (antes não via nada)
- RX/Radiografias: só papéis odonto (dentista + donos/funcionário)
- bottom nav mobile ajustado (biomédico/protético)

Fix 'Visualizar como':
- getActivePlugins é preview-aware (todos os plugins ativos enquanto houver PREVIEW_ROLE),
  imune ao timing de hydrate/cache; enterPreview/exitPreview simplificados

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 20:14:31 +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 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 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 173c1c777e fix(ui): modais responsivos — 96×98 em desktop, tela cheia em mobile 2026-05-14 17:22:41 +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 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 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 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 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 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 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 c70b2cde66 fix(ui): replace all MySQL references with PostgreSQL
Update SyncView description, security note, mock progress logs,
dbConfig, loading text in PatientsView, UpdateDbView warning, and
metadata.json description. Rename syncGoogleSheetsToMysql →
syncGoogleSheetsToPg.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 05:02:49 +02:00
Antigravity AI Agent 606da6de97 feat: migrate ScoreOdonto CRM to Docker, PostgreSQL, and DragonflyDB 2026-05-13 07:13:41 +02:00