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

# TripSchedule

> Template recorrente que materializa viagens vendáveis em um horizonte móvel de 90 dias

## Campos

| Campo            | Tipo                    | Descrição                                              |
| ---------------- | ----------------------- | ------------------------------------------------------ |
| `tripScheduleId` | `UUID`                  | Identificador único                                    |
| `companyId`      | `UUID`                  | Referência à empresa                                   |
| `routeId`        | `UUID`                  | Referência à rota                                      |
| `vehicleId`      | `UUID`                  | Referência ao veículo                                  |
| `driverId`       | `UUID`                  | Referência ao motorista                                |
| `name`           | `String`                | Nome da programação                                    |
| `frequency`      | `TripScheduleFrequency` | Frequência de geração                                  |
| `interval`       | `Int`                   | Intervalo entre ocorrências (default `1`)              |
| `status`         | `TripScheduleStatus`    | Estado de ativação (default `ACTIVE`)                  |
| `departureAt`    | `DateTime`              | Primeira partida programada                            |
| `endAt`          | `DateTime?`             | Fim opcional da recorrência                            |
| `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 [Company](/data-modelling/tenant/company)
* Relaciona-se com [Route](/data-modelling/operations/route)
* Relaciona-se com [Vehicle](/data-modelling/fleet/vehicle)
* Relaciona-se com [Driver](/data-modelling/fleet/driver)
* Relaciona-se com múltiplos [TripScheduleStop](/data-modelling/operations/trip-schedule-stop)
* Relaciona-se com múltiplos [TripScheduleItinerary](/data-modelling/operations/trip-schedule-itinerary)

## Regras de Negócio

* Template recorrente que materializa `Trip` futuras vendáveis em um horizonte móvel de 90 dias (ver [Trip Schedules](/domain/operations/trip-schedules)).
* A materialização é idempotente: a chave `companyId + departureAt + routeId + vehicleId + driverId` evita duplicar a mesma viagem.
* Uma rotina diária re-materializa as programações `ACTIVE`, estendendo a cobertura conforme o tempo avança.
* Apenas o `name` é editável; o estado muda via operações dedicadas (pause/resume/delete).

## Enums

### TripScheduleFrequency

| Valor     | Descrição                                                                              |
| --------- | -------------------------------------------------------------------------------------- |
| `DAILY`   | A cada `interval` dias                                                                 |
| `WEEKLY`  | A cada `interval` semanas                                                              |
| `MONTHLY` | A cada `interval` meses; se o dia não existir no mês de destino, a ocorrência é pulada |

### TripScheduleStatus

| Valor      | Descrição                                                          |
| ---------- | ------------------------------------------------------------------ |
| `ACTIVE`   | Materializa viagens e participa da rotina diária de materialização |
| `PAUSED`   | Fica fora da rotina diária de materialização                       |
| `ARCHIVED` | Soft-delete final                                                  |

## Example

```json theme={null}
{
  "tripScheduleId": "0197a80d-92d8-7c7a-a1b2-2a745fa19e11",
  "companyId": "0197a801-6a42-79aa-9e56-d3c85148c0fa",
  "routeId": "0197a80c-4204-7b77-9005-48cc23677587",
  "vehicleId": "0197a809-3eb8-7eb8-9c4f-8a6c2e7e5b1a",
  "driverId": "0197a807-1ec7-75e8-8ff8-df64dd070046",
  "name": "São Paulo para Ribeirão Preto - manhã",
  "frequency": "DAILY",
  "interval": 1,
  "status": "ACTIVE",
  "departureAt": "2026-07-04T08:00:00.000Z",
  "endAt": null,
  "createdBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "createdAt": "2026-07-03T15:20:00.000Z",
  "updatedBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "updatedAt": "2026-07-03T15:20:00.000Z",
  "deletedBy": null,
  "deletedAt": null
}
```
