diff --git a/main.py b/main.py index f5f8274..6abf6b0 100644 --- a/main.py +++ b/main.py @@ -438,15 +438,19 @@ def generate_compliant_zugferd_cii(data): ET.SubElement(contract_ref, f"{{{RAM}}}IssuerAssignedID").text = str(data["contract_id"]).strip() header_deliv = ET.SubElement(trade_trans, f"{{{RAM}}}ApplicableHeaderTradeDelivery") - if data.get("delivery_note_id") and str(data["delivery_note_id"]).strip() != "": - dn_ref = ET.SubElement(header_deliv, f"{{{RAM}}}DeliveryNoteReferencedDocument") - ET.SubElement(dn_ref, f"{{{RAM}}}IssuerAssignedID").text = str(data["delivery_note_id"]).strip() - if data.get("delivery_date"): act_deliv = ET.SubElement(header_deliv, f"{{{RAM}}}ActualDeliverySupplyChainEvent") occ_date = ET.SubElement(act_deliv, f"{{{RAM}}}OccurrenceDateTime") ET.SubElement(occ_date, f"{{{UDT}}}DateTimeString", {"format": "102"}).text = format_cii_date(data["delivery_date"]) + # HINWEIS: "DeliveryNoteReferencedDocument" existiert im EN16931/Factur-X-Schema NICHT + # (im offiziellen XSD nicht vorhanden). Das korrekte, schema-konforme Element für eine + # Lieferschein-/Lieferavis-Referenz ist "DespatchAdviceReferencedDocument" und muss laut + # XSD-Sequenz NACH ActualDeliverySupplyChainEvent stehen. + if data.get("delivery_note_id") and str(data["delivery_note_id"]).strip() != "": + dn_ref = ET.SubElement(header_deliv, f"{{{RAM}}}DespatchAdviceReferencedDocument") + ET.SubElement(dn_ref, f"{{{RAM}}}IssuerAssignedID").text = str(data["delivery_note_id"]).strip() + header_settle = ET.SubElement(trade_trans, f"{{{RAM}}}ApplicableHeaderTradeSettlement") ET.SubElement(header_settle, f"{{{RAM}}}InvoiceCurrencyCode").text = "EUR"