> ## 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.

# User

> Identidade global do sistema — credenciais e dados de acesso

## Campos

| Campo              | Tipo         | Descrição                                                                     |
| ------------------ | ------------ | ----------------------------------------------------------------------------- |
| `userId`           | `UUID`       | Identificador único                                                           |
| `googleProviderId` | `String?`    | ID do provedor Google OAuth                                                   |
| `name`             | `String`     | Nome completo do usuário                                                      |
| `email`            | `String?`    | Email do usuário (único, opcional)                                            |
| `phoneIso`         | `String`     | Código ISO do país do telefone                                                |
| `phoneDdi`         | `String`     | DDI do telefone                                                               |
| `phoneNumber`      | `String`     | Número do telefone                                                            |
| `phoneVerified`    | `Boolean`    | Indica se o telefone foi verificado. Default: `false`                         |
| `emailVerified`    | `Boolean`    | Indica se o email foi verificado. Default: `false`                            |
| `password`         | `String?`    | Credencial protegida da senha. Nulo para contas OAuth-only ou ainda pendentes |
| `avatar`           | `String?`    | Object key do avatar no storage                                               |
| `status`           | `UserStatus` | Status da conta. Default: `ACTIVE`                                            |
| `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                                                               |

O par `phoneDdi` + `phoneNumber` é único em todo o sistema.

## Relacionamentos

* **Has one (optional)** [Customer](/data-modelling/identity/customer) (perfil de passageiro)
* **Has one (optional)** [Driver](/data-modelling/fleet/driver)
* Relaciona-se com múltiplas [UserSession](/data-modelling/identity/user-session)
* Relaciona-se com múltiplos [Membership](/data-modelling/tenant/membership) (vínculo com organizações via roles)
* Relaciona-se com múltiplos [Employee](/data-modelling/tenant/employee) (vínculo operacional com Companies)
* Relaciona-se com múltiplos [OTP](/data-modelling/identity/otp)
* Relaciona-se com múltiplos [Order](/data-modelling/sales/order) (como responsável pela criação — `soldBy`)
* Relaciona-se com múltiplos [Invite](/data-modelling/tenant/invite) (emitidos e recebidos)

## Regras de Negócio

* O telefone (`phoneDdi` + `phoneNumber`) é obrigatório e único — é o identificador primário de login.
* O `email` é opcional, mas único quando preenchido. O login por username aceita **email ou telefone**.
* `password` é nulo para usuários autenticados exclusivamente via Google OAuth e para contas `PENDING` (criadas sem senha, ativadas por Invite).
* `googleProviderId` é único quando preenchido.
* Usuários `BLOCKED` não podem autenticar nem renovar sessão.
* Ao bloquear um usuário, sessões ativas devem ser revogadas para interromper a cadeia de acesso.
* Documento, data de nascimento e endereços de passageiro vivem em [Customer](/data-modelling/identity/customer), não no `User`.
* Claims de acesso como `access:ops`, `access:bko` e `access:driver` são derivados no [Profile](/data-modelling/identity/profile) a partir de Memberships e vínculos operacionais.

## Enums

### UserStatus

| Valor     | Descrição                                                  |
| --------- | ---------------------------------------------------------- |
| `PENDING` | Conta criada sem senha — aguarda ativação por Invite       |
| `ACTIVE`  | Conta ativa e apta a autenticar                            |
| `BLOCKED` | Conta bloqueada e impedida de autenticar ou renovar sessão |

## Example

```json theme={null}
{
  "userId": "0197a7f5-2a88-7c1e-9b65-1f6d8f3b3a10",
  "googleProviderId": null,
  "name": "Mariana Costa",
  "email": "mariana.costa@example.com",
  "phoneIso": "BR",
  "phoneDdi": "55",
  "phoneNumber": "11987654321",
  "phoneVerified": true,
  "emailVerified": true,
  "password": "$protected_password_hash",
  "avatar": "users/0197a7f5-2a88-7c1e-9b65-1f6d8f3b3a10/avatar.webp",
  "status": "ACTIVE",
  "createdBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "createdAt": "2026-07-03T12:00:00.000Z",
  "updatedBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "updatedAt": "2026-07-03T12:10:00.000Z",
  "deletedBy": null,
  "deletedAt": null
}
```
