Test
This commit is contained in:
parent
ec8352682e
commit
37b7986831
14
main.py
14
main.py
|
|
@ -347,12 +347,17 @@ def generate_compliant_zugferd_cii(data):
|
|||
RSM = "urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
|
||||
RAM = "urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
|
||||
UDT = "urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
|
||||
QDT = "urn:un:unece:uncefact:data:standard:QualifiedDataType:100"
|
||||
|
||||
ET.register_namespace('rsm', RSM)
|
||||
ET.register_namespace('ram', RAM)
|
||||
ET.register_namespace('udt', UDT)
|
||||
ET.register_namespace('qdt', QDT)
|
||||
|
||||
root = ET.Element(f"{{{RSM}}}CrossIndustryInvoice")
|
||||
# VD-Valitool-14: Der qdt-Namespace wird in dieser Instanz nicht benötigt, soll aber laut
|
||||
# Spezifikation trotzdem am Root-Element deklariert werden.
|
||||
root.set("xmlns:qdt", QDT)
|
||||
|
||||
ex_doc_ctx = ET.SubElement(root, f"{{{RSM}}}ExchangedDocumentContext")
|
||||
|
||||
|
|
@ -484,7 +489,10 @@ def generate_compliant_zugferd_cii(data):
|
|||
ET.SubElement(header_settle, f"{{{RAM}}}InvoiceCurrencyCode").text = "EUR"
|
||||
|
||||
pay_means = ET.SubElement(header_settle, f"{{{RAM}}}SpecifiedTradeSettlementPaymentMeans")
|
||||
ET.SubElement(pay_means, f"{{{RAM}}}TypeCode").text = "30"
|
||||
# BT-81 Zahlungsart: Code 58 = SEPA-Überweisung. Code 30 ist für Überweisungen AUSSERHALB
|
||||
# des SEPA-Raums gedacht (VD-Valitool-169-Hinweis) - da hier immer eine IBAN verwendet wird,
|
||||
# ist 58 der korrekte Code.
|
||||
ET.SubElement(pay_means, f"{{{RAM}}}TypeCode").text = "58"
|
||||
payee_acc = ET.SubElement(pay_means, f"{{{RAM}}}PayeePartyCreditorFinancialAccount")
|
||||
ET.SubElement(payee_acc, f"{{{RAM}}}IBANID").text = str(data["iban"]).replace(" ", "")
|
||||
|
||||
|
|
@ -570,7 +578,7 @@ def fix_xrechnung_xmp_conformance(pdf_bytes: bytes) -> bytes:
|
|||
Die factur-x-Bibliothek schreibt standardmäßig fx:ConformanceLevel = 'EN 16931' und
|
||||
fx:Version = '1.0' in die XMP-Metadaten (generischer Factur-X-Standard). Da unsere CII-XML
|
||||
aber explizit das KoSIT-XRechnung-Profil deklariert (GuidelineID .../xrechnung_3.0), erwarten
|
||||
Validatoren hier stattdessen 'XRECHNUNG' und '3.0.2' - sonst schlagen z. B.
|
||||
Validatoren hier stattdessen 'XRECHNUNG' und '3.0' - sonst schlagen z. B.
|
||||
VD-Valitool-H-022/H-024 fehl, weil PDF-Metadaten und eingebettetes XML nicht zusammenpassen.
|
||||
"""
|
||||
pdf = pikepdf.open(io.BytesIO(pdf_bytes))
|
||||
|
|
@ -583,7 +591,7 @@ def fix_xrechnung_xmp_conformance(pdf_bytes: bytes) -> bytes:
|
|||
"<fx:ConformanceLevel>XRECHNUNG</fx:ConformanceLevel>",
|
||||
).replace(
|
||||
"<fx:Version>1.0</fx:Version>",
|
||||
"<fx:Version>3.0.2</fx:Version>",
|
||||
"<fx:Version>3.0</fx:Version>",
|
||||
)
|
||||
pdf.Root.Metadata.write(xmp_str.encode("utf-8"))
|
||||
buf = io.BytesIO()
|
||||
|
|
|
|||
Loading…
Reference in New Issue