# 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`.