Proration

Proration is how Pinion values a subscription line whose coverage doesn’t align to whole billing periods. Whenever a line covers a partial period at a contract edge — a subscription that starts or ends mid-period, a per-segment partial in a multi-dimensional (MDQ) ramp, or an amendment that changes price part-way through a term — the billable term factor is scaled to the fraction of the period actually covered. A full period is 1.0; a partial period is somewhere between 0 and 1.0.

This is a general subscription concept, not an MDQ-only feature. A plain single-dimension subscription prorates its partial first or last period the same way a multi-segment MDQ line prorates each segment, and the same way an amendment mid-term price change prorates the delta.

The Proration Type field

Each subscription product carries a Proration Type (ProrationType__c) — Daily, Weekly, Monthly, or Quarterly. Leave it blank on a product and Pinion falls back to the org-wide Default Proration Type in Configurator Settings (DefaultProrationType__c), which itself defaults to Daily.

Think of Proration Type as a granularity floor — the smallest unit Pinion prorates a partial period down to:

Daily → Weekly → Monthly → Quarterly is finest → coarsest.

A finer type prorates a partial period by exact days; a coarser type rounds the partial period down to completed whole units. The reference period each factor is measured against comes from the product’s subscription term unit (SubscriptionTermUnit__c — Week, Month, Quarter, or Year).

How each type computes the term factor

Let the covered range be [start, end] (both inclusive):

Proration TypeHow the term factor is computedIn plain English
Dailycovered days ÷ reference days for the term unit (Year 365 · Quarter 91 · Month 30 · Week 7)pure day count — prorates by the exact days
Weeklycovered days ÷ 7pure week count (term-unit-independent)
Monthlywhole months count as 1.0; the partial month at an edge prorates by days (remaining days ÷ 30)full months are whole; the leftover part-month bills by day
Quarterlywhole quarters count as 1.0; a partial quarter prorates by whole completed monthsfloor(completed months) ÷ 3, with no day remainderfull quarters are whole; a part-quarter bills only for whole months elapsed, ignoring leftover days
(blank)→ the org Default Proration Type (DefaultProrationType__c; Daily out of the box)resolve to the org default before any of the above

Monthly and Quarterly are genuinely different

Quarterly is the coarser floor: it prorates a partial quarter by the whole completed months and drops the leftover days entirely. Monthly keeps the leftover days and prorates them on a 30-day convention. On the same partial period the two produce different factors:

  • A partial quarter of 1 month + 12 days bills as 1 ÷ 3 = 0.33 under Quarterly (only the one completed month counts), but as (1 + 12/30) ÷ 3 = 0.47 under Monthly (the 12 leftover days prorate).
  • A partial quarter of 2 months + 29 days is 2 ÷ 3 = 0.67 under Quarterly.

Pick the coarser type when a product should round partial periods down to completed units rather than bill fractional days.

So a ~6-month partial of an annual subscription is not universally 0.5. Under Daily (the default) it is days ÷ 365 — e.g. 183 ÷ 365 ≈ 0.50, moving with the exact day count. Under Monthly it is whole-months plus a /30 remainder at the edge; under Quarterly it is whole-completed-months with no day remainder.

Daily uses a fixed 365-day year (leap years)

Daily proration always divides by 365 days per year — it does not add a day for a leap year. So a whole-year term whose date range crosses a leap day covers one more day than 365 × N, and the term factor lands slightly above the nominal whole number. A 3-year Daily term that spans a leap day computes about 3.01 rather than 3.00, and a static add-on (Accessory) on that line then shows a quantity of 3.01. This is the exact-day-count behavior working as intended, not an error — the extra billed fraction is the real extra day.

If you want whole-year commitments to bill an exact whole number of periods regardless of leap days, set the product’s Proration Type to Monthly or Quarterly. Both count whole calendar months, so an N-year term is exactly N. Reserve Daily for deals where billing should follow the precise day count.

Blank fallback

A blank ProrationType__c falls back to the org-wide Default Proration Type (DefaultProrationType__c, itself Daily out of the box). Both the segment-quantity path (what a quote persists per line/segment) and the amendment mid-term price path now resolve a blank product the same way and share one proration kernel, so a product left blank prorates consistently across quoting and amendments. Setting ProrationType__c explicitly is still recommended when a product should bill differently from the org default.

Where proration shows up

  • Single-dimension subscriptions — a line that starts or ends mid-period prorates its partial period’s billable quantity.
  • MDQ ramps — each segment prorates its own partial period; a partial final segment carries a fractional effective quantity.
  • Amendment mid-term price changes — an amendment’s prorated price delta is scaled by the remaining term from the effective date, using the same Proration Type. See Renewals & Amendments.