This commit is contained in:
Leonardo
2026-03-06 06:37:13 -03:00
parent d58dc21297
commit f733db8436
146 changed files with 43436 additions and 12779 deletions

View File

@@ -1,70 +1,155 @@
# Changelog
# CHANGELOG — Banco de Dados AgênciaPsi
## 4.3.0 (2025-02-26)
Registro histórico de todas as migrations aplicadas no banco.
Formato: data | arquivo | o que mudou | por quê
**Implemented New Features and Enhancements**
---
- Update PrimeVue version
## [001] — 2026-03-03
**Arquivo:** `migration_001.sql`
**Seed:** `seed_001.sql`
## 4.2.0 (2024-12-09)
### Contexto
O schema original foi construído de forma incremental e acumulou
inconsistências no modelo de identidade. Usuários não tinham um
tipo de conta definido formalmente, tenants não distinguiam
terapeuta de clínica, e não existia suporte a paciente como
tipo de conta de plataforma.
**Implemented New Features and Enhancements**
### O que mudou
- Refactored dashboard sections to components
- Migrate sass from @import to @use
#### `profiles`
- ✅ Adicionada coluna `account_type text NOT NULL DEFAULT 'free'`
- Valores: `free | patient | therapist | clinic`
- Imutável após sair de `free` (trigger `trg_account_type_immutable`)
- Usuários com role=`patient` migrados para `account_type='patient'`
- Usuários com tenant `saas` ativo migrados para `account_type='therapist'`
## 4.1.0 (2024-07-29)
#### `tenants`
- ✅ Novos valores aceitos em `kind`:
- `therapist` → terapeuta individual (substitui `saas`)
- `clinic_coworking` → clínica tipo 1: gestão de salas
- `clinic_reception` → clínica tipo 2: secretaria + múltiplas agendas
- `clinic_full` → clínica tipo 3: coworking + secretaria
-`kind` agora é imutável após criação (trigger `trg_tenant_kind_immutable`)
- ✅ 10 tenants `saas` órfãos (sem admin, sem subscriptions) deletados
- ✅ Tenants `saas` com admin ativo migrados para `kind='therapist'`
- ⚠️ `saas` e `clinic` (legados) mantidos no CHECK por compatibilidade.
Não criar novos tenants com esses kinds.
- Changed menu button location at topbar
- Add border to overlay menu
- Animation for mobile mask
- Fixed chart colors
#### `plans`
- Adicionado `patient` como valor válido em `target`
- ✅ Inserido plano `patient_free` (gratuito, target=patient)
## 4.0.0 (2024-07-29)
#### Novas funções
| Função | Descrição |
|--------|-----------|
| `provision_account_tenant(user_id, kind, name?)` | Cria tenant + membership + atualiza account_type. Chamar no onboarding. |
| `is_therapist_tenant(tenant_id)` | Retorna true se tenant é do tipo therapist |
| `is_clinic_tenant(tenant_id)` | Atualizada: inclui todos os subtipos de clínica |
| `guard_tenant_kind_immutable()` | Trigger: bloqueia alteração de tenants.kind |
| `guard_account_type_immutable()` | Trigger: bloqueia alteração de account_type após escolha |
| `guard_patient_cannot_own_tenant()` | Trigger: bloqueia paciente de ser tenant_admin/therapist |
- Updated to PrimeVue v4
#### Funções atualizadas
| Função | O que mudou |
|--------|-------------|
| `handle_new_user()` | Agora insere `account_type='free'` |
| `handle_new_user_create_personal_tenant()` | Desabilitada — tenant criado no onboarding |
| `ensure_personal_tenant()` | Busca por `kind IN ('therapist','saas')` e delega para `provision_account_tenant` |
## 3.10.0 (2024-03-11)
### Regras de negócio agora garantidas no banco
1. **Paciente é para sempre paciente**`account_type` imutável após escolha
2. **Terapeuta nunca vira clínica e vice-versa**`tenants.kind` imutável
3. **Paciente não pode ter tenant** — trigger bloqueia na inserção
4. **Cada tipo de conta tem seu tipo de tenant**`provision_account_tenant` garante
**Migration Guide**
### Usuários de seed (apenas dev/staging)
| Email | Tipo | Tenant |
|-------|------|--------|
| paciente@agenciapsi.com.br | patient | nenhum |
| terapeuta@agenciapsi.com.br | therapist | tenant próprio (therapist) + vinculado à Clínica 3 |
| clinica1@agenciapsi.com.br | clinic | clinic_coworking |
| clinica2@agenciapsi.com.br | clinic | clinic_reception |
| clinica3@agenciapsi.com.br | clinic | clinic_full |
| saas@agenciapsi.com.br | saas_admin | nenhum |
> Senha de todos: `Teste@123`
- Update theme files.
---
**Implemented New Features and Enhancements**
## [002] — seed_002.sql
- Upgrade to PrimeVue 3.49.1
**Arquivo:** `Novo-DB/seed_002.sql`
## 3.9.0 (2023-11-01)
### O que cria
**Migration Guide**
#### Migration embutida
-`profiles.platform_roles text[] NOT NULL DEFAULT '{}'` — adicionada via `ADD COLUMN IF NOT EXISTS` (idempotente)
- Update theme files.
#### Usuários de teste
| Email | Senha | Papel | Tenant |
|-------|-------|-------|--------|
| `supervisor@agenciapsi.com.br` | `Teste@123` | `supervisor` em `tenant_members` | Clínica Bem Estar (Full) |
| `editor@agenciapsi.com.br` | `Teste@123` | `therapist` em `tenant_members` + `platform_roles = '{editor}'` | Clínica Bem Estar (Full) |
**Implemented New Features and Enhancements**
UUIDs reservados:
- Supervisor: `aaaaaaaa-0007-0007-0007-000000000007`
- Editor: `aaaaaaaa-0008-0008-0008-000000000008`
- Upgrade to PrimeVue 3.39.0
---
## 3.8.0 (2023-07-24)
## [PENDENTE] — Migration necessária: `platform_roles` em `profiles`
**Migration Guide**
**Contexto:**
Implementação das áreas de **Supervisor** (papel de tenant) e **Editor** (papel de plataforma).
O papel de Editor é atribuído pelo `saas_admin` e armazenado diretamente no perfil do usuário,
independente de qual tenant ele pertence.
- Update theme files.
- Update assets style files
- Remove code highlight
### O que precisa ser aplicado no banco
**Implemented New Features and Enhancements**
#### `profiles`
- ⚠️ **Adicionar coluna** `platform_roles text[] NOT NULL DEFAULT '{}'`
- Armazena papéis globais de plataforma. Ex.: `'{editor}'`
- Quem pode escrever: somente `saas_admin` (via RLS ou função privilegiada)
- Quem pode ter: qualquer usuário autenticado, **exceto** `account_type = 'patient'`
- Valores previstos: `editor` (mais podem ser adicionados futuramente)
- Upgrade to PrimeVue 3.30.2
#### SQL sugerido
```sql
ALTER TABLE public.profiles
ADD COLUMN IF NOT EXISTS platform_roles text[] NOT NULL DEFAULT '{}';
## 3.7.0 (2023-05-06)
-- Comentário descritivo
COMMENT ON COLUMN public.profiles.platform_roles IS
'Papéis globais de plataforma, independentes de tenant. Ex: editor de microlearning. Atribuído pelo saas_admin.';
- Upgrade to PrimeVue 3.28.0
-- RLS: somente saas_admin pode atualizar platform_roles (exemplo)
-- CREATE POLICY "saas_admin pode atualizar platform_roles"
-- ON public.profiles FOR UPDATE
-- USING (auth.uid() IN (SELECT id FROM public.profiles WHERE role = 'saas_admin'))
-- WITH CHECK (true);
```
**Implemented New Features and Enhancements**
#### `tenant_members` (sem alteração necessária)
- O papel `supervisor` já é suportado como valor text em `tenant_members.role`.
- Nenhuma alteração de schema é necessária — basta inserir memberships com `role = 'supervisor'`.
## 3.6.0 (2023-04-12)
### Impacto se não aplicado
- Área do Editor (`/editor`) fica inacessível a todos (coluna ausente → `platform_roles` vem `null` → acesso negado).
- Área do Supervisor (`/supervisor`) funciona normalmente — não depende desta migration.
**Implemented New Features and Enhancements**
---
- Upgrade to PrimeVue 3.26.1
- Upgrade to vite 4.2.1
## Futuro — registrado mas não implementado
### Vínculo Terapeuta ↔ Clínica (a implementar)
- Terapeuta autoriza explicitamente que secretaria gerencie suas sessões
- Permissão só válida se clínica tiver `kind IN ('clinic_reception', 'clinic_full')`
- Secretaria acessa apenas sessões — não prontuário nem anotações
- Dissociação bloqueada se houver `agenda_eventos` futuros (`inicio_em > now()`)
- Após dissociação: cada parte fica com seus próprios pacientes
- Requer: coluna de permissão no vínculo + função de dissociação com validação
---
*Última atualização: 2026-03-03*