Account
English

PEPPOL-EN16931-R061: Direct debit without mandate reference (BT-89)

Peppol BIS Billing 3.0 rule · Error · UBL / CII

StandardPeppol BIS Billing 3.0 (OpenPeppol)SeverityError: the invoice is rejectedSyntaxUBL, CIIApplies toInvoices and credit notes sent over the Peppol network (UBL) and, because XRechnung embeds the Peppol rule set, every XRechnung as well.

Official rule text

[PEPPOL-EN16931-R061] Mandate reference MUST be provided for direct debit.

Why this error occurs

If the payment means type code (BT-81) is 49 (direct debit) or 59 (SEPA direct debit), Peppol requires the mandate reference so the buyer can verify the debit against the mandate he signed. The rule looks for cac:PaymentMeans/cac:PaymentMandate/cbc:ID (UBL) or ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID (CII) whenever the code is 49 or 59. It fails when the mandate reference is stored in the ERP but not mapped, or when code 59 is used although the customer actually pays by transfer.

How to fix it

In UBL add cac:PaymentMandate with cbc:ID (mandate reference) inside the cac:PaymentMeans, and cac:PayerFinancialAccount/cbc:ID with the debited IBAN (BT-91) if known. In CII put ram:DirectDebitMandateID into ram:SpecifiedTradePaymentTerms and the debited account in ram:PayerPartyDebtorFinancialAccount/ram:IBANID. If no mandate exists, change the payment means code to 58 (SEPA credit transfer) and give the payee account instead.

Example (valid)

<cac:PaymentMeans>
  <cbc:PaymentMeansCode>59</cbc:PaymentMeansCode>
  <cac:PaymentMandate>
    <cbc:ID>MANDATE-2024-0815</cbc:ID>
    <cac:PayerFinancialAccount><cbc:ID>DE02120300000000202051</cbc:ID></cac:PayerFinancialAccount>
  </cac:PaymentMandate>
</cac:PaymentMeans>

What the validator checks

Checked element (context):

UBL

cac:PaymentMeans[some $code in tokenize('49 59', '\s')
          satisfies normalize-space(cbc:PaymentMeansCode) = $code]
cac:PaymentMeans[some $code in tokenize('49 59', '\s')           satisfies normalize-space(cbc:PaymentMeansCode) = $code]

Test (XPath):

cac:PaymentMandate/cbc:ID

CII

ram:SpecifiedTradeSettlementPaymentMeans[some $code in tokenize('49 59', '\s')
                    satisfies normalize-space(ram:TypeCode) = $code]
ram:SpecifiedTradeSettlementPaymentMeans[some $code in tokenize('49 59', '\s')                     satisfies normalize-space(ram:TypeCode) = $code]

Test (XPath):

../ram:SpecifiedTradePaymentTerms/ram:DirectDebitMandateID

Check your invoice

Drop your XML or PDF on the validator and every failed rule is linked to its page here. Free, no account, the file is not stored.

Check your invoice →

Same check via API:

curl -F file=@invoice.xml https://einvoicechecker.com/v1/validate

Related rules

Frequently asked questions

What does PEPPOL-EN16931-R061 mean?

PEPPOL-EN16931-R061 is a peppol bis billing 3.0 rule: Mandate reference MUST be provided for direct debit.

Will my invoice be rejected because of PEPPOL-EN16931-R061?

Yes. PEPPOL-EN16931-R061 is flagged "fatal"; validators (KoSIT, Peppol access points, the German ZRE/OZG-RE portals) reject the invoice until it is fixed.

Which formats does PEPPOL-EN16931-R061 apply to?

Invoices and credit notes sent over the Peppol network (UBL) and, because XRechnung embeds the Peppol rule set, every XRechnung as well. Syntax: UBL and CII.

Source: Peppol BIS Billing 3.0.20 (November 2025). Catalogue generated from the official schematron on 2026-10-14.