Eine Rechnung, die fragt, bevor sie fordert

Jedes andere Dokument hier erreicht eine Norm, indem es sie erklärt: Die Datei sagt, sie sei Factur-X, und wird als Factur-X geschrieben. Erklären ist leicht; richtig sein nicht. Ein Dokument kann eine Rechnung nennen, die es nie angehängt hat, einen Detaillierungsgrad beanspruchen, dem das XML darin nicht folgt, und in einem Container stecken, den die Norm nicht erlaubt — und mit allen dreien hinausgehen, um von der Buchhaltung, an die es geschickt wurde, abgelehnt zurückzukommen.

Also fragt dieses hier zuerst. Die Bibliothek liest das Dokument, wie es ist, schreibt nichts, ändert nichts und gibt alles zurück, was ihres Wissens zwischen diesem Dokument und der genannten Norm steht — alles auf einmal, jeder Befund mit der Klausel, aus der er stammt, und der Datei, um die es geht. Nicht der erste Fehler und dann Schluss: die Liste, sodass eine Arbeitsrunde die Sache erledigt.

Die Rechnung hier ist so zusammengestellt, wie jemand sie zuerst schreibt, und was zurückkommt, wird gedruckt. Zwei Dinge stehen im Weg: Sie beansprucht keine Archivierungsnorm, und sie nennt factur-x.xml, ohne eine Datei unter diesem Namen zu tragen. Behebt man das, bleibt eines — sie beansprucht die Detailstufe EN 16931, wo das XML Basic folgt —, denn eine Datei, die nicht da ist, kann nichts lesen. Behebt man das, steht nichts mehr im Weg, und das PDF wird geschrieben. Solange etwas im Weg steht, wird nichts geschrieben.

Ein leerer Bericht ist kein Zertifikat. Er sagt, dass nichts im Weg steht, wonach diese Bibliothek zu suchen weiß, und das ist nicht dasselbe wie Konformität: Das sagt veraPDF, ein kostenloses Programm, das am Schreiben der Datei nicht beteiligt war. Was der Bericht klärt, ist, ob das Dokument sich selbst widerspricht, der eine Fehler, den niemand weiter hinten beheben kann. Dieselben drei Durchgänge laufen aus Rust und aus Python.

Was dieses Beispiel zeigt

  • Alle Befunde auf einmal, jeder mit der Klausel, aus der er stammt, und der Datei, um die es geht.
  • Zwei im Weg in der ursprünglichen Fassung, einer, sobald die Datei getragen und die Archivierungsnorm beansprucht wird, keiner, sobald der beanspruchte Detaillierungsgrad der ist, dem das XML folgt.
  • Das Dokument wird gemessen, bevor ein Byte davon hinausgeht, und abgelehnt statt geschrieben, solange etwas im Weg steht.

Der Quellcode, vollständig

Nichts ist weggelassen und nichts vereinfacht: Das ist das Programm genau so, wie es läuft, für den Entwickler, der diese Bibliothek nutzt. Die dritte ist die Beschreibung selbst: eine schlichte Liste dessen, was die Seite sagen muss, und das wird dem Dienst gesendet.

Den Rust-Quellcode lesen Den Python-Quellcode lesen Den JSON-Quellcode lesen

Das Dokument selbst

Das Dokument auf Englisch öffnen Das Dokument auf Französisch öffnen Das Dokument auf Deutsch öffnen Das Dokument auf Spanisch öffnen Das Dokument auf Italienisch öffnen Das Dokument auf Portugiesisch öffnen

Beispiele in der Nähe

Ein Blatt, das misst, was es angibt

Drei Lineale — Zentimeter, Zoll und Punkt — auf einer Seite, die dem, was sie druckt, sagt, sie genau in der gezeichneten Größe auszugeben und nichts anderes anzubieten. Legen Sie ein Maßband an den gedruckten Bogen, und Sie können es selbst prüfen.

Ein Register, dessen Seiten sagen, woher sie stammen

Zwei Sitzungen in einer Datei gebunden. Jede Seite trägt einen eigenen Vermerk — was sie ist, wessen Hand sie geschrieben hat, der Tag, an dem sie geschrieben wurde —, das Foto auf der zweiten Seite trägt ebenfalls einen, und jede Transkription ist an die Seite gebunden, die sie transkribiert, statt an die Datei insgesamt.

Eine Datei, die ihre eigenen Einträge erklärt

Das Aktenzeichen einer Registratur, die Abteilung, aus der es stammt, das Datum, bis zu dem das Dokument aufzubewahren ist, und seine Einstufung, in einer Datei, die ein Archiv noch annimmt. Keine Archivregel weiß, was ein Aufbewahrungsdatum ist; jeder Eintrag trägt daher eine Beschreibung seiner selbst, und diese Beschreibung lässt eine Prüfsoftware eine Angabe akzeptieren, die Sie allein erfunden haben. Eine zweite Seite fügt einen Ausleihvermerk hinzu, dessen Einträge ein Ja oder Nein, ein Dateityp, ein Personenname, eine Messung und zwei Webadressen sind, und gibt dieser Seite einen eigenen verborgenen Vermerk.

Ein Lieferschein, der seine eigene Bestellung kennt

Jede Zeile des Scheins trägt die Bestellung, für die sie kommissioniert wurde, die Artikelnummer und das Regal, aus dem sie stammt, und druckt nichts davon. Die Stelle, an der der Fahrer unterschreibt, trägt die Tour und den Transporter, und eine neben der Falzmarke trägt nichts außer ihrem eigenen Platz.

Ein Dokument, das sich vorlesen lässt

Zwei Seiten, die eine Kopie ihrer selbst tragen, die niemand sieht: Dies ist eine Überschrift, dies eine Tabelle, und dies ist die Reihenfolge, in der sie zu lesen sind. Eine Software, die das Dokument vorliest, folgt dem statt der Reihenfolge, in der die Markierungen gezeichnet wurden, und überspringt den Kolumnentitel. Auf der Seite sieht nichts anders aus.

Eine Liste, deren Bilder ebenfalls sprechen

Eine Teileliste, deren erste Spalte ein Bild statt eines Wortes ist. Jedes Bild trägt den Satz, den jemand an seiner Stelle hört, sodass in der Liste nichts für einen Leser verloren geht, der sie nicht sehen kann. Auf der Seite sind die Bilder einfach Bilder.

Jedes Beispiel, nach Thema