Applies to: ZoneBilling version 2026.09.28 and later, after migrating to line-level billing events.
After you migrate to line-level billing events, some of your historical revenue amounts will change by small amounts. This article explains why that happens, what it looks like in your account, and how to reconcile it.
What changed in how amounts are calculated
Before the migration, ZoneBilling grouped the charges for a given sales transaction (Sales Order, Invoice, or Credit memo) by the Revenue Detail (as found on a given ZAB Charge's ZAB Revenue Link record), calculated a single combined amount, and applied rounding once to that combined total. This is the amount that would previously be set on the ZAB Revenue Transaction Link.
After the migration, ZoneBilling now groups the charges for a given sales transaction by the Revenue Detail and the transaction line.
Why you see a difference after migrating
Three things produce small differences:
- Rounding is applied more times, on smaller amounts. An invoice with twenty lines is now rounded twenty times instead of once. Each rounding is tiny, but across a long transaction history the differences accumulate.
- Offsetting charges no longer cancel each other out. Previously, a −$100 charge and a +$100 charge relating to the same Revenue Detail could combine into a single $0 revenue event. Now each is recorded separately, so both amounts are visible and each can post to the appropriate GL account.
- The change applies to your full history, not just new activity. Enabling line-level billing events starts a background process that rebuilds every Revenue Transaction Link in your account. ZoneBilling cannot use the previous logic for historical records and the new logic for new ones, because NetSuite's Advanced Revenue Management plugin reads one set of records.
What this looks like in your account
After the rebuild finishes, expect:
- More billing event and Revenue Transaction Link records for the same subscriptions. Record counts will go up; this is the expected result of line-level processing.
- Small differences on individual billing events, usually at the penny level per invoice.
- Unposted revenue in prior periods. For example, if a prior period posted $100,000.00 and the amount under the new line-level calculation is $100,000.01, this appears as unposted revenue with -$100,000.00 reversal and +$100,000.01.
- No change to your Revenue Orders, Revenue Details, Revenue Configurations, or contract-level totals. Revenue allocation logic is unchanged.
Important: The magnitude of the difference scales with your transaction history and volume, not with your contract values. An account with several years of high-volume billing will see a larger aggregate difference than a newer account with the same revenue.
Before you migrate: capture a baseline
Do this before enabling line-level billing events, in both Sandbox and Production. Without a baseline, reconciling afterwards is significantly harder.
- Export your standard revenue reports for all open periods and for the prior fiscal year, including revenue recognition and unbilled receivables reporting. Save them outside NetSuite with the export date in the filename.
- Record your total recognized revenue by period for the periods you intend to compare.
- Note your current record counts for Revenue Transaction Links and Revenue Billing Events, so you can distinguish an expected count increase from an unexpected one.
- Run the migration in a Sandbox account first, with a recent copy of Production data, and compare against the same baseline. This tells you the approximate scale of the difference before you commit in Production.
Tip: Run the Sandbox migration far enough ahead of your Production migration that your accounting team can assess materiality and agree on treatment before you enable it in Production.
After the rebuild finishes: reconcile
- Confirm the rebuild has completed. Check the process record created when you enabled the migration. A status of Yielded means processing is continuing through subprocess records, not that it has failed. See Troubleshooting Revenue Billing Events via Script Execution Logs.
- Re-run the same reports you exported as your baseline.
- Compare by period. Differences should be small and should concentrate in periods with high transaction volume.
- Identify unposted revenue surfaced in prior periods.
- Review the difference with your accounting team and determine materiality against your own thresholds.
- Record the adjustment. Customers may record any required adjustment as a single aggregate entry in the current open period, supported by before-and-after reporting. This approach does not require reopening closed periods unless the customer's accounting policies require otherwise. Record any adjustment according to your organization's accounting policies. Zone & Co cannot advise on the treatment appropriate to your reporting requirements.
When to contact Support
Contact ZoneBilling Support if:
- The difference between your baseline and post-migration reporting is larger than a rounding-level variance and you cannot account for it.
- Contract-level totals have changed. This is not expected behavior.
- The rebuild process has not reached a completed state after several days, or its execution logs show a recurring error. Include the process record's internal ID and the relevant log excerpt.