Päť vrstiev. Prvá fatálna chyba zastaví ďalšie a dokument sa neodošle.
| Vrstva | Čo kontroluje | Pri chybe |
|---|---|---|
L1 | Správne utvorené XML | FATAL |
L2 | Schéma UBL 2.1 (XSD) | FATAL |
L3 | EN 16931 (CEN Schematron) | FATAL alebo WARNING |
L4 | Peppol BIS Billing 3.0 (Schematron) | FATAL |
L5 | Slovenské pravidlá podľa transpozície BIS | FATAL alebo WARNING |
Každá vrstva hlási vlastný výsledok
Vrstvy L2, L3 a L4 bežia ako jeden reťazec, takže sa pravidlá nespúšťajú dvakrát.
Napriek tomu má každá vlastný výsledok — nález sa priradí podľa toho, ktorá sada pravidiel
ho vyrobila.
Hodnota vrstvy je OK, WARNING, FATAL alebo SKIPPED.
SKIPPED neznamená „prešlo”. Znamená, že vrstva vôbec nebežala, lebo reťazec sa zastavil
skôr: chyba XSD zastaví L3 aj L4, fatálna chyba na L1 zastaví všetko ostatné. „Neoverené”
a „v poriadku” sa nikdy nezlejú do jednej hodnoty.
Vrstva L5 môže navyše vrátiť ERROR — slovenskú sadu pravidiel sa nepodarilo spustiť.
Dokument to nezastaví, ale do upozornení pribudne nález s ruleId SK_ENGINE, aby bolo
z odpovede zrejmé, že slovenské pravidlá overené neboli.
Čo kontroluje slovenská vrstva
Vrstva L5 sa spúšťa, keď je dodávateľ slovenský subjekt. Rozlišuje dve
závažnosti — fatálna chyba dokument zastaví, upozornenie ho len označí a pošle
ďalej.
- Fatálne: chýbajúca schéma
0245pri identifikátoroch, neúplná adresa dodávateľa alebo odberateľa. - Upozornenie: podozrivý formát DIČ alebo IČO, chýbajúca právna forma, nezrovnalosti pri daňovom zástupcovi.
Výsledok validácie cez API
GET /api/v1/invoices/{id}/validation
X-Api-Key: …
Vracia posledný verdikt uložený k faktúre. Výsledky sú append-only — opakovaná validácia po oprave pridá nový záznam a starý zostáva v histórii.
| Stav | Kedy |
|---|---|
200 | verdikt existuje |
202 | faktúra je ešte PENDING alebo VALIDATING; retry_after aj hlavička Retry-After hovoria, o koľko sekúnd skúsiť znova |
404 | faktúra neexistuje — alebo je z čias pred zavedením zápisu výsledkov a verdikt už nedostane |
{
"valid": false,
"overallSeverity": "FATAL",
"validationLevels": {
"L1_xml": "OK",
"L2_xsd": "OK",
"L3_en16931": "OK",
"L4_peppol": "FATAL",
"L5_sk": "SKIPPED"
},
"errors": [{
"ruleId": "PEPPOL-EN16931-R001",
"level": 4,
"ruleSet": "PEPPOL",
"severity": "FATAL",
"message": "Business process MUST be provided.",
"location": "/Invoice[1]/cbc:ProfileID"
}],
"warnings": [],
"durationMs": 1840
}
Príklad je skrátený — odpoveď nesie aj id, invoiceId, organizationId a createdAt,
takže sa dá rozlíšiť, ktorý beh validácie verdikt vyrobil.
Nálezy sú tu v origináli: message je anglický text Schematronu a location je XPath.
Práve tie potrebujete, keď problém riešite s dodávateľom svojho ERP. ruleId je stabilný
identifikátor pravidla, takže sa naň dá naviazať vlastný preklad alebo mapovanie na polia
vo vašom systéme.
Ak chcete hotové slovenské texty priamo z API, použite
predbežnú validáciu — tá vracia title, explanation
a fix podľa hlavičky Accept-Language, a to ešte pred odoslaním dokumentu.
Odpoveď tohto endpointu používa camelCase (overallSeverity, validationLevels), na
rozdiel od zvyšku v1 API aj predbežnej validácie, ktoré používajú snake_case.