Processing Bacs reports

FinDock processes incoming Bacs reports that are uploaded to Chatter for Bacs Manual targets or automatically fetched from SmartDebit targets. The Bacs reports are parsed and saved as Inbound Report records.

This article outlines the actions that FinDock carries out through Guided Matching managed rules. Additional custom Guided Matching rules can be added as needed.

Bacs report reconciliation is carried out in two phases:

  1. ProcessingHub first tries to find and match related mandate and installment records for an incoming Bacs report using Id references and processing or collection dates.
  2. FinDock then uses Guided Matching to handle report actions.

Processed inbound reports are assigned a specific status depending on the Guided Matching results. The status options are:

  • Matched: the report has been successfully processed and matched
  • Guided Review: the report type was identified and related rule set assigned
  • Failed: there was an error processing the report
  • Manual: the report type could not be identified and requires manual review

If you add custom Guided Matching rules, you should create a rule to update the inbound report status to one of the defined Guided Matching End States.

If no such rule is created, FinDock automatically updates the status of the inbound report to Matched as part of the Manage Source rule. This is only the case when you add your own custom rules. With the default Guided Matching rules, the inbound report status after Guided Matching is as defined in the following tables.

Input Report code handling

Input reports are generated on Day 1 (Input Day) of the Bacs 3-day collection cycle. They are an important source of information that needs to be processed as soon as possible.

CodeReasonActions by FinDock
EAmendedSet status to Manual.
OReturnedSet status to Manual.
YRejectedReverse installment and create negative payment.

AUDDIS reports

An Automated Direct Debit Instruction Service (AUDDIS) report arrives at different times in cycle and may include similar findings as input reports.

CodeReasonActions by FinDock
1Instruction cancelled by payerSet status to Manual.
2Payer deceasedCancel mandate.
3Account transferredCancel mandate.
5No accountCancel mandate and deactivate payment profile.
6No instructionSet status to Manual.
7DDI amount not zeroNone. Contact FinDock Support.
BAccount closedCancel mandate.
CAccount transferredSet status to Manual.
FInvalid account typeCancel mandate.
GBank will not accept Direct Debits on accountCancel mandate.
HInstruction has expiredSet status to Manual.
IPayer reference is not uniqueNone. Contact FinDock Support.
KInstruction cancelled by paying bankSet status to Manual.
LIncorrect payer's account detailsCancel mandate and deactivate payment profile.
MTransaction code / user status incompatibleNone. Contact FinDock Support.
NTransaction disallowed at payersโ€™ branchCancel mandate.
OInvalid referenceNone. Contact FinDock Support.
PPayer's name not presentNone. Contact FinDock Support.
QService user's name blankNone. Contact FinDock Support.

AUDDIS mandate matching

For mandate matching, we use the following attributes of <MessagingAdvice> from AUDDIS and ADDACS reports.

  • For matching:
    • reference to match against cpm__Mandate__c.cpm__Mandate_ID__c
  • For duplication protection (of cpm__Inbound_Report__c.cpm__Checksum__c):
    • reference
    • reason-code
    • aosn

Here's an example of what that how the mandate matching works:

<MessagingAdvice
		user-number="123456"
		record-type="A"
		effective-date="**2009-07-28**"
		reference="**ABC1234567**"
		payer-name="payer"
		payer-account-number="12345678"
		payer-sort-code="000000"
		reason-code="1"
		aosn="**00000020**">
</MessagingAdvice>

FinDock searches for a cpm__Mandate__c record with cpm__Mandate_ID__c=ABC1234567. The duplicate check on cpm__Inbound_Report__c field cpm__Checksum__c=ABC1234567100000020. The checksum value is an md5 hash and not readable.

ADDACS reports

An Automated Direct Debit Amendment and Cancellation Service (ADDACS) report informs you of DDI amendments and cancellations. ADDACS reports can arrive at any time.

CodeReasonActions by FinDock
0Instruction cancelled - refer to payerCancel mandate.
1Instruction cancelled by payerCancel mandate.
2Payer deceasedCancel mandate.
3Account transferred to a new bank or building societySet status to Manual.
BAccount closedCancel mandate.
CAccount transferred to a new bank or building societySet status to Manual.
DAdvance notice disputedSet installment(s) status to On Hold.
EInstruction amendedSet status to Manual.
RInstruction re-instatedActivate mandate.

For ADDACS mandate matching, see above

ARUDD reports

An Automated Return of Unpaid Direct Debits (ARUDD) indicates a DDI could not be collected and includes the reason for the unpaid direct debit. Further information about these reason codes can be found from the Bacs Pay UK resources.

CodeReasonActions by FinDock
0Refer to payerReverse installment.
1Instruction cancelledCancel mandate and reverse installment.
2Payer deceasedCancel mandate and reverse installment.
3Account transferredReverse installment.
4Advance notice disputedReverse installment.
5No account (OR wrong account type)Reverse installment.
6No instructionReverse installment.
7Amount differsReverse installment.
8Amount not yet dueReverse installment.
9Presentation overdueReverse installment.
AService user differsReverse installment.
BAccount closedCancel mandate and reverse installment.

ARUDD installment matching

ARUDD reports are matched to installments based on following attributes of the <ReturnedDebitItem> element in the report.

  • For matching:
    • ref to match against cpm__Installment__c.cpm__Mandate_ID__c
    • valueOf to match against cpm__Installment__c.cpm__Amount__c
    • originalProcessingDate to match against:
      • cpm__Payment_Schedule__r.cpm__Bacs_Processing_Date__c
      • Or cpm__Payment_Schedule__r.cpm__Collection_date__c
  • For duplication protection (of cpm__Inbound_Report__c.cpm__Checksum__c):
    • ref
    • valueOf
    • originalProcessingDate

Here is an example ARRUD entry and how it would be processed:

<ReturnedDebitItem
		ref="**ABC123456**"
		transCode="17"
		returnCode="0205"
		returnDescription="REFER TO PAYER"
		originalProcessingDate="**2009-07-24**"
		valueOf="**10.00**"
		currency="GBP">

Based on the example above, FinDock searches for a cpm__Installment__c record with:

  • cpm__Mandate_ID__c=ABC123456
  • AND cpm__Amount__c=10.00
  • AND
    • (cpm__Payment_Schedule__r.cpm__Bacs_Processing_Date__c=2009-07-24
    • OR cpm__Payment_Schedule__r.cpm__Collection_date__c=2009-07-24)

FinDock then also does a duplicate check on cpm__Inbound_Report__c field cpm__Checksum__c=ABC12345610.002009-07-24. The checksum value is an md5 hash and not readable.

DDIC reports

Direct Debit Indemnity Claim reports indicates a payer requested a payment refund under the Bacs Direct Debit Guarantee.

CodeReasonActions by FinDock
1Amount and/or date of direct debit differs from advanced noticeReverse installment.
2No advance notice received by payerCancel mandate and reverse installment.
3DDI cancelled by paying bankCancel mandate and reverse installment.
4Payer has cancelled DDI direct with service userCancel mandate and reverse installment.
5No instruction held, payer disputes having given authorityCancel mandate and reverse installment.
6Signature on DDI is fraudulent or not in accordance with account authorized signature(s)Cancel mandate and reverse installment.
7Claim raised at service users request after direct debit applied to payers accountReverse installment if not already reversed.
8Service user name disputed Payer does not recognize service user collecting Direct DebitReverse installment.

DDICA installment matching

For matching DDICA reports with installments, we use the following attributes of <DDCollection> under the <DDICAdvice> entry.

  • For matching:
    • SUReference to match against cpm__Installment__c.cpm__Mandate_ID__c
    • Amount to match against cpm__Installment__c.cpm__Amount__c
    • DateOfDirectDebit to match against:
      • cpm__Payment_Schedule__r.cpm__Bacs_Processing_Date__c
      • Or cpm__Payment_Schedule__r.cpm__Collection_date__c
  • For duplication protection (of cpm__Inbound_Report__c.cpm__Checksum__c):
    • SUReference
    • Amount
    • DateOfDirectDebit

Here's an example entry and how it is matched:

<DDICAdvice>
    <SeqNo>2018091200X000000000</SeqNo>
    <PayingBankReference>DDIC00000000000000</PayingBankReference>
    <SUNumber>000000</SUNumber>
    <PayingBankName>XXXXX UK plc</PayingBankName>
    <SUReference>**XX00000000**</SUReference>
    <ReasonCode>1</ReasonCode>
    <PayerSortCode>000000</PayerSortCode>
    <PayerAccount>00000000</PayerAccount>
    <PayerName>MR X X XXXX</PayerName>
    <NoOfAdvForClaim>1</NoOfAdvForClaim>
    <TotalAmount>800</TotalAmount>
    <DDCollections>
        <DDCollection>
						<DateOfDirectDebit>**2018-09-03**</DateOfDirectDebit>
            <Amount>**200**</Amount>
        </DDCollection>
        <DDCollection>

FinDock searches for a cpm__Installment__c record:

  • cpm__Mandate_ID__c=XX00000000
  • AND cpm__Amount__c=2.00
  • AND
    • (cpm__Payment_Schedule__r.cpm__Bacs_Processing_Date__c=2018-09-03
    • OR cpm__Payment_Schedule__r.cpm__Collection_date__c=2018-09-03)

Then, a duplicate check is performed on cpm__Inbound_Report__c field cpm__Checksum__c=XX000000002002018-09-03. As in other reports, the checksum value is an md5 hash and readable.

Was this page helpful?