Recognition methods

A recognition method decides when you earn the revenue on a performance obligation. You set it on the product, and the obligation inherits it. The engine then spreads the obligation's amount across periods to match.

See the methods in a demo. Demo the recognition methods walks two QuantumBit customers through them on the QuantumBit Complete Solution, with the numbers to expect.

Pick a method for each product

QuantumBit sells platform subscriptions, training, services projects, rack servers and token usage. Each one earns revenue in a different way.

MethodWhen revenue is earnedUse it for
Straight-LineEvenly over each line's service dates, by the day at the edgesSubscriptions, licenses, support
Straight-Line + Even SpreadThe obligation's total, evenly across the full termRamp deals the customer wants smoothed
DeliveryAll of it, in the period the line is marked deliveredOne-time services, statements of work, training
FulfillmentAll of it, in the period the line is marked fulfilledGoods you ship, hardware you provision
Event-BasedAs it's billed. Each invoice line is earned in its own period.Usage and consumption
% CompleteUp to a percentage you set in Salesforce or in NetSuiteProjects and milestone work

Set the method on the product

The method passes from the NetSuite item to the obligation to the revenue plan.

  1. The item carries the Continuous Rev Rec Rule. It's set when the product syncs, or by an admin.
  2. Update POBs copies the rule to the obligation, but only if the obligation has none. A rule set on the obligation always wins. With no rule anywhere, the method is Straight-Line.
  3. Update Revenue Plans copies the obligation's rule to the plan and builds the schedule.

To change the method for one contract, change it on the obligation. To change it for everything new, change it on the item. Then run the engine again. Rows that haven't posted are rebuilt. Posted rows never change.

Spread subscriptions by the day

Straight-Line spreads each line over its own dates, then adds up the months. Partial months count by the day. If Kingsbridge Digital's line starts on the 15th, the first month recognizes only the days from the 15th on.

This matters when a contract changes mid-term. Say a customer cancels on the 13th. The schedule credits the rest of that month and stops there.

Smooth out ramp deals

Say Coralbay Technologies signs a three-year ramp on Additional API: 10 units in year one, 15 in year two and 20 in year three. That bills $12,500 a month in year one, $18,750 in year two and $25,000 in year three. By default, revenue follows the ramp. Check Even Spread (Full Term) on the obligation to recognize the total evenly across all three years. That's $18,750 every month.

Update POBs checks this box for you when it finds a ramp. It only ever turns the box on. Periods that have posted stay as they are.

Wait for delivery or fulfillment

These methods wait for proof from Salesforce. Your fulfillment process marks each order product delivered or fulfilled, with a date. That can be Dynamic Revenue Orchestrator, an order management system, a Flow or a person.

Then send the change to NetSuite. You don't book the order again.

When every line on the obligation is marked, the engine schedules all the revenue in that date's period. Until then, the plan stays empty and nothing is recognized. If you uncheck a line and sync again, NetSuite clears it too.

"Prices aren't up to date" on the order? Editing an activated order's products can make Revenue Cloud show this banner. No price changed. Turn on Hide Price Refresh Notification in Revenue Settings. See Monitoring & troubleshooting.

Recognize usage as it bills

An Event-Based obligation earns what's billed, when it's billed. Each invoice line becomes a schedule row in the invoice's period. Credit memo lines count as negative.

That's how Kingsbridge's token usage works. The obligation is created when the usage billing schedules arrive. Booked always equals Billed, and each usage invoice is earned in its own period.

Recognize projects by percent complete

A % Complete obligation has a percentage you update as the work moves along. Enter 40 for 40%. A value of 0.4 means 0.4%. Each engine run catches the schedule up to that share of the amount, in the current period.

You can set the percentage in Salesforce or in NetSuite. Pick one place per obligation.

Set it in Salesforce

Say Kingsbridge's Scope of Work is 40% done. Its order product carries the progress.

  1. Set % Complete on the order product to 40.
  2. Click Sync Order Lines on the order, or let a Flow send it.
  3. NetSuite updates the obligation and its revenue plan for you. Click Recognize Revenue when you close the period.

An obligation can hold several lines. NetSuite averages all of them, weighted by amount. A line with no percentage counts as 0.

Set it in NetSuite

  1. Update % Complete on the obligation.
  2. Click Update Revenue Plans.
  3. Click Recognize Revenue.

Next month, raise the percentage and run it again to recognize the increase.

Salesforce wins once it sends a percentage. When any line of an obligation carries a % Complete from Salesforce, the next update replaces the value typed on the obligation in NetSuite. An obligation whose lines carry none keeps the NetSuite value.
Posted revenue never changes. This holds for every method. When a plan is rebuilt, only the remaining amount is spread over unposted periods. That's a prospective change under ASC 606-10-25-13(a). If you've already recognized more than the new total, the engine posts one adjustment in the current open period. It never restates past periods.