Marty Zigman - The NetSuite Expert

Conversations with Marty Zigman

Certified Administrator • ERP • SuiteCloud

Prolecto Labs Accelerator Templates

Automate NetSuite Cost Amortization via Revenue Recognition

Accounting ERP NetSuite

Tags: , , , , , , ,

This article is relevant if you use NetSuite and you want to amortize cost based on revenue recognition.

Background

NetSuite’s revenue recognition capacities are strong. Revenue recognition is a concern when your service or product delivery is over a long period; yet your invoice invoice billing is up-front and / or independent of how revenue is earned. We have clients in the software business and many have revenue recognition concerns.  We recently helped a client get off QuickBooks to take care of their revenue recognition management.  Our client offers a service that includes a pricey hardware component; that drives the need to use NetSuite item fulfillment structures to relieve inventory.

We accountants learned early on about the “matching principle“.  We want to match our costs to our revenues in the period for which they are earned.  In this respect, NetSuite’s cost management for general ledger entries is not connected to the revenue recognition structure.  So they aren’t “matched”.

When Accountants are Technologists

We think we offer a unique capacity in NetSuite community in that our core competency is both accounting and computer science.  Two members of our team served this client and each have degrees in accounting but also develop software.  We love the NetSuite platform because if the system does not meet our client’s requirements, we can invent a solution.  Indeed, with this client, we invented an automated mechanism to match costs to revenue earned.  Here is what we did.

Link Cost Amortization to Revenue Recognition

Under typical processing, NetSuite will book the costs of a transaction during the an item fulfillment.  The typical entry looks like the following:
  • Dr: Cost of Goods Sold
  • Cr: Inventory
Normally, this is not a problem.  But when you want to match costs to revenues that are going to be spread out over time, this doesn’t work.

We created a custom mass update to look for invoices and sales orders connected to revenue recognition templates.  From those sales orders, we captured the start and end date of the recognition period.  We then looked for related item fulfillments to get the associated cost information.

Once we had the cost information, we created a custom linked journal entry to the item fulfillment record.  The journal entry effectively reversed out the original entry in this fashion:
  • Dr: Deferred Expense: Unearned Prepaid Inventory Cost
  • Cr: Cost of Goods Sold
The journal entry was then connected to an Amortization Template using the dates of the service period.  Once the journal entry was linked to the template, NetSuite could work its magic to automatically allocate expense to the income statement each period to consume the prepaid inventory asset.

This is how the basic algorithm works.  It becomes more complex when you consider changes to the item fulfillment after it has already been saved and when there may be possible returns or cancellations.

Why Custom Mass Update vs. User Event Trigger?

You might be asking yourself why we didn’t create a SuiteScript User Event trigger to build the automatic journal entry when the item fulfillment record was saved?  This was our initial design.  However, we discovered something peculiar during our development.

The client is using lot controlled inventory.  Each lot has its own cost.  We noticed that when the item fulfillment record was saved, the cost information was coming in at average cost.  We didn’t expect this.  In very short order, NetSuite appears to be modifying the cost from average to the correct lot cost.  This tells us that there are some background routines that “true up” costs independent of the save event.  As I like to say to clients, “with NetSuite, we all are always learning!”.

No worries. Given the nature of these transactions, a nightly custom mass update works quite well (in fact, we like custom mass updates as it allows us to create something similar to a “batch process” in the environment).

Summary

Don’t let NetSuite’s out-of-the-box processing limit your business practices or information capture.  The platform was meant to be adapted and in the hands of powerful actors, it really sings.  If you want to produce innovations with your NetSuite system, contact us.

Marty Zigman

Holding all three official certifications, Marty is regarded as the top NetSuite expert and leads a team of senior professionals at Prolecto Resources, Inc. He is a former Deloitte & Touche CPA and has held CTO roles. For over 30 years, Marty has produced leadership in ERP, CRM and eCommerce business systems. Contact Marty to set up a conversation.

More Posts - Website - Twitter - Facebook - LinkedIn - YouTube

About Marty Zigman

Marty Zigman

Holding all three official certifications, Marty is regarded as the top NetSuite expert and leads a team of senior professionals at Prolecto Resources, Inc. He is a former Deloitte & Touche CPA and has held CTO roles. For over 30 years, Marty has produced leadership in ERP, CRM and eCommerce business systems. Contact Marty to set up a conversation.

Biography • Website • X (Twitter) • Facebook • LinkedIn • YouTube

2 thoughts on “Automate NetSuite Cost Amortization via Revenue Recognition

  1. Jarrod says:

    Hi Marty,

    With the release of NetSuite’s Custom GL Lines Plugin, could this now be achieved by CR COGS and DR Deferred Expenses as additional lines on the fulfillment record’s GL impact, followed by applying an amortisation template to the transaction per this article?

    I.E. is it possible to utilise the amortisation feature as part of a custom GL line?

  2. Marty Zigman says:

    Hi Jarrod,

    I do believe the SuiteGL approach with an amortization template makes sense. We have been using our GL Reclasser tool with much success in client situations.

    Marty

Leave a Reply

Your email address will not be published. Required fields are marked *