Assentos & convites de time
Como a quota de assentos é contada, como convites consomem, e como o gate re-verifica no momento do accept para lidar com mudanças de plano no meio do fluxo.
Pontos-chave
- Um assento é um usuário ativo (User.isActive=true) no tenant. Soft-delete libera o assento na hora.
- Emitir convite não consome assento: só o accept consome. Admins podem ter qualquer número de convites pendentes.
- O seat gate dispara em dois momentos: quando o admin envia o convite, e de novo quando o convidado clica em aceitar.
- Se o tenant fez downgrade entre invite e accept, o accept retorna 402 e o convite é marcado como expirado.
01
Caps por plano
- Free: 1 assento. Starter: 3 assentos. Pro: 10 assentos. Enterprise: ilimitado (negociado em contrato).
- Vendas podem hand-grant um número customizado via TenantEntitlement: o override vence o catálogo.
- Remover membro é soft-delete (isActive=false); a cadeia de auditoria permanece intacta.
02
Ciclo de vida do convite
- Pending: token gerado, email enviado, expires_at = now + 7d.
- Accepted: usuário criado, sessão emitida, linha do convite atualizada; novo usuário cai em /dashboard autenticado.
- Expired / revoked: estados terminais. Um novo convite para o mesmo email inicia um novo ciclo.