Bundle Prorating
Change Log
Date | Author | Version | Changes |
---|---|---|---|
03 September 2018 | Rune Westphal | 1.0 | Doc created. |
Â
1 - Configuration
Prorating of bundles has been implemented on the bundle configuration level and is available from core 10.10.1 version. The older way of prorating was to configure it on campaign level through the ProrateActivation campaign method and should now be considered deprecated.
The bundles are configured through a ProrateBundleStrategy which can be set in the Rator MainMenu Product Configuration Tool, under the Product Campaign tab => Edit Campaign => Bundles => Edit Bundle => Bundle metadata => Prorate strategy, as shown in the screenshot below.
Â
Â
2 - Available Strategies
The following strategies are available. Bundle values should be the smallest meaningful units so rounding is performed only on the first decimal, by rounding half up, e.g. a calculated value of 20.5 will result in 21 while a value 20.49 will be rounded to 20.
The date being calculated against is taken from the subscription_campaign.from_date and occurs upon campaign activation, in the same way that the old ProrateActivation method was invoked by the campaign framework.
Strategy Name | Description | Calculation | Example |
---|---|---|---|
ProrateDayOfMonthUsing30DayMonth | This strategy will prorate based on remaining days of a fixed month length of 30. | bundleValue * ((30-dayOfMonth) + 1) / 30). | For the 5th the calculation would always be bundleValue * (26/30) irrespective of the actual month length. |
ProrateRemainingCalendarDaysUsing30DayMonth | This strategy calculates actual remaining days of the month (including the date itself) but uses a | bundleValue * ((monthLength - dayOfMonth + 1)/30) | Example 1: January 5th would be calculated by bundleValue * (27/30).
|
ProrateRemainingDaysOfMonth | This strategy will prorate a bundle based on the actual remaining days of the month (including the date itself), using the calendar month length. | bundleValue * (remainingDays / lengthOfMonth) | Example 1: February 27, 2018 would be bundleValue * (2 / 28).
|
ProrateRemainingDaysOnInvoiceSchedule | This strategy will prorate a bundle based on the remaining days of the current invoice schedule, compared to the associated billing cycle length. | bundleValue * (remainingDays / billing_cycle.length) | Let the billing_cycle have a length of 14 and the current invoice_schedule be from 1st-14th January.
|
Â
3 - Implementation Details
The implemented available strategies are identified using the implementation finder framework.
Thus, new strategies implementing the ProrateBundleStrategy interface and subsequently added in the service resource file (i.e., resources/META-INF/services/com.CDRator.billing.campaign.bundle.strategy.ProrateBundleStrategy) will be automatically discovered and available in the GUI for configuration.