ediverse Explorer la plateforme

À la une PEPPOL BIS Billing 3.0 L’obligation européenne d’e-invoicing arrive : France sept 2026, Belgique janv 2026, Allemagne 2025.

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

CodeSémantique
ACCPAccepted Customer Profile (validation pré-réception).
ACTCAccepted Technical Validation.
ACSPAccepted Settlement In Process.
ACSCAccepted Settlement Completed.
RJCTRejected.
PARTPartially Accepted (mixed dans le batch).
PDNGPending (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 pain-002-reject-AC01.xml
<?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.

Messages liés

  • pain.001 — virement client (initial).
  • pain.008 — prélèvement (initial).
  • pacs.002 — équivalent FI to FI.
  • camt.054 — notification crédit/débit.