pacs.002.001.10 XSD schema and business logic

Learn how to generate valid pacs.002.001.10 messages for your ISO 20022 message-based integration to Mambu Payments (formerly Numeral)

1. Usage

pacs.002.001.10 are FIToFIPaymentStatusReport (PSR) messages. They are used in two cases: when it concerns a payment pacs.008 or pacs.004 message, PSRs provide an update of the payment status at a point of time during its processing. When it concerns another type of message, it always indicates a rejection of that message.

Note that a given payment can have one or multiple pacs.002.001.10 messages. In case of multiple pacs.002.001.10 messages, they must be ordered to respect the lifecycle of a payment (see Payment order lifecycle and Return lifecycle). For instance, a payment order cannot be executed after it has been rejected.

The definitions and business rules below are applied by Mambu Payments. Your application should send pacs.002.001.10 complying with these definitions in business rules.

2. Message definition and structure

The pacs.002.001.10 message definition and structure is available here.

3. Business rules

3.1. Original Group Information and Status

3.1.1. Original message

The original message that a pacs.002.001.10 refers to is given by the Original Group Information and Status tag:

<FIToFIPmtStsRpt>
  <!-- ... -->
  <OrgnlGrpInfAndSts>
    <OrgnlMsgId>originalMsgId</OrgnlMsgId> <!-- Original message id -->
    <OrgnlMsgNmId>pacs.008</OrgnlMsgNmId> <!-- Original message name id -->
  </OrgnlGrpInfAndSts>
  <!-- ... -->
</FIToFIPmtStsRpt>

3.1.2. Group status

The Group Status is located under the Original Group Information and Status tag OrgnlGrpInfAndSts.GrpSts. Accepted values are the following:

Status codeStatus nameDefinition
RCVDReceivedThe related payment message has been received by the instructed agent. It has not yet been accepted or processed.
ACCPAcceptedThe related payment message has been accepted by the instructed agent.
RJCTRejectedAll payments in the group have been rejected by the instructed agent.
PDNGPendingAll payments in the group are pending at the instructed agent side.
PARTPartially acceptedSome payments have been accepted and others have been rejected. Payments rejected are included at the transaction level.

If the group status is rejected, the reason of the rejection must be provided, either as an official ISO 20022 ExternalStatusReason1Code, or a proprietary code. Mambu payments will not interpret the reason code passed by the user.

The XML snippets below show a few examples of group status:

<FIToFIPmtStsRpt>
  <!-- ... -->
  <OrgnlGrpInfAndSts>
    <GrpSts>ACCP</GrpSts>
  </OrgnlGrpInfAndSts>
  <!-- ... -->
</FIToFIPmtStsRpt>
<FIToFIPmtStsRpt>
  <!-- ... -->
  <OrgnlGrpInfAndSts>
    <GrpSts>RJCT</GrpSts>
    <StsRsnInf>
      <Rsn> <!-- one of: code Cd or proprietary Prtry -->
        <Cd></Cd>  <!-- e.g. RR04: regulatory reason -->
        <Prtry></Prtry>
      </Rsn>
    </StsRsnInf>
  </OrgnlGrpInfAndSts>
  <!-- ... -->
</FIToFIPmtStsRpt>

3.2. Transaction information and status

There can be 0 to N occurrences of transaction in a PSR message, unless the Group Status is PART, in which case there must be at least one occurrence.

Note: the ISO 20022 language refers to "Transaction" which corresponds to a "Payment" in Mambu Payments.

3.2.1. Original Transaction information

The original payment identifiers are provided below. Note that all these fields are optional

<FIToFIPmtStsRpt>
  <!-- ... -->
  <TxInfAndSts>
    <OrgnlInstrId></OrgnlInstrId> <!-- original payment instruction id -->
    <OrgnlEndToEndId></OrgnlEndToEndId> <!-- original payment end to end id -->
    <OrgnlTxId></OrgnlTxId> <!-- original payment transaction id -->
    <OrgnlUETR></OrgnlUETR> <!-- original payment UETR -->
  </TxInfAndSts>
