Skip to main content

Importing and processing pain.002 files

In a “Customer Payment Status Report” (pain.002) a bank informs account holders about the status (e.g. rejection, acceptance) of initiated credit transfers or direct debits. The usage and availability of pain.002 is subject to individual agreement between the account holder and the bank.

Scope of usage in FinDock

The scope of pain.002 processing in FinDock is limited to process reported rejected Direct Debit transactions (status RJCT). Other reported states are not handled. The purpose of processing rejected payments is to signal that the originating Installment will not be collected. A (second) negative payment is created and attached to the same installment to account for the rejection.

Supported formats

  • pain.002.001.03


Uploading the file

Navigate to the Chatter group set for payment processing.

  1. Click on Share an update and click on the paperclip icon in the lower left corner to attach a file to your post.
  2. Click Upload Files, select the bank statement file on your computer and click Add.
    • Please note that only one file per post is supported. Uploading multiple files at once might cause unexpected behaviour!
    • Secondly, the filename should not contain any whitespace. If the filename contains whitespace, replace it with an underscore "_".
  3. Finally, click Share to post the file to the chatter group (adding text to the update is allowed, but not required).

The file is now uploaded and ProcessingHub will process and parse the file. An Inbound Report is created and possibly installments and payments accordingly.

The status of the uploaded file can be tracked by taking a look at the comments on the post, by checking the PaymentHub File record created or by checking the Inbound Report record for this file.

When the process is done on the ProcessingHub you can find the inbound reports in Salesforce. The status of the inbound report records will give insight into the processing that has been done. Inbound reports are Salesforce data and give you the ability to extent our pain.002 processing with custom business logic. Inbound reports are used to store the information from the reports into structured, separate records in Salesforce. When the PAIN.002 file is uploaded to Chatter first the file is parsed from the file into inbound reports.


A pain.002 can report rejects on three levels:

  • A whole file is rejected
  • One or more batches of a file are rejected
  • One or more individual transactions are rejected

Matching pain.002 with FinDock objects

The table below describes how pain.002 levels relate to FinDock objects.


Rejection handling of a whole file or batch

In case of a reject of a file or a Batch the State of corresponding Paymenthub File objects are set 'Failed.' The Reason Code and related information are reported in PaymentHubFile Narrative. All Installments with status 'Collected' linked to the file and/or batch are rejected and get the same Reason Code as the File/Batch.

Rejection of Installments

Installments with status Collected for which a rejection is reported get the status “Rejected” and the Reason Code is set as reported in the pain.002 file. A (second) negative payment is created and attached to the same installment for the rejection.

The Installment.LastReversaldatedate is set to the creation date of the pain.002. In case the Installment is rejected on Transaction level the PaymentHub File representing the file and the batch that contained the transactions are set to 'Partially failed.'

Error messages

The following pain.002 errors can be reported on Chatter in response to the uploaded file:

  • “Could not find a matching file for <OrgnlMsgId>.” The pain.002 contains a reference to a file which could not be found. No Installments are rejected.
  • “Could not find a matching batch for <OrgnlPmtInfId>.” The pain.002 contains a reference to a Batch which could not be found. No Installments are rejected.
  • “Could not find a matching Installment for <OrgnlEndToEndId>.” The pain.002 contains a reference to an Installment which could not be found. No Installment is rejected.
  • “Duplicate Installment for <OrgnlEndToEndId>.” The pain.002 contains a reference which should refer to a single Installment, but multiple Installments where found. No Installment is rejected.