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

# Profile

> Visão consolidada do usuário autenticado — identidade, dados de passageiro e escopo de acesso

O `Profile` consolida identidade, dados de passageiro e escopo de acesso do usuário autenticado.

## Campos

| Campo              | Tipo            | Origem           | Descrição                                              |
| ------------------ | --------------- | ---------------- | ------------------------------------------------------ |
| `userId`           | `UUID`          | User             | Identificador do usuário                               |
| `googleProviderId` | `String?`       | User             | ID do provedor Google OAuth                            |
| `scope`            | `ProfileScope`  | Roles e vínculos | Escopo de organização, role e permissões               |
| `name`             | `String`        | User             | Nome completo                                          |
| `email`            | `String?`       | User             | Email                                                  |
| `emailVerified`    | `Boolean`       | User             | Email verificado                                       |
| `avatar`           | `String?`       | User             | Referência ao avatar                                   |
| `document`         | `String?`       | Customer         | Número do documento                                    |
| `documentType`     | `DocumentType?` | Customer         | Tipo do documento                                      |
| `birthDate`        | `Date?`         | Customer         | Data de nascimento                                     |
| `phoneIso`         | `String`        | User             | Código ISO do país do telefone                         |
| `phoneDdi`         | `String`        | User             | DDI do telefone                                        |
| `phoneNumber`      | `String`        | User             | Número do telefone                                     |
| `phoneVerified`    | `Boolean`       | User             | Telefone verificado                                    |
| `status`           | `UserStatus`    | User             | Status da conta                                        |
| `createdBy`        | `UUID?`         | User             | Usuário que criou o registro, quando aplicável         |
| `createdAt`        | `DateTime`      | User             | Data de criação                                        |
| `updatedBy`        | `UUID?`         | User             | Usuário que fez a última atualização, quando aplicável |
| `updatedAt`        | `DateTime`      | User             | Data da última atualização                             |

### ProfileScope

| Campo           | Tipo                        | Descrição                                                                            |
| --------------- | --------------------------- | ------------------------------------------------------------------------------------ |
| `permissionIds` | `PermissionId[]`            | União dos claims de acesso derivados, das roles internas e das roles do escopo ativo |
| `organization`  | `{ organizationId, name }?` | Organização do escopo ativo                                                          |
| `role`          | `{ roleId, name }?`         | Role do escopo ativo                                                                 |

## Regras de Negócio

* O `Profile` agrega dados de identidade (`User`), de passageiro (`Customer`, quando existe) e de autorização em uma única resposta.
* `permissionIds` é a união, sem duplicatas, dos claims de acesso derivados, das roles `INTERNAL` e das roles `ENVIRONMENT`/`ORGANIZATION` da organização ativa.
* Apenas Memberships `ACTIVE` participam da composição de claims, roles e permissions.
* `access:bko` é derivado quando o usuário possui Membership `ACTIVE` com Role `INTERNAL`.
* `access:ops` é derivado quando o usuário possui Membership `ACTIVE` em uma organização com Role `ENVIRONMENT` ou `ORGANIZATION`.
* `access:driver` é derivado quando o usuário possui vínculo ativo como motorista em uma empresa.
* `organization` e `role` só aparecem quando existe escopo ativo de organização. Passageiros e usuários apenas com roles internas não têm escopo de organização.

## Example

```json theme={null}
{
  "userId": "0197a7f5-2a88-7c1e-9b65-1f6d8f3b3a10",
  "googleProviderId": null,
  "scope": {
    "permissionIds": [
      "access:ops",
      "read:order",
      "create:order",
      "read:trip"
    ],
    "organization": {
      "organizationId": "0197a7f7-7291-7a43-96db-2c8580b80c5d",
      "name": "Transportes Brasil"
    },
    "role": {
      "roleId": "0197a7f8-15d1-7320-9b60-02497d7a0d61",
      "name": "Operador de Vendas"
    }
  },
  "name": "Mariana Costa",
  "email": "mariana.costa@example.com",
  "emailVerified": true,
  "avatar": "users/0197a7f5-2a88-7c1e-9b65-1f6d8f3b3a10/avatar.webp",
  "document": "12345678909",
  "documentType": "CPF",
  "birthDate": "1992-04-18",
  "phoneIso": "BR",
  "phoneDdi": "55",
  "phoneNumber": "11987654321",
  "phoneVerified": true,
  "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"
}
```
