Skip to main content
Uma Trip representa uma viagem agendada — a combinação de uma rota, um veículo e um motorista em uma data/hora específica. É a entidade central do domínio de Operations.

Máquina de Estados

TripStatus

StatusDescrição
SCHEDULEDViagem agendada. Disponível para venda enquanto departureAt for futuro.
IN_PROGRESSViagem em andamento.
COMPLETEDViagem concluída.
CANCELLEDViagem cancelada.

Transições

DeParaRegra
SCHEDULEDIN_PROGRESSSó viagens agendadas podem iniciar
IN_PROGRESSCOMPLETEDSó viagens em andamento podem concluir
SCHEDULED / IN_PROGRESSCANCELLEDViagens concluídas ou já canceladas não podem ser canceladas
Cada transição atualiza o status da viagem.
As transições são explícitas. Horário de partida e registro de embarque não alteram o status por conta própria. Registrar BOARDING_COMPLETED mantém a viagem no status atual.

Disponibilidade

Uma viagem é considerada disponível para venda quando está SCHEDULED e departureAt ainda é futuro. A busca de ofertas só retorna viagens nessa condição.

Rastreamento GPS

Trip não guarda campos de tracking diretamente. O último ping GPS aceito fica na tabela auxiliar 1:1 TripTracking.
RegraDescrição
Status permitidoGPS só é aceito quando a Trip está IN_PROGRESS.
Tabela auxiliarCada Trip pode ter no máximo um TripTracking.
Último pontolatitude, longitude, accuracyMeters, speedKmh, headingDegrees e acceptedAt em TripTracking representam o último ping aceito.
AtualizaçãoCada novo ping aceito atualiza o mesmo TripTracking da viagem.
Sem históricoTripTracking não guarda pings antigos.

Relação com Outros Domínios

  • Fleet: a Trip referencia um Vehicle e um Driver da empresa.
  • Operations: a Trip contém TripStops (paradas) e TripItineraries (trechos compráveis); a venda de tickets gera TripSeatSegments.
  • Sales: Orders e Tickets são vendidos referenciando os TripItineraries da viagem.

Criação avulsa de viagem

Criação avulsa registra uma única viagem.

Dados esperados

CampoDescrição
routeIdRota da viagem
vehicleIdVeículo escalado
driverIdMotorista escalado
departureAtData/hora de partida
estimatedArrivalAtData/hora estimada de chegada
stopsParadas físicas da viagem
itinerariesTrechos vendáveis entre paradas
A empresa (companyId) vem do escopo da organização autenticada. Os itinerários referenciam paradas por stopOrder.

Fluxo passo-a-passo

Validações na criação

ValidaçãoComportamento
Rota pertence à organizaçãoRota de outra organização retorna 404
Conflito de horário do veículoSobreposição de janela [departureAt, estimatedArrivalAt) com viagens SCHEDULED/IN_PROGRESS do mesmo veículo → vehicle_conflict
Conflito de horário do motoristaMesma checagem para o motorista → driver_conflict
A criação avulsa valida escopo da rota e conflitos de horário de veículo e motorista.

Geração de TripStops e TripItineraries

Os TripStops representam as paradas físicas da viagem; os TripItineraries referenciam pares de paradas como trechos compráveis. Exemplo: viagem São Paulo → Campinas → Ribeirão Preto TripStops (nome resolvido via pointId no catálogo global):
stopOrderPointdepartureAtarrivalAt
0São Paulo08:00null
1Campinas09:4509:30
2Ribeirão Pretonull12:00
TripItineraries:
TripItineraryfromStopOrdertoStopOrderPreço
SP → Campinas01R$ 50,00
Campinas → Ribeirão12R$ 40,00
SP → Ribeirão (direto)02R$ 80,00
É possível criar itinerários para trechos intermediários e para o trajeto completo, cada um com preço independente. Isso permite precificação flexível — o trecho completo pode custar menos que a soma dos parciais.

Materialização a partir de programações

Além da criação avulsa, viagens são geradas em lote a partir de uma programação recorrente (TripSchedule). A programação define rota, veículo, motorista, frequência e paradas-template, e o DEVMOB materializa as ocorrências em um horizonte móvel de 90 dias. Cada viagem candidata é avaliada antes da criação: candidatas duplicadas ou em conflito são ignoradas, e somente as MATERIALIZABLE são criadas. Detalhes de frequência, idempotência e detecção de conflitos estão na página de Trip Schedules.

Cancelamento

O cancelamento marca a viagem como CANCELLED. Tickets, orders, payments e receivables permanecem fora do escopo dessa operação.