Companies choose to implement NetSuite as their core ERP for a myriad of reasons, but one often overlooked reason has to do with the customizability of the solution. Among a number of other capabilities, NetSuite allows users to easily alter native records, create custom records from scratch directly through the UI, and utilize workflows and custom scripts to define processes unique to that business. At MIBAR we have leveraged these functionalities to customize NetSuite in a way that accommodates an existing client’s complex billing needs.
Prior to getting into the details of the overall solution architecture, I would like to describe this client’s specific billing requirements. The client conducts the vast majority of business with their customers under multi-year contracts which define the services to be provided, rates of those services, and any planned escalations of those services. A simplified example of this is the following: our client may have a 4-year contract with a customer in which a service may be provided at $200/hr for the first year. There could also be planned escalations of 3% on the contract anniversary date every year. This means the rate of that service would increase to $206.00, $212.18, and $218.55 for Year 2, Year 3, and Year 4 respectively. The goal of our implementation was to automate the escalation process and update the effective pricing of all services while utilizing custom records, workflows, and scripts.
The three custom records that we created for this architecture are the Contract Record, Contract Line Record, and Contract Escalation Record. The Contract Record can be seen below:
The Contract Record is a strictly referential record that houses high-level information relevant to the contract, such as the customer name, contract term, active dates of the contract, etc. This record also serves as the parent record to which the Contract Line Record and Contract Escalation Records are ultimately linked.
The second record to discuss is the Contract Line Record which can be seen below:
The Contract Line Record stores all information specific to the service being provided to the customer. The active dates of that contract line along with the current rate of that service are defined on this record. The highlighted ‘Contract’ field serves as the link to the parent Contract Record. The ‘Service’ field is a list of all Other Charge for Resale Items that will be applied on Sales Orders and Invoices. The information on this record is also used to update the ‘Item Pricing’ sublist on the Financial subtab of the Customer record associated with this contract. This is done through a scheduled script that runs every day that scans through all Contract Lines in the system and compares each ‘Line Start Date’ to today’s date. If the two dates are equal, then the script will automatically add the item to the ‘Item Pricing’ sublist on the Customer Record with the pricing designated on the Contract Line record if it does not already reside there. If the item already exists on that sublist, then just the pricing will be updated to reflect the active pricing on the Contract Line record. This has the added benefit of allowing Other Charge for Resale Items to be re-used among various Contracts/Contract Lines for common services since the pricing is applied directly to the Customer Record.
The final record used in this contract management and billing process is the Contract Line Escalation record, which is a child record of the Contract Line record discussed in the previous section.
The ‘Contract Line’ field serves as a link to the parent Contract Line record. The crucial field on this record is ‘Escalation Method’ in which we have defined various means by which contract lines may escalate. The three most commonly used methods that we have built are ‘Fixed %’, ‘Fixed Amount’, and ‘Nominal Amount’. The ‘Fixed %’ method implies that the Contract Line will escalate by a set percentage. If we refer back to the original example, the service is escalating by a fixed percentage of 3%. Secondly, the ‘Fixed Amount’ method will escalate the existing Contract Line by a set dollar amount, rather than a percentage. For example, if the existing service has a rate of $200 with a planned ‘Fixed Amount’ escalation of $10, the updated pricing will be $210. The third method, ‘Nominal Amount’, simply replaces the existing rate with the rate entered on the Escalation Record. Regardless of the method selected, the escalations to the Contract Line record take place on the ‘Escalation Start Date’. A scheduled script runs every day to compare today’s date to the ‘Escalation Start Date’ on the Contract Line Escalation records. If these dates match, then the Contract Line record is updated: the rate is updated based on the ‘Escalation Method’ selected and the ‘Escalation Start Date’ and ‘Escalation End Date’ become the new start and end date of the Contract Line record. The ‘Item Pricing’ sublist on the Customer record will also be updated with the new rates as part of this escalation process.
Thus, to summarize, the Contract Line Escalation record updates the Contract Line Record which ultimately updates the Item Pricing sublist on the Customer Record. This has made the management of these complex contracts for our client much less cumbersome and far less prone to error.
As a leading NetSuite partner in NYC, the MIBAR team is pleased to share tips and tricks to current or prospective users of the software. We have worked with companies like yours to implement, customize, and train, deliver support, or even save a “failed” implementation. Contact us to learn more.