Discount Schedules

A Discount Schedule is a reusable set of volume-discount tiers — buy more, save more — applied automatically based on a line’s quantity (or, optionally, its total amount, term, or a custom field). Define a schedule once and reference it from many products; at pricing time Pinion resolves the matching tier and applies the discount.

They’re org-wide, so you manage them in the Pinion admin app → Discount Schedules (/lwr/application/ai/pinion-pinionAdmin), not on an individual product. The list shows each schedule’s Type, Unit, Scope, tier count, and an Active toggle, with search + scope/active filters.

The Discount Schedules list in the Pinion admin app — schedules with Name, Type, Unit, Scope, tier count, and an Active toggle, plus search and scope/active filters
The Discount Schedules list — each schedule's Type, Unit, aggregation Scope, tier count, and Active state, with search + filters.

Creating a schedule

New schedule opens the editor. The header fields:

  • Name and Description.
  • Type — how the matched tier applies to the quantity. These follow the Salesforce CPQ convention:
    • Slab (graduated) — each tier’s discount applies only to its own band, like tax brackets — the first units are discounted at tier 1, the next band at tier 2, and so on, then weighted-averaged into one per-unit price.
    • Range (volume) — the single tier the total quantity lands in discounts every unit. (Land in the 11–50 tier and all units get that tier’s discount.)
  • Discount Unit — Percent (% off) or Amount (flat amount off).
  • Aggregation Scope — what quantity is summed to pick the tier: Line (this line alone), Group (the line’s group), or Quote (the whole quote). Quote/Group scope is how “total across the deal earns a better tier” works.
  • Scheduling Method — what resolves the tier: Quantity, Total Amount, Term (months), or Custom Field. Choosing Custom Field adds a Custom Field API Name input (a numeric field on the line item, e.g. SeatCount__c).
  • Active — inactive schedules stop resolving without being deleted.
  • Start Date / End Date — an optional effective-date window; outside it, the schedule doesn’t apply.
The New Discount Schedule dialog showing Name, Type (Slab/Range), Discount Unit, Aggregation Scope, Scheduling Method, Active, Start/End Date, and a Tiers table of Lower Bound / Upper Bound / Discount
The discount-schedule editor: Slab vs Range, percent/amount, the aggregation scope and scheduling method, an effective-date window, and the tier table.

Tiers

Below the header is the Tiers table — each tier is a Lower Bound, Upper Bound (leave blank for ∞ on the open-ended top tier), and a Discount (in the schedule’s unit). Add tier appends a row starting just above the previous tier’s upper bound.

Bounds are inclusive on both ends. On a Range schedule, the value that picks the tier resolves like this:

  • Inside a tier — that tier’s discount.
  • In a gap between two tiers — the discount of the tier below the gap (the tier with the highest lower bound that the value has reached). It never jumps to the top tier.
  • Above the top tier’s upper bound — the top tier’s discount. (Leave the top tier’s upper bound blank and every larger value lands in it anyway.)
  • Below the first tier’s lower bound — no tier, and no discount. A schedule whose first tier is 10–49 gives a quantity of 5 its list price.

Worked example. A Quantity schedule with tiers 10–49 → 10% and 50–99 → 20%:

QuantityTierDiscount
5nonenone (list price)
1010–4910%
4910–4910%
5050–9920%
15050–9920% (above the top tier)

The editor does not require the first tier to start at 1, and it does not check that tiers are contiguous. Two things follow:

  • A value can be 0: a Term schedule on a line with no start and end dates, or a Custom Field schedule whose field is blank. Start the first tier at 0 if those lines should still get the first tier’s discount; otherwise they get none.
  • A value can fall between two tiers. With Total Amount, a deal value carries cents, so tiers 0–4999 → 0%, 5000–9999 → 5%, 10000+ → 10% leave gaps that values such as $4,999.50 and $9,999.50 fall into. Each keeps the tier it has already reached: $4,999.50 gets 0% and $9,999.50 gets 5%. A quantity of 15 on tiers 1–9 / 20–49 / 50+ gets the 1–9 tier. To make the bands read exactly as they behave, author each lower bound as the previous upper bound plus one unit of the value you’re matching (for dollars, 0–4999.99, 5000–9999.99).

Which quantity picks the tier

With the Quantity scheduling method, tiers match on billable units, the same quantity the line saves as its Quantity, not the raw number the rep typed:

  • A standalone subscription line counts quantity × term, with the term counted in the product’s subscription term unit. 10 seats on a 3-year line whose term unit is Year count as 30.
  • A bundle option counts its effective quantity. A Component (or Fixed Price Component) counts option quantity × bundle quantity; an Accessory counts its option quantity alone. On a subscription bundle, both are also × the bundle’s term.
  • Group and Quote scopes add up those same billable quantities across the lines in scope.

An MDQ line is the exception: each segment’s tier comes from the quantity entered on the segment (not prorated, not × term), summed across the ramp or taken segment by segment as described below.

Where schedules apply

A schedule on its own does nothing until it’s referenced. Schedules attach to products, accounts (an account-default schedule), and pricebooks, and the resolver picks the applicable one at pricing time. The editor surfaces an “In use by N products / M accounts” banner when you edit a referenced schedule.

Discount Schedules and MDQ

For dimensioned (MDQ) products, a dimension’s Discount Aggregation setting decides how segment quantities feed the schedule: Across Segments sums every segment into one total that picks one tier for the whole ramp (a ramp is one commitment), while Per-Segment lets each segment’s own quantity pick its own tier. That setting and a schedule’s own Aggregation Scope work together to decide the tier.

  • Dimensions — the Discount Aggregation setting that pairs with these schedules on MDQ products.
  • Block Pricing — fixed unit price per band (the price-side counterpart to volume discounting).
  • Pricing Methods — where volume discounts sit in the waterfall.