Uma Route representa um par fixo de origem-destino definido por uma empresa de transporte. Rotas são reutilizáveis — a mesma rota pode ser usada em múltiplas viagens. Origem e destino são referências ao catálogo global de Points.
Campos
| Campo | Tipo | Descrição |
|---|
routeId | UUID | Identificador único |
companyId | UUID | Empresa dona da rota |
originId | UUID | Referência ao Point de origem |
destinationId | UUID | Referência ao Point de destino |
distanceKm | decimal | Distância em quilômetros |
estimatedDuration | integer | Duração estimada do trajeto em minutos |
status | RouteStatus | Status da rota (PENDING_APPROVAL, ACTIVE ou INACTIVE) |
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 de última atualização |
deletedBy | UUID? | Usuário que removeu o registro, quando aplicável |
deletedAt | datetime? | Data de remoção |
Regras de Negócio
- Uma Route pertence a exatamente uma Company (resolvida a partir da organização autenticada na criação).
- A rota define apenas os pontos extremos (origem e destino) via
originId e destinationId. Os pontos intermediários são representados pelos TripStops das viagens; TripItineraries criam os pares compráveis entre essas paradas.
originId e destinationId apontam para entradas do catálogo global de Point — nome e coordenadas vêm da entidade Point, não são duplicados em Route. A criação valida que ambos os Points existem.
- A distância (
distanceKm) e a duração estimada (estimatedDuration, em minutos) são informadas pela empresa e servem como referência para precificação e planejamento — não são calculadas pelo route preview.
- A rota nasce com
status = PENDING_APPROVAL.
- A rota só deve virar
ACTIVE por aprovação registrada em RouteApproval.
- Rotas
ACTIVE podem ser usadas em trips e vendas. Rotas INACTIVE ficam fora de novas operações.
- Uma rota com viagens ativas (
SCHEDULED ou IN_PROGRESS) não pode ser excluída: a exclusão é bloqueada com has_active_trips.
- O acesso é escopado por organização; uma rota de outra organização retorna 404.
Aprovação
| Etapa | Ator | Efeito |
|---|
| Criação | Company | Route nasce PENDING_APPROVAL com origem, destino, distância e duração estimada. |
| Análise | Usuário autorizado | Dados da rota são revisados. |
| Aprovação | Usuário autorizado | RouteApproval registra decisão e Route vira ACTIVE. |
| Rejeição | Usuário autorizado | RouteApproval registra motivo e a Route permanece PENDING_APPROVAL, fora de operação. |
A permission de aprovar fica no domínio de Authorization. O domínio de Operations registra o fluxo operacional e o efeito sobre a Route.
A rota define o trajeto macro (São Paulo → Rio de Janeiro) através de Points do catálogo global. Uma viagem possui TripStops (paradas físicas) e oferece múltiplos TripItineraries (trechos parciais compráveis) que referenciam pares de paradas.
Rotas são entidades de referência — elas não mudam a cada viagem. Se uma empresa opera a mesma linha todo dia, ela cria a rota uma vez (referenciando dois Points existentes) e agenda múltiplas viagens para ela.