pain.002 — Customer Payment Status Report
Réponse de la banque créancière à un pain.001 ou pain.008. Confirme l'acceptation, rejette ou indique un statut partiel. Pierre angulaire du tracking de paiement cross-bank.
Objet et place dans le flux
pain.002 est le retour de statut. Une corporate envoie un pain.001 à sa banque ; quelques minutes ou heures plus tard, la banque répond avec un pain.002 indiquant pour chaque transaction du pain.001 : acceptée, rejetée, en cours.
Structure XML
Trois niveaux hiérarchiques :
- OrgnlGrpInfAndSts — statut au niveau Group (le pain.001 entier).
- OrgnlPmtInfAndSts — statut au niveau PaymentInformation.
- TxInfAndSts — statut transaction par transaction.
Codes de statut
| Code | Sémantique |
|---|---|
ACCP | Accepted Customer Profile (validation pré-réception). |
ACTC | Accepted Technical Validation. |
ACSP | Accepted Settlement In Process. |
ACSC | Accepted Settlement Completed. |
RJCT | Rejected. |
PART | Partially Accepted (mixed dans le batch). |
PDNG | Pending (validation manuelle). |
Reason codes
Codes StsRsnInf/Rsn/Cd les plus fréquents :
AC01— IncorrectAccountNumber.AC04— ClosedAccountNumber.AC06— BlockedAccount.AM04— InsufficientFunds.BE05— UnrecognisedInitiatingParty.RR01— MissingDebtorAccountOrIdentification.
Exemple : virement rejeté
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.10">
<CstmrPmtStsRpt>
<GrpHdr>
<MsgId>STS-ACME-20260518-001</MsgId>
<CreDtTm>2026-05-18T11:00:00+02:00</CreDtTm>
<InitgPty><Nm>BNP Paribas</Nm></InitgPty>
</GrpHdr>
<OrgnlGrpInfAndSts>
<OrgnlMsgId>ACME-PMT-20260518-001</OrgnlMsgId>
<OrgnlMsgNmId>pain.001.001.09</OrgnlMsgNmId>
<OrgnlCreDtTm>2026-05-18T09:00:00+02:00</OrgnlCreDtTm>
<OrgnlNbOfTxs>3</OrgnlNbOfTxs>
<OrgnlCtrlSum>15000.00</OrgnlCtrlSum>
<GrpSts>PART</GrpSts>
</OrgnlGrpInfAndSts>
<OrgnlPmtInfAndSts>
<OrgnlPmtInfId>ACME-PMT-PI-001</OrgnlPmtInfId>
<OrgnlNbOfTxs>3</OrgnlNbOfTxs>
<OrgnlCtrlSum>15000.00</OrgnlCtrlSum>
<PmtInfSts>PART</PmtInfSts>
<TxInfAndSts>
<OrgnlEndToEndId>INVOICE-2026-042</OrgnlEndToEndId>
<TxSts>RJCT</TxSts>
<StsRsnInf>
<Rsn><Cd>AC01</Cd></Rsn>
<AddtlInf>IBAN does not exist at debtor bank</AddtlInf>
</StsRsnInf>
<OrgnlTxRef>
<Amt><InstdAmt Ccy="EUR">5000.00</InstdAmt></Amt>
</OrgnlTxRef>
</TxInfAndSts>
</OrgnlPmtInfAndSts>
</CstmrPmtStsRpt>
</Document> Pièges courants
- Statut Group=ACCP mais transactions=RJCT — vérifier les statuts à tous les niveaux, pas juste Group.
- Reason code non standard — utiliser les codes ISO ExternalStatusReasonCode.
- Pas de OrgnlEndToEndId — empêche le client de matcher avec sa transaction d'origine.