Mit Vertec können ab Version 6.3.0.12 E-Rechnungen nach ZUGFeRD 2.0 und ab Version 6.4.0.16 Rechnungen nach ZUGFeRD 2.1 Standard erstellt werden. Dafür werden im Code des Office-Berichts die XML-Metadaten generiert und dem Reporting-Mechanismus übergeben, welcher die Metadaten ins PDF integriert.
Dafür gibt es in den Office-Berichten eine Methode
metadata_zugferd(context)
Diese gibt ein Tuple zurück bestehend aus :
- profilename : Name des Zugferd Profiles. Hier muss es sich entweder um den Namen eines eingebauten Profils handeln (siehe nächsten Abschnitt) oder es muss als 3. Argument eine Schema-Definition zurückgegeben werden. Ansonsten meldet der Bericht beim Ausführen einen Fehler.
- data : ZUGFeRD XML Daten. Das XML Dokument, welches die ZUGFeRD Daten zur Rechnung darstellt.
- schema: Optional. Für nicht eingebaute Profile kann hier optional ein XML Datenstring übergeben werden, welcher das Schema des zu verwendenden Profils definiert.
- Ab Vertec 6.4.0.16 kann statt der benutzerdefinierten XMP-Struktur bei schema auch eine Versionsnummer als String angegeben werden. Gültige Werte sind:
- 2.0.1 (Standardwert)
- 2.1.1
Zusammen mit der Angabe des Profils ("profilename") erstellt Vertec das passende XMP-Schema der entsprechenden ZUGFeRD-Version. Fehlt die Versionsangabe, gilt der Standardwert 2.0.1. Relevant ist das nur für eingebaute Profile. Die Übergabe eines benutzerdefinierten XMP-Schemas statt der Versionsangabe ist nach wie vor möglich.
Als eingebaute Profile werden die folgenden ZUGFeRD Profile unterstützt:
- EXTENDED
- EN 16931 (COMFORT, XRechnung)
- BASIC
- BASIC WL
- MINIMUM
Der mitgelieferte Standardbericht Rechnung mit Leistungsliste enthält einen entsprechenden Beispielcode für das Profil EN 16931.
Kunden, die ihre Rechnungen nach ZUGFeRD Standard oder als X-Rechnungen verwenden wollen, müssen diesen Code gemäss den Anforderungen ihrer Rechnungsempfänger inhaltlich entsprechend anpassen.
Implementation mit eingebautem Schema
def metadata_zugferd(context):
Zuerst wird das Template erstellt. Das XML wird mit der in Vertec eingebauten Template Engine in Python erstellt. Im XML können damit Variablen verwendet werden, welche die Zahlen aus Vertec enthalten. Mit der Methode vtcapp.rendertemplate() wird das XML dann erstellt.
zugferd_template = u"""<?xml version="1.0" encoding="UTF-8"?>
<rsm:CrossIndustryInvoice xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"..>
<rsm:ExchangedDocumentContext>
<ram:GuidelineSpecifiedDocumentContextParameter>
<ram:ID>urn:cen.eu:en16931:2017</ram:ID>
</ram:GuidelineSpecifiedDocumentContextParameter>
..."""
rechnung = context.rootlist[0]
# Render the transferred template for ZUFGeRD
zugferdxml = vtcapp.rendertemplate(zugferd_template, rechnung=rechnung)
Die Methode gibt das Schema sowie das fertige XML zurück, welches vom Reporting Mechanismus ins PDF integriert wird.
Als ZUGFeRD 2.0 (Standard):
return ("EN 16931", zugferdxml)
Als ZUGFeRD 2.1 (ab Version 6.4.0.16):
return ("EN 16931", zugferdxml, "2.1.1")
Implementation mit nicht eingebautem Schema
def metadata_zugferd(context):
Zuerst wird das Template erstellt. Das XML wird mit der in Vertec eingebauten Template Engine in Python erstellt. Im XML können damit Variablen verwendet werden, welche die Zahlen aus Vertec enthalten. Mit der Methode vtcapp.rendertemplate() wird das XML dann erstellt.
zugferd_template = u"""<?xml version="1.0" encoding="UTF-8"?>
<rsm:CrossIndustryInvoice xmlns:a="urn:un:unece:uncefact:data:standard:QualifiedDataType:100"..>
<rsm:ExchangedDocumentContext>
<ram:GuidelineSpecifiedDocumentContextParameter>
<ram:ID>urn:cen.eu:en16931:2017</ram:ID>
</ram:GuidelineSpecifiedDocumentContextParameter>
..."""
rechnung = context.rootlist[0]
# Render the transferred template for ZUFGeRD
zugferdxml = vtcapp.rendertemplate(zugferd_template, rechnung=rechnung)
Ausserdem wird das Schema als XML übergeben:
schema = u"""<?xpacket begin="?" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/" rdf:about="">
..."""
Die Methode gibt das fertige XML sowie das Schema zurück, welches vom Reporting Mechanismus ins PDF integriert wird.
return ("", zugferdxml, Schema)
Weitere Informationen zu ZUGFeRD finden Sie auf der offiziellen FeRD-Website.