Files
scoreodonto.com/documentação/MAPA-FUNCIONAL-COMPLETO.md
T
VPS 4 Builder 5b99292b2d docs: auditoria funcional + auditoria estratégica de modelagem
- documentação/MAPA-FUNCIONAL-COMPLETO.md: inventário de rotas/telas/botões/fluxos,
  matriz de módulos, mapa de conexões (mermaid) e notas — baseado em evidências do código.
- documentação/AUDITORIA-ESTRATEGICA-MODELAGEM.md: análise Pessoa→Vínculo→Workspace,
  entidades mal classificadas e riscos arquiteturais.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 18:23:54 +02:00

30 KiB
Raw Blame History

MAPA FUNCIONAL COMPLETO — ScoreOdonto

Auditoria funcional baseada SOMENTE em evidências do código. Nada aqui foi assumido. Fonte: frontend/ (React 19 + Vite, roteador próprio em App.tsx) e backend/server.js (Express monolítico, ~516 KB, 277 rotas, ~70 tabelas Postgres acessadas por SQL direto). Estado verificado: produção v1.0.18 · DEV dev (banco isolado pgdev). Data: 19/jun/2026.


Sumário executivo (o que o sistema É, na prática)

O ScoreOdonto é um ERP odontológico multiempresa (SaaS) cujo núcleo é o ciclo Lead → Paciente → Agenda → Procedimento → Financeiro → Comissão → Repasse, com módulos clínicos (Ortodontia, Próteses/GTO, RX), administrativos (Equipe/RBAC, Planos, Procedimentos) e três frentes de marketplace (Locação de Salas, Diretório/Propostas de Profissionais, Tutoria de Ortodontia — esta última a única com cobrança automatizada via MercadoPago).

A arquitetura é multi-tenant real: quase toda rota passa por tenantGuard e filtra por clinica_id. O "workspace" ativo (clínica ou sala) governa menu, permissões e dados visíveis.

