NetSuite | Sales & Refunds Accounting

The article explains the general ledger (GL) impacts for various ecommerce order flows in NetSuite, including standard orders, POS transactions, cancellations, refunds (pre- and post-fulfillment), partial refunds, and returns. It details the sequence of accounting entries for each scenario and clarifies the use of Customer Deposit, Cash Sale, and refund record types.

 

The GL accounts impacted in NetSuite are determined by:

  • Revenue/COGS/Inventory = account configured on item record in NetSuite
  • Account Receivable = default account level configured AR or customer-specific configured AR account in NetSuite
  • Cash = account configured on payment method assigned on transaction level in NetSuite
  • Customer liability = not configurable, NetSuite native account

     

Standard Ecommerce Order (payment captured)

GL impacts on a regular order that was delivered, without any refunds:

Sales OrderNon-posting
Customer Deposit

DEBIT: Cash*

CREDIT: Customer Liability

Invoice

DEBIT: AR

CREDIT: Revenue

Deposit Application

DEBIT: Customer Liability

CREDIT: AR

Item Fulfillment

DEBIT: COGS

CREDIT: Inventory

Why do we use a Customer Deposit? This allows the business to account for the cash collected at time of order entry, but hold off on posting the Revenue until the goods are fulfilled. A liability is posted in place of AR until the time of the invoice creation in NetSuite.

*If using a settlement reporting flow, this DEBIT would be to the Undeposited Funds account. Once settlement from channel posts, this moves to the Cash/Bank account in a batch bank deposit

 

Standard Ecommerce Order (Payment auth'd, then captured at fulfillment)

Why do we forego a Customer Deposit? If payment is NOT captured at order creation, no need to post any GL impact in the ERP. Instead, the Payment Method should be populated on the Sales Order, after the fulfillment is created, the auto billing process runs in NetSuite and the Cash Sale is auto-generated against the SO. 

Sales OrderNon-posting, BUT populate payment method field
Item Fulfillment

DEBIT: COGS

CREDIT: Inventory

Cash Sale (linked to SO)

DEBIT: Cash

CREDIT: Revenue

 

POS/ Fulfilled by Platform Order

GL impacts on a POS order or an order fulfilled by platform:

Cash Sale

DEBIT: Cash

CREDIT: Revenue

DEBIT: COGS

CREDIT: Inventory

Why do we use a Cash Sale? This transaction type in NetSuite eliminates the need to have a separate fulfillment record. It is a sale and fulfillment in a single step. Note: there is a separate concept of a Cash Sale in NetSuite, which can be attached to a Sales Order. This type of Cash Sale is not the same and only represents the payment against an order.

 

 

Order Cancellation - Customer Refund

Refunds can be passed to NetSuite in a few different ways. Pipe17 supports passing the record types of Customer Refund and Cash Refund. 

1. Customer Refund represents the refund of the Customer Deposit, where no physical goods are returned.

2. Cash Refund represents the refund for goods that have already been delivered (invoiced/accounted for in revenue).

GL impacts on an order that was cancelled prior to fulfillment:

Sales OrderNon-posting
Customer Deposit

DEBIT: Cash

CREDIT: Customer Liability

Customer Refund

DEBIT: AR

CREDIT: Cash

Deposit Application

DEBIT: Customer Liability

CREDIT: AR

If an order is cancelled, the full order is refunded using a Customer Refund (if there was an original Customer Deposit) created. This transaction flow is used to avoid all impacts to inventory as nothing was yet shipped out.

 

Order Fulfilled & Refunded - Cash Refund

GL impacts on an order that was refunded post fulfillment:

Sales OrderNon-posting
Customer Deposit

DEBIT: Cash

CREDIT: Customer Liability

Item Fulfillment

DEBIT: COGS

CREDIT: Inventory

Invoice

DEBIT: AR

CREDIT: Revenue

Deposit Application

DEBIT: Customer Liability

CREDIT: AR

Cash Refund

DEBIT: Revenue

CREDIT: Cash

*DEBIT: Inventory

*CREDIT: COGS

*These are $0 if qty = 0 on SKU line item, which is leading practice here (this record is typically not representing the restocking of units except for a POS return).

Cash refund record should represent any portion of the order which was already fulfilled & invoiced in NetSuite.

The Cash Refund in NetSuite can return inventory to stock, but typically the business does not want to do this / info is not provided by the selling channel to know if stock is returned, so the quantity of the SKU is set to 0 to avoid adding inventory back to stock. The quantity typically will not be set to 0 for POS returns as stock would be returned in this case.

Order Partially Fulfilled & Refunded - Combo

GL impacts on an order that was partially refunded for items not yet fulfilled, and later refunded for items that were fulfilled:

Sales OrderNon-posting
Customer Deposit

DEBIT: Cash

CREDIT: Customer Liability

Item Fulfillment (partial)

DEBIT: COGS

CREDIT: Inventory

Invoice (only fulfilled portion)

DEBIT: AR

CREDIT: Revenue

Deposit Application (only fulfilled portion)

DEBIT: Customer Liability

CREDIT: AR

Cash Refund (only fulfilled portion)

DEBIT: Revenue

CREDIT: Cash

*DEBIT: Inventory

*CREDIT: COGS

*These are $0 if qty = 0 on SKU line item, which is leading practice here (this record is typically not representing the restocking of units).

Customer Refund (only unfulfilled portion)

DEBIT: AR

CREDIT: Cash

Deposit Application (only unfulfilled portion)

DEBIT: Customer Liability

CREDIT: AR

This flow is a combo of the pre and post-fulfillment refund flows depicted above. Part of an order may have shipped while the other part may have been cancelled prior to shipment or short shipped.

Return & Receipt

GL impact for an RMA in NetSuite:

RMANon-posting
Item Receipt

DEBIT: Inventory

CREDIT: COGS

Cash Refund*Not supported at this time due to lack of data coming from returns portal. The refund comes via the sales channel, but without related RMA information. This is represented with a standalone Cash Refund in NetSuite (shown above). RMA will not get any attached Cash Refund in NetSuite.

When a returns portal & warehouse system are connected to Pipe17, the RMA will come from the returns portal i.e. Loop Returns and the inbound information will sync to the warehouse system, with the receipt coming back to Pipe17 and on to NetSuite.

Was this article helpful?
1 out of 1 found this helpful

Comments

0 comments

Please sign in to leave a comment.

Have more questions?
Submit a request
Share it, if you like it.