Technical12 min readDec 5, 2024

Peppol BIS 3.0: A Complete Guide for Access Points and Service Providers

Everything you need to know about implementing Peppol BIS 3.0, from message specifications to validation rules and best practices.

PeppolBIS 3.0IntegrationUBL
TM

Thomas Müller

Technical Architect

Share:

Introduction to Peppol BIS 3.0

Peppol BIS (Business Interoperability Specification) 3.0 is the definitive implementation guide for exchanging business documents over the Peppol network. It ensures that an invoice sent from a software provider in Norway can be processed automatically by an ERP in Greece.

Scope

BIS 3.0 covers the entire procurement cycle, but the Billing profile (Invoice & Credit Note) is the most widely implemented.

Document Structure (UBL 2.1)

BIS 3.0 uses Universal Business Language (UBL) 2.1. Below are critical snippets for compliance.

The Header

Every invoice requires specific IDs and codes.
urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0
urn:fdc:peppol.eu:2017:poacc:billing:01:1.0
INV-2024-001
2024-12-05
380
EUR

Credit Notes vs Invoices

For a Credit Note, change the Type Code and provide a reference to the original invoice:
381


    
        INV-ORIGINAL-123
        2024-11-01
    


Validation Architecture

Peppol uses a "Schematron" based validation stack. It happens in layers:

  • 1 XSD Validation: Is the XML well-formed? (Structure)
  • 2 EN 16931 Rules: Does it meet EU norms? (e.g., "VAT total must equal sum of sub-totals")
  • 3 Peppol BIS Rules: Specific Peppol constraints (e.g., "Endpoint ID must be a GLN or VAT").
  • 4 Country Specific Rules: e.g., Italy requires a specific CUP code for public contracts.

  • Troubleshooting Common Errors

    When your invoice is rejected, it is usually due to one of these common BIS 3.0 violations:

    Error CodeDescriptionFix
    PEPPOL-EN16931-R001BusinessProcessType must be providedEnsure ProfileID is correct.
    BR-CO-15Invoice total amount with VAT is invalidCheck your math: NetAmount + TaxAmount must equal GrossAmount exactly (to 2 decimals).
    BR-S-08VAT category code is missingEvery line item must have a Tax Category (S, Z, E, AE, etc.).
    BR-CL-10Invalid Unit CodeUse UN/ECE Recommendation 20 codes (e.g., C62 for units, H87 for pieces).

    Best Practices for Developers

  • 1 Validate Locally: Don't use the Access Point as your debugger. Integrate an open-source Schematron validator (like Phive) in your CI/CD.
  • 2 Floating Point Math: Never use standard floats for currency. Use BigDecimal or integer-based cents to avoid rounding errors that trigger BR-CO-15.
  • Ready to simplify your archiving?

    Start your 30-day free trial. No credit card required. Full EU compliance from day one.

    Start Free Trial