Files
agenciapsilmno/development/01-visao-geral/ESTRUTURA.md
T
Leonardo 7c20b518d4 Sessoes 1-6 acumuladas: hardening B2, defesa em camadas, +192 testes
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>
2026-04-19 15:42:46 -03:00

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
  • 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)