Entidade: Tenant
Camada: Domínio — Define o que o objeto é, seus atributos e relacionamentos.
Regras de comportamento: ver
Regras de Negócio/Módulo 02: Multi-Tenant & Configuração
1. Definição
Um Tenant é uma empresa que contrata o CRM como plataforma. Representa o nível mais alto de isolamento de dados: tudo no sistema pertence a um tenant e nenhum dado vaza entre tenants distintos.
2. Atributos Principais
| Campo | Tipo | Obrigatório | Notas |
|---|---|---|---|
id | UUID | Sim | Gerado pelo sistema |
subdominio | string | Sim | Ex: empresa.crm.com. Imutável após criação |
razao_social | string | Sim | Nome jurídico da empresa |
nome_fantasia | string | Não | Usado na interface e nos e-mails |
cnpj | string | Sim | Validado por dígito verificador |
logo_url | string | Não | URL pública do logotipo |
cor_primaria | string | Não | Hex. Usada no white-label |
cor_secundaria | string | Não | Hex. Usada no white-label |
status | enum | Sim | PENDENTE_SETUP, ATIVO, SUSPENSO, CANCELADO |
plano_contratado | string | Sim | Referência ao plano de assinatura da plataforma |
created_at | timestamp | Sim | Imutável após criação |
3. Configurações do Tenant (Agregado)
O tenant possui um objeto de configuração associado com todas as regras comportamentais da empresa:
| Configuração | Tipo | Descrição |
|---|---|---|
hierarquia_max_niveis | int | Limite de profundidade para produção em cascata |
lead_alerta_ociosidade_dias | int | Dias sem interação para disparar alerta |
lead_expiracao_dias | int | Dias até expiração automática do lead |
proposta_validade_dias | int | Validade máxima de uma proposta enviada |
desconto_max_consultor_pct | float | % máximo de desconto que um consultor pode conceder |
desconto_max_gestor_pct | float | % máximo de desconto que um gestor pode conceder |
fipe_modo | enum | CACHE_LOCAL, API_EXTERNA, API_COM_FALLBACK |
vistoria_self_service | bool | Permite link de vistoria enviado ao cliente |
vistoria_presencial | bool | Permite vistoria feita pelo consultor |
vistoria_aprovacao_gerencial | bool | Laudo precisa de aprovação do gestor antes da assinatura |
registro_modo | enum | CONVITE (padrão) ou ABERTO |
senha_complexidade | enum | MEDIA ou FORTE |
plano_sincronismo_financeiro | enum | COMPLETO (escuta webhooks do ERP e gerencia inadimplência/suspensão no CRM) ou UNIDIRECIONAL (apenas envia a venda; inadimplência e cobrança são tratadas estritamente no ERP, mantendo o status ATIVO no CRM) |
4. Relacionamentos
Tenant ──── possui ──── Usuários (1:N)
Tenant ──── possui ──── Times (1:N)
Tenant ──── possui ──── Leads (1:N)
Tenant ──── possui ──── Clientes (1:N)
Tenant ──── possui ──── Contratos (1:N)
Tenant ──── possui ──── Planos (1:N)
Tenant ──── possui ──── Configurações (1:1)
Tenant ──── possui ──── Integrações (1:N)
Legenda de Cardinalidade:
1:N(Um para Muitos): Um único registro deste domínio possui múltiplos registros filhos associados (ex: um tenant possui vários usuários e leads).1:1(Um para Um): Relação exclusiva e de correspondência única (ex: um tenant possui exatamente um único registro de configurações ativas).
5. Estados do Ciclo de Vida
6. Invariantes (Restrições Absolutas)
- O
subdominioé imutável após a criação do tenant. - Nenhum dado do tenant é acessível pelo
SUPER_ADMINexcetostatus,subdominioe dados de faturamento da plataforma (não do negócio do cliente). - O tenant só assume o status
ATIVOapós o Admin concluir o Wizard de onboarding completo.