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

# Seat

> Assentos individuais de um veículo com posição no mapa

## Campos

| Campo        | Tipo         | Descrição                                              |
| ------------ | ------------ | ------------------------------------------------------ |
| `seatId`     | `UUID`       | Identificador único                                    |
| `vehicleId`  | `UUID`       | Referência ao veículo                                  |
| `seatTypeId` | `UUID`       | Referência ao tipo de assento                          |
| `label`      | `String`     | Rótulo do assento (ex.: "01", "02A")                   |
| `floor`      | `FloorLevel` | Andar do veículo onde o assento está localizado        |
| `row`        | `Int`        | Linha no mapa de assentos                              |
| `column`     | `String`     | Coluna no mapa de assentos                             |
| `side`       | `SeatSide`   | Lado do veículo                                        |
| `status`     | `SeatStatus` | Status do assento                                      |
| `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                                        |

## Relacionamentos

* Relaciona-se com [Vehicle](/data-modelling/fleet/vehicle)
* Relaciona-se com [SeatType](/data-modelling/fleet/seat-type)
* Relaciona-se com múltiplos [Ticket](/data-modelling/sales/ticket)
* Relaciona-se com múltiplos [TripSeatSegment](/data-modelling/operations/trip-seat-segment)

## Regras de Negócio

* A unicidade dos `label` por andar é responsabilidade do conteúdo do catálogo enviado no [Vehicle Setup](/domain/fleet/vehicle-setup).
* A posição do assento é definida pela combinação de `floor` + `row` + `column` + `side`.
* Assentos com status `UNAVAILABLE` não contam na capacidade de venda nem aparecem como disponíveis no mapa de assentos. Quando `status` é omitido no conteúdo aninhado, o padrão é `AVAILABLE`.
* `Seat` é mantido junto com o veículo, dentro do conteúdo hierárquico de [Vehicle Setup](/domain/fleet/vehicle-setup).
* A atualização do veículo substitui o catálogo enviado. Referências históricas em `Ticket` e `TripSeatSegment` são preservadas.

## Enums

### SeatStatus

| Valor         | Descrição              |
| ------------- | ---------------------- |
| `AVAILABLE`   | Assento disponível     |
| `UNAVAILABLE` | Assento não disponível |

### FloorLevel

| Valor    | Descrição      |
| -------- | -------------- |
| `FIRST`  | Primeiro andar |
| `SECOND` | Segundo andar  |

### SeatSide

| Valor   | Descrição                |
| ------- | ------------------------ |
| `LEFT`  | Lado esquerdo do veículo |
| `RIGHT` | Lado direito do veículo  |

## Example

```json theme={null}
{
  "seatId": "0197a80a-bc30-70c3-954f-657c74277162",
  "vehicleId": "0197a809-3eb8-7eb8-9c4f-8a6c2e7e5b1a",
  "seatTypeId": "0197a80a-56f4-71cb-93a6-6e69d1506ef7",
  "label": "01A",
  "floor": "FIRST",
  "row": 1,
  "column": "A",
  "side": "LEFT",
  "status": "AVAILABLE",
  "createdBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "createdAt": "2026-07-03T14:25:30.000Z",
  "updatedBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "updatedAt": "2026-07-03T14:25:30.000Z",
  "deletedBy": null,
  "deletedAt": null
}
```
