# database-novo

Banco de dados do AgenciaPsi — organizado, documentado e com CLI para gerenciamento.

## Quick Start

```bash
cd database-novo

# Instalação do zero (schema + fixes + seeds + backup)
node db.cjs setup

# Ver estado do banco
node db.cjs status

# Backup
node db.cjs backup

# Restaurar (perdi o banco!)
node db.cjs restore
```

Para o guia completo, veja **`docs/setup_guide.md`**.

## Comandos do CLI

| Comando | O que faz |
|---------|-----------|
| `node db.cjs setup` | Instala do zero (schema + fixes + seeds) |
| `node db.cjs backup` | Exporta backup com data para `backups/` |
| `node db.cjs restore [data]` | Restaura de um backup |
| `node db.cjs migrate` | Aplica migrations pendentes |
| `node db.cjs seed [grupo]` | Roda seeds (all, users, system, test_data) |
| `node db.cjs status` | Estado do banco, backups, migrations |
| `node db.cjs diff` | Compara schema atual vs último backup |
| `node db.cjs reset` | Reseta e reinstala tudo |
| `node db.cjs verify` | Verifica integridade dos dados |

## Estrutura

```
database-novo/
│
├── db.cjs                              # CLI de gerenciamento do banco
├── db.config.json                      # Configuração (container, seeds, fixes)
│
├── schema/                             # Schema SQL separado por seção
│   ├── 00_full/schema.sql              # Schema completo (referência)
│   ├── 01_extensions/                  # Schemas + extensões PostgreSQL
│   ├── 02_types/                       # Enums (auth, public, infra)
│   ├── 03_functions/                   # 11 arquivos por domínio
│   ├── 04_tables/                      # 10 arquivos por domínio
│   ├── 05_views/                       # 24 views
│   ├── 06_indexes/                     # Índices
│   ├── 07_foreign_keys/               # PKs, FKs, constraints
│   ├── 08_triggers/                    # Triggers
│   ├── 09_policies/                    # 217 RLS policies
│   └── 10_grants/                      # Grants
│
├── seeds/                              # Seeds de dados
│   ├── seed_001_fixed.sql              # 6 usuários base + tenants
│   ├── seed_002.sql                    # Supervisor + Editor
│   ├── seed_003.sql                    # Therapist2, Therapist3, Secretary
│   ├── seed_010_plans.sql              # 7 planos + 4 preços
│   ├── seed_011_features.sql           # 26 features
│   ├── seed_012_plan_features.sql      # 85 vínculos plano↔feature
│   ├── seed_013_subscriptions.sql      # 9 subscriptions + compromissos
│   ├── seed_014_global_data.sql        # 11 email + 16 notif templates + 3 slides
│   ├── seed_020_test_data.sql          # Dados de teste (50 pacientes, eventos, etc.)
│   ├── seed_020_test_data_cleanup.sql  # Limpeza dos dados de teste
│   └── run_all_seeds.sh               # Script bash alternativo
│
├── migrations/                         # Migrations incrementais
│
├── fixes/                              # 7 correções aplicadas
│
├── backups/                            # Backups com data (auto-gerenciados)
│   └── 2026-03-23/                     # schema.sql + data.sql + full_dump.sql
│
└── docs/                               # Documentação
    ├── setup_guide.md                  # Guia completo de instalação e uso
    ├── schema_map.md                   # Mapa das 84 tabelas
    ├── business_rules.md               # Regras de negócio
    └── users_test.md                   # 11 usuários de teste (UUIDs + vínculos)
```

## Planos

| Key | Target | Preço | Limites |
|-----|--------|-------|---------|
| `patient_free` | patient | R$0 | — |
| `therapist_free` | therapist | R$0 | 40 agendamentos/mês, 50 lembretes/mês |
| `therapist_pro` | therapist | R$49/mês · R$490/ano | Ilimitado |
| `clinic_free` | clinic | R$0 | 30 pacientes, 5 terapeutas, 40 agend/mês |
| `clinic_pro` | clinic | R$149/mês · R$1490/ano | Ilimitado |
| `supervisor_free` | supervisor | R$0 | Até 3 supervisionados |
| `supervisor_pro` | supervisor | R$0 | Até 20 supervisionados |

## Usuários de Teste

Senha de todos: `Teste@123`

| Email | Plano | Tipo |
|-------|-------|------|
| paciente@agenciapsi.com.br | patient_free | Paciente |
| terapeuta@agenciapsi.com.br | therapist_free | Terapeuta solo + Clínica 3 |
| clinica1@agenciapsi.com.br | clinic_free | Clínica coworking |
| clinica2@agenciapsi.com.br | clinic_free | Clínica recepção |
| clinica3@agenciapsi.com.br | clinic_free | Clínica full |
| saas@agenciapsi.com.br | — | Admin plataforma |
| supervisor@agenciapsi.com.br | supervisor_free | Supervisor |
| editor@agenciapsi.com.br | therapist_free | Editor |
| therapist2@agenciapsi.com.br | therapist_free | Terapeuta |
| therapist3@agenciapsi.com.br | therapist_free | Terapeuta |
| secretary@agenciapsi.com.br | — | Secretária (Clínica 2) |

## Idempotência

Todos os seeds são idempotentes (ON CONFLICT DO UPDATE ou DELETE + INSERT). Podem ser re-executados quantas vezes necessário.
