Skip to content

Country Profiles

Der Peppol-Generator von thelawin.dev wählt automatisch das passende PINT (Peppol International) Profil anhand des Verkäuferlands, oder du gibst es explizit an.

Warum Country Profiles?

Peppol BIS 3.0 war ursprünglich ein EU-Standard. Um in Nicht-EU-Märkten — Singapur, Australien, Neuseeland, Malaysia, UAE, Japan — zu funktionieren, hat Peppol PINT-Varianten (Peppol International) eingeführt. Jedes Land hat seine eigene Steuertaxonomie (GST vs VAT vs Verbrauchssteuer), eine spezifische CustomizationID und länderspezifische Schematron-Regeln.

Das Feld country_profile bestimmt, welche CustomizationID und welches Steuerschema generiert wird. Ohne dieses Feld greift der Standard standard_eu — bestehende EU- und UK-Aufrufe bleiben unverändert.

Unterstützte Profile

ProfilBeschreibungTaxSchemeStatus
standard_euPeppol BIS 3.0 (EU, UK)VATStabil
pint_internationalPINT-Basis, ohne LändererweiterungVATStabil
pint_sgSingapur PINT (UBL 1.4.0)GSTStabil (besteht Peppol-Schematron)
pint_euInternationales EU PINT (2025-11)VATStabil (besteht Peppol-Schematron)
pint_auAustralien PINTGSTVorschau — ABN-Unternehmenskennung erforderlich (siehe Bekannte Lücken)
pint_nzNeuseeland PINTGSTVorschau — NZBN-Unternehmenskennung erforderlich
pint_myMalaysia PINTVATVorschau — BRN + InvoicePeriod erforderlich
pint_aeVAE PINTVATVorschau — mehrere länderspezifische Strukturerweiterungen ausstehend
pint_jpJapan PINTVAT (= Verbrauchssteuer)Vorschau — InvoicePeriod erforderlich

Automatische Erkennung

Wird country_profile nicht übergeben, leitet die API das Profil aus seller.country ab:

seller.countryAufgelöstes Profil
EU-Mitgliedstaat, GBstandard_eu
SGpint_sg
AUpint_au
NZpint_nz
MYpint_my
AEpint_ae
JPpint_jp
Alle anderenstandard_eu (Fallback)

AU vs. NZ

Beide Profile lösen sich über ihren jeweiligen Ländercode auf. Falls du unabhängig von der Verkäuferadresse ein bestimmtes Profil erzwingen willst, übergib country_profile explizit.

Explizite Steuerung

country_profile wird auf der obersten Ebene des Request-Bodys übergeben:

bash
curl -X POST https://api.thelawin.dev/v1/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "format": "peppol",
    "country_profile": "pint_sg",
    "invoice": {
      "number": "INV-2026-001",
      "date": "2026-01-15",
      "buyer_reference": "PO-SG-9876",
      "seller": {
        "name": "Singapore Trading Pte Ltd",
        "country": "SG",
        "peppol_id": "0195:201234567A"
      },
      "buyer": {
        "name": "Enterprise Customer Pte Ltd",
        "country": "SG",
        "peppol_id": "0195:202345678B"
      },
      "items": [{
        "description": "Consulting Services",
        "quantity": 10,
        "unit": "HUR",
        "unit_price": 150,
        "vat_rate": 9.0,
        "tax_category": "SR"
      }]
    }
  }'

Tax-Category-Override pro Position

Jedes Profil setzt einen Standard-TaxCategory-Code pro Zeile. Zum Überschreiben (z. B. für Nullsteuersätze oder steuerbefreite Positionen) wird items[].tax_category gesetzt:

json
{
  "invoice": {
    "items": [
      { "description": "Consulting", "vat_rate": 9.0, "tax_category": "SR" },
      { "description": "Export sale", "vat_rate": 0.0, "tax_category": "ZR" },
      { "description": "Exempt service", "vat_rate": 0.0, "tax_category": "ES" }
    ]
  }
}

Tax-Category-Codes nach Profil

ProfilCodesHinweis
standard_eu, pint_eu, pint_internationalS, Z, E, AE, K, G, OStandard-EN-16931-Codes
pint_sgSR, ZR, ESStandard-Rated, Zero-Rated, Exempt
pint_au, pint_nzS, Z, EGST-Äquivalent
pint_mySA, SEStandard, Exempt
pint_aeS, Z, EUAE-VAT-Standardcodes
pint_jpS, Z, EVerbrauchssteuer-Codes

Bekannte Lücken

Profile mit Vorschau-Status (AU, NZ, MY, JP, AE) erzeugen strukturell gültiges XML, bestehen aber nicht alle Schematron-Regeln der jeweiligen phive-Regelwerke ohne weitere länderspezifische Erweiterungen. Aktueller Konformitätsstand aus unserem phive-rules-Testlauf:

ProfilSchematron-ErgebnisOffene Punkte
pint_sgBestandenKeine
pint_euBestanden (4 Warnungen)Keine blockierenden
pint_my3 FehlerPartyLegalEntity BRN-Schema, InvoicePeriod
pint_jp1 FehlerInvoicePeriod (BG-14)
pint_au4 FehlerABN in PartyLegalEntity/CompanyID
pint_nz4 FehlerNZBN-Schema in PartyLegalEntity/CompanyID
pint_ae9 FehlerUAE-Strukturerweiterungen (ProfileExecutionID, Zeilen-UUIDs, CountrySubentity)

Geplante Ergänzungen:

  • PINT-AU/NZPartyLegalEntity/CompanyID mit schemeID="0151" (ABN) bzw. "0088" (NZBN)
  • PINT-MYPartyLegalEntity/CompanyID mit BRN-Schema + optionalem InvoicePeriod-Element
  • PINT-JPInvoicePeriod für vollständige BG-14-Abdeckung
  • PINT-AEProfileExecutionID, Zeilen-UUIDs, CountrySubentity aus der Emirate-Liste (AUH/DXB/SHJ/UAQ/FUJ/AJM/RAK)

country_profile wählt bereits die korrekte CustomizationID und das richtige TaxScheme für alle Profile. Die genannten Punkte betreffen strengere Schematron-Konformität, nicht die strukturelle Gültigkeit.

ZUGFeRD 2.4 & Factur-X 1.0.8 compliant