Processing pain.002 files

With the 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 scope of FinDock processing of pain.002 (specifically pain.002.001.03) files is limited to direct debit rejections (status RJCT). The purpose of processing rejected payments is to signal that the originating installment will not be collected.

You can process pain.002 files from accounts that are configured as SEPA targets.

Uploading the pain.002 file

When a pain.002 file is uploaded to Chatter, it is first parsed into inbound reports.

  1. Go to your Chatter group for ProcessingHub file exchanges.
  2. Click on Share and click the attach icon.
  3. Click Upload Files, select the bank statement file and click Add.
    • Please note that only one file per post is supported! The filename should not contain any whitespace. Replace whitespaces with an underscores "_".
  4. Finally, click Share to post the file to the group (adding text to the update is allowed, but not required).

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

When the process is done, 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.

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

Error messages in Chatter

The following pain.002 errors can be reported 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.

Matching pain.002 with FinDock objects

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

LevelPain.002FinDock
File<OrgnlGrpInfAndSts><OrgnlMsgId>PaymentHubFile.UniqueFileReference
Batch<OrgnlPmtInfAndSts><OrgnlPmtInfId>PaymentHubFile.UniqueFileReference
Transaction<OrgnlPmntInfAndSts><OrgnlEndToEndId>Installment.FinalPaymentReference

Rejection of 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 PaymentHub File 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.

Was this page helpful?