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
168 stars 99 forks source link

SEPA-Abbuchungsdatum (BT-9) nicht exportiert (Mustang 2.5.6) #307

Open akm0079 opened 1 year ago

akm0079 commented 1 year ago

Hallo,

ich versuche im SEPA Fall das Abbuchungsdatum in den Payment Terms mit auszugeben, und irgendwie fehlt das im resultierenden X-Rechnungs XML:

<ram:SpecifiedTradePaymentTerms>
        <ram:Description/>

       <!-- das DueDateDateTime ist nicht vorhanden -->
       <ram:DueDateDateTime>
          <udt:DateTimeString format="102">20221122</udt:DateTimeString>
        </ram:DueDateDateTime>

<ram:DirectDebitMandateID> mandatsNr </ram:DirectDebitMandateID>
</ram:SpecifiedTradePaymentTerms>

Nach Debuggen wird das Datum in der Klasse ZUGFeRD2PullProvider scheinbar nur für credit notes exportiert, aber nicht für Sepa/Abbuchungen (da hasDueDate auf true gesetzt wird nur wenn payment instanceof IZUGFeRDTradeSettlementPayment und nicht wenn payment instanceof IZUGFeRDTradeSettlementDebit ist) und nicht bei Rechnungskorrekturen (da in diesem Fall hasDueDate explizit auf false gesetzt wird):

if (trans.getTradeSettlement() != null) {
    for (final IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) {
                if (payment != null) {
                    if (payment instanceof IZUGFeRDTradeSettlementPayment) {
                        hasDueDate = true;
                    }
                    xml += payment.getSettlementXML();
                }
            }
        }

...

if ((trans.getDocumentCode() == **CORRECTEDINVOICE**)/*||(trans.getDocumentCode() == DocumentCodeTypeConstants.CREDITNOTE)*/) {
            hasDueDate = false;
}

...

if (hasDueDate &&  (trans.getDueDate() != null)) {
    xml += "<ram:DueDateDateTime>" // $NON-NLS-2$
        + DATE.udtFormat(trans.getDueDate())
        + "</ram:DueDateDateTime>";// 20130704

}

In der Spezifikation des XML-Mappings ("FACTUR-X 1.0.06 Technischer Anhang.pdf") habe ich die obigen Einschränkungen nicht gefunden. Das DueDateDateTime ist zum einen optional, und zum anderen steht in der Spec dazu lediglich:

"In case the Amount due for payment (BT-115) is positive, either the Payment due date (BT-9) or the Payment terms (BT-20) shall be present."

Sprich, es sollte entweder Description oder DueDateDateTime gesetzt werden oder beides. Und das unabhängig von der Rechnungsart bzw. Zahlungsweg.

Ist das ein Bug in der Implementierung oder übersehe ich etwas?

Danke für die Hilfe!

jstaerk commented 1 year ago

Hi, das wäre ein Problem in der Implementierung aber ich bin irritiert, dass in dem Fall ZF2EdgeTest.testEdgeExport nicht fehl schlägt der explizit auf <ram:DueDateDateTime> prüft? hasDueDate wird da möglicherweise nicht erst in Z. 603 ( IZUGFeRDTradeSettlementDebit ) sondern schon in Z.593 gesetzt.

jstaerk commented 1 year ago

und ist das evtl. verwandt mit #296 ?