Campos
Prevenção de venda dupla
A chave de ocupação étripId + seatId + segmentOrder. Uma segunda venda para a mesma combinação é rejeitada como assento já ocupado.
Exemplo prático
Considere uma viagem SP → Campinas → Ribeirão com 2 segmentos:Cenário: Passageiro A compra SP → Ribeirão (assento 5)
O assento 5 está ocupado nos dois segmentos. Ninguém mais pode comprá-lo para qualquer trecho desta viagem.
Cenário: Compartilhamento de assento em trechos distintos
Se Passageiro A compra apenas SP → Campinas (segmento 1):
O assento 5 no segmento 2 (Campinas → Ribeirão) não tem registro, portanto está livre. Passageiro B pode comprá-lo:
Disponibilidade de um itinerário
A contagem de assentos disponíveis para um itinerário é calculada como capacidade do veículo − assentos já vendidos no range de segmentos. Ondevehicle_capacity é a contagem de assentos ativos do veículo. A disponibilidade é derivada das vendas a cada consulta.
Faixas de disponibilidade
A busca de ofertas classificaavailableSeats em uma faixa (AvailableSeatsStatus):
A busca de ofertas (offerings) é paginada por cursor e retorna somente itinerários com
availableSeats > 0. Itinerários esgotados ficam fora dos resultados.Regra fundamental
Um assento conta como disponível para um itinerário se nenhum dos segmentos entre ostopOrder da parada de embarque (inclusive) e o stopOrder da parada de desembarque (exclusivo) possui um TripSeatSegment para aquele assento.
Mapa de assentos
O mapa de assentos de um itinerário lista os assentos do veículo por andar. Cada assento é marcado como:AVAILABLE— o assento está ativo (status = AVAILABLE) e não possui nenhum TripSeatSegment no range do itinerário.UNAVAILABLE— o assento está inativo/bloqueado ou já ocupado em algum segmento do range.