Esquema
| Campo | Tipo | Descrição |
|---|---|---|
couponId | UUIDv7 | Identificador único |
externalRef | string | ID do cupom no Stripe (único) |
code | string | Código único, máx 40 |
name | string | Nome de exibição, máx 255 |
type | enum | FIXED (centavos), PERCENTAGE |
amount | integer | Valor do desconto |
currency | enum | Moeda |
duration | enum | ONCE, REPEATING |
durationInMonths | integer? | Para REPEATING |
maxRedemptions | integer? | Máximo de usos |
redeemBy | datetime? | Data de expiração |
timesRedeemed | integer | Contador de usos |
amountRedeemed | integer | Total de desconto concedido |
status | enum | ACTIVE, DEPLETED, EXPIRED |
createdBy | UUIDv7 | Criador |
createdAt | datetime | Criação |
updatedBy | UUIDv7 | Último atualizador |
updatedAt | datetime | Última atualização |
deletedBy | UUIDv7? | Quem deletou |
deletedAt | datetime? | Soft delete |
O campo
amount tem significado diferente dependendo do type: para FIXED, é o valor absoluto em centavos (ex: 5000 = R$50,00); para PERCENTAGE, é o percentual inteiro (ex: 20 = 20% de desconto).Transições de Estado
Relacionamentos
- Has many CouponUsages
- Has many SubscriptionCoupons
Regras de Negócio
codeglobalmente único- FIXED = desconto absoluto em centavos; PERCENTAGE = valor percentual
- ONCE = aplica em uma única invoice por organização; REPEATING = aplica por ciclo de cobrança
- Sincronizado com o Stripe