How to Manage NetSuite Vendor Bill Installment Terms with Discount

in , June 24th, 2025

NetSuite Term records allow you to configure them with a conditional discount or as installments, but you cannot have terms with both installments and discounts. There are some fairly rare vendors and circumstances where the terms for the vendor bill are installments with a discount, which is challenging to deal with in NetSuite.

Note: This is a fragile solution which may need to be adjusted to fit a given company’s situation.

Assumptions

But first, the assumptions that were true at the time of solution design:

  1. Installment terms will always have a discount; the discount for installment terms is always 2%, and the payment will always be made in time to qualify for the discount.
  2. Technically, the most common terms of this type for them are 4x4, where they must make the installment payments before 30, 60, 90, and 120 days in order to receive the 2% discount for each payment.
  3. This solution does not allow for installment terms without a discount or with a different discount.
  4. It is acceptable that there will, with some frequency, be a rounding error of 1 cent in the original amount, balance due, and discount amount shown on the check voucher PDF / ACH payment email.
  5. It is acceptable that the values shown in the original amount, balance due, and discount amount columns in the check voucher PDF/ACH payment email do not line up with the bill payment record in NetSuite.

Configuration: Advanced PDF / Email Templates

I used the following FreeMarker code to calculate the original amounts before the 2% discount. The rounding in this code doesn’t exactly match up with how NetSuite splits up the installments, which is where we get the 1-cent deviance in some cases.

Line 13 checks if the bill payment apply line is for an installment; if it is, then the code calculates the original amount, balance due, and discount. The Payment (apply.amount) is the actual NetSuite value, so that will always be correct even if the other three fields are off by a penny.

Line 23 handles if the bill payment apply line is not for an installment.

<#elseif check.apply?has_content || check.credit?has_content>
    <table style="position: absolute; overflow: hidden; left: 0px; top: 40px; width: 700px; font-size: 6pt;">
      <tr>
        <th>Date</th>
        <th>Type</th>
        <th>Reference</th>
        <th align="right">Original Amt.</th>
        <th align="right">Balance due</th>
        <th align="right">Discount</th>
        <th align="right">Payment</th>
      </tr>
      <#list check.apply as apply>
        <#if apply.installmentnumber?has_content>
          <tr>
            <td>${apply.applydate}</td>
            <td>${apply.type}</td>
            <td>${apply.refnum}</td>
            <td align="right">${(apply.total / 0.98)?string.currency}</td>
            <td align="right">${(apply.due / 0.98)?string.currency}</td>
            <td align="right">${(apply.amount / 0.98 - apply.amount)?string.currency}</td>
            <td align="right">${apply.amount}</td>
          </tr>
        <#else>
          <tr>
            <td>${apply.applydate}</td>
            <td>${apply.type}</td>
            <td>${apply.refnum}</td>
            <td align="right">${apply.total}</td>
            <td align="right">${apply.due}</td>
            <td align="right">${apply.disc}</td>
            <td align="right">${apply.amount}</td>
          </tr>
        </#if>
      </#list>
      <#list check.credit as credit>
        <tr>
          <td>${credit.creditdate}</td>
          <td>${credit.type}</td>
          <td>${credit.refnum}</td>
          <td align="right">-${credit.amount}</td>
          <td>&nbsp;</td>
        </tr>
        </#list>
    </table>
</#if>


View from Bill Payment record.

View from Bill Payment PDF. Note that the Original Amt, Balance due, and discount don’t match the Bill Payment record.

Process: Entering the Vendor Bill

Enter the bill as normal, and add an Expense line where:

  • Account = 51600 Vendor Rebates
  • Amount = 2% of the total amount

If the customer is willing to pay for it, we could script a solution to automatically add this expense line when the terms on the bill are installment terms.

Process and pay the bill as usual.

Terms

Setup > Accounting > Accounting Lists > Filter: Type = Term

Author: Nathan Wiley


Got stuck on a step in this article?

We like to update our blogs and articles to make sure they help resolve any troubleshooting difficulties you are having. Sometimes, there is a related feature to enable or a field to fill out that we miss during the instructions. If this article didn't resolve the issue, please use the chat and let us know so that we can update this article!

Oracle NetSuite Alliance Partner & Commerce Partner

If you have general questions about NetSuite or more specific questions about how our team can support your business, contact us! Anchor Group is a certified Oracle NetSuite Alliance Partner and Commerce Partner equipped to handle all kinds of NetSuite and SuiteCommerce projects, large or small.

 
 

Want to keep learning?

Our team of NetSuite and ecommerce professionals has written articles on a wide variety of topics, from step-by-step tutorials, to solution recommendations, available support services, and more!

Your cart