What a percent discount is
A percent discount subtracts a percentage of the calculated bill amount, applied independently to each billing calculation. It has no budget, no pool, and no lifecycle to track — it’s a stateless calculation: discount = value% × gross amount.How it compares to other discount types
| Type | Anchored to | Pool? | Scales with usage? |
|---|---|---|---|
| Percent discount | Dollar amount (rate) | No | Yes |
| Fixed discount | Dollar amount (absolute) | Yes | No |
| Quantity discount | Units (volume) | Yes | No |
The core mechanic
- Calculate the gross bill amount, after quantity discounts, the pricing model, and any minimum commitments have already been applied.
- Apply the percentage: discount = value% × gross amount.
- If a cap is configured, cap the discount: discount = min(discount, remaining period cap, remaining lifetime cap).
- Subtract: invoice amount = gross amount − discount, floored at $0.
Why caps create a “degressive” discount
Without a cap, the customer always pays the same percentage of their bill, no matter how large it gets. Once a dollar cap is introduced, the effective discount rate declines as the bill grows past the cap’s breakpoint — the dollar amount stays fixed, but as a share of an ever-larger bill, that fixed amount matters less and less.| Bill | Discount | Effective rate |
|---|---|---|
| $1,000 | $200 | 20% |
| $2,500 | $500 | 20% (breakpoint) |
| $5,000 | $500 | 10% |
| $10,000 | $500 | 5% |
Cadence: how caps interact with billing periods
Cadence controls two things: when a per-period cap resets, and how the percentage is calculated across billing periods. Without a cadence, each billing period is independent — the percentage applies to that period’s gross amount alone, and any cap applies to that period alone. With a cadence, billing periods are grouped into cadence windows. The percentage is applied to the group’s total, then distributed back to individual periods in proportion to each period’s share of the group total. This proportional distribution exists for two reasons: it avoids giving a 10,000 month the same flat discount, and it produces a single rounding point per group rather than accumulating rounding drift period by period. The total discount across the group is identical either way the math is done — what changes is where the cap applies (to the group total, not each period) and where rounding happens.Two kinds of caps
| Level | Field | State | Refreshes |
|---|---|---|---|
| Per-period | max_per_period with optional cadence | Within the current window | At each cadence boundary |
| Lifetime | max_lifetime | Forever, across the whole contract | Never |