5049ce9b8b
- Pasta única scoreodonto.com/doc/ com 9 docs que prestam: VERDADE-HOJE (estado, principal), DEPLOY-PRODUCAO (runbook), BANCO-DEV-ESTRATEGIA, REGISTRY, AUDITORIA-FUNCIONAL, BACKLOG-FINANCEIRO-V1, CRM_Ortodontia, RX_ARQUITETURA, RX_BACKLOG. - Removidos os docs de infra sobrepostos/desatualizados (estado consolidado em VERDADE-HOJE; histórico fica no git): arquitetura.md, deploy.md, CHECKLIST-DEPLOY-PRODUCAO.md, PENDENCIAS.md, PENDENCIAS_E_DEPLOY.md. - Pasta documentação/ eliminada. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
166 lines
11 KiB
Markdown
166 lines
11 KiB
Markdown
# Auditoria Funcional — ScoreOdonto (estado atual + roadmap V1/V2/V3)
|
||
|
||
> Documento mestre da auto-auditoria (read-only). Gerado a partir do código em 2026-06-15.
|
||
> **Nota de nomenclatura:** NÃO existe módulo "Delivery" separado. O antigo "Delivery" foi
|
||
> renomeado e é o marketplace de **Profissionais** (propostas clínica→profissional).
|
||
> Onde o prompt de benchmark cita "Delivery", leia-se **Profissionais**.
|
||
|
||
---
|
||
|
||
## PARTE I — Arquitetura funcional atual
|
||
|
||
**Papéis (9):** `superadmin, admin, donoclinica, donoconsultorio, dentista, biomedico, protetico, funcionario, paciente`.
|
||
|
||
**Modelo multi-tenant:** workspaces = linhas em `clinicas` (tipo `clinica` ou `pessoal`); acesso via `vinculos`; isolamento por `clinica_id` (auditado e endurecido em 8 rodadas de segurança). É um diferencial maduro.
|
||
|
||
### Inventário de telas (40+), por domínio
|
||
|
||
| Domínio | Telas | Acesso |
|
||
|---|---|---|
|
||
| Núcleo clínico | Dashboard, Agenda, Pacientes, Ortodontia (OrthoView/PhotoWorkspace/Reports/Annotator), Meus Tratamentos, Lançar GTO | dono/admin/funcionário/dentista/bio/protético |
|
||
| Catálogos | Dentistas, Especialidades, Procedimentos, Planos/Convênios | dono/admin/funcionário |
|
||
| Financeiro/Comercial | Financeiro, Relatórios, Orçamentos, **Contratos (motor)**, Gestão de Leads | dono/admin/funcionário |
|
||
| Marketplace/Recursos | Locação de Salas, **Profissionais (marketplace)**, Diretório Prof., RX/Radiografias, Dispositivos RX | quase todos |
|
||
| Tutoria (orto) | Ser Tutor, Painel Tutor, Gestão Tutores | dentista/admin |
|
||
| Gestão | Minhas Clínicas, Equipe/Usuários (RBAC), Plugins, Configurações, Notificações | dono/admin |
|
||
| Onboarding/Auth | Landing, Login, OnboardingChat, Cadastro Dentista, Criar Clínica, Aguardando Convite, Contato Público | público |
|
||
| Superadmin | SuperAdminView (stats/usuários/clínicas/logs/financeiro/notificações), UpdateDb, Sync | superadmin |
|
||
|
||
### Menu (real)
|
||
Visão Geral · Agenda · Pacientes · Lançar GTO · Ortodontia · Financeiro · Relatórios · Orçamentos · Contratos · Gestão de Leads · Meus Tratamentos · Minhas Clínicas · Dentistas · Especialidades · Procedimentos · Planos/Convênios · Equipe/Usuários · Diretório Prof. · Tutoria (3) · Notificações · Plugins · Configurações.
|
||
|
||
Menu base + filtro `accessByRole` + RBAC por cargo (`funcoes.permissoes/nivel`; array vazio herda o menu do papel). Paciente vê só Tratamentos/Notificações/Config.
|
||
Não há: menus contextuais (botão direito), menus dentro de tabelas, breadcrumbs. Navegação é hash-route + cards/modais.
|
||
|
||
### Backend
|
||
≈150 endpoints. Guards: `authGuard / tenantGuard / superadminGuard / adminGuard`. Auditoria via `audit_log`. Tempo real em `/api/ws`.
|
||
|
||
---
|
||
|
||
## PARTE II — Gap analysis
|
||
|
||
### Forte (vantagem competitiva)
|
||
- Multitenant/multiempresa (workspaces universais; isolamento por clínica auditado).
|
||
- Agenda — anti-overbooking GLOBAL (mesma pessoa não dobra entre clínicas), faltas/reagendar/confirmar/reencaminhar, pendências "a reagendar", presença em tempo real, importar Google.
|
||
- Prontuário clínico — odontograma FDI + fotos (avaliação); Ortodontia completa (tratamento/evoluções/documentação fotográfica com anotador/escala + PDFs de tutoria); RX (plugin + laudos); GTO/guias.
|
||
- Contratos — motor universal (modelos+variáveis, gerador, assinatura interna com IP/hash, vigência/alertas, 28 modelos de catálogo). Acima da média de mercado.
|
||
- Marketplace (salas anti-conflito triplo + **Profissionais** com propostas/diretório).
|
||
- RBAC por cargo/nível + realtime.
|
||
|
||
### Parcial
|
||
- Financeiro — só lançamentos receita/despesa + dashboard. Falta contas a pagar/receber estruturado, vencimentos, baixa.
|
||
- CRM — só Leads + conversão→paciente. Sem funil/oportunidades/campanhas.
|
||
- Convênios — "Planos/Convênios" é catálogo simples; sem regras de cobertura/repasse/glosa.
|
||
- Comunicação — notificações in-app/realtime + webhooks WhatsApp na infra; sem disparo de WhatsApp/SMS/e-mail pelo app; sem lembretes automáticos de consulta.
|
||
- Relatórios — só `productivity`.
|
||
- RH — dentistas/horários/equipe/funções; sem escalas/ponto/folha; repasse só na tutoria (manual).
|
||
- Mobile — web responsivo; sem PWA/app.
|
||
|
||
### Ausente
|
||
- Estoque (produtos, lotes, validade, inventário, compras, fornecedores).
|
||
- Financeiro avançado: fluxo de caixa, DRE, centros de custo, conciliação bancária, comissões/rateios/repasse estruturados, gateways PIX/cartão/boleto, carnês/parcelamento.
|
||
- Prontuário: anamnese estruturada, periodontograma, assinatura do paciente no prontuário, consentimento (TCLE).
|
||
- Agenda: lista de espera, recorrência, bloqueios, recursos/equipamentos como agendáveis.
|
||
- CRM: funil, campanhas, automações (WhatsApp), pipeline de orçamento.
|
||
- **Profissionais:** atendimento geolocalizado/geodistância (gap já mapeado), avaliações/reputação. (Não confundir com "Delivery" — é a evolução do módulo Profissionais.)
|
||
|
||
### Obsoleto / dívida técnica
|
||
- `UpdateDbView`/`Sync` (legado de planilha) — manter só superadmin.
|
||
- `/fotos/:id/raw` públicas por id (mitigado com URL assinada; ideal evoluir).
|
||
- Orçamento gera um "Contrato" (documento) — convém unificar o fluxo orçamento→contrato no motor.
|
||
|
||
---
|
||
|
||
## PARTE III — Roadmap (V1 / V2 / V3)
|
||
|
||
Matriz: Impacto (I) · Retorno financeiro (R) · Esforço (E) — escala 1–5.
|
||
|
||
### V1 — Quick wins (alto I, baixo E)
|
||
| Item | I | R | E |
|
||
|---|---|---|---|
|
||
| Anamnese + TCLE estruturados no prontuário | 5 | 3 | 2 |
|
||
| Lembretes automáticos de consulta (WhatsApp/e-mail via webhook existente) | 5 | 4 | 2 |
|
||
| Agenda: bloqueios + lista de espera (reaproveitar "interesses"/anti-overbooking) | 4 | 3 | 2 |
|
||
| Contas a pagar/receber sobre o `financeiro` atual (status/vencimento/baixa) | 5 | 4 | 3 |
|
||
| Orçamento → Contrato → Financeiro (ligar os 3 que já existem) | 5 | 5 | 3 |
|
||
| Pacote de relatórios essenciais (produção, faltas, financeiro por período, conversão de leads) | 4 | 3 | 2 |
|
||
|
||
### V2 — Diferenciação e receita (alto R)
|
||
| Item | I | R | E |
|
||
|---|---|---|---|
|
||
| Comissões/Repasse profissional (agenda→procedimento→financeiro→profissional) | 5 | 5 | 4 |
|
||
| Gateways de pagamento (PIX/cartão/boleto) + carnês/parcelamento | 4 | 5 | 4 |
|
||
| CRM com funil + WhatsApp + automações (sobre Leads) | 5 | 5 | 4 |
|
||
| Fluxo de caixa + centros de custo | 4 | 4 | 3 |
|
||
| Periodontograma + evolução clínica padronizada | 4 | 2 | 3 |
|
||
| Contratos: partes externas por link + PDF server-side + Clicksign | 4 | 3 | 4 |
|
||
|
||
### V3 — Plataforma
|
||
| Item | I | R | E |
|
||
|---|---|---|---|
|
||
| Estoque completo (lotes/validade/inventário/compras/fornecedores) + integração financeira | 4 | 3 | 5 |
|
||
| DRE + conciliação bancária | 3 | 4 | 5 |
|
||
| RH: escalas/ponto/produção/folha | 3 | 3 | 5 |
|
||
| App/PWA mobile | 4 | 3 | 4 |
|
||
| Profissionais: atendimento/geodistância + avaliações/reputação | 3 | 3 | 4 |
|
||
| BI/Dashboards configuráveis + alertas automatizados | 3 | 3 | 4 |
|
||
|
||
---
|
||
|
||
## Mapa de conexões entre telas
|
||
|
||
### Já existe
|
||
- Agenda → Novo Agendamento → busca Paciente → cria agendamento.
|
||
- Lead → Converter → Paciente (+ 1º agendamento).
|
||
- Agendamento → Solicitar Avaliação → novo slot vinculado.
|
||
- Paciente → tile Orçamentos → gera contrato/print.
|
||
- Sala → Reserva → anti-conflito.
|
||
- Profissional (marketplace) → Proposta → notificação.
|
||
|
||
### Falta ligar (o "tecido conjuntivo" — maior ganho de V1/V2)
|
||
- Procedimento realizado (agenda) → lançamento Financeiro → Comissão → Repasse profissional.
|
||
- Orçamento aprovado → Contrato (motor) → Financeiro (parcelas).
|
||
- Contrato assinado → vigência → cobrança recorrente.
|
||
- Estoque ← consumo por procedimento.
|
||
|
||
> Diagnóstico central: módulos fortes, pouco conectados. O maior retorno não é criar
|
||
> módulos novos, e sim LIGAR agenda↔financeiro↔contrato↔profissional.
|
||
|
||
---
|
||
|
||
## Síntese por cenário
|
||
- Clínica/Consultório: prontos; faltam financeiro avançado + comissões.
|
||
- Dentista autônomo: workspace "pessoal" já funciona; falta repasse/produção.
|
||
- Biomédico: áreas/especialidades ok; harmonização (contrato já criado); falta agenda estética dedicada.
|
||
- Locação de salas: maduro; falta integrar reserva→financeiro/contrato de locação (o motor já tem o modelo).
|
||
- **Profissionais (marketplace, ex-"Delivery"):** maduro; falta avaliações/reputação, fechamento via contrato e geodistância.
|
||
- Multiempresa/Multitenant: o ponto mais forte — base sólida para escalar.
|
||
|
||
---
|
||
|
||
# DEEP-DIVE 1 — Financeiro + Comissões/Repasse (2026-06-15)
|
||
|
||
## A) Checklist da tela Financeiro
|
||
- **Objetivo:** registrar/acompanhar lançamentos (receita/despesa) por status.
|
||
- **Acesso:** Menu → Financeiro; dono/admin/funcionário (escopo por clínica, `tenantGuard`).
|
||
- **Dados:** lista (paciente, descrição, valor, vencimento, status) + KPIs Recebido/Pendente/Atrasado.
|
||
- **Tabela `financeiro`:** `id, clinica_id, pacientenome(texto), descricao, valor, datavencimento, status(Pago/Pendente/Atrasado), formapagamento, tipo(RECEITA/DESPESA)`. 0 linhas.
|
||
- **Botões:** Filtrar(status) · Novo lançamento · linha: Confirmar pagamento, Gerar recibo (download), Excluir.
|
||
- **Integrações:** PARCIAL — `LancarProcedimentoModal → saveFinanceiro` (procedimento gera 1 lançamento). Nenhuma outra.
|
||
- **Limitações:** soma por status; "Atrasado" manual.
|
||
|
||
## B) Diagnóstico — Financeiro é uma "ilha"
|
||
A `financeiro` não tem chaves de ligação: `pacientenome` é texto (não FK); não há `profissional_id`, `agendamento_id`, `procedimento_id`, `orcamento_id`, `contrato_id`. Despesa = só `tipo=DESPESA` (sem fornecedor/centro de custo/recorrência). **Comissão/Repasse inexistente** (`procedimentos.valorparticular` sem %; `dentistas` sem repasse). A maior alavanca é a FK **`profissional_id`** — sem ela, não há comissão, repasse nem relatório de produção.
|
||
|
||
## C) Fluxo conectado proposto
|
||
Agenda (paciente+dentista+procedimento) → concluído → LANÇAMENTO (com FKs) → regra de COMISSÃO → REPASSE por período. Orçamento aprovado → Contrato (motor) → parcelas (contas a receber). Despesa → fornecedor/centro de custo → fluxo de caixa/DRE.
|
||
|
||
## D) Evolução do modelo
|
||
- **V1:** FKs em `financeiro` (`paciente_id, profissional_id, procedimento_id, agendamento_id, contrato_id, origem`); `pago_em`; job de "Atrasado"; contas a pagar (fornecedor/centro de custo/recorrente); relatórios essenciais.
|
||
- **V2:** `comissao_regras` (por procedimento/profissional/convênio; %/fixo/produção; base bruta/líquida); `comissao_valor` no lançamento; `repasses` (consolida por profissional/período) formalizado pelos modelos "Contrato por Comissão/Produção/Percentual" do motor.
|
||
|
||
## E) Regras de comissão por cenário
|
||
Dentista da clínica (% líquido por especialidade/convênio); autônomo (100%, ou taxa de sala); sala alugada (receita − aluguel, liga `sala_reservas`); biomédico/harmonização (% + material parametrizável); Profissionais/marketplace (contrato de comissão define %); multiempresa (repasse consolidado por unidade).
|
||
|
||
> Backlog acionável do V1 Financeiro: ver `BACKLOG-FINANCEIRO-V1.md`.
|