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

# Promotional Rules

> Regras fixas que validam promoções antes da aplicação no checkout.

Cada promoção tem uma regra fixa compatível com seu tipo. Essa regra permite exibir a promoção antes do checkout e validar a aplicação quando o carrinho estiver completo.

## Fluxo

```mermaid theme={null}
sequenceDiagram
    actor Company as CompanyOperator
    actor Customer
    participant Front
    participant System
    participant Order

    Company->>System: Cria promoção e regra fixa
    Front->>System: Consulta promoções ativas
    System-->>Front: Retorna catálogo elegível
    Customer->>Front: Monta carrinho
    Front->>System: Envia checkout
    System->>System: Valida Company, canal, vigência e regra
    System->>Order: Aplica desconto
    System->>System: Registra histórico de uso
```

## Regras por tipo

| Tipo              | Critério principal                                                                  | Aplicação                      |
| ----------------- | ----------------------------------------------------------------------------------- | ------------------------------ |
| `ROUTE`           | Ticket de Trip vinculada à Route informada.                                         | Order ou tickets elegíveis.    |
| `ROUND_TRIP`      | Ida e volta dentro das rotas e janelas configuradas.                                | Volta, menor ticket ou Order.  |
| `MULTI_TICKET`    | Quantidade mínima de tickets, com restrições opcionais de Order, Trip ou Passenger. | Todos, extras ou menor ticket. |
| `LOW_DEMAND_TIME` | Dia, horário, rota opcional e ocupação máxima opcional.                             | Order ou tickets elegíveis.    |

## Validação

Uma promoção ativa só pode ser aplicada quando:

* pertence à mesma Company do Order;
* está dentro da janela de validade;
* está habilitada para o canal da compra;
* tem regra ativa compatível com o tipo;
* a regra aceita o contexto do checkout;
* não conflita com outra promoção quando `stackable = false`.

## Histórico

O histórico guarda:

* promoção aplicada;
* regra validada;
* Order, Ticket ou Checkout relacionado;
* valor original;
* valor descontado;
* valor final;
* snapshot da regra usada no momento da aplicação.

Veja a modelagem em [Promotional](/data-modelling/promotion/promotional).
