Skip to content

Refunds from Salesforce

FinDock supports initiating refunds from Salesforce in addition to refunds initiated from PSPs.

The Refunds from Salesforce feature is in beta and open to all customers for testing.

Pilot scope and limitations

Setting up Refunds from Salesforce

Refunds from Salesforce currently does not have any explicit setting in the FinDock Setup. However, using the feature requires the FinDock Core Refunds Run permission set, part of the FinDock Service Agent permission set group. For specific integration patterns, see Integrating Refunds from Salesforce.

Please also keep in mind potential impact on existing business processes that are built around initiating refunds from PSP dashboards and portals. A refund of the same payment initiated from the PSP and from Salesforce should be automatically handled by the PSP. Whichever initiation comes second is blocked. However, it is better to avoid overlapping refund initiation processes and eliminate failure scenarios that are normal and expected.

What can be refunded

Any individual Payment (cpm__Payment__c) record linked to an installment is potentially refundable. From the Installment perspective, this means both partial and full refunds are supported.

The refund amount can be less than or equal to the payment amount. FinDock automatically checks of the sum of all refunds for a given payment remains below or equal to the original payment amount to prevent over-refunding.

To be able initiate the refund from Salesforce, the following must be true for the Payment record:

  • Amount: greater than zero
  • Payment Method: not empty
  • Payment Reference: not empty
    • Authorize.net = Transaction Id
    • GoCardless = Payment Reference
    • Paya = Payment Transaction Id
    • Stripe = Charge Id
  • Payment Processor: not empty
  • Target: not empty

New one-time and recurring payments set up and collection through FinDock have all the needed data for refunding. If you are migrating, importing or otherwise manually creating payments in FinDock, make sure the required fields in Payment records are populated. These fields may be empty on older records.

Refund processing

FinDock uses the custom Refund object to capture refunds. When the Refund record is created, FinDock makes callouts to the defined PSP and receives notifications that are processed as InBound Report records through Guided Matching.

Manually creating Refund records does not trigger the refund from Salesforce process. The records need to be created through one of the supported integration patterns.

The Refund object has four states as described below.

StatusMeaning
NewRefund record created, but not picked up for processing yet.
Pending ProcessingRefund request has been sent to the PSP.
CompletedRefund was successfully processed and FinDock has received confirmation from the PSP.
FailedThe refund request could not be completed. See Last Status Reason on the Refund record for details.

Status changes are dependent on PSP-specific events and the associated inbound report handling through Guided Matching. The inbound report processing of a successful refund creates a negative Payment record representing the debit transaction on your merchant account.

PSPs may have review procedures that can delay event notifications to FinDock. Please check your PSP dashboard for further information if you see a refund processing delay.

Refunds with Fundraising as source

If you have customizations on top of the default Salesforce Gift Refund capabilities, please carefully test refunds in your unique context and flows to ensure everything works as expected.

When using Fundraising as a source, processing refunds through FinDock automatically creates corresponding Gift Refund records. The Gift Refund records are created and updated based on the Guided Matching results from processed inbound reports.

Refunds triggered from FinDock automatically create a corresponding, linked Gift Refund record with the following mapping. Limitations on field updating only apply when a Gift Refund record is linked to a Refund record.

Gift RefundFinDock RefundSyncComments
AmountAmountOne wayCan only be changed from the Refund record
DateCreated Date / Refund DateOne wayCreate Date when initiated, Refund Date when completed
ReasonRefund ReasonTwo wayOnly synced if values are same
StatusStatusOne wayCan only be changed from the Refund record

FinDock uses the following status mapping between Refund and Gift Refund:

Refund StatusGift Refund Status
Pending ProcessingInitiated
FailedFailed
CompletedCompleted

We recommend updating the Refund page layout to include a Gift Refund field to the Details tab so you can easily see the linked record from the Refund record.

The Reason picklist on Gift Refund is restricted. When setting up Refunds from Salesforce, you need to modify the Refund Reason picklist on the FinDock Refund object to match the Gift Refund Reason values.

Refunds with NPSP

When using NPSP as a source, processing refunds through FinDock automatically updates Opportunity records linked to the impacted installment and creates negative Opportunity Payment records. FinDock uses the Collection Date from the negative Payment record (of the refund) to fill in the Payment Date (npe01__Payment_Date__c) on the newly created negative Opportunity Payment record.

The Collection Date equals Payment Date logic is based on processing assumptions that may not always be true. If those conditions are not met, FinDock falls back to using Date.today() for Payment Date.

Please review your status-stage mappings before using Refunds from Salesforce. By default, Refunded (fully refunded installments) is mapped to the Reversed stage. Partial refunds change the installment status to Partially paid, which by default is mapped to Pledged.

Regarding partial refunds, please note that Refund records are related to an Opportunity record via the linked installment only. Also keep in mind that refunds initiated from Salesforce are only reflected in NPSP after FinDock receives confirmation from the Payment Service Provider.

There is no direct lookup between negative opportunity payments and the Refund record (and the associated negative Payment record). Refund records are related to an opportunity via the linked installment only.

Refunds data model

The following ERD illustrates how the Refund object relates to other custom objects and Salesforce objects, in this case, Salesforce with Fundraising (NPC/EDU).

FinDock ERD with Refunds