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

# PromotionalRoundTripRule

> Regra fixa de promoção para ida e volta

O `PromotionalRoundTripRule` representa a regra de validação para uma promoção do tipo `ROUND_TRIP`. Ela define como o sistema reconhece ida e volta e onde o desconto deve ser aplicado.

## Campos

| Campo                        | Tipo                              | Descrição                                                   |
| ---------------------------- | --------------------------------- | ----------------------------------------------------------- |
| `promotionalRoundTripRuleId` | `UUID`                            | Identificador único                                         |
| `promotionalId`              | `UUID`                            | Promoção dona da regra                                      |
| `organizationId`             | `UUID`                            | Organização da Company responsável pela promoção            |
| `companyId`                  | `UUID`                            | Company dona da promoção                                    |
| `outboundRouteId`            | `UUID?`                           | Rota de ida exigida, quando a regra é restrita a uma rota   |
| `returnRouteId`              | `UUID?`                           | Rota de volta exigida, quando a regra é restrita a uma rota |
| `sameRoute`                  | `Boolean`                         | Indica se ida e volta devem pertencer ao mesmo par de rota  |
| `minHoursBetweenTrips`       | `Int?`                            | Intervalo mínimo entre ida e volta                          |
| `maxDaysBetweenTrips`        | `Int?`                            | Janela máxima entre ida e volta                             |
| `applyTo`                    | `PromotionalRoundTripApplyTarget` | Onde o desconto é aplicado                                  |
| `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 da última atualização                                  |
| `deletedBy`                  | `UUID?`                           | Usuário que removeu o registro, quando aplicável            |
| `deletedAt`                  | `DateTime?`                       | Data de remoção lógica                                      |

## Relacionamentos

* Relaciona-se com [Promotional](/data-modelling/promotion/promotional) por `promotionalId`.
* Relaciona-se com [Company](/data-modelling/tenant/company) por `companyId`.
* Relaciona-se com [Route](/data-modelling/operations/route) por `outboundRouteId`, quando preenchido.
* Relaciona-se com [Route](/data-modelling/operations/route) por `returnRouteId`, quando preenchido.

## Regras de Negócio

* Deve existir apenas para Promotional com `type = ROUND_TRIP`.
* Cada Promotional `ROUND_TRIP` deve ter exatamente uma PromotionalRoundTripRule ativa.
* Quando `outboundRouteId` estiver preenchido, a ida deve pertencer à Route informada.
* Quando `returnRouteId` estiver preenchido, a volta deve pertencer à Route informada.
* Quando `sameRoute = true`, ida e volta devem formar o mesmo par operacional definido pela Company.
* `minHoursBetweenTrips` e `maxDaysBetweenTrips` validam a janela entre a partida da ida e a partida da volta.
* `applyTo = RETURN_TICKET` aplica o desconto somente na passagem de volta.
* `applyTo = CHEAPEST_TICKET` aplica o desconto na passagem de menor valor.
* `applyTo = ORDER` aplica o desconto no Order após validar ida e volta.
* O front pode usar a regra para sugerir a compra de volta quando o cliente escolhe uma ida elegível.
* `createdBy`, `updatedBy` e `deletedBy` seguem o padrão de auditoria do DEVMOB e registram o usuário responsável pela mutação, quando aplicável.

## Enums

### PromotionalRoundTripApplyTarget

| Valor             | Descrição                                    |
| ----------------- | -------------------------------------------- |
| `RETURN_TICKET`   | Aplica o desconto na passagem de volta       |
| `CHEAPEST_TICKET` | Aplica o desconto na passagem de menor valor |
| `ORDER`           | Aplica o desconto no pedido                  |

## Example

```json theme={null}
{
  "promotionalRoundTripRuleId": "0197f7c3-0c3a-7354-a437-496ab4279987",
  "promotionalId": "0197f7c0-55de-7b18-9073-c7d7c8c9a441",
  "organizationId": "0197a801-1690-7590-b3cf-19599b9be3e4",
  "companyId": "0197a801-6a42-79aa-9e56-d3c85148c0fa",
  "outboundRouteId": "0197a80c-4204-7b77-9005-48cc23677587",
  "returnRouteId": "0197a80d-04b3-78fc-a5c5-b31e607df585",
  "sameRoute": false,
  "minHoursBetweenTrips": 2,
  "maxDaysBetweenTrips": 30,
  "applyTo": "RETURN_TICKET",
  "createdBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "createdAt": "2026-07-04T15:06:00.000Z",
  "updatedBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "updatedAt": "2026-07-04T15:06:00.000Z",
  "deletedBy": null,
  "deletedAt": null
}
```
