Peppol BIS Billing 3.0: technický formát slovenských e-faktúr
Tento článok je určený vývojárom a IT tímom, ktoré implementujú e-fakturáciu pre svoju firmu alebo klientov. Vysvetlíme, čo presne je formát Peppol BIS Billing 3.0, ako vyzerá XML štruktúra faktúry, aké polia sú povinné podľa slovenských pravidiel a ako faktúry validovať a testovať. Ak hľadáte riešenie bez nutnosti implementovať Peppol priamo, pozrite si sekciu o ePošťák API.
Čo je Peppol BIS Billing 3.0
Peppol BIS Billing 3.0 (Business Interoperability Specification) je štandardizovaný formát elektronických faktúr používaný v rámci siete Peppol. Je postavený na štandarde UBL 2.1 (Universal Business Language) — XML formáte spravovanom konzorciom OASIS.
UBL 2.1 — základ formátu
Prečo Peppol zvolil UBL 2.1
Mandát EÚ a slovenská implementácia
Štruktúra XML faktúry
Peppol BIS Billing 3.0 faktúra je XML dokument s koreňovým elementom Invoice v namespace UBL. Tu je zjednodušená kostra dokumentu:
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<!-- Povinná hlavička -->
<cbc:CustomizationID>
urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0
</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<!-- Identifikácia faktúry -->
<cbc:ID>INV-2026-001</cbc:ID>
<cbc:IssueDate>2026-02-17</cbc:IssueDate>
<cbc:DueDate>2026-03-03</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<!-- Predávajúci a kupujúci -->
<cac:AccountingSupplierParty> ... </cac:AccountingSupplierParty>
<cac:AccountingCustomerParty> ... </cac:AccountingCustomerParty>
<!-- Platobné podmienky -->
<cac:PaymentMeans> ... </cac:PaymentMeans>
<!-- Daňové súhrny -->
<cac:TaxTotal> ... </cac:TaxTotal>
<!-- Celkové sumy -->
<cac:LegalMonetaryTotal> ... </cac:LegalMonetaryTotal>
<!-- Položky faktúry -->
<cac:InvoiceLine> ... </cac:InvoiceLine>
</Invoice>CustomizationID a ProfileID — povinná hlavička
Každá Peppol BIS Billing 3.0 faktúra musí obsahovať presne tieto dve polia:
- CustomizationID: identifikuje konkrétny profil (BIS Billing 3.0)
- ProfileID: identifikuje obchodný proces (fakturácia)
Tieto hodnoty sú fixné — musíte ich použiť presne tak, ako sú definované v špecifikácii. Akákoľvek odchýlka spôsobí zlyhanie validácie.
Identifikácia predávajúceho a kupujúceho
Pre slovenské faktúry musí identifikácia subjektov obsahovať:
- IČO — v elemente
PartyLegalEntity/CompanyID - DIČ / IČ DPH — v elemente
PartyTaxScheme/CompanyID - Peppol ID — v elemente
EndpointIDs atribútomschemeID="0245" - Adresa — ulica, PSČ, mesto, krajina (ISO 3166-1 alpha-2)
Príklad identifikácie predávajúceho:
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0245">SK1234567890</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Moja Firma s.r.o.</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Hlavná 1</cbc:StreetName>
<cbc:CityName>Bratislava</cbc:CityName>
<cbc:PostalZone>81101</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>SK</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>SK1234567890</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Moja Firma s.r.o.</cbc:RegistrationName>
<cbc:CompanyID>12345678</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>Položky faktúry, sumy a DPH
Každá položka faktúry (InvoiceLine) musí obsahovať:
- ID — poradové číslo riadku
- InvoicedQuantity — množstvo s jednotkou (napr.
unitCode="EA"pre kusy) - LineExtensionAmount — suma bez DPH
- TaxTotal — DPH pre daný riadok
- Item/Name — popis položky
- Price/PriceAmount — jednotková cena
Element LegalMonetaryTotal v koreni dokumentu musí obsahovať agregované sumy: LineExtensionAmount, TaxExclusiveAmount, TaxInclusiveAmount a PayableAmount.
Povinné polia podľa SK pravidiel
Slovenský CIUS — doplňujúce požiadavky
Okrem štandardných požiadaviek Peppol BIS Billing 3.0 Finančná správa SR vydala slovenský CIUS (Core Invoice Usage Specification) s lokálnymi doplneniami. Povinné polia pre SK faktúry:
- BT-1 — Číslo faktúry (Invoice/ID)
- BT-2 — Dátum vystavenia (IssueDate)
- BT-3 — Typ faktúry (InvoiceTypeCode: 380 = faktúra, 381 = dobropis)
- BT-5 — Mena (DocumentCurrencyCode: EUR)
- BT-9 — Dátum splatnosti (DueDate)
- BT-27 — Názov predávajúceho
- BT-29 — IČO predávajúceho (PartyLegalEntity/CompanyID)
- BT-31 — IČ DPH predávajúceho (ak platca DPH)
- BT-46 — IČO kupujúceho
- BT-49 — Peppol ID kupujúceho (EndpointID)
- BT-84 — IBAN účtu (PaymentMeans/PayeeFinancialAccount)
- BT-110 — Základ DPH
- BT-111 — Sadzba DPH (%)
- BT-112 — Suma DPH
- BT-106 — Suma faktúry bez DPH
- BT-112 — Celková suma s DPH
Validácia a testovanie
Pred odoslaním faktúry do produkčného prostredia Peppol je nevyhnutné overiť jej správnosť. Validácia prebieha na viacerých úrovniach:
Schéma validácia (XSD)
Schematron validácia (business rules)
OpenPEPPOL/peppol-bis-invoice-3 na GitHub. Nástroje: Phive (odporúčaný), Schematron CLI, online validátory.Online validátory
Pre rýchlu kontrolu bez lokálnej inštalácie:
- — peppol.helger.com/en — Phive online validátor (odporúčaný)
- — ecosio.com/peppol-validator — vizuálny validátor s popisom chýb
- — Sandbox prostredie ePošťáka — priamo testujete doručenie cez sieť
Sandbox testovanie cez ePošťák
Integrácia cez ePošťák API
Peppol bez vlastnej implementácie
Ak nechcete implementovať Peppol infraštruktúru sami (Access Point, certifikáty, 4-corner model), ePošťák poskytuje REST API, cez ktoré môžete:
- ✅ Odoslať faktúru v Peppol BIS Billing 3.0 formáte (POST /invoices/send)
- ✅ Prijímať faktúry cez webhook (POST na váš endpoint pri každej novej faktúre)
- ✅ Sledovať stav doručenia (GET /invoices/{id}/status)
- ✅ Stiahnuť archivované faktúry (GET /invoices/{id}/download)
- ✅ Validovať faktúru pred odoslaním (POST /invoices/validate)
API používa JSON obálku s base64-enkódovaným XML payload. Autentifikácia prebieha cez API kľúč v hlavičke X-API-Key.
Príklad odoslania faktúry cez ePošťák REST API:
POST https://api.epostak.sk/v1/invoices/send
Content-Type: application/json
X-API-Key: your-api-key-here
{
"recipientPeppolId": "9950:SK9876543210",
"invoiceFormat": "PEPPOL_BIS_3",
"invoiceXml": "<base64-encoded XML faktúry>",
"metadata": {
"invoiceNumber": "INV-2026-001",
"issueDate": "2026-02-17",
"totalAmount": 120.00,
"currency": "EUR"
}
}
// Odpoveď (HTTP 202 Accepted):
{
"invoiceId": "epostak-uuid-12345",
"status": "QUEUED",
"estimatedDelivery": "2026-02-17T14:30:00Z"
}Časté otázky
0096:TEST-[vaše-IČO]. Detailný postup je v API dokumentácii.