TransportOperatorQuotaUsage registra cada movimento de cota gerado por uma Trip. Ele evita dupla contagem e permite auditar por que uma cota foi reservada, consumida ou liberada.
Campos
| Campo | Tipo | Descrição |
|---|---|---|
transportOperatorQuotaUsageId | UUID | Identificador único |
transportOperatorQuotaId | UUID | Cota movimentada |
cooperativeId | UUID | Cooperativa da cota |
transportOperatorId | UUID | Permissionário controlado |
routeId | UUID | Rota controlada |
tripId | UUID | Trip que originou o movimento |
type | TransportOperatorQuotaUsageType | Tipo do movimento |
status | TransportOperatorQuotaUsageStatus | Estado do movimento |
periodStart | DateTime | Início do período da cota |
periodEnd | DateTime | Fim do período da cota |
idempotencyKey | String | Chave única para evitar dupla contagem |
createdBy | UUID? | Usuário que criou o movimento, quando aplicável |
createdAt | DateTime | Data de criação do movimento |
Relacionamentos
- Relaciona-se com TransportOperatorQuota por
transportOperatorQuotaId. - Relaciona-se com Cooperative por
cooperativeId. - Relaciona-se com TransportOperator por
transportOperatorId. - Relaciona-se com Route por
routeId. - Relaciona-se com Trip por
tripId.
Regras de Negócio
RESERVEé criado quando uma Trip entra emIN_PROGRESS.CONSUMEé criado quando uma Trip entra emCOMPLETED.RELEASEé criado quando uma Trip reservada é cancelada antes de consumir cota definitiva.idempotencyKeydeve ser única paratransportOperatorQuotaId + tripId + type.- A mesma Trip não pode consumir a mesma cota mais de uma vez.
- Movimentos são append-only. Correções devem criar novo movimento compensatório.
Enums
TransportOperatorQuotaUsageType
| Valor | Descrição |
|---|---|
RESERVE | Reserva temporária de cota |
CONSUME | Consumo definitivo de cota |
RELEASE | Liberação de reserva |
TransportOperatorQuotaUsageStatus
| Valor | Descrição |
|---|---|
APPLIED | Movimento aplicado na cota |
REVERSED | Movimento revertido por compensação |