Learn how to Manage any NetSuite Record by Exception

This article is relevant if you are looking to build NetSuite enforceable rules to manage transactions, entities or any other table type as the record moves from one state to another.


Some time ago, for a major NetSuite implementation, our client sought an architecture that allowed them to ensure that orders from their eCommerce site were captured (recorded) despite having imperfect information; yet they wanted to make sure the orders met minimum criteria before they were released for shipment. We frequently see this pattern in business record management and we developed an architecture, at the time, called “Transaction Approval Manager” to solve the challenge. I wrote about this capacity in this Get Control: Auto Approve NetSuite Transactions with Hold Rule Checks article. The article does a good job discussing how it works.

Shortly thereafter, after more time to reflect on the pattern, we determined that the larger consideration was that business records, in general, move between states.  As offered by NetSuite, the Sales Order, probably the most frequently talked about record in our client business operations conversations, moves from the initial “Pending Approval” to the “Pending Fulfillment” state. Yet, consider that all kinds of records move between state. For example, in NetSuite’s world, when a Journal Entry is marked approved it thus posts to the general ledger. Contemplate if a Vendor Bill has been verified as legitimate and thus can be paid if the due date has been reached. Consider a lead record that becomes qualified when the individual fills out a questionnaire. I suspect every business record, at some level, has a state for which we commit to its validity to be what we expect it to be.

Introducing Record State Manager

Based on the learning and success from delivering Transaction Approval Manager , we rebuilt the architecture to handle any NetSuite record.  We now call the framework “Record State Manager” or RSM for short.  In this framework, managers can describe the rules for which records are allowed to pass from one state to another.  These rules are then described to the framework and are enforced by SuiteScript.  Each rule definition is associated against the business record and can be evaluated to determine if criteria has been met.

The key to this capacity differs from any native NetSuite offering. You may jump to the conclusion, “That’s what NetSuite workflows are for…”. However, we don’t share that assessment when we consider rule evaluation in business terms.  Each rule evaluation can be viewed against the business record in question with visibility to all users.  The mystery of “What’s wrong with this record?” typically enforced behind the scenes with conventional NetSuite SuiteScript and Workflows becomes quite intuitive to all operational actors.  Should all the rules pass, the record can automatically be moved to the following defined state. If any rule does not pass, it represents an exception.  Going further, each rule can have role-based override definitions allowing certain members to bypass the rule; full audit of the rule and the user that produced the override is provided. Consider that rules may be designated responsibility by functional departments and thus records that are in a particular state can naturally fall into exception queues deserving more attention.

Sample Record State Manager Rules

Rules can be simple or as complex as needed; this is why we chose to use SuiteScript as the ultimate evaluation technology. To get a feel of some real-life Sales Order rules our clients have invented, consider the following:

Credit Management

  • Credit Limit Exceeded: place a hold because if this order is placed, customer will be over their credit limit.
  • Customer Deposit Due: Order requires a customer deposit, but none exists (or is insufficient): A customer must be on terms or a customer deposit must be captured.
  • Declined Credit Card: Place a hold on the order because the credit card was declined while attempting to create a deposit.
  • Customer is Behind: Put a hold on the order because the customer is on terms but is behind on paying their invoices by greater than 30 days.
  • No Location Set: Hold the order until a location has been assigned.
  • PO Number Required: Customer is marked as requiring POs for all orders (custom field), but order has no PO number.
  • Blanket PO Exceeded: Order exceeds total of all orders against the same blanket PO # (we built a custom “blanket PO” enhancement for this client, and the blanket PO was for a specific amount – total of all orders against the blanket was exceeded).

Inventory Management

  • Future Ship Date: Order was marked for a future date, which has not yet been reached: Hold the order to not commit inventory until the future ship date. Once the date arrives, automatically pass the rule, release the order and thus commit inventory.
  • Sample Order: Order includes one or more free samples and thus requires appropriate approval.
  • Inventory Depletion: Order would reduce inventory at selected location in excess of predefined thresholds. Hold the order so that it doesn’t consume too much inventory affecting other customers (e.g. by > 20%, or by more than xx units).

Gross Margin Management

  • Excessive Discount: Sales Rep applied a discount above the 20% threshold. Get a supervisor approval.
    Header and Line Discounts: Sales Rep applied both a header and line-level discount; hold the order for supervisor approval.

Destination Management

  • Incomplete Address: Hold the order to ensure that the shipping address has a valid address and that the bill-to address has a phone number.
  • Multi-Ship Address Rule: Hold order as special rules are needed for it being shipped to multiple addresses (line-level shipping).
  • World Shipping: Hold order as items were selected to be shipped to a part of the world which required special approval/handling.
  • Missing Contact Information: Hold order as customer didn’t have contact information on file.

General Management

  • Hold for Review: Custom order checkbox was checked to hold the order for any arbitrary reason requiring a manager review.
  • Valid Order Attributes: Hold order for the combination of GL segments used was invalid (eg department, class, location, and other custom GL segments). Our client had special rules around which combinations were permissible.

From this list, it should be clear that any type of NetSuite rule you want to invent can be enforced and managed.

Video Demonstration

To understand how Record State Manager works, we created a demonstration in our development account for one our existing clients. The client enthusiastically moved forward with an implementation as the framework helped solve challenges they faced in their multi-channel order flow.

Watch the (duration 12:51) video to see Record State Manager in action. Click here to access the video directly.

Implement Record State Manager in your NetSuite Account

Record State Manager is designed to optimize your NetSuite use especially in a multi-department configuration. The tools presents a model that allows business operations to scale as it allows for records to be held for any reason (i.e, exception based) whereas if all criteria are met, let standard operation procedures apply. We give this tool to our clients with a services implementation. If you feel that Record State Manager can make a difference in your operation, 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

| Category: Accounting, CRM, ERP, General, Management, NetSuite | 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>