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 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 CreditMemo or CashRefund is created for a dispute the original items on the Invoice or CashSale are used. There's an option available to use a "Stripe Dispute Item" instead of the items on the original invoice.
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 CreditMemo to effect inventory levels
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.
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:
- 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: