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 Order | Non-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 Order | Non-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 Order | Non-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 Order | Non-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 Order | Non-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:
| RMA | Non-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.
Comments
0 comments