> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devmob.app.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Employee

> Funcionário de uma Company vinculado a uma Membership

O `Employee` representa o vínculo operacional de um usuário como funcionário de uma [Company](/data-modelling/tenant/company). Ele depende de uma [Membership](/data-modelling/tenant/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](/data-modelling/identity/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](/data-modelling/tenant/company) por `companyId`.
* Relaciona-se com [Organization](/data-modelling/tenant/organization) por `organizationId`.
* Relaciona-se com [Membership](/data-modelling/tenant/membership) por `membershipId`.
* Relaciona-se com [User](/data-modelling/identity/user) por `userId`.
* Relaciona-se com [Customer](/data-modelling/identity/customer) por `customerId`, quando o funcionário também possui perfil de cliente/passageiro.

## Regras de negócio

* `Employee` só pode ser criado para Membership `ACTIVE` com `organizationId` preenchido e pertencente a uma Company.
* Membership interna de BackOffice e Membership de Cooperative não criam `Employee`.
* `organizationId` deve ser igual ao `organizationId` da Company informada em `companyId`.
* `membershipId` deve apontar para uma Membership `ACTIVE` do mesmo `userId` e da mesma `organizationId`.
* `membershipId` deve ser único em `Employee`, mantendo relação 1:1 entre Membership e Employee.
* O par `companyId` + `userId` deve 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 mesmo `userId`, quando existir.
* `Employee` não deve referenciar `Passenger`, porque Passenger é snapshot de uma passagem.
* Quando o vínculo deixa de valer, o registro deve mudar para `SUSPENDED` ou `REVOKED`; o histórico não deve ser apagado.
* Créditos concedidos por regra de funcionário devem validar a mesma `companyId` do `Employee`, mas o crédito persistido aponta para o `customerId`.

## Enums

### EmployeeStatus

| Valor       | Descrição                                  |
| ----------- | ------------------------------------------ |
| `ACTIVE`    | Funcionário ativo na Company               |
| `SUSPENDED` | Funcionário temporariamente suspenso       |
| `REVOKED`   | Vínculo encerrado ou revogado pela Company |

## Example

```json theme={null}
{
  "employeeId": "0197f760-8a12-7356-92c6-a7444de02d4a",
  "companyId": "0197a801-6a42-79aa-9e56-d3c85148c0fa",
  "organizationId": "0197a801-1690-7590-b3cf-19599b9be3e4",
  "membershipId": "0197a803-39a7-75e7-8cc2-62fb0542e642",
  "userId": "0197a7f5-2a88-7c1e-9b65-1f6d8f3b3a10",
  "customerId": "0197a7f6-4d36-7c0a-a7cb-54fcb33a3148",
  "employeeCode": "EMP-1024",
  "jobTitle": "Atendente",
  "department": "Operação",
  "status": "ACTIVE",
  "activatedAt": "2026-07-04T14:00:00.000Z",
  "suspendedAt": null,
  "revokedAt": null,
  "createdBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "createdAt": "2026-07-04T14:00:00.000Z",
  "updatedBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "updatedAt": "2026-07-04T14:00:00.000Z",
  "deletedBy": null,
  "deletedAt": null
}
```
