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

# Passenger

> Snapshot identificável do passageiro que viaja em um ticket

O `Passenger` representa a pessoa que viaja em uma passagem. Ele não é necessariamente o comprador (`Customer`) nem precisa ter conta (`User`) no DEVMOB.

Esse modelo permite cenários como uma pessoa comprando passagens para familiares, funcionários ou terceiros. O comprador continua sendo o `Customer` do `Order`; o viajante de cada passagem fica em `Passenger`.

## Campos

| Campo          | Tipo           | Descrição                                              |
| -------------- | -------------- | ------------------------------------------------------ |
| `passengerId`  | `UUID`         | Identificador único                                    |
| `name`         | `String`       | Nome do passageiro                                     |
| `document`     | `String`       | Documento do passageiro                                |
| `documentType` | `DocumentType` | Tipo do documento                                      |
| `birthDate`    | `Date?`        | Data de nascimento                                     |
| `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 múltiplos [Ticket](/data-modelling/sales/ticket)

## Regras de Negócio

* `Passenger` identifica o viajante de uma passagem, não o comprador do pedido.
* Um `Customer` pode comprar tickets para si ou para outros passageiros.
* O par `document` + `documentType` é único.
* Durante a criação de um pedido, o passageiro é resolvido por `document` + `documentType`.
* Se já existir passageiro com o mesmo documento e tipo, o registro é reutilizado e `name`/`birthDate` podem ser atualizados com os dados mais recentes enviados no pedido.
* O `Ticket` mantém um `snapshot.passenger` denormalizado para preservar os dados exibidos no momento da emissão.
* Atualizações posteriores no `Passenger` não devem alterar o snapshot de tickets já emitidos.

## Enums

### DocumentType

| Valor  | Descrição                            |
| ------ | ------------------------------------ |
| `CPF`  | Cadastro de Pessoa Física            |
| `CNPJ` | Cadastro Nacional da Pessoa Jurídica |
| `RG`   | Registro Geral                       |

## Example

```json theme={null}
{
  "passengerId": "0197a814-2460-74c2-a8d7-819a6a0d6f54",
  "name": "Mariana Costa",
  "document": "12345678909",
  "documentType": "CPF",
  "birthDate": "1992-04-18",
  "createdBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "createdAt": "2026-07-03T16:00:30.000Z",
  "updatedBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "updatedAt": "2026-07-03T16:00:30.000Z",
  "deletedBy": null,
  "deletedAt": null
}
```
