Best Practice: NetSuite Work In Progress for Distribution Organizations

This article is relevant if you are seeking to track work-in-progress (WIP) against NetSuite based inventory oriented transactions.


A number of our clients are in light manufacturing and assembly based industries. Once such industry is the premiums business. In this industry, there are a number of actors that ultimately produce goods that are branded for corporate and other organizational marketing programs. One of our premiums industry clients is a sales driven organization without actual assembly or warehouse operations. In their business model, they will use a number of outside companies to effectively acquire “blanks” (think white shirt) and then move the raw material good to another supplier that will perform imprints to brand the article. Depending on the desired end state, a series of outside suppliers are used to ultimately produce the finished good product.

While I could speak about the some of the interesting considerations for the premiums business, the topic of this article is about the concerns and challenges for using NetSuite to effectively produce work-in-progress based accounting. For this client, it takes a multiple step coordination across time to deliver the finished product. Thus, consider a situation where we goods make take a couple of months to produce. It is often common to think about using a project to help track the logistics needed to get the finished good produced. If you seek proper accrual accounting, you will want the cost of unfinished projects to be tracked as work-in-progress on the balance sheet at month (period) end.

With the basic idea of the need for work-in-progress accounting, the consideration for companies using NetSuite include which add-on modules to use. In this article, the underlying assumption is that we are NOT using NetSuite Manufacturing because outside suppliers are effectively performing the effort on our behalf (the manufacturing module is overkill for the task at hand). In this model, you may assume that we are using assembly items as supplied with NetSuite’s light manufacturing module. Yet, as I have described in other articles (see Finally: Capitalize NetSuite Inventory Costs with Item Consumption Landed Costs), you can do quite a bit without assembly items if you leverage the landed cost system provided with the Advanced Receiving function. In any case, the discussion is relevant with or without assembly items.

Tracking NetSuite Work-In-Progress

To determine where the costs will land on the general ledger, define the routing of the asset and COGs account on the item record. The two key accounts are as follows:

  1. Asset Account: purchases, primarily via purchase order item receipts, route debits to this account. Typically, this is an asset account of type inventory on the balance sheet.
  2. COGs Account: delivery of goods, via item fulfillments, will route debits to this account. Typically, we see a debit to COGs (an income statement account) and a credit to the respective inventory asset account.

In general, as you move goods away from your inventory stock, using an item fulfillment record, NetSuite wants to assume this action is to Cost of Goods Sold (COGs). But in our multi-step distribution effort, the goods may be moving to another supplier for yet more work. Thus, we don’t want cost to hit COGs but instead, we want the debit to hit Work-in-Progress inventory.

On first glance, you may be tempted to say, “let me change the general ledger COGs pointer on the item record from the income statement account to an inventory work-in-progress balance sheet account”. However, simply changing this pointer to the balance sheet produces the following concerns:

  1. Non-WIP Sales: what if the item participates in a traditional goods delivery and you indeed want it to hit COGs? NetSuite always posts to one COGs reference account.
  2. Relieve WIP: now that you routed the costs to WIP, how are you going to ultimately get the costs to COGs when you finally do deliver the good?

To directly solve for the above concerns may involve the following thought process:

  1. Non-WIP Sales: use SuiteGL and some attribute on the item fulfillment record to distinguish between WIP and COGs treatment.
  2. Relieve WIP: determine how revenue will be recognized; couple revenue recognition to WIP relief. Assess how you will handle revenue that is not 100% earned all at once. Handle the concerns for the accumulation of costs that may be recorded out-of-step from the revenue policy.

While you can indeed address the concerns as suggested, in my assessment, this demands NetSuite customizations and application logic that can become complex. While I have no problem conceiving, designing and producing complex NetSuite customizations, the effort comes at an additional investment. Furthermore, any direct solution will require a compensating control framework. Finally, NetSuite reports that assume COGs treatment will stop working and you will need to develop your own views to address the situation.

Simple Indirect Method for NetSuite Work-in-Progress

