Employee representa o vínculo operacional de um usuário como funcionário de uma Company. Ele depende de uma Membership existente na Organization da Company e referencia essa Membership por membershipId.
A Company é a dona do vínculo. O funcionário pode ter um perfil de Customer associado para comprar passagens ou receber créditos concedidos pela própria Company, mas o crédito pertence ao Customer e o vínculo de funcionário continua limitado à Company de origem.
Campos
| Campo | Tipo | Descrição |
|---|---|---|
employeeId | UUID | Identificador único |
companyId | UUID | Empresa dona do vínculo de funcionário |
organizationId | UUID | Organização da Company associada à Membership |
membershipId | UUID | Membership que originou o vínculo |
userId | UUID | Usuário vinculado à Membership |
customerId | UUID? | Perfil de cliente/passageiro associado ao funcionário, quando existir |
employeeCode | String? | Código interno do funcionário na Company |
jobTitle | String? | Cargo informado pela Company |
department | String? | Departamento informado pela Company |
status | EmployeeStatus | Status do vínculo |
activatedAt | DateTime | Data em que o vínculo ficou ativo |
suspendedAt | DateTime? | Data de suspensão do vínculo |
revokedAt | DateTime? | Data de revogação do vínculo |
createdBy | UUID? | Usuário que criou o registro, quando aplicável |
createdAt | DateTime | Data de criação |
updatedBy | UUID? | Usuário que fez a última atualização, quando aplicável |
updatedAt | DateTime | Data da última atualização |
deletedBy | UUID? | Usuário que removeu o registro, quando aplicável |
deletedAt | DateTime? | Data de remoção lógica |
Relacionamentos
- Relaciona-se com Company por
companyId. - Relaciona-se com Organization por
organizationId. - Relaciona-se com Membership por
membershipId. - Relaciona-se com User por
userId. - Relaciona-se com Customer por
customerId, quando o funcionário também possui perfil de cliente/passageiro.
Regras de negócio
Employeesó pode ser criado para MembershipACTIVEcomorganizationIdpreenchido e pertencente a uma Company.- Membership interna de BackOffice e Membership de Cooperative não criam
Employee. organizationIddeve ser igual aoorganizationIdda Company informada emcompanyId.membershipIddeve apontar para uma MembershipACTIVEdo mesmouserIde da mesmaorganizationId.membershipIddeve ser único emEmployee, mantendo relação 1:1 entre Membership e Employee.- O par
companyId+userIddeve ser único para evitar duplicidade do funcionário na mesma Company. - O vínculo pertence à Company. O mesmo usuário pode ser funcionário de múltiplas Companies, cada uma com seu próprio
Employee. customerIdé opcional e deve apontar para um Customer do mesmouserId, quando existir.Employeenão deve referenciarPassenger, porque Passenger é snapshot de uma passagem.- Quando o vínculo deixa de valer, o registro deve mudar para
SUSPENDEDouREVOKED; o histórico não deve ser apagado. - Créditos concedidos por regra de funcionário devem validar a mesma
companyIddoEmployee, mas o crédito persistido aponta para ocustomerId.
Enums
EmployeeStatus
| Valor | Descrição |
|---|---|
ACTIVE | Funcionário ativo na Company |
SUSPENDED | Funcionário temporariamente suspenso |
REVOKED | Vínculo encerrado ou revogado pela Company |