Tagasi lükatud Peppol’i arve kukub ühes kahest kihist ja veakood ütleb, kummas. XSD-vead tähendavad, et XML-i struktuur ise on vale – element puudub, on vales kohas või vale tüübiga UBL-skeemi suhtes. Schematroni vead tähendavad, et XML on korrektne, aga sisu rikub ärireeglit; just need kannavad koodiperesid, mida arendajad AI-abilistele kleebivad: `BR-` reeglid tulevad Euroopa standardist EN 16931, `PEPPOL-EN16931-R` reeglid on võrgu enda lisandused. Loe koodipere enne veateksti ja tead juba, kelle reegliraamatut rikkusid – standardi või võrgu oma.
Mida koodipered tähendavad?
| Koodipere | Kiht | Mida kontrollib |
|---|---|---|
| (parseri viga) | XSD | UBL-struktuur: elemendid, järjekord, tüübid |
| BR- | Schematron / EN 16931 | Põhireeglid: kohustuslikud andmed olemas |
| BR-CO- | Schematron / EN 16931 | Arvutused: summad peavad klappima |
| BR-S/E/AE/K/G/O- | Schematron / EN 16931 | Käibemaksukategooriate reeglid |
| PEPPOL-EN16931-R | Schematron / Peppol | Võrgu reeglid standardi peal |
| -CL | Schematron | Kooditabelid: valuuta, riik, skeemikoodid |
Reeglitel on ka raskusaste: fataalne viga blokeerib dokumendi, hoiatus mitte – seda tasub vaadata enne, kui kulutad pärastlõuna asjale, mille võrk oleks niikuinii vastu võtnud.
Miks summad nii tihti läbi kukuvad?
Arvutusreeglid (`BR-CO-*` pere) ristkontrollivad dokumendi aritmeetikat: ridade netosummad peavad andma maksuvaba kogusumma, käibemaksukategooriate summad peavad vastama baasidele ja määradele ning tasumisele kuuluv summa peab keti sulgema. Klassikaline põhjus on ümardamine: rakendus ümardab rea kaupa, reegel kontrollib summat ja sendine nihe lükkab arve tagasi. Töökindel lahendus on arvutada UBL-i kogusummad samadest ümardatud väärtustest, mis ridadel näha, mitte andmebaasi ümardamata numbritest.
Kuidas tagasilükatud arvet siluda: õiges järjekorras
Paranda kõigepealt XSD-vead: kuni struktuur ei parseeru, on Schematroni tulemused müra. Siis paranda esimene Schematroni viga ja valideeri uuesti: hilisemad vead kaskaadituvad sageli esimesest (üks puuduv käibemaksurida võib komistada pool tosinat sõltuvat reeglit). Kontrolli raskusastet, enne kui iga sõnumit blokeerijaks pead. Ja kui valideerid ligipääsupunkti API kaudu, mis kontrollib sünkroonselt enne vastuvõtmist, juhi need struktureeritud raportid oma testidesse: siis ilmuvad vastavusvead CI-s, mitte toodangus. Standardikaardi nende kihtide taga leiad juhendist kuidas luua korrektne UBL-arve.
What is the difference between XSD and Schematron errors in Peppol?
XSD errors mean broken XML structure against the UBL schema; Schematron errors mean well-formed XML whose content violates business rules (BR-* from EN 16931, PEPPOL-* from the network).
What are BR-CO errors?
EN 16931 calculation and condition rules — they cross-check totals: line sums, VAT category amounts and the payable amount must agree arithmetically. Rounding drift is the classic cause.
Are all Peppol validation errors blocking?
No. Rules carry severity — fatal errors block the document, warnings do not. Check severity before treating every message as a defect.
In what order should I debug a rejected Peppol invoice?
XSD structure first, then the first Schematron error (later ones often cascade), checking rule severity as you go. Synchronous API validation lets your CI catch these.