agendapro/memory.md

59 lines
2.9 KiB
Markdown

# Contexto de Memória - AgendaPRO SaaS
Este arquivo contém o histórico arquitetural e as decisões do sistema **AgendaPRO** para garantir consistência em futuras sessões de desenvolvimento.
> [!IMPORTANT]
> O **AgendaPRO** é um projeto totalmente separado e independente do EduManager. O banco de dados e os recursos do AgendaPRO não devem ter nenhuma relação com o banco de dados do EduManager.
---
## 1. Estrutura do Banco de Dados (AgendaPRO)
O banco de dados oficial do AgendaPRO é estruturado para multi-inquilinato (multi-tenant) usando PostgreSQL. Abaixo estão as tabelas principais mapeadas:
* **`tenants`**: Cadastro de inquilinos/estabelecimentos.
* `id` (UUID, PK)
* `name` (VARCHAR)
* `slug` (VARCHAR, Unique) - Identificador na URL (ex: `barbearia-premium`)
* `subscription_status` (VARCHAR) - Status da assinatura (`active`, `pending`, `past_due`, `cancelled`, `suspended`)
* `subscription_ends_at` (TIMESTAMPTZ) - Data limite de validade do plano
* `settings` (JSONB) - Configurações gerais (fuso horário, chaves integradas de gateways de pagamento)
* **`plans`**: Planos de assinatura disponíveis na plataforma.
* `id` (UUID, PK)
* `name` (VARCHAR)
* `price` (NUMERIC)
* `features` (TEXT[])
* `slug` (VARCHAR)
* **`subscriptions`**: Vinculo do tenant ao plano.
* `id` (UUID, PK)
* `tenant_id` (UUID, FK -> tenants)
* `plan_id` (UUID, FK -> plans)
* `status` (VARCHAR)
* `gateway_subscription_id` (VARCHAR) - ID da assinatura gerada no Asaas
* `amount` (NUMERIC)
* **`subscription_payments`**: Transações e faturas do plano de assinatura.
* `id` (UUID, PK)
* `subscription_id` (UUID, FK)
* `tenant_id` (UUID, FK)
* `amount` (NUMERIC)
* `status` (VARCHAR)
* `gateway_payment_id` (VARCHAR)
* **`payments`**: Cobranças avulsas emitidas pelos inquilinos para os seus clientes (agendamentos).
* `id` (UUID, PK)
* `tenant_id` (UUID, FK)
* `external_id` (VARCHAR) - Mapeamento com ID do Asaas (`pay_...`)
* `status` (VARCHAR) - (`pending`, `completed`, `refunded`, `failed`)
* `amount` (NUMERIC)
* `appointment_id` (UUID)
---
## 2. Estrutura do Código e Separação de Projetos
* **Aplicação Principal (Painel do Inquilino & Agendamento do Cliente):** Localizada na raiz do projeto (`src/...`).
* **Painel Administrativo da Plataforma (Master Admin):** Localizado na subpasta `/admin`. Possui dockerfile próprio e gerencia todos os inquilinos e faturamento global da plataforma.
---
## 3. Isolamento e Segurança
* Toda requisição feita de forma administrativa para cobrar os inquilinos usa a credencial mestre do AgendaPRO (`process.env.ASAAS_API_KEY`).
* Configurações específicas dos clientes dos inquilinos (ex: Pix do salão ou barbearia) são carregadas do campo `settings` da tabela `tenants`.