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>
224 lines
12 KiB
Markdown
224 lines
12 KiB
Markdown
# 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)
|