</FIToFIPmtStsRpt>

3.2.2. Transaction statuses

When applicable, individual payments are included in the Transaction Information and Status tag TxInfAndSts.TxSts. Accepted values are the following:

Status codeStatus nameDefinition
ACCPAcceptedThe payment has been processed by the instructed agent.
ACSPAccepted, settlement in progressThe payment has been processed by the instructed agent and is undergoing clearing and settlement.
ACSCAccepted, settlement completedThe payment has been processed, cleared, and settled by the instructed agent.
RJCTRejectedThe payment has been rejected by the instructed agent.
PDNGPendingThe payment has been put on hold and is waiting verification (e.g., compliance checks) and validation by the instructed agent.

If the transaction status is rejected, the reason of the rejection must be provided, either as an official ISO 20022 ExternalStatusReason1Code, or a proprietary code. Mambu payments will not interpret the reason code passed by the user.

The XML snippets below show a few examples of transaction status:

<FIToFIPmtStsRpt>
  <!-- ... -->
  <TxInfAndSts>
    <OrgnlInstrId></OrgnlInstrId> <!-- original payment instruction id -->
    <OrgnlEndToEndId></OrgnlEndToEndId> <!-- original payment end to end id -->
    <OrgnlTxId></OrgnlTxId> <!-- original payment transaction id -->
    <OrgnlUETR></OrgnlUETR> <!-- original payment UETR -->
    <TxSts>ACCP</TxSts>
  </TxInfAndSts>
</FIToFIPmtStsRpt>
<FIToFIPmtStsRpt>
  <!-- ... -->
  <TxInfAndSts>
    <OrgnlInstrId></OrgnlInstrId> <!-- original payment instruction id -->
    <OrgnlEndToEndId></OrgnlEndToEndId> <!-- original payment end to end id -->
    <OrgnlTxId></OrgnlTxId> <!-- original payment transaction id -->
    <OrgnlUETR></OrgnlUETR> <!-- original payment UETR -->
    <TxSts>RJCT</TxSts>
    <StsRsnInf>
      <Rsn> <!-- one of: code Cd or proprietary Prtry -->
        <Cd></Cd>  <!-- e.g. RR04: regulatory reason -->
        <Prtry></Prtry>
      </Rsn>
    </StsRsnInf>
  </TxInfAndSts>
</FIToFIPmtStsRpt>

4. Mambu Payments Business rules

4.1. Identification of original payment

Mambu Payments will try to identify an original payment based on the following table in ascending order of priority:

Priority level

Combination

1

OrgnlMsgId + OrgnlTxId
OrgnlMsgId + OrgnlUETR

2

OrgnlMsgId + OrgnlEndToEndId

3

OrgnlMsgId + OrgnlInstrId

4

OrgnlTxId
OrgnlUETR

5

OrgnlEndToEndId

6

OrgnlInstrId

7

OrgnlMsgId if there is only one original payment with this message id.

If no original payment can be found, then the transaction occurrence in the PSR will be discarded.

4.2. Status priority processing

Mambu Payments will evaluate the status of a payment in this order:

Priority level

Description

1

If TxInfAndSts tag is present at least once, then the status of the individual payment referenced by TxInfAndSts is updated as follows :

  • RJCT: the individual payment is rejected
  • PDNG: the individual payment is pending
  • ACCP, ACSP or ACSC: the individual payment is executed

2

If TxInfAndSts tag is absent, then the status of the group of payments referenced by GrpInfAndSts tag are updated as follows:

  • RJCT: all payments in the group are rejected
  • RCVD: no change in the status
  • ACCP: either no change in the status or all payments in the group are executed (*)
  • PART: should not happen as transaction level detail is expected

3

If TxInfAndSts tag is present at least once, then the status of the group of payments referenced by GrpInfAndSts tag are updated as follows:

  • RJCT or ACCP: no impact as it has already been handled at transaction level
  • RCVD: not expected
  • PART: all remaining payments in the group that were not explicitly mentioned are either unchanged or executed (*)

(*): TBD

4.2.1. Implicit vs. explicit completion status