Entidade: Time
Camada: Domínio — Define o que o objeto é, seus atributos e relacionamentos.
Regras de comportamento: ver
Regras de Negócio/Módulo 03: Hierarquia de Times
1. Definição
Um Time é a unidade organizacional do CRM comercial. Representa um grupo de consultores liderado por um único Gestor. Os times formam uma árvore hierárquica com profundidade dinâmica (N1 a N), onde o limite de níveis é configurável por tenant e cada time possui um Padrinho (o gestor do time superior).
2. Atributos Principais
| Campo | Tipo | Obrigatório | Notas |
|---|---|---|---|
id | UUID | Sim | Gerado pelo sistema |
tenant_id | UUID | Sim | FK → Tenant |
nome | string | Sim | Nome do time (ex: "Time Alpha") |
lider_id | UUID | Sim | FK → Usuário com papel GESTOR |
padrinho_id | UUID | Não | FK → Time pai. null para o time raiz (N1) |
nivel | int | Sim | Profundidade na hierarquia (1 = raiz) |
status | enum | Sim | ATIVO, INATIVO |
created_at | timestamp | Sim | Imutável após criação |
3. Estrutura Hierárquica
Tenant
└── Time N1 (Padrinho = null)
└── Time N2 (apadrinhado pelo N1)
└── Time N3 (apadrinhado pelo N2)
└── Time N4 ...
- Cada time tem exatamente um líder e no máximo um padrinho.
- Um líder só pode apadrinhar times que estejam no nível imediatamente abaixo (nível N+1) e que tenham sido fundados por consultores vindos de dentro do seu próprio time de nível N. É proibido o apadrinhamento cruzado entre ramificações independentes de mesmo nível (ex: o líder do time A no nível 2 não pode apadrinhar um consultor que se emancipou do time B também de nível 2). O vínculo
padrinho_iddeve sempre respeitar a linhagem de pertinência direta.
4. Relacionamentos
Time ──── pertence a ──── Tenant (N:1)
Time ──── possui ─────── Líder (N:1 → Usuário)
Time ──── tem acima ──── Padrinho (N:1 → Time, nullable)
Time ──── tem abaixo ─── Times apadrinhados (1:N → Time)
Time ──── contém ─────── Membros (1:N → Usuário)
Legenda de Cardinalidade:
N:1(Muitos para Um): Múltiplos registros deste domínio apontam para um mesmo registro de destino (ex: vários times pertencem ao mesmo tenant).1:N(Um para Muitos): Um único registro deste domínio possui múltiplos registros filhos associados (ex: um time possui vários membros/usuários).
5. Visibilidade por Papel
| Papel | O que enxerga |
|---|---|
CONSULTOR | Apenas a própria carteira de leads/clientes |
GESTOR | Carteira própria + carteira de todos os membros do seu time |
PADRINHO | Tudo do seu time + produção consolidada dos times apadrinhados |
ADMIN | Toda a árvore do tenant |
Consultores de times no mesmo nível (irmãos) não enxergam a carteira uns dos outros.
6. Invariantes (Restrições Absolutas)
- Todo
CONSULTOReGESTORpertence a exatamente um time — estado órfão não existe. - O
lider_idaponta para umUsuáriocom papelGESTORouADMIN. - Ao remover um líder, todos os membros e sub-times abaixo sobem automaticamente para o padrinho do líder removido (ver
Regras de Negócio/Módulo 03: Hierarquia de Times - Seção 5). - Um time não pode ser criado sem um líder definido.