Software Revenue Recognition & US GAAP ASC 606 / IFRS 15
ASC 606 / IFRS 15 Relative SSP Bundle Allocation Formula
Allocate Bundled Multi-Element Transaction Price Across Distinct Performance Obligations Using Relative Standalone Selling Prices (SSP), Point-in-Time License Recognition, Ratable PCS Support Revenue, and Deferred Revenue.
Allocate bundled contract discounts proportionally by Relative Standalone Selling Price (Step 4 of ASC 606)!
When an enterprise software or medical-device vendor sells a Perpetual On-Premise License bundled with 36 months of Post-Contract Customer Support (PCS) at a package discount—say $108,000 instead of $120,000 list—sales reps cannot simply slap "free Year-1 support" on the invoice and recognize $108,000 upfront! Under Step 4 of US GAAP ASC 606 and IFRS 15, Transaction Price is allocated across each distinct performance obligation in proportion to its Standalone Selling Price: Allocated_i = Transaction_Price * (SSP_i / SUM(SSP))! The point-in-time License allocation recognizes upon delivery, whereas the PCS Support allocation amortizes ratably over the 36-month service period, leaving unamortized balance in Deferred Revenue (Contract Liability)!
Verify on a 36-Month Enterprise Bundle—Discounted_Transaction_Price = $108,000 (B2), Software_License_SSP = $90,000 (B3), 36Month_PCS_Support_SSP = $30,000 (B4 -> Combined SSP = $120,000, a 10% bundle discount!), and Elapsed_Support_Months = 8 of 36 months (B5): Allocated Point-in-Time License Revenue is 108,000 * (90,000 / 120,000) = $81,000.00 (E2); Allocated 36-Month Support Pool is 108,000 * (30,000 / 120,000) = $27,000.00 (E3); Cumulative Revenue Recognized at Month 8 is 81,000 + 27,000 * (8 / 36) = $87,000.00 (E4); and Ending Deferred Revenue Liability is 108,000 - 87,000 = $21,000.00 (E5)!
| ASC 606 Step-4 Metric ($108k Deal, $90k License SSP, $30k 36-Mo Support SSP, Mo 8) | Formula | Verified Output |
|---|---|---|
| Allocated Upfront License ($) | Deal_Price * (License_SSP / Total_SSP) | $81,000.00 |
| Allocated 36-Mo PCS Pool ($) | Deal_Price * (Support_SSP / Total_SSP) | $27,000.00 |
| Cumulative Recognized Rev ($) | Alloc_License + Alloc_Support*(Mo / 36) | $87,000.00 ($108,000 @ Mo 36) |
| Ending Deferred Revenue ($) | Deal_Price - Cumulative_Recognized_Rev | $21,000.00 ($0.00 @ Mo 36) |
ASC 606 Relative-SSP Cumulative Revenue Recognition Formula
Validate Transaction_Price > 0, License_SSP > 0, Support_SSP > 0, and 0 <= Elapsed_Months <= 36!
=LET(tp_d, B2, ss_l, B3, ss_s, B4, mo_e, B5, IF(OR(tp_d <= 0, ss_l <= 0, ss_s <= 0, mo_e < 0, mo_e > 36), "Invalid ASC 606 Bundle Input", LET(ts_p, ss_l + ss_s, al_l, tp_d * (ss_l / ts_p), al_s, tp_d * (ss_s / ts_p), ROUND(al_l + al_s * (mo_e / 36), 2))))Full 36-Month Contract Completion Check (Set Elapsed Months = 36)
Advance Elapsed_Support_Months B5 to 36: Cumulative Recognized Revenue E4 reaches the full $108,000.00 contract price and Deferred Revenue Liability E5 amortizes cleanly to $0.00!
=IF(ISTEXT(E4), E4, ROUND(B2 - E4, 2))Try the example
Use the original values or change them to test your understanding.