Módulo 03: Hierarquia de Times
Status: Rascunho Inicial
1. Contratos de API (RESTful)
1.1 Times
GET /api/times/meu-time
Return: { time: { id, gestor, nivel }, membros: [{ id, nome, nivel, producao_mes }] }
GET /api/times/{id}
Return: { ...dados do time + membros diretos }
GET /api/times/{id}/arvore
Return: { ...time + subárvore completa (recursiva, até N níveis) }
POST /api/convites
Body: { email?, expira_em?, time_id }
Return: { token, link_completo, expira_em }
GET /api/convites/{token}/validar
Return: { valido: bool, gestor_nome, time_nome, nivel_resultante }
1.2 Hierarquia & Movimentação
GET /api/hierarquia/arvore
Query: ?nivel_max=5&status=ATIVO
Return: { arvore completa do tenant (apenas Admin/Gerente) }
GET /api/hierarquia/meu-ramo
Return: { caminho do usuário logado até o N1 }
PATCH /api/usuarios/{id}/transferir
Body: { novo_time_id, motivo }
Return: { usuario_id, novo_time_id, historico_id }
Auth: Admin
1.3 Consultas de Produção em Cascata
GET /api/producao/minha
Query: ?periodo=2026-06
Return: { vendas_proprias: N, vendas_time: N, total_cascata: N }
GET /api/producao/time/{time_id}
Query: ?nivel_max=3&periodo=2026-06
Return: { producao_por_nivel: [{ nivel: 1, total: N }, ...] }
2. Schemas de Banco de Dados
2.1 Campos Hierárquicos na tabela Usuário
{
"id": "uuid",
"parent_id": "uuid | null",
"time_id": "uuid | null",
"nivel": "integer (calculado, não fixo)",
"e_gestor": "boolean"
}
2.2 Entidade Time
{
"id": "uuid",
"tenant_id": "uuid",
"nome": "string",
"gestor_id": "uuid",
"nivel_gestor": "integer",
"total_membros_diretos": "integer",
"total_subarvore": "integer"
}
2.3 Log de Auditoria Hierárquica
{
"id": "uuid",
"usuario_id": "uuid",
"time_origem_id": "uuid",
"time_destino_id": "uuid",
"motivo": "string",
"executado_por": "uuid"
}
3. Segurança e Boas Práticas (Performance DB)
- Nível Calculado: A coluna Nível (
N1, N2...) é dinamicamente calculada com base na profundidade (Closure Table ou CTEs Recursivas no PostgreSQL). - Para evitar sobrecarga de consultas (traversing the tree), o sistema usará estratégias de Materialized Paths para as consultas em cascata da diretoria.