Upgrade

What is an upgrade?

When a customer moves to a more expensive set of packaging this can be referred to as an “upgrade”. This is a common contract lifecycle event that often results in a contract ending a new one beginning. Let’s go through an example where a customer on the standard Wikipedia pricebook will upgrade to an enterpise plan:

As of 5/15/2024, “EmpressHarmonic” currently is using the “Standard” plan and is thinking about moving to the “Enterprise” plan in the future.

Customers, Contracts

customers.id

customers.name

contracts.durable_id

contracts.started_at

contracts.ended_at

contracts.pricebook_id

20450

EmpressHarmonic

EmpressHarmonic_contract

2024-02-29 14:36:13

2025-02-01 00:00:00

a

Standard Products, List prices, Pricebooks

products.id

products.name

list_prices.id

list_prices.price

pricebooks.durable_id

pricebooks.name

invoice_delivery

invoice_schedule

list_prices.created_at

1

Updates

1

0.10

a

Standard

ARREARS

1

2023-11-01

2

Creates

2

0.05

a

Standard

ARREARS

1

2023-11-01

3

Platform fee

3

1000.00

a

Standard

ADVANCED

12

2023-11-01

Enterprise Products, List prices, Pricebooks

products.id

products.name

list_prices.id

list_prices.price

pricebooks.durable_id

pricebooks.name

invoice_delivery

invoice_schedule

list_prices.created_at

1

Updates

4

0.05

b

Enterprise

ARREARS

1

2023-11-01

2

Creates

5

0.04

b

Enterprise

ARREARS

1

2023-11-01

4

Enterprise platform fee

6

5000.00

b

Enterprise

ADVANCED

12

2023-11-01

How to model an upgrade

There are two major determinants of how to model an upgrade:

  • Invoice delivery

  • Date of upgrade

Based on the invoice delivery the customer has paid for the product in advance or will do so once the period is complete. In the case where a customer has paid upfront, an upgrade can become more complex. In the example above, “EmpressHarmonic” has already paid an annual platform fee for the standard plan. They would like to upgrade to the Enterprise plan which has an annual platfrom fee which is five times the price. Since the date of the upgrade is in the middle of current contract we need to make sure “EmpressHarmonic” isn’t double charged.

One way to deal with this is to refund the customer. Often this “refund” occurs as a part of the upgrade itself. In this case, moving from the Standard plan to an Enterprise plan requires the customer pays a larger platform fee. By including the refund within the upgrade invoice returning funds can be avoided. We can accomplish this by adding an ad hoc product to the contract. Specifically this product should be the same as the one decommissioned by the upgrade. This will appease the customer since they aren’t being double charged, and is an accurate record of the actual revenue accrued by each product.

Contract prices, Contracts

customers.id

customers.name

contracts.durable_id

contracts.started_at

contracts.ended_at

contracts.pricebook_id

contracts.version

20450

EmpressHarmonic

EmpressHarmonic_contract

2024-02-29 14:36:13

2025-02-01 00:00:00

a

0

20450

EmpressHarmonic

EmpressHarmonic_contract

2024-02-29 14:36:14

2024-05-15 00:00:00

a

1

20450

EmpressHarmonic

upgrade_contract

2024-05-15 00:00:00

2025-01-01 00:00:00

b

0

It can be seen in the rows above that there are two versions of the EmpressHarmonic_contract. The first version is the original contract, the second version has a backdated end date to the middle of the current period: 5/15/2024. Since the end date is within the current billing period of May 2024 we do not need to void or adjust any past arrears invoices. As mentioned prior we need to handle invoices that were issued in advance, specifically the “Platform fee”.

Products, Prices, Contracts

products.id

products.name

prices.contract_price_uid

prices.list_price_uid

prices.price

prices.prorate

contracts.customer_id

contracts.durable_id

contracts.pricebook_id

prices.started_at

prices.ended_at

1

Updates

4

0.05

true

EmpressHarmonic

upgrade_contract

b

2024-05-15

2025-01-01

2

Creates

5

0.04

true

EmpressHarmonic

upgrade_contract

b

2024-05-15

2025-01-01

3

Platform fee

4

-1000.00

true

EmpressHarmonic

upgrade_contract

b

2024-05-15

2025-01-01

4

Enterprise platform fee

6

5000.00

true

EmpressHarmonic

upgrade_contract

b

2024-05-15

2025-01-01

