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
Dailyeach complete month counts as its share of the term unit (1/12 of a Year, 1/3 of a Quarter, 1 Month), so a complete unit is 1.0; only a partial month’s days prorate, against that month’s real length (Week: covered days ÷ 7)whole months are whole; only a part-month bills by day
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 months — floor(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.
  • A month only counts as completed once its full length has passed. An 11-day range from September 25 to October 5 completes no month, so under Quarterly it bills 0.

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) six whole months are exactly 6 ÷ 12 = 0.50, and only a part-month on top of them prorates by its days. Under Monthly it is whole-months plus a /30 remainder at the edge; under Quarterly it is whole-completed-months with no day remainder.

A complete period always bills exactly 1

Under Daily, every complete term unit the range covers counts as exactly 1.0, however many calendar days that unit happens to have. A whole 31-day month on a Month term unit is 1.00, and so is a whole February. A whole year is 1.00 whether or not it contains February 29, so a 3-year term is 3.00 and a 6-year term that crosses two leap days is 6.00.

A term that is not a whole number of units counts its whole months as whole months. On a Year term unit each complete month is 1 ÷ 12 of a year, and on a Quarter term unit 1 ÷ 3 of a quarter:

  • 14 months on a Year term unit: 1 year and 2 months, 14 ÷ 12 = 1.17.
  • 18 months on a Year term unit: 18 ÷ 12 = 1.50.
  • 7 months on a Quarter term unit: 7 ÷ 3 = 2.33.

Only a partial month prorates by days, against the real length of that month. That happens when a range starts or ends partway through a month, for example a co-termed contract or an amendment that takes effect mid-month:

  • 15 days at the start of January on a Month term unit: 15 ÷ 31 = 0.48.
  • 14 months and 10 days from January 1, 2026 on a Year term unit: 14 whole months plus 10 days of 31-day March, (14 + 10 ÷ 31) ÷ 12 = 1.19.
  • 3 years and 1 day from September 25, 2026: 36 whole months plus one day of a 30-day month, (36 + 1 ÷ 30) ÷ 12 = 3.00.

A Week term unit has no months to count. It stays covered days ÷ 7.

A segmented MDQ line and a plain subscription line covering the same calendar period bill the same term.

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. The remaining window is valued exactly as a standalone line over that window would be, then divided by the value of the whole contract. See Renewals & Amendments.