# AgenciaPsi — Arquétipos de Usuário

Como cada tipo de usuário está estruturado no banco de dados e no sistema de permissões.

🏛️ Plataforma
🛡️
SaaS Admin
profiles.role = 'saas_admin'
Fase 1
Usuário (saas@agenciapsi.com.br)
└── profiles.role 'saas_admin'
// sem memberships de tenant
// acessa /saas/*
role: saas_admin sem tenant

Acesso total à plataforma. Gerencia planos, features, assinaturas e usuários. Nunca entra em contexto de tenant.

✍️
Editor de Conteúdo
profiles.platform_roles[] = 'editor'
Fase 1
Usuário (editor@agenciapsi.com.br)
└── profiles.platform_roles ['editor']
// sem memberships de tenant
// acessa /editor/*
platform_roles: editor sem tenant

Papel de plataforma (não de tenant). Gerencia conteúdo público, landing pages, textos. Verificado via `platform_roles[]`.

🏥 Clínica
🏥
Admin da Clínica
tenant.kind = 'clinic'
Fase 1
Usuário (admin@clinicax.com.br)
├── profiles.role 'tenant_member'
└── Membership: Clínica X
├── tenant.kind 'clinic'
├── role 'clinic_admin'
└── plano clinic_free | clinic_pro
// acessa /admin/*
role: clinic_admin tenant: clinic clinic_free clinic_pro

Dono ou gestor de uma clínica. Gerencia profissionais, pacientes, agenda e módulos da clínica.

🧑‍⚕️
Terapeuta da Clínica
tenant.kind = 'clinic' / role = 'therapist'
Fase 1
Usuário (terapeuta@clinicax.com.br)
├── profiles.role 'tenant_member'
└── Membership: Clínica X
├── tenant.kind 'clinic'
├── role 'therapist'
└── entitlements via plano da clínica
// acessa /therapist/*
role: therapist tenant: clinic entitlements da clínica

Terapeuta vinculado a uma clínica. Seus entitlements vêm do plano do tenant (clínica), não de assinatura pessoal.

🧑‍💼 Terapeuta Independente
🧑‍💼
Terapeuta Solo
tenant.kind = 'saas'
Fase 1
Usuário (terapeuta@gmail.com)
├── profiles.role 'tenant_member'
└── Membership: Tenant Pessoal
├── tenant.kind 'saas'
├── role 'therapist'
└── plano therapist_free | therapist_pro
// entitlements via v_user_entitlements
// acessa /therapist/*
role: therapist tenant: saas (pessoal) therapist_free therapist_pro

Terapeuta autônomo sem clínica. Assina diretamente. Entitlements vêm de `v_user_entitlements` (assinatura pessoal).

🔀
Terapeuta Solo + Clínica
2 memberships / contexto switcher
Fase 1
Usuário (terapeuta@gmail.com)
├── Membership A: Tenant Pessoal
├── tenant.kind 'saas'
├── role 'therapist'
└── plano therapist_pro
└── Membership B: Clínica X
├── tenant.kind 'clinic'
└── role 'therapist'
// switcher de contexto no topbar
role: therapist 2 tenants therapist_pro switcher de contexto

Atua em dois contextos. No tenant pessoal usa PRO. Na clínica usa os entitlements da clínica. Precisa de switcher de tenant no topbar.

🎓 Supervisor (Fase 1 — novo)
🎓
Supervisor Solo
tenant.kind = 'supervisor'
Fase 1
Usuário (supervisor@gmail.com)
├── profiles.role 'tenant_member'
└── Membership: Tenant Supervisão (novo)
├── tenant.kind 'supervisor'
├── role 'supervisor'
├── plano supervisor_free | supervisor_pro
└── max_supervisees 3 | 20
// acessa /supervisor/*
role: supervisor tenant: supervisor supervisor_free supervisor_pro

Novo. Supervisor independente. Tem sua própria sala de supervisão. O plano define o limite de terapeutas supervisionados (`plans.max_supervisees`).

🔀🎓
Terapeuta + Supervisor
2 tenants / 2 papéis
Fase 1
Usuário (terapeuta@gmail.com)
├── Membership A: Tenant Pessoal
├── tenant.kind 'saas'
├── role 'therapist'
└── plano therapist_pro
└── Membership B: Tenant Supervisão (novo)
├── tenant.kind 'supervisor'
├── role 'supervisor'
└── plano supervisor_pro
// switcher: "Meu consultório" / "Minha supervisão"
therapist supervisor 2 tenants therapist_pro supervisor_pro

O caso mais comum. Atua como terapeuta no tenant pessoal e como supervisor no tenant de supervisão. Switcher de contexto no topbar.

🏥🎓
Terapeuta (Clínica) + Supervisor
3 tenants possíveis
Fase 1
Usuário (terapeuta@clinicax.com.br)
├── Membership A: Clínica X
├── tenant.kind 'clinic'
└── role 'therapist'
└── Membership B: Tenant Supervisão (novo)
├── tenant.kind 'supervisor'
├── role 'supervisor'
└── plano supervisor_free | supervisor_pro
// supervisão é INDEPENDENTE da clínica
// colegas da clínica podem ser supervisionados
// via convite no tenant de supervisão
therapist (clínica) supervisor (independente) supervisor_pro

Trabalha na clínica como terapeuta e supervisiona outros terapeutas (inclusive colegas da clínica) de forma independente. A clínica não interfere na supervisão.

🚀 Fase 2 — Marketplace de Supervisão
🏥🤝🎓
Clínica com Supervisor Contratado
repasse financeiro AgenciaPsi
Fase 2
Clínica X
├── Ativa módulo supervisao (feature)
├── Associa supervisor externo via convite
├── Sessões registradas na plataforma
└── Pagamento via AgenciaPsi
Fluxo financeiro
└── Clínica paga R$ 200/sessão
├── Supervisor recebe R$ 180
└── AgenciaPsi retém R$ 20 (10%)
split de pagamento Stripe Connect / Iugu Fase 2

Futuro. A clínica contrata supervisão via plataforma. AgenciaPsi faz o split automático. Requer gateway com marketplace split (Stripe Connect, Iugu, Pagar.me).

👤 Paciente / Portal
👤
Paciente
profiles.role = 'portal_user'
Fase 1
Usuário (paciente@gmail.com)
├── profiles.role 'portal_user'
└── // sem memberships de tenant
// acessa /portal/*
// identidade global, não tenant
role: portal_user sem tenant

Acessa apenas o portal do paciente. Vê suas sessões, agenda e documentos. Nunca entra na área de tenant-app.

### Legenda

Novo — Fase 1 (supervisor)
Existente — Fase 1
Planejado — Fase 2
Plataforma (sem tenant)
profiles.role → identidade global
memberships.role → contexto de tenant

### Resumo Técnico — Como o Guard decide o menu

profiles.role = identidade global (saas_admin | tenant_member | portal_user)
memberships.role = papel dentro do tenant (clinic_admin | therapist | supervisor | editor)
tenant.kind = tipo do tenant (clinic | saas | supervisor) → define qual menu e contexto
plans.target = para quem é o plano (clinic | therapist | supervisor)
plans.max_supervisees = limite de supervisionados (novo — Fase 1)
Entitlements: v_tenant_entitlements (plano do tenant) UNION v_user_entitlements (assinatura pessoal)