The newly created upgrade_contract has inherited the enterprise packaging, included in pricebook b, and has included an ad hoc contract price, prices.contract_price_uid = 4, to account for the refund. One thing to note is that the price is negative and the proration flag is set to true. The negative price enables the refund to occur and the proration flag ensures that only the unused portion of the period is actually returned once rated. Another important point is that the ad hoc price specifically uses the original product that is being decommissioned to avoid overrepresenting the amount of revenue being gained and lost.

Once the original contract is updated and the upgraded contract is created the modeling is complete. With this the correct invoices should be automatically generated.

Results of the upgrade

The changes result in two additional invoices being generated. One invoice in arrears and the other in advanced.

invoice_delivery=ADVANCED | Line items, Invoices

products.id

products.name

line_items.price

line_items.quantity

line_items.amount

invoices.total

invoices.invoice_delivery

invoices.status

invoices.contract_id

invoices.started_at

invoices.ended_at

1

Updates

0.05

11140.0

557.0

557.0

ARREARS

DRAFT

upgrade_contract

2024-05-15 00:00:00

2024-06-01 00:00:00

2

Creates

0.04

0.0

0.0

557.0

ARREARS

DRAFT

upgrade_contract

2024-05-15 00:00:00

2024-06-01 00:00:00

invoice_delivery=ARREARS | Line items, Invoices

products.id

products.name

line_items.price

line_items.quantity

line_items.amount

invoices.total

invoices.invoice_delivery

invoices.status

invoices.contract_id

invoices.started_at

invoices.ended_at

3

Platform fee

-1000.00

1.0

-632.88

2531.5

ADVANCED

FINALIZED

upgrade_contract

2024-05-15 00:00:00

2025-01-01 00:00:00

4

Enterprise platform fee

5000.00

1.0

3164.38

2531.5

ADVANCED

FINALIZED

upgrade_contract

2024-05-15 00:00:00

2025-01-01 00:00:00

The resulting invoices and line items from the new upgrade_contract only represent one half of the month of May. This is true for both the ADVANCED and ARREARS invoices but each invoice delivery type requires a different process to calculate the resulting line item. Both of the ADVANCED line items require proration. Since we are performing the upgrade in the middle of the contracted period, with only around 7 months left, the typical annualized platform fee price no longer makes sense. Thus the “Enterprise platform fee” should only be charged for the smaller period, hence the proration. The rough math to get the prorated amount is the amount of days between the start and end date divided by the amount of days the price is associated with. In this case 5/15/2024 to 1/1/2025 is 231 days and the annualized platform fee is over 365 days. This gets us a proration factor of 231 / 365 = 0.63 which we multiply by the price to get the prorated value, 0.63 * 5000 = 3164.38, which can be seen on the line item as the amount. The same adjustment is made to the refund product since this is the ‘amount’ that should be returned.

The new ARREARS invoice doesn’t require a special adjustment, but the invoice tied to the previous contract, durable_id='EmpressHarmonic_contract', must be cut short to represent the backdating. This results in two invoices during the month of May, one for the prior contract and the other for the upgraded contract.

invoice_delivery=ARREARS | Line items, Invoices

invoices.contract_id

products.id

products.name

line_items.price

line_items.quantity

line_items.amount

invoices.total

invoices.invoice_delivery

invoices.status

invoices.started_at

invoices.ended_at

EmpressHarmonic_contract

1

Updates

0.10

4725.0

472.5

472.5

ARREARS

FINALIZED

2024-05-01 00:00:00

2024-05-15 00:00:00

EmpressHarmonic_contract

2

Creates

0.05

0.0

0.0

472.5

ARREARS

FINALIZED

2024-05-01 00:00:00

2024-05-15 00:00:00

upgrade_contract

1

Updates

0.05

11140.0

557.0

557.0

ARREARS

DRAFT

2024-05-15 00:00:00

2024-06-01 00:00:00

upgrade_contract

2

Creates

0.04

0.0

0.0

557.0

ARREARS

DRAFT

2024-05-15 00:00:00

2024-06-01 00:00:00

Going forward no new modeling changes need to occur. Fortunately, the timing of this upgrade was beneficial to the customer “EmpressHamonic”. They literally doubled their usage in the back half of May and accomplished a savings of $560 in roughly two weeks. Going forward this upgrade could easily pay for the more expensive platform fee and deliver an even larger savings on top of that. This type of outcome highlights why customers care about upgrades and why they want them immediately. Fortunately, this type of situation is a win-win since customer happiness and increased spend are typically topline metrics for a go-to-market team.