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
| Profil | Beschreibung | TaxScheme | Status |
|---|---|---|---|
standard_eu | Peppol BIS 3.0 (EU, UK) | VAT | Stabil |
pint_international | PINT-Basis, ohne Ländererweiterung | VAT | Stabil |
pint_sg | Singapur PINT (UBL 1.4.0) | GST | Stabil (besteht Peppol-Schematron) |
pint_eu | Internationales EU PINT (2025-11) | VAT | Stabil (besteht Peppol-Schematron) |
pint_au | Australien PINT | GST | Vorschau — ABN-Unternehmenskennung erforderlich (siehe Bekannte Lücken) |
pint_nz | Neuseeland PINT | GST | Vorschau — NZBN-Unternehmenskennung erforderlich |
pint_my | Malaysia PINT | VAT | Vorschau — BRN + InvoicePeriod erforderlich |
pint_ae | VAE PINT | VAT | Vorschau — mehrere länderspezifische Strukturerweiterungen ausstehend |
pint_jp | Japan PINT | VAT (= Verbrauchssteuer) | Vorschau — InvoicePeriod erforderlich |
Automatische Erkennung
Wird country_profile nicht übergeben, leitet die API das Profil aus seller.country ab:
seller.country | Aufgelöstes Profil |
|---|---|
| EU-Mitgliedstaat, GB | standard_eu |
| SG | pint_sg |
| AU | pint_au |
| NZ | pint_nz |
| MY | pint_my |
| AE | pint_ae |
| JP | pint_jp |
| Alle anderen | standard_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:
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:
{
"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
| Profil | Codes | Hinweis |
|---|---|---|
standard_eu, pint_eu, pint_international | S, Z, E, AE, K, G, O | Standard-EN-16931-Codes |
pint_sg | SR, ZR, ES | Standard-Rated, Zero-Rated, Exempt |
pint_au, pint_nz | S, Z, E | GST-Äquivalent |
pint_my | SA, SE | Standard, Exempt |
pint_ae | S, Z, E | UAE-VAT-Standardcodes |
pint_jp | S, Z, E | Verbrauchssteuer-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:
| Profil | Schematron-Ergebnis | Offene Punkte |
|---|---|---|
pint_sg | Bestanden | Keine |
pint_eu | Bestanden (4 Warnungen) | Keine blockierenden |
pint_my | 3 Fehler | PartyLegalEntity BRN-Schema, InvoicePeriod |
pint_jp | 1 Fehler | InvoicePeriod (BG-14) |
pint_au | 4 Fehler | ABN in PartyLegalEntity/CompanyID |
pint_nz | 4 Fehler | NZBN-Schema in PartyLegalEntity/CompanyID |
pint_ae | 9 Fehler | UAE-Strukturerweiterungen (ProfileExecutionID, Zeilen-UUIDs, CountrySubentity) |
Geplante Ergänzungen:
- PINT-AU/NZ —
PartyLegalEntity/CompanyIDmitschemeID="0151"(ABN) bzw."0088"(NZBN) - PINT-MY —
PartyLegalEntity/CompanyIDmit BRN-Schema + optionalemInvoicePeriod-Element - PINT-JP —
InvoicePeriodfür vollständige BG-14-Abdeckung - PINT-AE —
ProfileExecutionID, Zeilen-UUIDs,CountrySubentityaus 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.
Weiterführende Links
- Invoice Formats — alle neun unterstützten Formate (EN)
- Rechnung erstellen — vollständige Feldreferenz inkl.
country_profileundtax_category - Validation — Payload vor der PDF-Erzeugung vorab prüfen (EN)