Der ZUGFeRD Extractor für docuvita stellt alle technischen Hilfsmittel zur Verfügung, um eingehende E-Rechnungen beim Import in docuvita automatisch auszulesen und auf ihre Konformität zu prüfen. Jede Rechnung wird bereits beim Archivieren gegen die offiziellen Regelwerke der Norm EN 16931 sowie gegen die deutschen Vorgaben (XRechnung-CIUS, § 14 UStG) validiert – noch bevor sie in die Freigabe oder Buchhaltung gelangt. Das Ergebnis dokumentiert ein PDF-Validierungsprotokoll, das alle Befunde, den SHA-256-Wert des geprüften XML und die verwendeten Regelversionen revisionssicher festhält.
Die ausgelesenen Rechnungsdaten stehen als Metadaten am archivierten Objekt zur Verfügung und lassen sich damit für Aktenstrukturen, Suchen, Wiedervorlagen und Workflows nutzen. Rechnungsnummer, Beträge, Verkäufer, Käufer, IBAN und der Validierungsstatus sind unmittelbar nach dem Import abfragbar, sodass sämtliche Informationen bei der digitalen Bearbeitung dokumentenbasierter Geschäftsprozesse bereitstehen.
Unterstützt werden ZUGFeRD / Factur-X (hybride PDF/A-3 mit eingebettetem XML sowie reines CII-XML) und XRechnung in beiden Syntaxen (CII und UBL).
Der ZUGFeRD Extractor ist ein Plugin der docuvita DocumentServices und wird automatisch geladen, sobald die DLL im Extractors-Verzeichnis liegt. Es übernimmt die Dateiendungen PDF und XML.
Eingangsdokument (PDF oder XML)
│
├─ E-Rechnung erkannt ──► XML aus PDF/A-3 lösen ──► Format & Profil erkennen
│ ──► Daten auslesen (Z_-Felder)
│ ──► Prüfkette: XSD ► Schematron ► § 14 UStG ► eigene Prüfungen
│ ──► PDF-Protokoll + Metadaten-Rückschreibung
│
├─ sonstiges PDF ─────────► unverändert an die eingebaute PDF-Auslese (inkl. OCR)
│
└─ sonstiges XML ─────────► Textauslese (optional mit XSD-Prüfung, siehe unten)
| Eingang | Verhalten |
|---|---|
| Hybride PDF/A-3 mit eingebettetem Rechnungs-XML | Volle Prüfkette, Protokoll, Metadaten |
| Reines ZUGFeRD-/Factur-X-CII-XML | Volle Prüfkette, Protokoll, Metadaten |
| XRechnung (CII oder UBL) | Volle Prüfkette inkl. XRechnung-CIUS, Protokoll, Metadaten |
| PDF ohne eingebettetes Rechnungs-XML | Wird 1:1 an die eingebaute PDF-Auslese übergeben (Volltext, OCR) |
| Sonstiges XML | Textauslese; optional XSD-Prüfung gegen ein eigenes Schema |
Der Dokumentenlauf bleibt immer unberührt
Weil das Plugin die Endungen PDF und XML hält, reicht es alles Fremde weiter. Auch bei fehlender Lizenz, fehlenden Regelwerken oder einem Prüffehler wird das Dokument normal archiviert – es entfällt lediglich die Prüfung, und der Grund steht im Log.
Die Konfiguration erfolgt über eine Konfigurationsdatei im Extractors-Ordner.
Alle Bestandteile gehören in den Extractors-Ordner der DocumentServices:
C:\Program Files (x86)\docuvita\docuvita Server 2.0\docuvita.DocumentServices\Extractors\
| Bestandteil | Inhalt |
|---|---|
ZUGFeRDValidatorExtractor.dll |
Das Plugin selbst |
ZUGFeRDValidatorExtractor.dll.config |
Die Konfiguration (Pfade, Labels, API-Schlüssel) |
ZUGFeRDValidatorExtractor.pdb |
Optional – liefert Stacktraces im Log |
fd.Licensing.dll, Licensing.Net.dll |
Lizenzprüfung – entsperren, siehe Abschnitt Lizenz |
ZUGFeRDValidator.ltpl |
Lizenzvorlage (nur öffentlicher Schlüssel), wird mitgeliefert |
XXXXX-XXXXX-…-XXXXX.lic |
Ihre Kundenlizenz – Dateiname nicht ändern |
| Mitgelieferte Programmbibliotheken | Rechnungs-Auslese, PDF-Textauslese, Seitenrendering, PDF-Erzeugung |
Validators\ |
Regelwerke, Schemata und der Prüfläufer (siehe unten) |
Validators\)Unter Validators\ liegen die Regelwerke und der Prüfläufer. Ohne sie läuft nur die interne Strukturprüfung.
| Ordner | Inhalt | Umfang |
|---|---|---|
Validators\Schematron\ |
Vorkompilierte Regelwerke: EN16931 (CII/UBL), XRechnung-CIUS (CII/UBL), Factur-X MINIMUM / BASIC-WL / EXTENDED – jeweils mit Begleitdatei *_codedb.xml |
10 Dateien |
Validators\Schemas\ |
XSD-Schemata: Factur-X (je Profil), generisches CII, UBL (maindoc\ + common\) |
ca. 170 Dateien |
Validators\Schemas\Custom\ |
Platz für eigene Schemata für gewöhnliches XML | – |
Validators\SchematronRunner\ |
Der Prüfläufer ZUGFeRD.SchematronRunner.exe samt Laufzeit |
87 Dateien, ca. 81 MB |
Begleitdateien müssen neben ihrem Regelwerk liegen
JedeFACTUR-X_*.xsltlädt ihre Codelisten aus der DateiFACTUR-X_*_codedb.xmlrelativ zu sich selbst. Fehlt die Begleitdatei, meldet das ProtokollSCHEMATRON_ERROR– die Prüfung wird also nicht stillschweigend übersprungen, sondern schlägt sichtbar fehl.
Ebenso muss der OrdnerSchemas\UBL\common\vollständig vorliegen: fehlt eine Datei der Schemakette, lässt sich der gesamte UBL-Schemasatz nicht laden und die XSD-Ebene entfällt (im Protokoll alsXSD_LOAD_ERRORsichtbar).
Nach dem Kopieren der Dateien den Dienst docuvita.DocumentServices neu starten. Im Log muss anschließend diese Zeile erscheinen:
EInvoiceExtractor initialisiert (Plugin geladen).
Altbestände entfernen
Ältere Dateien wieEInvoiceExtractor.*oderZUGFeRDExtractorValidator.*aus dem Extractors-Ordner entfernen. Zwei Plugins für dieselbe Dateiendung führen zu unvorhersehbarem Verhalten, weil pro Endung nur genau eines zum Zug kommt.
Das Plugin arbeitet nur mit gültiger Lizenz. In den Extractors-Ordner gehören genau zwei Lizenzbestandteile:
| Datei | Herkunft | Hinweis |
|---|---|---|
ZUGFeRDValidator.ltpl |
wird mitgeliefert | Lizenzvorlage, enthält nur den öffentlichen Schlüssel |
XXXXX-XXXXX-…-XXXXX.lic |
erhalten Sie von uns je Kunde | Dateiname ist der Lizenzschlüssel – nicht umbenennen, Inhalt nicht ändern |
Es darf genau eine .lic-Datei im Ordner liegen; bei mehreren wählt das Plugin bewusst keine aus.
Windows-Zonenmarkierung entsperren
Kommenfd.Licensing.dllundLicensing.Net.dllper E-Mail oder Download, sind sie von Windows markiert und dadurch nicht ladbar. Das Log zeigt dann eineFileLoadException 0x80131515– das sieht wie ein Programmfehler aus, ist aber keiner:Get-ChildItem "$env:ProgramFiles(x86)\docuvita\docuvita Server 2.0\docuvita.DocumentServices\Extractors\*.dll" | Unblock-File
| Thema | Verhalten |
|---|---|
| Erste Prüfung | geht online (Aktivierung); danach liegt der Aktivierungsschlüssel lokal unter %ProgramData%\ZUGFeRDValidator\activation.key und die Prüfung läuft aus dem Zwischenspeicher |
| Verlängerung | neue .lic in den Ordner legen, alte entfernen – kein Dienst-Neustart nötig, die Änderung wird selbstständig erkannt |
| Serverumzug / Hardwaretausch | %ProgramData%\ZUGFeRDValidator\activation.key löschen; meldet die Prüfung weiterhin LICENSE_INVALID, bei uns eine neu ausgestellte Lizenz anfordern |
| Ohne gültige Lizenz | keine Prüfung, kein Protokoll, keine Metadaten – je Datei eine ERROR-Zeile im Log. Das Dokument wird trotzdem normal archiviert (PDF über die eingebaute Auslese inkl. OCR, XML als Text) |
Keine Konfigurationsschlüssel für die Lizenz
Vorlage und Lizenzdatei liegen neben der Plugin-DLL, der Lizenzschlüssel ist der Dateiname der*.lic, der Aktivierungsschlüssel liegt in%ProgramData%. In der Konfigurationsdatei gibt es dafür bewusst keine Einträge.
Schnellprüfung am Server:
$e = 'C:\Program Files (x86)\docuvita\docuvita Server 2.0\docuvita.DocumentServices\Extractors'
Get-ChildItem $e -Filter *.lic; Get-ChildItem $e -Filter *.ltpl # genau je eine Datei erwartet
Get-Content "$env:ProgramData\ZUGFeRDValidator\activation.key" -ErrorAction SilentlyContinue
Konfiguriert wird über die Datei ZUGFeRDValidatorExtractor.dll.config im Extractors-Ordner.
Vorkonfiguriert ausgeliefert
Alle Pfade sind bereits auf die Standard-Ablage unterValidators\eingestellt. In der Regel müssen Sie nur den API-Schlüssel (EInvoiceDocuvita.SessionGuid) und den Objekttyp eintragen.
Pfadauflösung: Relative Pfade werden gegen das Plugin-Verzeichnis aufgelöst, also gegen …\Extractors\. Absolute Pfade bleiben unverändert – die Prüfartefakte dürfen damit auch auf einem anderen Laufwerk liegen, solange das Dienstkonto dort Lesen/Ausführen darf.
Unbekannte Schlüssel: Ein Schlüssel ohne passende Einstellung wird beim Start als WARN mit dem Hinweis „ohne Wirkung" gemeldet. Tippfehler und Überreste alter Versionen fallen so auf, statt unbemerkt zu verschwinden.
EInvoiceValidator.*)| Schlüssel | Beschreibung | Standard |
|---|---|---|
SchematronRunnerExe |
Pfad zum Prüfläufer | Validators\SchematronRunner\ZUGFeRD.SchematronRunner.exe |
DotnetExecutable |
Alternativer Aufruf über die .NET-Befehlszeile | dotnet |
SchematronRunnerDll |
Alternativ zur EXE: Pfad zur Läufer-DLL, wird mit DotnetExecutable gestartet |
leer |
CiiXsdPath |
Generisches CII-Schema (Einstieg für XRechnung-CII) | Validators\Schemas\CII\CrossIndustryInvoice_100pD22B.xsd |
FacturXMinimumXsdPath, FacturXBasicWlXsdPath, FacturXBasicXsdPath, FacturXEn16931XsdPath, FacturXExtendedXsdPath |
Profil-eigene Factur-X-Schemata | Validators\Schemas\FacturX\… |
UblInvoiceXsdPath, UblCreditNoteXsdPath |
UBL-Schemata für Rechnung und Gutschrift | Validators\Schemas\UBL\maindoc\… |
En16931CiiXsltPath, En16931UblXsltPath |
EN16931-Regelwerke | Validators\Schematron\EN16931-…-validation.xslt |
XRechnungCiiXsltPath, XRechnungUblXsltPath |
XRechnung-CIUS-Regelwerke | Validators\Schematron\XRechnung-…-validation.xslt |
FacturXExtendedCiiXsltPath, FacturXMinimumCiiXsltPath, FacturXBasicWlCiiXsltPath |
Profil-eigene Factur-X-Regelwerke | Validators\Schematron\FACTUR-X_….xslt |
En16931VersionLabel, XRechnungVersionLabel, FacturXExtendedVersionLabel, FacturXMinimumVersionLabel, FacturXBasicWlVersionLabel |
Versionsbezeichnungen der Regelwerke – erscheinen im PDF-Protokoll | z. B. EN16931 1.3.16, XRechnung 3.0.2 / CIUS-Schematron 2.5.0 |
XRechnungRulesVersion |
Regelstand, gegen den die im Dokument angegebene XRechnung-Version geprüft wird | 3.0 |
TimeoutSeconds |
Zeitlimit für einen Prüflauf. Zulässig 5–300 | 60 |
MaxXmlCharacters |
Obergrenze des Rechnungs-XML in Zeichen (nicht Bytes); 0 = unbegrenzt. Riegel gegen XML-Bomben |
10485760 |
Versionsbezeichnungen mitpflegen
Die*VersionLabel-Werte werden nicht aus den Dateien ermittelt, sondern so übernommen, wie sie hier stehen. Nach einem Regel-Update die Labels mit anpassen – sie sind der Nachweis im Protokoll, gegen welchen Regelstand geprüft wurde.
EInvoiceDocuvita.*)Dies ist die einzige Stelle für Adresse, Anmeldung und Zeitlimit. Der Zugang wird für die Metadaten-Rückschreibung benötigt.
| Schlüssel | Beschreibung | Standard |
|---|---|---|
BaseUrl |
URL zu Ihrem docuvita-System | https://localhost:443 |
SessionGuid |
GUID des API-Benutzers (API-Schlüssel) | leer |
TimeoutSeconds |
Zeitlimit für die Anfragen. Zulässig 5–300 | 60 |
API-Benutzer
Die Anmeldung erfolgt ausschließlich über dieSessionGuid; Benutzername und Kennwort gibt es nicht. Stellen Sie sicher, dass der API-Benutzer die Objekte des konfigurierten Objekttyps bearbeiten darf.
Hier erfahren Sie, wie Sie einen API-Benutzer anlegen.
Der API-Schlüssel steht im Klartext
DieSessionGuidgehört nur in dieZUGFeRDValidatorExtractor.dll.configauf dem Server. Ohne sie unterbleibt die Metadaten-Rückschreibung – mit einer entsprechenden Meldung im Log.
EInvoiceReport.*)| Schlüssel | Beschreibung | Werte | Standard |
|---|---|---|---|
Delivery |
Auslieferung des PDF-Protokolls | Preview = Vorschau zeigt Rechnung und Protokoll · None = kein Protokoll ausliefern |
Preview |
Language |
Sprache des Protokolls | de · en · both |
both |
Der Download bleibt immer das Original
BeiPreviewwird das Protokoll nur an die Vorschau angehängt: Der Benutzer sieht in docuvita die Rechnungsseiten samt Protokollseiten, lädt aber unverändert das Originaldokument herunter. Das archivierte Primärdokument wird nicht verändert.
EInvoiceMetadata.*)Schreibt die ausgelesenen Rechnungsdaten in die Felder des bereits importierten Objekts.
| Schlüssel | Beschreibung | Standard |
|---|---|---|
Enabled |
Rückschreibung ein- oder ausschalten | true |
DvImportFolder |
Quellordner des AutoProfilers. Ist der Ordner gesetzt und vorhanden, wird eine dvImport-Datei dort abgelegt; andernfalls erfolgt die Rückschreibung über die REST-Schnittstelle | D:\docuvita\AutoProfiler\docuBaum\in |
ObjectTypeInternalName |
Interner Name des Objekttyps, in dessen Felder geschrieben wird | ZUGFeRD |
EInvoiceGenericXml.*)XML, das keine E-Rechnung ist, kann gegen ein eigenes Schema geprüft werden. Die Zuordnung erfolgt über den Namensraum des Wurzelelements – nicht über Dateiname oder Endung.
| Schlüssel | Beschreibung | Standard |
|---|---|---|
Enabled |
Prüfung ein- oder ausschalten | true |
SchemaMap |
Zuordnung Namensraum=Pfad zum XSD. Mehrere Einträge durch ; oder Zeilenumbruch trennen. XML ohne Namensraum trägt den Schlüssel (none) |
leer |
MaxXmlCharacters |
Obergrenze in Zeichen; 0 = unbegrenzt |
10485760 |
<add key="EInvoiceGenericXml.SchemaMap"
value="urn:firma:auftrag:1.0=Validators\Schemas\Custom\auftrag.xsd;
urn:firma:lieferschein:2=Validators\Schemas\Custom\ls.xsd" />
Bei mehrteiligen Schemata nur das Einstiegs-XSD eintragen; import und include löst die Prüfung relativ dazu auf. Eigene Schemata gehören nach Validators\Schemas\Custom\.
Die Prüfung ist rein protokollierend – sie erzeugt kein Protokoll, keine Metadaten, keine Vorschau und kann den Dokumentenlauf nicht aufhalten. Das Ergebnis steht ausschließlich im Log:
| Lage | Log | Bedeutung |
|---|---|---|
| Kein Schema für den Namensraum | DEBUG |
Normalfall, kein Mangel |
| Dokument entspricht dem Schema | INFO |
geprüft, sauber |
| Dokument verletzt das Schema | WARN + je Befund DEBUG (max. 10) |
fachlicher Mangel |
| XML nicht wohlgeformt | WARN |
Volltext bleibt leer |
| Schema eingetragen, aber nicht vorhanden | WARN |
Einrichtungsfehler – ausdrücklich nicht „bestanden" |
Enabled=false oder leere Zuordnung |
– | Prüfung findet nicht statt |
Damit die Rückschreibung greift, im Objekttyp – standardmäßig ZUGFeRD – die folgenden Felder als Textfelder (String) anlegen. Groß-/Kleinschreibung spielt keine Rolle.
Fehlende Felder erzeugen Fehler
docuvita meldet beim Schreiben einen Fehler, wenn ein referenziertes Feld im Objekttyp nicht existiert – es wird nicht still ignoriert. Legen Sie daher am besten alle unten gelisteten Felder an.
| Feldname | Bedeutung |
|---|---|
BT-1_Z_INVOICENO |
Rechnungsnummer |
BT-2_Z_INVOICEDATE |
Rechnungsdatum |
BT-3_Z_TYPE |
Rechnungsart (TypeCode) |
BT-5_Z_CURRENCY |
Währung |
BT-10_Z_BUYERREFERENCE |
Leitweg-ID / Käuferreferenz |
BT-13_Z_ORDERNO |
Bestellnummer |
BT-12_Z_CONTRACTREFERENCEDDOCUMENT_ID |
Vertragsnummer |
BT-72_Z_ACTUALDELIVERYDATE |
Lieferdatum |
BT-73_Z_BILLINGPERIODSTART |
Abrechnungszeitraum (von) |
BT-74_Z_BILLINGPERIODEND |
Abrechnungszeitraum (bis) |
BT-83_Z_PAYMENTREFERENCE |
Verwendungszweck |
| Feldname | Bedeutung |
|---|---|
BT-106_Z_LINETOTALAMOUNT |
Summe aller Positionen (netto) |
BT-108_Z_CHARGETOTALAMOUNT |
Summe Zuschläge (netto) |
BT-109_Z_TAXBASISAMOUNT |
Gesamtsumme (netto) |
BT-110_Z_TAXTOTALAMOUNT |
Summe Umsatzsteuer |
BT-112_Z_GRANDTOTALAMOUNT |
Gesamtbetrag (brutto) |
BT-113_Z_TOTALPREPAIDAMOUNT |
Gezahlter Betrag / Anzahlung |
BT-115_Z_DUEPAYABLEAMOUNT |
Zahlbetrag |
| Feldname | Bedeutung |
|---|---|
BT-27_Z_SELLER_NAME |
Verkäufer (Name) |
BT-35_Z_SELLER_STREET |
Straße / Hausnummer |
BT-38_Z_SELLER_POSTCODE |
PLZ |
BT-37_Z_SELLER_CITY |
Ort |
BT-40_Z_SELLER_COUNTRY |
Land |
BT-31_Z_SELLERTAXREGISTRATION_0_NO |
Umsatzsteuer-ID / Steuernummer |
| Feldname | Bedeutung |
|---|---|
BT-44_Z_BUYER_NAME |
Käufer (Name) |
BT-50_Z_BUYER_STREET |
Straße / Hausnummer |
BT-53_Z_BUYER_POSTCODE |
PLZ |
BT-52_Z_BUYER_CITY |
Ort |
BT-55_Z_BUYER_COUNTRY |
Land |
BT-48_Z_BUYERTAXREGISTRATION_0_NO |
Umsatzsteuer-ID |
| Feldname | Bedeutung |
|---|---|
BT-84_Z_CREDITORBANKACCOUNTS_0_IBAN |
IBAN |
BT-86_Z_CREDITORBANKACCOUNTS_0_BIC |
BIC |
BT-85_Z_CREDITORBANKACCOUNTS_0_NAME |
Kontoinhaber |
BT-81_Z_PAYMENTMEANS_TYPECODE |
Zahlungsart (Code) |
BT-9_Z_PAYMENTTERMS_DUEDATE |
Fälligkeitsdatum |
BT-89_Z_PAYMENTMEANS_SEPAMANDATEREFERENCE |
SEPA-Mandatsreferenz |
BT-90_Z_PAYMENTMEANS_SEPACREDITORIDENTIFIER |
SEPA-Gläubiger-ID |
| Feldname | Bedeutung |
|---|---|
Z_PROFILE |
Profil (MINIMUM … EXTENDED / XRECHNUNG) |
Z_FORMAT |
Format (ZUGFeRD / XRechnung) |
Z_VALIDATION_STATUS |
Validierungsstatus |
Z_VALIDATION_ISSUES |
Anzahl der Befunde |
Z_VALIDATOR_VERSION |
Validator- und Regelversion |
Z_USTG14_FULFILLED |
Erfüllte § 14-Pflichtangaben (z. B. 8/8) |
Z_USTG14_MISSING |
Fehlende § 14-Nummern (z. B. 2,6) |
BT-1_Z_INVOICENO, BT-2_Z_INVOICEDATE, BT-5_Z_CURRENCY, BT-27_Z_SELLER_NAME, BT-44_Z_BUYER_NAME, BT-31_Z_SELLERTAXREGISTRATION_0_NO, BT-109_Z_TAXBASISAMOUNT, BT-110_Z_TAXTOTALAMOUNT, BT-112_Z_GRANDTOTALAMOUNT, BT-115_Z_DUEPAYABLEAMOUNT, BT-84_Z_CREDITORBANKACCOUNTS_0_IBAN, Z_FORMAT, Z_VALIDATION_STATUS.
Wiederholende Angaben
Geschrieben wird genau dieser feste Satz an Einzelfeldern. Wiederholende Gruppen – Positionen, Steuerzeilen, Notizen, Beleg-Zu- und -Abschläge – werden nicht in Felder geschrieben, weil ihre Anzahl je Rechnung variiert. Sie stehen im Volltext und im Protokoll.
| Ebene | Prüfung | Ausführung |
|---|---|---|
| 0 | Profil-Gate: MINIMUM und BASIC-WL sind keine gültige E-Rechnung nach § 14 UStG | im Prozess |
| 1 | Interne Strukturprüfung: profilabhängige Pflichtfelder | im Prozess, offline |
| 2 | XSD-Schemavalidierung gegen das profilgerechte Schema | im Prozess |
| 3 | Schematron: EN16931 bzw. Factur-X-Profilregeln, bei XRechnung zusätzlich der CIUS | im Prüfläufer |
| 4 | § 14 UStG: Pflichtangaben Nr. 1–10 | im Prozess |
| 5 | Eigene Prüfungen: Leitweg-ID, Prüfziffern (GTIN/GLN/USt-IdNr.), Plausibilität | im Prozess |
| Profil | XSD (Ebene 2) | Schematron (Ebene 3) |
|---|---|---|
| MINIMUM | Factur-X_1.09_MINIMUM.xsd |
FACTUR-X_MINIMUM.xslt (Ablehnung nach § 14 bleibt) |
| BASIC WL | Factur-X_1.09_BASICWL.xsd |
FACTUR-X_BASIC-WL.xslt (ebenso) |
| BASIC | Factur-X_1.09_BASIC.xsd |
EN16931-CII-validation.xslt |
| EN16931 | Factur-X_1.09_EN16931.xsd |
EN16931-CII-validation.xslt |
| EXTENDED | Factur-X_1.09_EXTENDED.xsd |
FACTUR-X_EXTENDED.xslt |
| XRechnung (CII) | CrossIndustryInvoice_100pD22B.xsd |
EN16931-CII + XRechnung-CII |
| XRechnung (UBL) | UBL-Invoice-2.1.xsd / UBL-CreditNote-2.1.xsd |
EN16931-UBL + XRechnung-UBL |
| Status | Bedeutung |
|---|---|
Accepted |
Keine Befunde – die Rechnung ist konform |
AcceptedWithWarnings |
Nur Warnungen und Hinweise; die Rechnung ist konform, enthält aber Auffälligkeiten |
Rejected |
Mindestens ein Fehler – die Rechnung ist nicht konform |
Unsupported |
Format oder Profil wird nicht geprüft |
TechnicalError |
Die Prüfung konnte nicht vollständig durchlaufen; bereits erhobene Befunde bleiben erhalten |
Die Einordnung der Befunde bestimmt das Ergebnis:
| Befundart | Gewicht | Wirkung |
|---|---|---|
Fehlende § 14-Pflichtangabe, Leitweg-ID mit falschem schemeID |
Fehler | führt zu Rejected |
| Prüfziffer bei GTIN, GLN oder USt-IdNr. falsch | Warnung | ändert das Ergebnis nicht |
| Plausibilität: leere Elemente, Zahlungsmittelcode | Hinweis | ändert das Ergebnis nicht |
Eine ausgefallene Prüfebene erzeugt nie eine Annahme
Fällt eine Ebene aus – fehlendes Regelwerk, Zeitüberschreitung, Fehler im Prüfläufer –, wird das Dokument nicht als angenommen gemeldet. Eine Ablehnung bleibt dagegen möglich: ein bereits gefundener Fehler bleibt ein Fehler. Ein fehlendes Schema sieht in diesem Plugin niemals wie „bestanden" aus.
Die ZUGFeRD-Profile MINIMUM und BASIC WL sind nach § 14 UStG keine gültige E-Rechnung, sondern nur Buchungshilfe bzw. Rechnungsdatenbericht. Sie erheben auch selbst keinen EN16931-Anspruch.
Beide Aussagen stehen deshalb im Protokoll nebeneinander: rechtlich abgelehnt, technisch bewertet.
| Aspekt | Verhalten |
|---|---|
| Ergebnis | immer Rejected mit dem Code PROFILE_NOT_EN16931 |
| Geprüft wird | gegen das profil-eigene Factur-X-Regelwerk, damit im Protokoll steht, ob das Dokument als Buchungshilfe technisch korrekt aufgebaut ist |
| EN16931-Regeln | werden nicht angewandt – sie erzeugten auf diesen Profilen nur Fehlerlawinen |
| Abhängigkeit | Die Ablehnung hängt nicht am Ergebnis der technischen Prüfung |
Geprüft werden die Pflichtangaben nach § 14 Abs. 4 Nr. 1–10. Jede Angabe erhält einen von vier Zuständen:
| Zustand | Bedeutung |
|---|---|
Erfüllt |
Pflichtangabe vorhanden |
Fehlt |
Pflichtangabe fehlt oder ist unvollständig → Fehler, führt zu Rejected |
Nicht anwendbar |
im konkreten Fall nicht erforderlich, z. B. bei nicht steuerbarem Umsatz |
Nicht prüfbar |
aus dem Dokument nicht automatisch feststellbar → manuelle Sichtung |
§ 14 kennt keine weichen Pflichtangaben
Jede als fehlt ausgewiesene Angabe führt zur Ablehnung. Sachliche Ausnahmen stecken nicht in einer abgeschwächten Gewichtung, sondern im Prüfergebnis selbst: Positionen ohne Menge im Kopf-/Summenprofil ergeben nicht prüfbar, ein nicht steuerbarer Umsatz nicht anwendbar. Nur fehlt bedeutet: das Gesetz verlangt es, das Dokument hat es nicht.
Jede Validierung erzeugt ein PDF-Protokoll – auch bei Ablehnung oder technischem Fehler, denn gerade dann dokumentiert es die Ursachen. Es enthält:
| Abschnitt | Inhalt |
|---|---|
| Kopf | Titel, Erstellzeitpunkt, Engine- und Regelversionen |
| Dokument-Identifikation | Dateiname, Format, Profil, Objekt- und Versions-ID, SHA-256 des geprüften XML |
| Rechnungs-Eckdaten | Rechnungsnummer, Datum, Verkäufer, Käufer, Gesamt- und Zahlbetrag |
| Gesamtergebnis | Validierungsstatus, farblich hervorgehoben |
| Befundtabelle | je Befund: Gewicht, Regelcode, Meldung und Fundstelle, gruppiert nach Prüfebene |
| Zusammenfassung | Anzahl Fehler, Warnungen und Hinweise |
Nachvollziehbarkeit
Die Rohausgabe der Schematron-Prüfung wird bewusst nicht aufbewahrt. Den Nachweis trägt das Protokoll selbst: alle Befunde, der SHA-256-Wert des geprüften XML und die Versionsbezeichnungen der verwendeten Regelwerke.
Die Regelwerke werden jährlich aktualisiert. Beim Einspielen:
*.xslt samt Begleitdateien *_codedb.xml nach Validators\Schematron\ legen.*VersionLabel-Werte in der Konfiguration auf den neuen Stand setzen.XRechnungRulesVersion anpassen.Diese Codes zeigen keinen Mangel der Rechnung, sondern einen Zustand der Installation:
| Code | Bedeutung |
|---|---|
EXTERNAL_VALIDATION_SKIPPED |
Kein Prüfläufer bzw. keine Regelwerke konfiguriert – es lief nur die interne Strukturprüfung |
EN16931_VALIDATION_SKIPPED, CIUS_VALIDATION_SKIPPED, EXTENDED_VALIDATION_SKIPPED, MINIMUM_VALIDATION_SKIPPED |
Das jeweilige Regelwerk fehlt oder ist nicht konfiguriert |
SCHEMATRON_ERROR |
Das Regelwerk ließ sich nicht ausführen – häufigste Ursache: die Begleitdatei *_codedb.xml fehlt neben dem XSLT |
XSD_LOAD_ERROR |
Der Schemasatz ließ sich nicht laden – häufigste Ursache: der Ordner Schemas\UBL\common\ ist unvollständig |
PDF_WITHOUT_XML |
Die PDF enthält kein eingebettetes Rechnungs-XML |
XML_NOT_WELL_FORMED |
Das XML ist nicht wohlgeformt |
PROFILE_NOT_EN16931 |
Profil MINIMUM oder BASIC WL – keine gültige E-Rechnung nach § 14 UStG |
| Thema | Anforderung |
|---|---|
| Dateinamen | Unverändert lassen – die Konfiguration verweist namentlich darauf |
| Temporäres Verzeichnis | Das Dienstkonto braucht ein beschreibbares %TEMP%; die Prüfausgabe wird dort abgelegt und wieder gelöscht |
| Rechte | Das Dienstkonto braucht Lesen/Ausführen auf Validators\ |
| Laufzeit | .NET 8 Runtime muss auf der Maschine vorhanden sein |


