Overview
OInvite é o mecanismo de token para dois fluxos:
type=MEMBER-> adiciona um usuário ao BKO ou a uma organização via Membership.type=DRIVER-> vincula um usuário como motorista de um permissionário via DriverTransportOperator.
Tipos e escopos
No Backoffice, a seleção de roles para convite interno usa
GET /api/v1/bko/roles?type=INTERNAL. Para convite de organização, usa GET /api/v1/bko/roles?assignableToOrganizationId={organizationId}, retornando roles ENVIRONMENT globais e roles ORGANIZATION da organização escolhida.
Origens do Invite
O
Invite carrega dois vínculos com User:invitedByUserId— identifica o emissor ou responsável pelo token.invitedUserId— identifica o usuário convidado quando ele já existe; emMEMBEReDRIVER, pode ser resolvido no aceite.
Lifecycle
O
Invite não possui campo status. O estado é derivado: acceptedAt -> accepted, rejectedAt -> rejected, revokedAt -> revoked, expiresAt no passado -> expired, senão -> pending. A expiração padrão é de 7 dias.Capacidades por superfície
As ações de preview, accept e reject são públicas e operam sobre otoken. Resend e revoke exigem autenticação; em OPS, também exigem escopo de organização.
Cada ação valida se o convite pertence ao tipo esperado e se o token ainda pode ser usado.
Dados do aceite
name e password são obrigatórios em MEMBER e DRIVER, mas name é ignorado quando o User já existe. Para DRIVER, os campos de habilitação são ignorados quando o User já possui um Driver.
Polymorphic Accept
O aceite tem fases compartilhadas seguidas de um branch portype:
Quando o Invite tem email, o aceite também marca o email do User como verificado.
Invite Preview
Antes de aceitar, o cliente exibe informações contextuais sobre o Invite. O preview é público e valida se o token ainda pode ser usado antes de retornar dados enriquecidos conforme o tipo. MEMBER:requiresLicense indica se o User já possui um Driver. Quando false, o cliente não precisa solicitar dados de habilitação no aceite.
Flow — BKO creates Organization (MEMBER)
Flow — OPS invites colleague (MEMBER)
Flow — Driver invite (DRIVER)
Reject vs. Revoke
Rejeitar e revogar não disparam notificação síncrona. Qualquer efeito colateral deve reagir aos eventos.
Resend
Um Invite pendente pode ser reenviado. O reenvio regenera o token e recalculaexpiresAt para mais 7 dias — o link anterior passa a ser inválido — e emite invite.resent. Invites já aceitos ou revogados não podem ser reenviados.
Events
invite.created e invite.resent disparam notificações com o link por WhatsApp e também por email quando email está preenchido.
Validations
On Creation — comum
On Creation — type=MEMBER
On Creation — type=DRIVER
On Acceptance
Effects of Accept
type=MEMBER -> Membership
Membership interna
ACTIVE faz o Profile derivar access:bko. Membership ACTIVE em organização faz o Profile derivar access:ops. Um usuário pode acumular múltiplas Memberships na mesma organização, mas vínculos REVOKED não concedem acesso.
type=DRIVER -> Driver (se novo) + DriverTransportOperator
Vínculo ativo de motorista faz o Profile derivar
access:driver. Driver não cria Membership — motorista é pessoal operacional, não membro administrativo da organização.