After working with multiple clients that want Work in Progress to be on the balance sheet automatically, I have come to the assessment that NetSuite’s built-in architecture (remember assumptions noted above about add-on modules) does not lend itself well to the direct method relative to the investment. Instead, I recommend the indirect method. Here is how it works:

Constitute Projects

I recommend constituting a project for all the work you do that may have WIP. I am not talking about NetSuite’s concept of Project which is more about timesheet based time tracking for services organizations. Here, I am speaking about a custom Project record that can be referenced by sales and purchase order related line items. For those interested, I recommend reading my article Project Task Coordination for NetSuite Driven Sales Organizations on a possible pattern.

All sales activity will be tracked with the project record. All cost activity will be tracked with the project record. The project record gives you the ability to have multiple sales orders and purchase orders that can used to summarize activity which includes income, costs and margin. The project record can be tailored to fit the business’s specific information demands.

Assess Percentage Complete to Determine Work-In-Progress

With the custom project record now in place, all your transactional activity can be tracked and identified. Let NetSuite naturally route COGs to the income statement. The goal now is to use Saved Search technology to do the following:

  1. Gather Project Costs: determine the total project costs that have been accumulated.
  2. Assess Revenue Earned: determine if revenue has been earned. This can be complex — yet the idea is that we can look at source transactions, typically item fulfillments (which may indicate we have delivered) and invoices (which indicate we have at least requested funds; but may not actually be revenue) and sales orders (the customer’s commitment for the goods) to make some assessment for the percentage complete.

Once you have done these two activities, the goal is to move the appropriate amount of COGs to the balance sheet. The practice is to use a reversing period end journal entry to reclass income statement COGs to balance sheet WIP. Consider the following accounting each period:

First Month: $1,000 total costs are produced via item fulfillments — native NetSuite behavior
Dr COGs $1,000
   Cr Inventory $1,000

Last Day of the First Month: No Revenue Earned: $1,000 total costs
Dr WIP: $1,000
   Cr COGs: $1,000

First Day of Next Month: Automatic Reversing Entry
Dr COGs: $1,000
   Cr WIP: $1,000

Additional Costs are produced the Second Month: $500
Dr COGs $500
   Cr Inventory $500

Total COGs on the income statement is now $1,500. The project is now determined to be 75% complete and we will assume revenue is recognized.

Last Day of the Second Month: 75% Revenue Earned: $1,500 total costs accumulated. $1,125 ($1,500 x 75%) costs to recognize.
Dr WIP: $375
   Cr COGs: $375

First Day of Next Month: Automatic Reversing Entry
Dr COGs: $375
   Cr WIP: $375

The third and final month, no additional costs are accumulated and the project is fully delivered.

Only $375 of COGs is on the income statement. The remaining 25% of the revenue is earned. In conclusion, we are done; no more COGs reversal work is required.

Setup the NetSuite Work-In-Progress Accounting Practice

We have found that this indirect method of accounting is easier to understand and demands less effort even though it is a period end practice. While we leverage previously produced algorithms and patterns to help new clients succeed, the key to making this work is to spend time contemplating the revenue recognition policy and its implementation. Here is where the real thinking becomes important — and often this is not an easy subject for many organizations that deliver goods over long time horizons. With this practice and structure, we have found that the custom project record can be enhanced to leverage summarized saved searches that help tell the story of revenue, work in progress and costs of goods sold over time. This story then becomes the basis for period end accounting. Once you have your methodology and practice setup, you can then consider how scripts can be used (but not required) to help the automatic production of WIP reclass journal entries.

If you are looking for leadership on NetSuite Work-in-Progress accounting, let’s have a conversation.

Be Sociable, Share!

Marty Zigman

Holding all three official certifications, Marty is Southern California's 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 25 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 - Google Plus - YouTube

| Tags: , , | Category: Management, NetSuite, Strategy | Leave a comment

Post a Comment

Your email is never published nor shared. Required fields are marked *


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>