Evidências estruturais:

  • Frontend sem react-router: roteamento próprio (ROUTE_MAP / VIEW_TO_ROUTE em App.tsx).
  • 44 views (frontend/views/*.tsx), 16 componentes, 3 plugins.
  • Backend num único server.js (516 KB) — sem camada de serviços/controllers separada.
  • Prisma quase não usado (4 modelos legados de GTO); o banco real é SQL puro via pg.

ETAPA 1 — INVENTÁRIO DE ROTAS

Roteamento definido em frontend/App.tsx (ROUTE_MAP, VIEW_TO_ROUTE, renderView, isViewAllowed). Papéis (roles): superadmin, admin, donoclinica, donoconsultorio, funcionario, dentista, biomedico, protetico, paciente, donosala. Tipos de workspace: clínica (padrão) e sala (isola o contexto). Plugins: rx-scoreodonto, locacao-salas (sempre ON), profissionais-marketplace.

URL View Componente / Arquivo Acesso (papéis) Origem Destino
/ landing LandingPage.tsx Público login / área
/login login LoginView.tsx Público landing dashboard por papel
/contato public PublicContactForm.tsx Público landing cria interesse/lead
/dashboard dashboard Dashboard.tsx admin/donos/func/dentista/bio/prot login, menu agenda, pacientes
/leads leads LeadsView.tsx admin/donos/funcionário menu converter→paciente+agenda
/pacientes pacientes PatientsView.tsx admin/donos/funcionário menu, dashboard agenda, orçamento, procedimento, ortodontia, RX
/agenda agenda AgendaView.tsx quase todos os papéis clínicos menu, dashboard paciente, avaliação, procedimento
/ortodontia ortodontia OrthoView.tsx dentista (odonto) menu, paciente evolução, fotos, tutoria
/financeiro financeiro FinanceiroView.tsx admin/donos/funcionário menu comissão, glosa
/comissoes comissoes ComissoesView.tsx admin/donos menu apenas ⚠️ repasse
/glosas glosas GlosasView.tsx admin/donos/funcionário menu apenas ⚠️ recebíveis convênio
/proteses proteses ProteseView.tsx dentista/protético/func menu OS de laboratório, GTO
/orcamentos orcamentos OrcamentosView.tsx admin/donos/funcionário menu, paciente contrato
/contratos contratos ContratosView.tsx admin/donos/funcionário menu, orçamento cobrança/financeiro
/relatorios relatorios ReportsView.tsx admin/donos/funcionário menu
/tratamentos tratamentos MeusTratamentos.tsx paciente + clínicos menu
/lancar-gto lancar-gto LancarGTO.tsx biomédico/protético/func menu guias odontológicas
/notificacoes notificacoes NotificationsView.tsx todos menu
/clinicas clinicas ClinicasView.tsx membros menu, seletor de workspace criar-clinica
/gestao-equipe gestao-equipe GestaoEquipeView.tsx admin/donos menu membros, cargos (RBAC)
/admin/dentistas dentistas AdminViews.tsx admin/donos menu horários
/admin/especialidades especialidades AdminViews.tsx admin/donos/biomédico menu procedimentos
/admin/procedimentos procedimentos AdminViews.tsx admin/donos/biomédico menu valores por plano
/admin/planos planos AdminViews.tsx admin/donos menu
/admin/sync sync AdminViews.tsx (SyncView) NINGUÉM (bloqueado) ⚠️
/plugins plugins PluginsView.tsx superadmin apenas menu (superadmin) ativa plugins
/rx-radiografias rx-radiografias plugins/RXPlugin.tsx dentista/donos/func (plugin RX) menu dispositivos RX
/rx-config rx-config RxConfigView.tsx admin/donos/superadmin menu dispositivos RX
/salas /minhas-salas /alugar-salas salas plugins/SalasPlugin.tsx todos (plugin locacao-salas, sempre ON) menu reservas
/sala-home sala-home SalaHomeView.tsx workspace tipo sala seletor de workspace reservas da sala
/marketplace-profissionais marketplace-profissionais plugins/ProfissionaisPlugin.tsx clínicos exceto paciente (plugin) menu propostas
/diretorio-profissionais diretorio-profissionais DiretorioProfissionaisView.tsx (absorvido pelo plugin) clínicos menu
/candidatura-tutor candidatura-tutor TutorCandidaturaView.tsx dentista menu pagamento MercadoPago
/tutoria-painel tutoria-painel TutorPainelView.tsx tutores aprovados (is_tutor) menu solicitações
/admin-gestao-tutores admin-gestao-tutores AdminGestaoTutoresView.tsx superadmin menu confirma pagamentos/repasses
/criar-clinica criar-clinica CreateClinicView.tsx admin/donos sem workspace pós-cadastro dashboard
/cadastro-dentista cadastro-dentista DentistRegisterView.tsx standalone (magic-link) menu apenas ⚠️ aguardando-convite
/aguardando-convite aguardando-convite WaitingInviteView.tsx dentista/bio/prot sem vínculo pós-cadastro
/superadmin/* superadmin-* SuperAdminView.tsx (tabs) superadmin menu usuários, clínicas, logs, financeiro, notificações
/update update UpdateDbView.tsx técnica (URL direta, sempre liberada) fora do menu migração de banco

⚠️ Inconsistências de roteamento encontradas (evidência: ROUTE_MAP vs VIEW_TO_ROUTE em App.tsx):

  • /comissoes, /glosas e /cadastro-dentista existem em VIEW_TO_ROUTE (a navegação por menu empurra a URL), mas NÃO existem em ROUTE_MAP. Consequência: abrir essas URLs direto (deep-link / refresh) cai em dashboard. Deep-link quebrado para 3 telas reais.
  • /admin/sync está mapeada, mas isViewAllowed retorna false sempre (substituída por "backup por clínica"). A tela e a rota existem, porém são inacessíveis (código morto navegável).

ETAPA 2 — INVENTÁRIO DE TELAS

(Resumo por tela — objetivo / usuário-alvo / valor / dependências / impacto. Apenas telas reais.)

Dashboard

  • Objetivo: visão consolidada (KPIs via GET /api/dashboard/stats). Usuário: gestores/clínicos.
  • Valor: ponto de entrada operacional. Depende de: agenda, pacientes, financeiro. Impacta: navegação.

Leads / Gestão de Leads

  • Objetivo: captar e converter interessados em pacientes. Usuário: funcionário/donos.
  • Valor: topo do funil comercial. Depende de: interesses/contato público. Impacta: Pacientes + Agenda (a conversão cria ambos — POST /api/leads/:id/converter).

Pacientes

  • Objetivo: prontuário e cadastro (dados, família, score, faltas). Usuário: funcionário/donos.
  • Valor: entidade central do negócio. Depende de: clínica ativa. Impacta: Agenda, Orçamento, Procedimento realizado, Ortodontia, RX, Receita/Exame. É o hub clínico (view de 92 KB).

Agenda

  • Objetivo: agendar/confirmar/remarcar; controle de presença e anti-overbooking. Usuário: todos clínicos.
  • Valor: coração operacional. Depende de: Pacientes, Dentistas+horários. Impacta: Avaliação, Procedimento, Financeiro (presença libera lançamento).

Ortodontia

  • Objetivo: tratamento orto completo (triagem, diagnóstico, plano, evoluções, fotos, contenção). Usuário: dentista.
  • Valor: vertical clínica de alto valor recorrente. Depende de: Paciente. Impacta: Tutoria, fotos.

Próteses / GTO

  • Objetivo: OS de laboratório (protese_os), produtos, custo lab, entrega. Usuário: protético/dentista.
  • Valor: controle do laboratório e do custo que abate comissão. Depende de: Procedimentos, Laboratórios. Impacta: Comissão (custo lab entra no cálculo).

Financeiro

  • Objetivo: contas a receber/pagar (financeiro: RECEITA/DESPESA), formas, centro de custo, fornecedor. Usuário: gestores.
  • Valor: caixa da clínica. Depende de: Procedimentos realizados, Contratos, Repasses. Impacta: Comissão, Glosa.

Comissões

  • Objetivo: definir % (padrão da clínica, por procedimento, override por profissional) e ver produção/comissão.
  • Usuário: donos. Depende de: Procedimentos realizados + Próteses (custo lab). Impacta: Repasses.

Glosas

  • Objetivo: registrar glosa sobre recebíveis (convênio), recorrer, recuperar. Usuário: gestores.
  • Valor: recupera receita negada por convênio. Depende de: Financeiro (recebíveis). Impacta: caixa.

Orçamentos → Contratos

  • Objetivo: propor tratamento (itens/valores) e formalizar em contrato (modelos com variáveis, assinatura, cobrança).
  • Usuário: funcionário/donos. Depende de: Paciente, Procedimentos. Impacta: Financeiro (gerar-cobranca).

Equipe / Usuários (RBAC)

  • Objetivo: membros, cargos (funcoes), setores e permissões por workspace. Usuário: donos.
  • Valor: governa quem vê o quê. Impacta: menu e isViewAllowed de todos os membros.

Salas (Locação) / Painel da Sala

  • Objetivo: cadastrar salas, publicar no marketplace, receber/aceitar reservas. Usuário: qualquer conta.
  • Valor: receita de locação P2P. Depende de: conta/sala. Impacta: sala_reservas.

Marketplace de Profissionais / Diretório

  • Objetivo: profissional publica perfil; clínica envia proposta (propostas_profissional). Usuário: clínicas e profissionais.
  • Valor: conexão oferta/demanda de mão de obra. Impacta: mensagens/propostas (sem cobrança hoje).

Tutoria de Ortodontia (Candidatura / Painel / Gestão)

  • Objetivo: dentista vira tutor (pagando inscrição via MercadoPago); resolve solicitações orto.
  • Usuário: dentistas + superadmin (gestão). Valor: única receita de plataforma automatizada.

SuperAdmin (overview/users/clínicas/logs/financeiro/notificações)

  • Objetivo: administração global da plataforma (preços/assinaturas, broadcast, auditoria de acesso).
  • Usuário: superadmin. Valor: operação do SaaS.

Configurações / Notificações / Minhas Clínicas

  • Conta, integrações (Google), backup por clínica; notificações; seletor/gestão de workspaces.

ETAPA 3 — INVENTÁRIO DE BOTÕES (telas transacionais)

Rótulos extraídos das views; ações mapeadas para as rotas/tabelas do backend.

Agenda (AgendaView.tsx)

  • Novo AgendamentoPOST /api/agendamentos → tabela agendamentos. Fluxo: Paciente ↓ Procedimento ↓ Financeiro.
  • Confirmar / Confirmar PresençaPOST /api/agendamentos/:id/confirmar + /api/agenda/presencaagendamentos, agenda_presenca. Libera lançamento financeiro.
  • Reagendar / RemarcarPOST /api/agendamentos/:id/remarcaragendamentos.
  • Registrar FaltaPOST /api/agendamentos/:id/faltaagendamentos (impacta score do paciente).
  • Solicitar AvaliaçãoPOST /api/agendamentos/:id/solicitar-avaliacaoavaliacoes.

Pacientes (PatientsView.tsx)

  • Editar/Cadastrar PacientePOST|PUT /api/pacientespacientes.
  • Agendar → abre fluxo da Agenda. Lançar Procedimento (LancarProcedimentoModal) → POST /api/procedimentos-realizadosprocedimentos_realizados (+ gera financeiro).
  • Orçamento (OrcamentoModal) → orcamentos. Receita (ReceitaModal) → modelos_receita/items_receita. Pedido de Exame (PedidoExameModal) → pedidos_exame.

Financeiro (FinanceiroView.tsx)

  • Novo lançamento (RECEITA/DESPESA, forma, vencimento, centro de custo, fornecedor) → POST /api/financeirofinanceiro.
  • Marcar Pago / Alterar / ExcluirPUT|DELETE /api/financeiro/:idfinanceiro.

Comissões (ComissoesView.tsx)

  • Salvar % padrão / por procedimento / override por profissionalPUT /api/comissoes/regrascomissao_regras.
  • Base de cálculo (produção × recebido) e Custo lab abatido. Próximo fluxo: Fechar repasse.

Repasses (em Financeiro/Comissões)

  • Fechar RepassePOST /api/repasses/fecharrepasses (status fechado).
  • PagarPOST /api/repasses/:id/pagar → cria DESPESA em financeiro (origem repasse, centro de custo COMISSÕES).
  • Anexar ComprovantePOST /api/repasses/:id/comprovante. Cancelar → estorna a despesa.

Glosas (GlosasView.tsx)

  • Registrar Glosa (total/livre, motivo, valor) → POST /api/glosasglosas.
  • RecorrerPOST /api/glosas/:id/recorrer. RecuperarPOST /api/glosas/:id/recuperar.

Orçamentos / Contratos

  • Novo Orçamento (itens, valor, entrada, parcelas) → POST /api/orcamentosorcamentos/orcamento_itens.
  • Gerar Contrato (modelo + variáveis + prévia) → POST /api/contratos/instanciascontratos.
  • Enviar / Assinar / Gerar Cobrança / CancelarPOST /api/contratos/instancias/:id/{enviar,assinar,gerar-cobranca,cancelar} → liga ao financeiro.

Próteses (ProteseView.tsx)

  • Nova OS (produto, dentes, material, custo lab, preço, prazo) → POST /api/protese/osprotese_os.
  • Marcar Entregue / Mudar StatusPOST /api/protese/os/:id/statusprotese_os_evento.

Leads (LeadsView.tsx)

  • Cadastrar LeadPOST /api/leadsleads.
  • Cadastrar o Paciente / Converter (com data, hora, dentista) → POST /api/leads/:id/converter → cria pacientes + agendamentos (anti-overbooking).

ETAPA 4 — FLUXOS DE NEGÓCIO

Fluxo principal (núcleo do produto) — COMPLETO

Lead/Interesse ──converter──▶ Paciente ──▶ Agenda ──confirmar/presença──▶ Atendimento
   (leads)                   (pacientes)  (agendamentos)                      │
                                                                              ▼
                                                            Procedimento Realizado
                                                            (procedimentos_realizados)
                                                                              │ valor>0
                                                                              ▼
                                                   Financeiro RECEITA (origem='procedimento')
                                                            (financeiro, flag sem_comissao)
                                                                              │
                                          computeComissoes = (base  custo_lab) × %
                                                                              ▼
                                              Repasse FECHADO (repasses) ──pagar──▶
                                              Financeiro DESPESA (origem='repasse',
                                                       centro_custo='COMISSÕES')
  • Onde começa: Lead/Interesse (ou cadastro direto de Paciente).
  • Onde termina: pagamento do repasse ao profissional (DESPESA conciliada no caixa) — ciclo fechado.
  • Onde quebra / desvio:
    • Geração de RECEITA é opcional (gerarLancamento !== false e valor>0): um procedimento sem valor não entra no financeiro — possível receita não registrada (depende do operador).
    • Glosa é um ramo paralelo sobre recebíveis de convênio (recupera receita), não integrado ao repasse.
    • Garantia/Reabertura marcam sem_comissao (regra: garantia sempre; reabertura só se mesmo profissional) — corretamente excluídas do repasse.
  • Duplicidade: não há dupla geração de comissão — o repasse pago entra como DESPESA com sem_comissao=true (evita recomissionar). Bom controle.

Fluxo comercial paralelo

Orçamento (orcamentos) ──▶ Contrato (contratos) ──gerar-cobranca──▶ Financeiro (a receber)

Fluxos de marketplace (ver Etapas 7 e 8)

Sala (salas) ──publica──▶ Marketplace ──reserva──▶ sala_reservas (valor, status) [pagamento MANUAL]
Profissional ──perfil──▶ Diretório ──proposta──▶ propostas_profissional (mensagem) [sem cobrança]
Dentista ──candidatura──▶ MercadoPago (pago) ──webhook──▶ Tutor ativo ──▶ Solicitações de tutoria

ETAPA 5 — MATRIZ DE MÓDULOS

Módulo Existe? Acessível? Funcional? Completo? Em uso? Classificação
Autenticação / Workspaces / RBAC Sim Sim Sim Sim Sim Maduro
Pacientes Sim Sim Sim Sim Sim Maduro
Agenda (+presença/anti-overbooking) Sim Sim Sim Sim Sim Maduro
Financeiro (receita/despesa) Sim Sim Sim Sim Sim Maduro
Comissão + Repasse Sim Sim Sim Sim Sim Operacional
Glosas Sim menu apenas (deep-link quebrado) Sim Parcial Sim Operacional
Orçamentos → Contratos Sim Sim Sim Sim Sim Operacional
Ortodontia Sim Sim Sim Sim Sim Maduro
Próteses / GTO Sim Sim Sim Parcial Sim Operacional
Leads Sim Sim Sim Sim Sim Operacional
Plano/Procedimentos/Especialidades Sim Sim Sim Sim Sim Operacional
RX / Radiografias (plugin) Sim por plugin/papel Sim Parcial depende clínica Parcial
Locação de Salas (marketplace) Sim Sim (sempre ON) Sim Parcial (sem gateway) baixo Parcial
Marketplace Profissionais Sim por plugin Sim Parcial (só mensagem) baixo MVP
Tutoria de Ortodontia (MercadoPago) Sim Sim Sim Sim baixo Operacional
SuperAdmin Sim superadmin Sim Sim Sim Operacional
Sync Google/legado (global) Sim bloqueado parcial não Abandonado
Relatórios Sim Sim Sim Parcial Sim Parcial

ETAPA 6 — MULTIEMPRESA

Evidência: quase todas as 277 rotas usam tenantGuard e filtram por req.clinicaId/clinica_id. O workspace ativo é resolvido por GET /api/me/workspaces (tabela vinculos = usuário↔clínica) + salas próprias.

Entidade Como é modelada Multiempresa respeitado?
Workspaces vinculos (clínica) + salas (tipo sala); seletor no Sidebar Sim
Clínicas clinicas + clinica_id em todas as tabelas operacionais Sim
Consultórios papel donoconsultorio (variação de dono, mesmo modelo de clínica) Sim
Dentistas / Biomédicos / Protéticos papéis distintos com menus próprios; vínculo por clínica Sim
Salas salas + workspace tipo='sala' isola o contexto (menu reduzido) Sim
Laboratórios protese_laboratorios por clínica Sim
  • Acoplamento indevido: não encontrado acoplamento a "clínica única" — o clinica_id é onipresente.
  • Ponto de atenção: o contexto é cacheado no localStorage (SCOREODONTO_USER_DATA, plugins) e reconciliado via hydrateMyPlugins(). Plugins ativos vivem em localStorage (cliente), não só no servidor — risco de divergência entre dispositivos (mitigado por me/plugins, mas é o elo mais frágil do multiempresa).
  • O marketplace de salas é cross-tenant por desenho (uma clínica aluga sala de outra) — acoplamento intencional.

Veredito: conceito multiempresa bem respeitado no backend; a fragilidade é o estado de UI/plugins no cliente.


ETAPA 7 — MARKETPLACE

Salas (salas) ─┬─ Locação (sala_reservas: valor, modelo, status pendente/aceita)
               └─ Profissionais (perfil) ─ Propostas (propostas_profissional: mensagem)
                                         └─ Protéticos/Laboratórios (protese_*)
Frente O que existe hoje O que falta Gera receita? Pode gerar
Locação de salas CRUD de salas, publicação no marketplace, reserva com valor e workflow de status (pendenteaceita), painel da sala Gateway de pagamento e taxa da plataforma (hoje o valor é registrado, mas o pagamento é manual/externo) Não diretamente Sim — comissão sobre locação
Profissionais Perfil público + envio de proposta (mensagem) clínica→profissional Negociação, contrato, e qualquer cobrança Não Sim — taxa de match/assinatura premium
Protéticos / Laboratórios OS, produtos, custo lab integrados ao financeiro/comissão Marketplace aberto de laboratórios (hoje é interno por clínica) Indireto (operacional) Sim — rede de laboratórios
Tutoria de Ortodontia Candidatura paga via MercadoPago (preferences + mp-webhook), comissao_pct, solicitações/mensagens Escala (oferta de tutores), avaliação Sim (a única automatizada) Já gera

Conclusão: a infraestrutura de marketplace existe, mas só a Tutoria tem captura de pagamento real. Salas é a frente mais próxima de monetizar (já tem valor e reservas) — falta o gateway + a taxa.


ETAPA 8 — FINANCEIRO

ORIGEM DO DINHEIRO                  →  DESTINO                       →  RESPONSÁVEL
Procedimento realizado (RECEITA)   →  financeiro (a receber)        →  Clínica
Contrato (gerar-cobranca)          →  financeiro (a receber)        →  Clínica
Convênio (recebíveis)  Glosa      →  financeiro / recupera         →  Clínica
Comissão (base  custo lab × %)    →  repasses (fechado)            →  Profissional
Repasse pago                       →  financeiro DESPESA (COMISSÕES) →  Clínica paga Profissional
Locação de sala (valor reserva)    →  sala_reservas (status)        →  Locador  [pagamento manual]
Tutoria (inscrição)                →  MercadoPago → ativa tutor     →  Plataforma (comissao_pct)
Item Tabela Estado
Orçamentos orcamentos/orcamento_itens completo
Contratos contratos/contrato_* completo (modelos, variáveis, assinatura, cobrança)
Convênios/Planos planos, procedimentos_valores_planos
Produção procedimentos_realizadosfinanceiro (RECEITA opcional por valor)
Comissão comissao_regras + computeComissoes (3 níveis de regra; abate custo lab)
Repasse repasses (fechar/pagar/cancelar/comprovante) ciclo fechado, com estorno
Glosas glosas (recorrer/recuperar) funcional, isolado do repasse
Locação sala_reservas.valor ⚠️ registra valor, sem captura de pagamento

Pontos fortes: rastreabilidade (cada DESPESA de repasse referencia o período/profissional; audit_log em tudo), e não-duplicação de comissão (sem_comissao propagado). Lacuna: receita de procedimento depende de ação manual.


ETAPA 9 — MAPA DE CONEXÕES (Mermaid)

flowchart TD
  U[Usuário] --> WS{Workspace ativo}
  WS -->|clínica| CL[Clínica / RBAC]
  WS -->|sala| SH[Painel da Sala]

  CL --> LEAD[Leads]
  LEAD -->|converter| PAC[Pacientes]
  PAC --> AG[Agenda]
  AG --> AV[Avaliação]
  AG --> PR[Procedimento Realizado]
  PAC --> ORTO[Ortodontia]
  PAC --> RX[RX / Radiografias]
  PAC --> ORC[Orçamento]
  ORC --> CON[Contrato]
  CON -->|gerar-cobranca| FIN[Financeiro]
  PR -->|RECEITA| FIN
  PR --> COM[Comissão]
  PROT[Próteses / Custo Lab] --> COM
  COM --> REP[Repasse]
  REP -->|pagar DESPESA| FIN
  FIN --> GLO[Glosas]
  FIN --> REL[Relatórios]

  SH --> RES[Reservas de Sala]
  CL --> SAL[Salas Marketplace]
  SAL --> RES
  CL --> MKP[Marketplace Profissionais]
  MKP --> PROP[Propostas]
  ORTO --> TUT[Tutoria Orto]
  TUT -->|MercadoPago| MP[(Pagamento)]

  SUPER[SuperAdmin] --> CL
  SUPER --> PLUG[Plugins]
flowchart LR
  subgraph Núcleo financeiro
    PR[procedimentos_realizados] --> FINr[financeiro RECEITA]
    FINr --> CR[comissao_regras]
    CR --> RP[repasses]
    RP --> FINd[financeiro DESPESA]
    FINr --> GL[glosas]
  end

ETAPA 10 — OPORTUNIDADES

Funcionalidades órfãs (existem no código, ninguém usa)

  • views/OrthoReports.tsx — não é roteada em App.tsx nem importada por nenhuma view. Órfã real (importa OrthoPhotoWorkspace, mas nada importa OrthoReports). Relatórios de ortodontia prontos e desligados.
  • SyncView (/admin/sync) — tela e rota existem, mas isViewAllowed retorna false sempre. Código morto navegável.

Funcionalidades escondidas (existem mas não aparecem no menu)

  • /update (UpdateDbView) — migração de banco; acessível por URL direta, fora do menu (ferramenta técnica).
  • /cadastro-dentista — só alcançável por fluxo/magic-link; sem entrada no menu e com deep-link quebrado.
  • Comissões deep-link — visível no menu (admin/donos) mas /comissoes direto cai em dashboard.

Funcionalidades incompletas (começam mas não terminam o fluxo)

  • Locação de salas — reserva com valor e status, mas sem captura de pagamento (fluxo financeiro não fecha).
  • Marketplace de profissionais — proposta é só mensagem; não evolui para contratação/cobrança.
  • RECEITA de procedimento opcional — pode não gerar lançamento (receita potencialmente não registrada).
  • Glosas isoladas — recuperam receita, mas não reconciliam com o repasse correspondente.

Funcionalidades de alto potencial (podem gerar receita)

  1. Gateway na Locação de Salas (já existe valor+reserva): cobrança + taxa da plataforma → receita recorrente.
  2. Assinatura/planos da plataforma (superadmin/pricing, assinaturas já existem): monetizar o SaaS por clínica.
  3. Marketplace de Profissionais premium: taxa de match / destaque de perfil.
  4. Tutoria de Ortodontia em escala (único pago hoje): aumentar oferta de tutores e volume.

RESULTADO FINAL

Notas (0100) — com base nas evidências

Eixo Nota Justificativa (evidência)
Arquitetura funcional 72 Roteamento+RBAC robustos, mas server.js monolítico (516 KB), roteador próprio e 3 deep-links quebrados.
Integração dos módulos 78 Cadeia Lead→…→Repasse bem costurada, com auditoria e não-duplicação de comissão.
Fluxos de negócio 70 Núcleo clínico+financeiro completo; ramos de marketplace incompletos; receita às vezes manual.
Multiempresa 82 tenantGuard+clinica_id onipresentes; isolamento de sala; fragilidade no estado de plugins no cliente.
Marketplace 45 Infra existe; só Tutoria captura pagamento; Salas e Profissionais sem fechar fluxo financeiro.
Financeiro 80 Receita/despesa, comissão (3 níveis), repasse com estorno, glosas, contratos com cobrança.
Experiência do usuário 70 Menus por papel, nav mobile, "visualizar como"; prejudicada por deep-links quebrados e estado em localStorage.
Potencial de monetização 65 Tutoria já fatura; Salas e Assinatura SaaS são alavancas prontas e subutilizadas.

1. O que remover

  • views/OrthoReports.tsx (órfã) — ou religar ao menu de Ortodontia se desejado.
  • SyncView / rota /admin/sync e telas de sync global desativadas (já substituídas por backup por clínica).
  • server.js.bak e scripts de transformação legados (transform.js, pg-convert.js) do diretório de produção.

2. O que corrigir

  • Adicionar /comissoes, /glosas, /cadastro-dentista ao ROUTE_MAP (deep-link/refresh quebrado).
  • Reconciliação de plugins ativos: tratar o servidor como fonte da verdade (reduzir dependência de localStorage).
  • Tornar a geração de RECEITA do procedimento o padrão claro (evitar receita não registrada).

3. O que finalizar

  • Locação de Salas: captura de pagamento + taxa da plataforma (fecha o fluxo financeiro do marketplace).
  • Marketplace de Profissionais: evoluir proposta → contratação → cobrança.
  • Relatórios: consolidar (há reports/productivity + telas parciais).

4. O que priorizar

  1. Corrigir deep-links e estado de plugins (baixo esforço, destrava UX e confiabilidade).
  2. Gateway de pagamento na Locação de Salas (alavanca de receita mais próxima).
  3. Cobrança por assinatura da plataforma (superadmin/pricing+assinaturas já existem).

5. O que gera receita mais rapidamente

  • Locação de Salas com pagamento — o valor e o fluxo de reserva já existem; falta só a captura + taxa.
  • Assinatura SaaS por clínica — a base multiempresa e o pricing já estão prontos no superadmin.

6. Próximo módulo mais estratégico

  • Monetização da plataforma (Billing/Assinaturas + taxa de marketplace de salas). É o que converte uma base técnica madura (ERP odontológico multiempresa funcional) em receita recorrente da plataforma — hoje só a Tutoria cobra. Tudo o mais já está construído; falta o módulo que fatura.

Nota de método: este mapa reflete exclusivamente o que foi encontrado no código em 19/jun/2026 (frontend/App.tsx, frontend/views/*, frontend/components/Sidebar.tsx, backend/server.js). Onde havia ambiguidade (ex.: receita opcional, pagamento manual de salas), o fato foi descrito como está, sem inferir intenção. Nenhuma funcionalidade foi inventada.