Disputes (also known as chargebacks) are automatically represented in NetSuite immediately after they occur. Depending on your integration flow, they are represented slightly differently.
How disputes are represented in NetSuite
When a charge is disputed by a customer two actions immediately occur in your Stripe account:
- Stripe charges you a $15 fee for processing the dispute
- The full amount of the charge is withdrawn from your Stripe account balance
Here's how this is represented in NetSuite:
- On the next deposit (transfer), the dispute fee is recorded as a cash back line item. By default, the dispute fee will post to the same account as your credit card processing fees (this can be customized).
- If the CustomerPayment representing the charge is applied to an Invoice (this is case for most flows, including the subscription and eCommerce flows), a CreditMemo is created against the Invoice. A CustomerRefund is created and applied against the CreditMemo.
Here's a video walkthrough:
Here's a visual overview:
Here's an example of the dispute fee:
Here's an example of the CreditMemo representing the dispute:
Here's an example of the CustomerRefund representing the dispute:
Some finer points:
- The dispute amount is not always equal to the original charge. In some cases, it can actually be greater than the original charge amount. Learn more about these edge cases.
- If your charge is applied to a NetSuite invoice, when a dispute occurs the revenue associated with that invoice will be immediately reversed by the CreditMemo that is created.
- A dispute is not represented in NetSuite until we are certain that the charge can't be refunded. Certain cards/banks allow the merchant to refund the customer before a dispute is formally processed. In this case, the dispute is not included on the deposit until the merchant cannot refund the charge.
- The ID of all disputes start with
dp_. You can find all disputes in your NetSuite account by searching for all CustomerRefunds whose externalId starts with
dp_or memo field contains
Customizing Dispute GL Impact
By default, when a credit memo or cash refund is created for a dispute the original items on the invoice or cash sale are used. There's an option available to use a "Stripe Dispute Item" instead of the items on the original invoice or cash sale.
Here are some common reasons why you'd want to use this approach:
- You want disputes to post to a specific GL account
- You are selling physical products and don't want the dispute's credit memo or cash refund to affect inventory levels
If you are an eCommerce business, it's generally best if disputes (chargebacks) don't use the original items on the invoice or cash sale. Disputes create either a cash sale or a credit memo, and if the original items on the transaction are used it can affect NetSuite inventory.
By default, the "Stripe Dispute Item" posts to your default income account. If you'd like to customize the account the item posts to, or any other aspects of the item, just edit the item in NetSuite. SuiteSync will not overwrite any modifications made to the item in NetSuite.
If you need more control over the content of disputes, it's possible to use a SuiteScript to customize exactly which items make their way onto the credit memo or cash refund.
Is it possible to avoid creating the credit memo?
If the payment that is disputes is applied to an invoice, a credit memo is always created. There is no way to disable this behavior.
When a charge is disputed, you have lost that revenue & cash unless you win the dispute. If you win the dispute, we'll credit an income account of your choosing. If you are worried about ensuring that disputes are marked as bad debt and do not affect your other revenue accounts, what we recommend is posting the credit memo to a "Bad Debt" account of your choosing by configuring the "Stripe Dispute Item" and ensuring winning dispute income posts back to that same account.
When a Dispute is not Equal to the Original Charge Amount
There are a couple of cases that would cause the dispute amount to not be equal to the original payment amount:
- If SuiteSync is not managing the creation of the payments, it's possible for the calculation of the cash amount of the original payment to be incorrect. A good example here is when shipping and tax calculations are not brought over properly from a external system like Shopify or Magento. If CashSales are being used instead of Invoices and Customer Payments, this could cause the cash entry to drift slightly from the reality in Stripe. Then, if a dispute occurs, the CashRefund created from the CashSale will also be slightly different.
- There are some (rare) cases where Stripe receives a dispute that is greater than the original charge amount.
Here's how SuiteSync handles this case:
- If there is just a single item on the original Invoice or CashSale, that item is adjusted to match the dispute amount.
- If there are multiple items on the original Invoice or CashSale, SuiteSync doesn't "know" which items should be adjusted. So, instead of using the original items on the invoice, a standalone "Stripe Dispute Item" is used on the CreditMemo or CashRefund to represent the full dispute amount.
Winning a dispute, or a chargeback reversal, occurs when the bank grants a dispute in your favor. When this occurs, two actions are taken in your Stripe account:
- Stripe refunds the $15 dispute fee
- The full amount of the original charge is included in your next transfer
Here's how this is represented in NetSuite:
- The fee refund is represent as a $15 "Other Deposit" line item on the next transfer
- The chargeback reversal is represented as a "Other Deposit" line item and posts to your default income account. The account this line item posts to can be customized.
Here's an example of how this looks on the deposit:
In most businesses, there is normally some sort of manual process around handling disputes. The integration takes a minimal approach to handling dispute reversals, ensuring that cash is represented properly but leaving income, revenue recognition, cash application, etc to a manual or automated process owned by the user.
Here's some other notes on the dispute reversal process:
- Once you win a dispute you can customize the account that the disputed charge is returned to. For instance, you could post the cash from a winning dispute to A/R instead of income and then manually (or automatically) create journal entries or invoices to clear out the open A/R.
- Here's an example of how the dispute reversal flow can be customized. The integration can be configured to post dispute reversal cash to A/R instead of income. Journal entries or invoices could be created by the finance team to represent any associated income entries associated with the won chargebacks.
- As a random side note, it is possible to automate the dispute process by using Stripe's API. You can programmatically respond to disputes to eliminate some of the manual work normally required by disputes.
- If you have a custom flow or new feature you'd like to see here, please get in touch.
Creating a dispute in your Stripe testing environment
To test disputes, you can use the special card number
4000000000000259 in your Stripe test environment to create a dispute
Alternatively, you can use this example code to create disputes in your test environment.
How disputes are handled when using a customized reconciliation flow
When the reconciliation-only flow is used disputes are handled differently. This flow is only used for leveraging SuiteSync's deposit reconciliation alongside an existing custom integration.
Instead of creating a CustomerRefund against the CustomerPayment, the chargeback and the chargeback reversal are both represented as a cash back line item on the deposit record.
Here's an example of a deposit containing a dispute (i.e. a chargeback; the $120 line item) and dispute fee (the $15 line item):
Here is the corresponding event list from the Stripe dashboard for the disputed charge: