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

# Overview

> Visão geral do domínio comercial: checkout, pedidos, passagens e precificação.

O domínio de Sales gerencia o **fluxo comercial** de venda de passagens. Ele conecta o domínio de Operations (viagens e itinerários disponíveis) ao domínio Billing (pagamentos e recebíveis).

## Entidades

<CardGroup cols={2}>
  <Card title="Order Lifecycle" icon="file-invoice" href="/domain/sales/order-lifecycle">
    Checkout, Orders por empresa, atualização de pagamento e cancelamento.
  </Card>

  <Card title="Ticket Pricing" icon="tag" href="/domain/sales/ticket-pricing">
    Como o preço final do ticket é composto a partir de seatPrice e tripItineraryPrice.
  </Card>

  <Card title="Ticket Activity" icon="qrcode" href="/domain/sales/ticket-activity">
    Histórico de validação, embarque, rejeição, falha e reimpressão de passagens.
  </Card>
</CardGroup>

## Modelo de Dados

```mermaid theme={null}
erDiagram
    Checkout ||--o{ Order : "groups"
    Order ||--o{ Ticket : "contains"
    Order ||--o| Payment : "paid by"
    Ticket }o--|| Trip : "for"
    Ticket ||--o{ TicketActivity : "records"
    Order }o--|| Customer : "bought by"
    Order }o--|| Company : "belongs to"
    Order }o--|| User : "created by"
    Ticket }o--|| TripItinerary : "for"
    Ticket }o--|| Seat : "assigned"
    Ticket }o--|| Passenger : "travels"
    Ticket ||--o{ TripSeatSegment : "occupies"
```

## Conceitos-Chave

* **Checkout** agrupa a compra do cliente e pode gerar um ou mais Orders.
* **Order** é o agrupador de passagens de uma única empresa — um pedido pode conter um ou mais tickets e sempre possui Customer.
* **Ticket** é o item individual do pedido — representa uma passagem para um itinerário específico em um assento específico, com um passageiro associado.
* **TicketActivity** registra tentativas de validação, embarque, rejeições, falhas e reimpressões.
* O `companyId` identifica a empresa responsável pelos tickets e pelo fluxo financeiro daquele Order.
* Cada Order registra o cliente (`customerId` → Customer) e o usuário responsável pela criação do pedido (`soldById` → User).
* Os preços são **congelados** no momento da compra — alterações posteriores no itinerário ou categoria de assento não afetam passagens já emitidas. Cada Ticket também guarda um `snapshot` denormalizado para exibição.
* Benefícios, promoções e créditos podem participar do checkout conforme suas próprias regras de domínio.

<Info>
  O Sales é o ponto de integração entre Operations e Billing. A venda de um Ticket ocupa assentos no TripSeatSegment (Operations) e gera obrigações de pagamento (Billing).
</Info>
