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). A bundle option
uses its bundle parent’s term unit and Proration Type, not its own: the term
is a property of the whole bundle (see
Bundle Math).
How each type computes the term factor
Let the covered range be [start, end] (both inclusive):
| Proration Type | How the term factor is computed | In plain English |
|---|---|---|
| Daily | each 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 |
| Weekly | every complete term unit counts as 1.0; the partial unit prorates by whole completed weeks: floor(leftover days ÷ 7) ÷ (that unit's days ÷ 7), with no day remainder (Week term unit: floor(days ÷ 7)) | full units are whole; a part-unit bills only for whole weeks elapsed, ignoring leftover days |
| Monthly | whole 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 |
| Quarterly | whole quarters count as 1.0; a partial quarter prorates by whole completed months — floor(completed months) ÷ 3, with no day remainder | full 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 |
How Weekly counts weeks
Weekly sits between Daily and Monthly as a granularity floor. It prorates a partial period down to completed whole weeks, and drops any leftover days, the way Quarterly drops the days after its completed months.
- Every complete term unit bills
1.0. Pinion counts complete units forward from the start date: a year, a quarter or a month that the range fully covers is1.0, whatever its length. A 3-year term is3.00, and a year that contains February 29 is still1.00. - The partial unit bills its completed weeks. What’s left after the
complete units bills
completed weeks ÷ the weeks in that unit. Completed weeks are the leftover days ÷ 7, rounded down. The weeks in the unit are the unit’s real days ÷ 7, counting the unit forward from where the partial part starts: 365 ÷ 7 = 52.14 weeks in most years, 366 ÷ 7 = 52.29 in a year that contains February 29, and 28 ÷ 7 = 4 in a 28-day February. - A part shorter than one week bills
0, the way a part shorter than one month bills0under Quarterly. - On a Week term unit, the factor is the completed weeks: 14 days bill
2.00, and a partial week bills0.
Worked examples on a Year term unit, using a year from April 1, 2026 through March 31, 2027 that an amendment splits on October 10, 2026:
- The whole year is one complete unit:
1.00. Three seats bill3. - The first part (April 1 to October 9) is 192 days: 27 completed weeks,
with 3 days dropped. The year from April 1, 2026 has 365 days, so the factor
is
27 ÷ (365 ÷ 7) = 0.517808. Three seats bill1.5534. Daily would bill0.524194for the same days. - The second part (October 10 to March 31) is 173 days: 24 completed
weeks, with 5 days dropped.
24 ÷ (365 ÷ 7) = 0.460274; three seats bill1.3808. - The two parts together bill
0.978082of the year, not1.00. The 8 leftover days are dropped, as Weekly’s floor intends. - Across a leap day: September 3, 2027 to March 31, 2028 is 211 days, 30
completed weeks. The year from September 3, 2027 contains February 29, 2028
and has 366 days, so the factor is
30 ÷ (366 ÷ 7) = 0.573770. The rest of that year, April 1 to September 2, 2028, is 155 days and 22 completed weeks. The year from April 1, 2028 has 365 days (it ends before the next February 29), so the factor is22 ÷ (365 ÷ 7) = 0.421918.
Worked examples on a Month term unit:
- February 1 to 20, 2027 is 20 days: 2 completed weeks of a 28-day month,
2 ÷ (28 ÷ 7) = 0.50. - February 1 to 20, 2028 is the same 20 days, but February 2028 has 29
days:
2 ÷ (29 ÷ 7) = 0.482759. - February 15 to March 5, 2028 is 20 days: 2 completed weeks. The month
from February 15 runs to March 15, which is 29 days, so the factor is again
0.482759.
A term that isn’t a whole number of units counts its complete units first. 14
months from January 1, 2027 on a Year term unit is one complete year plus
January 1 to February 29, 2028: 60 days, 8 completed weeks, of a 366-day year.
The term is 1 + 8 ÷ (366 ÷ 7) = 1.15; Daily would bill 1.17.
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.33under Quarterly (only the one completed month counts), but as(1 + 12/30) ÷ 3 = 0.47under Monthly (the 12 leftover days prorate). - A partial quarter of 2 months + 29 days is
2 ÷ 3 = 0.67under 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.
A part shorter than one floor unit gets no line
Quarterly is a floor: a window shorter than one completed month bills 0.
When an amendment splits an MDQ segment at the amendment date, either part can be
that short: the part before the date (an amendment dated less than a month after
a segment starts) or the part after it (an amendment dated less than a month
before a segment ends).
Such a part gets no line on the amendment. It bills exactly what the floor
says, which is nothing. The other part keeps its line and its segment position,
so the segment carries on from the amendment date (or runs up to it), and its
quantity is the floor’s share of that part alone. Pinion does not bill a minimum
of one unit for the short part, and it does not skip the split. Daily, Weekly and
Monthly never produce such a part: any window of at least one day bills more than
0 under them.
The rule applies under the proration type the amendment split resolves for the
line. Today the split resolves the org Default Proration Type
(DefaultProrationType__c), not the product’s own Proration Type. That is a
known limitation rather than the intended design, so don’t rely on a product’s
Proration Type to decide how an amendment splits.
For example, under Quarterly, a Year segment of quantity 3 that started three
days before the amendment date has no line for those three days. The rest of the
segment completes 11 months (its leftover days drop, as always under Quarterly)
and bills 3 × 11 ÷ 12 = 2.75.
If both parts of a split are shorter than one completed month (a segment shorter than two months), the amendment is refused. Pick a different amendment date, or contact Pinion support.
The same rule applies to a co-termed final segment on new business. When the
opportunity’s co-term date cuts the last segment short, that short segment gets
its own line, billed by the floor. If it is shorter than one floor unit (under
Quarterly, a co-term date less than a month after that segment starts), it bills
0, so it gets no line: the product ends with the last whole segment before
it. For example, a 36-month Year contract that starts on 16 July 2026 with a
co-term date of 5 August 2028 leaves a 21-day third-year segment that completes
no month. Under Quarterly that segment has no line, and the product has two Year
lines that end on 15 July 2028. A co-term date one completed month or more into
the segment keeps the short segment’s line and bills its completed months
(3 × 1 ÷ 12 = 0.25 for quantity 3 and a co-term date of 20 August 2028).
If the co-term date falls less than one floor unit into the first segment,
so no whole segment comes before it, the segment keeps its line.
A co-term date set on a single product line (the Co-term field on the segments panel) behaves exactly like the opportunity’s co-term date: a short final segment under one floor unit gets no line, and the save is accepted. The line’s own co-term date wins over the opportunity’s when both are set.
How Monthly counts a partial month
Monthly counts whole months forward from the start date, one monthly anniversary at a time, then prorates the days left over on a 30-day convention. Worked example, coverage from July 16, 2027 through December 31, 2028:
- Whole months: July 16, 2027 to December 16, 2028 is 17 whole months. The next anniversary, January 16, 2029, falls after the coverage ends.
- Leftover days: December 16 to the end of December 31 is 16 days,
16 ÷ 30 = 0.53of a month. - Term:
17 + 16 ÷ 30 = 17.53on a Month term unit, or17.53 ÷ 12 = 1.46on a Year term unit.
The same window prices an amendment. Removing a $1,000 × 30 subscription
(36 months from January 1, 2026) with an effective date of July 16, 2027
credits the remaining 17.53 ÷ 36 of its value: −$14,611.11, which books as
30 × −$487.04 = −$14,611.20 once spread per unit.
Because leftover days always divide by 30, 30 leftover days count as one
full month, even when they sit in a 31-day month: January 16 through
February 14 is 1.00 month. Use Daily when a partial month should prorate
against its real length.
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 changes — on standalone lines and on every bundle line alike (an option added, changed or removed, and a Roll-Up or Standard parent). Only subscription products prorate: a product with Subscription unchecked books its full price on an amendment. That includes discount products: a recurring discount product needs Subscription checked to prorate on a mid-term amendment, or it books its full discount against prorated charges. 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.
Related
- MDQ — Multi-Dimensional Quoting — per-segment proration in a ramp.
- Renewals & Amendments — amendment mid-term re-pricing.
- Lifecycle Defaults — the org-wide
DefaultProrationType__cfallback.