ZUGFeRD / mustangproject

Open Source Java e-Invoicing library, validator and tool (Factur-X/ZUGFeRD, UNCEFACT/CII XRechnung)
http://www.mustangproject.org
Apache License 2.0
240 stars 136 forks source link

Validierungsproblem mit Skonto #238

Closed asdf00000 closed 2 years ago

asdf00000 commented 3 years ago

Ich habe eine XRechnung mit Hilfe von IExportableTransactionerstellt. Validierung soweit ok. Wenn ich nun in den IZUGFeRDPaymentTerms das Interface IZUGFeRDPaymentDiscountTerms verwende, um ein Skonto anzugeben, treten beim Validieren Fehler auf:

aus der XRechnung: ... `

Skonto 124.69 3 20210319 7 ` ... aus der Validierung: ... `schema validation fails:org.xml.sax.SAXParseException; lineNumber: 171; columnNumber: 30; cvc-complex-type.2.4.a: Ungültiger Content wurde beginnend mit Element '{"urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100":BasisDateTime}' gefunden. '{"urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100":ActualDiscountAmount}' wird erwartet.` ...
jstaerk commented 3 years ago

ich bräuchte bitte mal die komplette xrechnung. Und am besten den Quelltext.

asdf00000 commented 3 years ago

Habe mal ein Beispiel auf Basis der Klasse MustangWriter erstellt. XRechnung: https://github.com/asdf00000/test/blob/main/XRechnung.xml Code: https://github.com/asdf00000/test/blob/main/MustangSimpleTest.java

jstaerk commented 3 years ago

Danke. Wäre es fx extended o.ä. müsste BasisAmount und CalculationPercent offensichtlich hinter BasisPeriodMeasure. Das ist schonmal ein Fehler und ich hoffe ich hab nochmal irgendwann kurz Zeit um das zu korrigieren. Und dafür lasse ich den Bug mal offen.

Spannenderweise kriegen wir Ihre Rechnung nämlich trotzdem valide wenn Sie sie IZUGFeRDPaymentTerms ändern in

            @Override
            public String getDescription() {
                return "#SKONTO#TAGE=7#PROZENT=3.00#BASISBETRAG=571.04#";
            }
            @Override
            public Date getDueDate() {
                return null;
            }
            @Override
            public IZUGFeRDPaymentDiscountTerms getDiscountTerms() {
                return null;
            };

Hintergrund: Skonto für B2G-Rechnungen sind relativ typisch Deutsch und das entsprechende XML-Feld (ApplicableTradePaymentDiscountTerms) hat es deshalb nicht einmal optional in den EN16931-Umfang geschafft. Die XRechnung kodiert die Skontoinformationen deshalb nicht in XML sondern notgedrungendermaßen in einem proprietären Format in die Description (s. Spezifikation der XRechnung 2.0, Kap 13.2 Umgang mit Skonto insbesondere auch S. 36).

asdf00000 commented 3 years ago

Vielen Dank, das hilft weiter.

asdf00000 commented 3 years ago

Hinweis: Die Skonto-Zeile muss wohl mit einem Zeilenumbruch enden. Dem Mustang-Validator ist es egal, aber der KoSIT-Validator bemängelt das sonst als Fehler:

Am Ende einer vollständigen Skonto oder Verzugsangabe muss ein XML-konformer Zeilenumbruch folgen. ... Bewertung: Es wird empfohlen das Dokument zurückzuweisen.

Das kann also dazu führen, dass die Rechnung vom Empfänger abgelehnt wird, wenn dieser mit dem KoSIT-Validator validiert.

jstaerk commented 2 years ago

closed in current master