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

# PassengerBenefitRequest

> Solicitação de gratuidade ou desconto feita por um passageiro

O `PassengerBenefitRequest` representa uma solicitação de elegibilidade feita por um passageiro para um [FareBenefitProgram](/data-modelling/benefits/fare-benefit-program). A solicitação não é por empresa, exceto quando o próprio programa for comercial e pertencer a uma empresa.

## Campos

| Campo                       | Tipo                            | Descrição                                              |
| --------------------------- | ------------------------------- | ------------------------------------------------------ |
| `passengerBenefitRequestId` | `UUID`                          | Identificador único                                    |
| `customerId`                | `UUID`                          | Cliente/passageiro solicitante                         |
| `fareBenefitProgramId`      | `UUID`                          | Programa de benefício solicitado                       |
| `requestedByUserId`         | `UUID`                          | Usuário que abriu a solicitação                        |
| `reviewedByUserId`          | `UUID?`                         | Usuário que analisou a solicitação                     |
| `code`                      | `String`                        | Código legível da solicitação                          |
| `notes`                     | `String?`                       | Observações informadas pelo passageiro                 |
| `rejectionReason`           | `String?`                       | Motivo de rejeição, quando aplicável                   |
| `status`                    | `PassengerBenefitRequestStatus` | Status atual da solicitação                            |
| `validFrom`                 | `DateTime?`                     | Início da validade do benefício aprovado               |
| `validUntil`                | `DateTime?`                     | Fim da validade do benefício aprovado                  |
| `reviewedAt`                | `DateTime?`                     | Data de análise da solicitação                         |
| `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 [Customer](/data-modelling/identity/customer).
* Relaciona-se com [FareBenefitProgram](/data-modelling/benefits/fare-benefit-program).
* Relaciona-se com [User](/data-modelling/identity/user) como solicitante e revisor.
* Relaciona-se com múltiplas [BenefitDocumentValidation](/data-modelling/benefits/benefit-document-validation).
* Relaciona-se com múltiplos [BenefitUsageHistory](/data-modelling/benefits/benefit-usage-history), quando aprovado e utilizado.

## Regras de Negócio

* Uma solicitação só pode ser aprovada se os documentos obrigatórios da categoria estiverem aprovados.
* O responsável pela análise é definido por `reviewOwnerType` do [FareBenefitProgram](/data-modelling/benefits/fare-benefit-program).
* Quando `reviewOwnerType = PLATFORM`, a análise é feita pelo BackOffice/plataforma.
* Quando `reviewOwnerType = COMPANY`, a análise é feita pela empresa dona do programa.
* `rejectionReason` é obrigatório quando `status` for `REJECTED`.
* `validFrom` e `validUntil` definem a janela em que o benefício pode ser aplicado.
* Um passageiro não deve ter duas solicitações aprovadas e ativas para o mesmo programa.
* Solicitações `APPROVED`, `REJECTED`, `CANCELED` ou `EXPIRED` são terminais para o fluxo de análise.
* `requestedByUserId` indica quem abriu a solicitação; `createdBy`, `updatedBy` e `deletedBy` registram a auditoria da mutação do registro.

## Enums

### PassengerBenefitRequestStatus

| Valor       | Descrição                                            |
| ----------- | ---------------------------------------------------- |
| `PENDING`   | Solicitação criada, aguardando documentos ou triagem |
| `IN_REVIEW` | Solicitação em análise                               |
| `APPROVED`  | Solicitação aprovada                                 |
| `REJECTED`  | Solicitação rejeitada                                |
| `CANCELED`  | Solicitação cancelada pelo passageiro ou operador    |
| `EXPIRED`   | Benefício aprovado expirou                           |

## Example

```json theme={null}
{
  "passengerBenefitRequestId": "0197f712-8a7e-7a53-9d28-51f8f3c77d41",
  "customerId": "0197a7f6-4d36-7c0a-a7cb-54fcb33a3148",
  "fareBenefitProgramId": "0197f711-bf5b-7b90-a45b-577e6269a061",
  "requestedByUserId": "0197a7f6-2c4d-74ae-b89b-9d36d9c341f2",
  "reviewedByUserId": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "code": "BEN-20260704-0001",
  "notes": "Solicitação de meia passagem estudantil",
  "rejectionReason": null,
  "status": "APPROVED",
  "validFrom": "2026-07-04T12:00:00.000Z",
  "validUntil": "2027-01-04T12:00:00.000Z",
  "reviewedAt": "2026-07-04T12:00:00.000Z",
  "createdBy": "0197a7f6-2c4d-74ae-b89b-9d36d9c341f2",
  "createdAt": "2026-07-04T11:30:00.000Z",
  "updatedBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "updatedAt": "2026-07-04T12:00:00.000Z",
  "deletedBy": null,
  "deletedAt": null
}
```
