Hallo Andreas,
eine sehr berechtigte Frage!
In der Analysephase zu unserer eRechnungsanwendung sind wir mit der Hypothese ins Rennen gegangen, dass wir unsere Implementierung auf der Mustang Library und dem KoSIT Validator aufsetzen können. Nachdem unsere fachlichen Anforderungen geklärt waren, haben wir uns den Zustand und den Code der Libraries näher angesehen und sind dabei zu dem Schluss gekommen, dass sie nicht als Grundlage für unsere Implementierung geeignet sind.
Den KoSIT Validator haben wir sehr schnell ausgeschlossen, da das letzte Update 2022 war, was für uns ein deutliches Signal ist, dass wir dort keine Updates erwarten können. Wenn niemand diese Library aktiv pflegt, ist es nur eine Frage der Zeit, bis bspw. neu erkannte Sicherheitslücken zum Problem werden (Referenz: log4shell) oder Updates der eigenen Anwendung durch veraltete Java-Abhängigkeiten erschwert werden.
Mustang wird aktiv gepflegt und hat eine ausreichend große Community. Allerdings haben wir nach intensiver Betrachtung des Codes ermittelt, dass die Library nicht den Qualitätsansprüchen entspricht, die wir an unsere Software haben. Da das eRechnungsthema ein langfristiges ist, ist uns vor allem die langfristige Wartbarkeit unserer Anwendung ein hohes Anliegen. Daher haben wir nicht nur Anforderungen bezüglich der Funktion des Codes, sondern auch zu seiner Qualität. Ich möchte dies an dieser Stelle explizit nicht als Kritik an Mustang oder dessen Entwicklern verstanden wissen, sondern als eine auf unsere Anforderungen bezogene Feststellung.
Ich möchte keine einzelnen Codebeispiele öffentlich diskutieren, da dies schnell in eine unproduktive Diskussion ausarten kann. Falls es dich oder einen Leser dieses Beitrags genauer interessiert, was ich meine, kann ich empfehlen, den Code von Mustang auszuchecken und einfach eine statische Codeanalyse drüber laufen zu lassen (bspw. FindBugs, SonarQube; jeweils mit Standard-Ruleset). Das genügt schon, um ein objektives Bild zu bekommen. Das beantwortet dann auch die Frage, warum wir uns dagegen entschieden haben, zu Mustang beizutragen. Der nötige Aufwand wäre für uns nicht wirtschaftlich gewesen.
Zu der Frage, wie wir die ZUGFeRD-Version ermitteln: Wir matchen über den ExchangeDocumentContext die im Standard der jeweiligen Version definierte URI des Erweiterungsschemas für Factur-X und überprüfen dann, ob die Validierung erfolgreich ist. Validiert das Dokument mit mehreren ZUGFeRD-Versionen, geben wir im Validierungsergebnis aus, dass das Dokument mit der neuesten erkannten Version compliant ist.
Ich muss dir ein wenig bei der Aussage "ab dem 01.01.2025 ist nicht relevant, ob es PDF oder PDF/A ist" widersprechen: Es ist korrekt, dass im Schreiben des Bundesfinanzministeriums steht, dass der strukturierte Teil der eRechnung führend ist. Allerdings ist das nur die fachliche Ebene. Auf der technischen Ebene gibt es mit ZUGFeRD einen definierten Standard, der genaue Vorgaben darüber macht, was ein wohlgeformtes, korrektes ZUGFeRD-Dokument darstellt und was nicht. Dort steht deutlich, dass es sich um ein PDF/A-3 Dokument handeln muss (Dokumentation des FeRD, 1. FACTUR-X 1.0.07, Kapitel 6). Viele Grüße, Gerrit