View Issue Details

IDProjectCategoryView StatusLast Update
0001400FakturamaZUGFeRDpublic2026-10-07 23:04
Reporterclaude Assigned Torheydenr  
PrioritynormalSeverityfeatureReproducibilityhave not tried
Status assignedResolutionopen 
Target Version2.2.2 
Summary0001400: XRechnung-Export: Pflichtfelder vor dem Export prüfen und fehlende Angaben melden
Description

Der XRechnung-Export erzeugt auch dann eine Datei, wenn Pflichtangaben der Norm fehlen. Der Anwender bemerkt das erst, wenn der Empfänger oder ein Validator die Rechnung zurückweist.

Konkreter Auslöser: Ist in den Einstellungen unter Firmendaten das Feld „Inhaber" leer, fehlt BT-41 (Seller contact point). Der KoSIT-Validator meldet dann:

[BR-DE-5] Das Element "Seller contact point" (BT-41) muss übermittelt werden.
Bewertung: Es wird empfohlen das Dokument zurückzuweisen.

Bemerkenswert dabei: Telefon (BT-42) und E-Mail (BT-43) werden aus den Firmendaten gefüllt, der Kontaktblock DefinedTradeContact wird also erzeugt – nur eben ohne PersonName. Herausgekommen ist ein halber Kontakt statt gar keinem.

Für diesen einen Fall ist in EInvoiceConverter.setInvoiceSeller inzwischen ein Fallback auf den Firmennamen eingebaut. Das Grundproblem bleibt: Es gibt keine Prüfung, die fehlende Pflichtangaben vor dem Export erkennt.

Vorschlag:

Vor dem Export prüfen, ob alle für das gewählte Profil erforderlichen Felder gefüllt sind. Fehlt etwas, einen Dialog zeigen, der die fehlenden Felder benennt und auf die betreffende Einstellungsseite verweist, statt eine formal ungültige Datei zu schreiben.

Weitere bekannte Lücken, die bei anderen Rechnungen zuschlagen und in dieselbe Prüfung gehören:

  • Mandatsreferenz und Gläubiger-Identifikationsnummer (BT-89, BT-90) bei SEPA-Lastschrift – im Converter als TODO markiert; die Einstellung für die Gläubiger-ID kann leer bleiben.
  • Zu- und Abschläge auf Dokumentebene (BT-106, BT-107, BT-112, BT-115) – ebenfalls als TODO markiert.
  • BT-131 bei Zu- und Abschlägen ohne Umsatzsteuer.
Additional Information

Geprüft mit KoSIT Validator 1.5.0, erkanntes Profil: EN16931 XRechnung (CII), urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0

TagsNo tags attached.

Activities

claude

2026-10-05 10:29

reporter   ~0001671

Nachtrag aus einem weiteren Validierungslauf: Sind am Versandeintrag 0 % hinterlegt, die Steuerkategorie aber auf "S" (Standard rated) belassen, meldet der Validator BR-S-07 – bei Kategorie S muss der Satz größer als null sein. Der Converter reicht Satz und Kategorie unverändert durch und prüft nicht, ob beide zueinander passen. Das gehört mit in die hier vorgeschlagene Prüfung: Zu jeder Kategorie aus UNTDID 5305 muss der Satz plausibel sein (S größer null, Z gleich null).

Zwei damit zusammenhängende Punkte sind bereits im Code behoben:

  • In EInvoiceConverter.setDocumentLevelAllowancesCharges führte eine Versandsteuer mit Kategorie Z oder E zu einer NullPointerException, weil der Befreiungsgrund unbesehen aus getNoVatReference() geholt wurde. Diese Referenz ist nur bei dokumentweiter Steuerbefreiung gesetzt, nicht bei einem einzelnen steuerfreien Versandeintrag. Es wird jetzt auf den Namen des Versandeintrags zurückgefallen.
  • BT-41 fällt auf den Firmennamen zurück, wenn kein Inhaber gepflegt ist (siehe Beschreibung).

Noch offen und ebenfalls ein Fall für die Vorab-Prüfung: Bei Kategorie E (steuerbefreit) verlangt BR-E-10 einen Befreiungsgrund in der Umsatzsteuer-Aufschlüsselung, also BT-120 (Text) oder BT-121 (Code). Der Converter erzeugt beides nirgends; der Text aus der Steuerbefreiungs-Referenz landet nur im Grund des Zuschlags (BT-104), was ein anderes Feld ist. Kategorie E dürfte damit weiterhin nicht validieren, Z dagegen schon.

claude

2026-10-05 14:51

reporter   ~0001672

Die Prüfung sollte nicht erst beim Export greifen, sondern bereits im Steuersatz-Editor.

Beobachteter Fall: Ein von Hand angelegter Steuersatz mit dem Namen „15 Prozent", Code S und Wert 0 – die Prozentzahl stand nur im Namen, das Wertfeld war nie gefüllt worden. Die Anwendung nimmt das kommentarlos an. Folgen:

  • In der Rechnung wird keine Umsatzsteuer ausgewiesen, ohne jeden Hinweis. Das fällt erst auf, wenn man die Summen nachrechnet.
  • Beim XRechnung-Export verletzt dieselbe Kombination BR-S-07 (Kategorie S verlangt einen Satz größer null) und das Dokument wird zurückgewiesen.

Vorschlag: Beim Speichern eines Steuersatzes prüfen, ob Code und Satz zueinander passen – Code S verlangt einen Satz größer null, Code Z verlangt null, Code E verlangt null und zusätzlich einen Befreiungsgrund. Das ist dieselbe Regel, die auch die Vorab-Prüfung beim Export braucht; sie ließe sich an einer Stelle umsetzen und von beiden Seiten aufrufen.

Der Steuersatz-Editor fällt damit in denselben Aufgabenbereich wie dieses Ticket: Die Daten sind formal unvollständig, und der Anwender erfährt es erst, wenn ein Dritter die Rechnung ablehnt.

Issue History

Date Modified Username Field Change
2026-10-05 10:14 claude New Issue
2026-10-05 10:29 claude Note Added: 0001671
2026-10-05 14:51 claude Note Added: 0001672
2026-10-07 11:21 rheydenr Target Version => 2.2.2
2026-10-07 11:21 rheydenr Status new => assigned
2026-10-07 11:21 rheydenr Assigned To => rheydenr
2026-10-07 22:49 rheydenr Target Version 2.2.2 => 2.2.4
2026-10-07 23:00 rheydenr Target Version 2.2.4 => 2.2.5
2026-10-07 23:04 rheydenr Target Version 2.2.5 => 2.2.2