Integração Plataforma SaaS & CRM Core
Camada: Arquitetura — Define a relação e divisão de escopo entre a infraestrutura administrativa global da plataforma e os tenants transacionais. Referências Cruzadas:
dominio/tenant.md·regras-negocio/02_tenant.md
1. Visão Geral da Arquitetura
O sistema é estruturado sob o modelo de SaaS Multi-Tenant (Software as a Service). Para manter o isolamento de dados e facilitar a manutenção, o ecossistema é dividido em duas grandes fronteiras operacionais:
- SaaS Admin (Painel de Administração Global): Sistema de controle de propriedade da nossa empresa (a dona do software). É utilizado pelos Super Admins para cadastrar Tenants, monitorar faturas de contratação da plataforma e controlar limites de infraestrutura.
- CRM Core (Instância do Tenant): A aplicação transacional de CRM de Proteção Veicular que os operadores das associações utilizam em seu dia a dia comercial.
2. O Papel do plano_contratado
O atributo plano_contratado (salvo na entidade Tenant) é a chave de ligação de regras entre os dois ambientes. Ele atua como uma referência lógica para as variáveis limitadoras configuradas de forma centralizada na plataforma.
| Plano Configurado | Limite de Usuários Ativos | Armazenamento Máximo (S3) | Módulos Liberados no CRM |
|---|---|---|---|
BRONZE | Até 5 usuários | 5 GB | Leads, Veículos, Propostas |
PRATA | Até 15 usuários | 20 GB | Leads, Veículos, Propostas, Vistorias |
OURO | Até 50 usuários | 100 GB | Todos os módulos + Integração ERP |
ENTERPRISE | Customizado | Customizado | Acesso total e Portal do Cliente |
3. Mecanismo de Validação de Limites (CRM Core)
O CRM Core valida os limites do plano de forma ativa e impeditiva nas seguintes operações transacionais:
3.1 Limite de Usuários Ativos
Toda vez que o Admin do Tenant tenta convidar ou reativar um usuário (usuario.md), o backend do CRM executa:
SELECT COUNT(id) FROM usuarios
WHERE tenant_id = :tenant_id AND status = 'ATIVO';
Se o resultado for igual ou superior ao limite mapeado para o plano_contratado do Tenant, a API do CRM recusa o cadastro retornando código de erro 403 Forbidden e a mensagem: "Limite de usuários excedido para o seu plano contratado".
3.2 Cota de Armazenamento (Storage)
Ao realizar o upload de documentos de vistoria, fotos ou contratos, o sistema verifica o volume acumulado consumido pelo Tenant no Storage:
- O CRM Core não calcula o tamanho do disco a cada requisição. Em vez disso, mantém um contador de bytes agregados na tabela
Tenant_Configou utiliza metadados do Cloud Storage. - Caso o limite de GB do plano seja atingido, o upload é bloqueado no backend.
3.3 Habilitação de Módulos Dinâmicos
As rotas do API Gateway do CRM e os itens do menu do frontend leem a lista de módulos liberados para o plano_contratado:
- Se o módulo
PORTAL_CLIENTEouINTEGRACAO_ERPnão estiver no escopo do plano, as APIs públicas correspondentes retornam404 Not Foundde forma imediata, impedindo bypass através de chamadas diretas via HTTP.
4. Fluxo de Sincronização e Ciclo de Vida do Tenant
As alterações de plano e status de pagamento que ocorrem no SaaS Admin ou no Gateway de Faturamento (Stripe, Asaas, Iugu) propagam-se para o CRM Core de maneira assíncrona:
- Suspensão por Inadimplência do SaaS: Se o Tenant atrasar o pagamento da fatura do CRM, o SaaS Admin altera o status do Tenant para
SUSPENSO. O CRM bloqueia o acesso a todas as rotas operacionais do tenant em tempo de execução, exibindo apenas a tela de cobrança pendente. - Cancelamento Definitivo: Altera o status para
CANCELADO. O CRM agenda a exclusão lógica dos dados (soft delete) e a expiração das chaves de integração do Tenant.