7c20b518d4
Repositorio estava ha ~5 sessoes sem commit. Consolida tudo desde d088a89.
Ver commit.md na raiz para descricao completa por sessao.
# Numeros
- A# auditoria abertos: 0/30
- V# verificacoes abertos: 5/52 (todos adiados com plano)
- T# testes escritos: 10/10
- Vitest: 192/192
- SQL integration: 33/33
- E2E (Playwright, novo): 5/5
- Migrations: 17 (10 novas Sessao 6)
- Areas auditadas: 7 (+documentos com 10 V#)
# Highlights Sessao 6 (hoje)
- V#34/V#41 Opcao B2: tenant_features com plano + override (RPC SECURITY DEFINER, tela /saas/tenant-features)
- A#20 rev2 self-hosted: defesa em 5 camadas (honeypot + rate limit + math captcha condicional + paranoid mode + dashboard /saas/security)
- Documentos hardening (V#43-V#49): tenant scoping em storage policies (vazamento entre clinicas eliminado), RPC validate_share_token, signatures policy granular
- SaaS Twilio Config (/saas/twilio-config): UI editavel para SID/webhook/cotacao; AUTH_TOKEN permanece em env var
- T#9 + T#10: useAgendaEvents.spec.js + Playwright E2E (descobriu bug no front que foi corrigido)
# Sessoes anteriores (1-5) consolidadas
- Sessao 1: auth/router/session, normalizeRole extraido
- Sessao 2: agenda - composables/services consolidados
- Sessao 3: pacientes - tenant_id em todas queries
- Sessao 4: security review pagina publica - 14/15 vulnerabilidades corrigidas
- Sessao 5: SaaS - P0 (A#30: 7 tabelas com RLS off corrigidas)
# .gitignore ajustado
- supabase/* + !supabase/functions/ (mantem 10 edge functions, ignora .temp/migrations gerados pelo CLI)
- database-novo/backups/ (regeneravel via db.cjs backup)
- test-results/ + playwright-report/
- .claude/settings.local.json (config local com senha de dev removida do tracking)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
12 KiB
12 KiB
AgenciaPsi — Estrutura Atual
Snapshot do que já está construído no sistema hoje (2026-04-17). Inventário extraído dos menus de cada perfil de usuário.
Legenda: [ok] pronto · [~] parcial (estrutura existe, refinar) · [--] placeholder/vazio
AgenciaPsi (v5.0.0)
│
├── SaaS Admin (operação da plataforma)
│ │
│ ├── Início
│ │ └── Dashboard [ok] /saas
│ │
│ ├── Planos
│ │ ├── Planos e Preços [ok] /saas/plans
│ │ ├── Vitrine Pública [ok] /saas/plans-public
│ │ ├── Recursos (features) [ok] /saas/features
│ │ ├── Controle de Recursos [ok] /saas/plan-features
│ │ └── Limites por Plano [ok] /saas/plan-limits
│ │
│ ├── Assinaturas
│ │ ├── Listagem [ok] /saas/subscriptions
│ │ ├── Intenções [ok] /saas/subscription-intents
│ │ ├── Histórico (eventos) [ok] /saas/subscription-events
│ │ └── Saúde das Assinaturas [ok] /saas/subscription-health
│ │
│ ├── Operações
│ │ ├── Clínicas (Tenants) [ok] /saas/tenants
│ │ ├── Feriados [ok] /saas/feriados
│ │ └── Suporte Técnico [ok] /saas/support
│ │
│ ├── Canais de Comunicação
│ │ ├── WhatsApp (Evolution API) [ok] /saas/whatsapp
│ │ ├── WhatsApp Twilio (Subcontas) [ok] /saas/twilio-whatsapp
│ │ ├── Templates WhatsApp/SMS [ok] /saas/notification-templates
│ │ └── Add-ons / Créditos SMS [ok] /saas/addons
│ │
│ └── Conteúdo
│ ├── Documentação [ok] /saas/docs
│ ├── FAQ [ok] /saas/faq
│ ├── Carrossel de Login [ok] /saas/login-carousel
│ ├── Avisos Globais [ok] /saas/global-notices
│ ├── Templates de E-mail [ok] /saas/email-templates
│ └── Templates de Documentos [ok] /saas/document-templates
│
├── Clínica Admin (gestão da clínica)
│ │
│ ├── Início
│ │ ├── Dashboard da Clínica [ok] /admin
│ │ ├── Agenda da Clínica [ok] /admin/agenda/clinica
│ │ ├── Recorrências [ok] /admin/agenda/recorrencias
│ │ └── Compromissos [ok] /admin/agenda/compromissos
│ │
│ ├── Pacientes
│ │ ├── Lista de Pacientes [ok] /admin/pacientes
│ │ ├── Grupos [ok] /admin/pacientes/grupos
│ │ ├── Tags [ok] /admin/pacientes/tags
│ │ ├── Médicos & Referências [ok] /admin/pacientes/medicos
│ │ ├── Link Externo (cadastro) [ok] /admin/pacientes/link-externo
│ │ ├── Cadastros Recebidos [ok] /admin/pacientes/cadastro/recebidos
│ │ └── Templates de Documentos [ok] /admin/documents/templates
│ │
│ ├── Gestão
│ │ ├── Profissionais [ok] /admin/clinic/professionals
│ │ ├── Tipos de Clínicas (features ativas) [ok] /admin/clinic/features
│ │ └── Meu Plano [ok] /admin/meu-plano
│ │
│ ├── Financeiro
│ │ └── Cobranças [ok] /admin/financeiro
│ │
│ └── Sistema
│ ├── Meu Perfil [ok] /account/profile
│ ├── Meu Negócio [ok] /account/negocio
│ ├── Segurança [ok] /admin/settings/security
│ ├── Agendamento Online (PRO) [ok] /admin/online-scheduling
│ └── Agendamentos Recebidos [ok] /admin/agendamentos-recebidos
│
├── Terapeuta (dia-a-dia do profissional)
│ │
│ ├── Início
│ │ └── Dashboard [ok] /therapist
│ │
│ ├── Agenda
│ │ ├── Agenda [ok] /therapist/agenda
│ │ ├── Recorrências [ok] /therapist/agenda/recorrencias
│ │ └── Compromissos [ok] /therapist/agenda/compromissos
│ │
│ ├── Pacientes
│ │ ├── Meus Pacientes [ok] /therapist/patients
│ │ ├── Grupos de Pacientes [ok] /therapist/patients/grupos
│ │ ├── Tags [ok] /therapist/patients/tags
│ │ ├── Médicos & Referências [ok] /therapist/patients/medicos
│ │ ├── Documentos [ok] /therapist/documents
│ │ ├── Templates de Documentos [ok] /therapist/documents/templates
│ │ ├── Meu Link de Cadastro [ok] /therapist/patients/link-externo
│ │ └── Cadastros Recebidos [ok] /therapist/patients/cadastro/recebidos
│ │
│ ├── Agendamento Online
│ │ ├── Configurar Página Pública [ok] /therapist/online-scheduling
│ │ └── Agendamentos Recebidos [ok] /therapist/agendamentos-recebidos
│ │
│ ├── Financeiro
│ │ ├── Cobranças [ok] /therapist/financeiro
│ │ └── Lançamentos [ok] /therapist/financeiro/lancamentos
│ │
│ ├── Relatórios
│ │ └── Relatórios [~] /therapist/relatorios (export PDF/Excel a validar)
│ │
│ └── Conta
│ ├── Meu Plano [ok] /therapist/meu-plano
│ ├── Meu Perfil [ok] /account/profile
│ ├── Meu Negócio [ok] /account/negocio
│ └── Segurança [ok] /account/security
│
├── Supervisor (supervisão de casos)
│ │
│ ├── Início
│ │ └── Dashboard [ok] /supervisor
│ │
│ ├── Supervisão
│ │ └── Sala de Supervisão [~] /supervisor/sala (features avançadas a confirmar)
│ │
│ └── Conta
│ ├── Meu Plano [ok] /supervisor/meu-plano
│ ├── Meu Perfil [ok] /account/profile
│ └── Segurança [ok] /account/security
│
├── Portal do Paciente (portal web para o paciente)
│ │
│ ├── Início
│ │ └── Dashboard [ok] /portal
│ │
│ ├── Minhas Sessões
│ │ └── Sessões [ok] /portal/sessoes
│ │
│ └── Conta
│ ├── Meu Plano [ok] /portal/meu-plano
│ ├── Minha Conta [ok] /account/profile
│ └── Segurança [ok] /account/security
│
└── Editor de Conteúdo (criação de cursos — roadmap futuro)
│
├── Início
│ └── Dashboard [ok] /editor
│
├── Conteúdo
│ ├── Cursos [--] /editor/cursos (placeholder)
│ ├── Módulos [--] /editor/modulos (placeholder)
│ └── Publicados [--] /editor/publicados (placeholder)
│
└── Conta
├── Meu Plano [ok] /editor/meu-plano
├── Meu Perfil [ok] /account/profile
└── Segurança [ok] /account/security
Stack / Infraestrutura (suporte)
Infraestrutura
│
├── Banco & Backend
│ ├── Supabase (Postgres + Auth + Storage + Realtime + Edge Functions) [ok]
│ ├── PostgreSQL 15 (container Docker local + cloud) [ok]
│ └── Docker Compose (supabase + evolution-api) [ok]
│
├── Comunicação
│ ├── Evolution API (WhatsApp) [ok]
│ ├── Twilio (SMS / Voz / WhatsApp Business) [ok]
│ ├── Mailpit (SMTP dev local) [ok]
│ └── SMTP produção (envio real de e-mails) [--] pendente
│
├── Geração de Documentos
│ ├── pdfmake + html2pdf + jsPDF [ok]
│ ├── Jodit (editor rico) [ok]
│ └── html2canvas-pro [ok]
│
├── Frontend
│ ├── Vue 3 + Composition API [ok]
│ ├── Vite 5 + Brotli/Gzip [ok]
│ ├── PrimeVue 4 (tema Sakai) [ok]
│ ├── Tailwind v4 [ok]
│ ├── Vue Router (guards por role/tenant) [ok]
│ ├── Pinia (state) [ok]
│ ├── FullCalendar 6 (agenda) [ok]
│ └── Chart.js 3 (dashboards) [ok]
│
└── Dev / Tooling
├── Supabase CLI [ok]
├── db.cjs (setup/backup/restore/migrate/verify) [ok]
├── generate-dashboard.cjs (mapa do banco) [ok]
├── Vitest 4 [~] base pronta, cobertura a expandir
└── ESLint + Prettier [ok]
Resumo numérico
- 6 perfis (roles)
- 27 grupos de navegação
- 79 features ativas no menu
- 73
[ok]prontas - 2
[~]parciais - 4
[--]placeholders
- 73
- 97 tabelas no banco (11 domínios)
- 27 views
- 165 funções SQL
Próximos passos (a definir nesta manhã)
- Mapear módulos que deveriam existir mas ainda não estão (comparando com Psicomanager / SimplePractice / iClinic)
- Organizar o roadmap em fases (MVP → v2 → v3)
- Identificar dependências entre módulos (ex: pagamento integrado antes de faturamento automático)
- Decidir cortes (o que fica pra pós-MVP)