E-invoices with ZUGFeRD
Product line
Standard
|Expert
Operating mode
Cloud Suite
|ON-PREMISES
Modules
Services & CRM
Budget & Phases
Purchases
Resource Planning
Business Intelligence
As of Vertec version 6.3.0.12 the Invoice with list of services contains a ZUGFeRD example implementation, which generates metadata according to the ZUGFeRD standard in the PDF. In order to be able to create valid ZUGFeRD invoices, certain criteria must be met. These are described below.
To set up e-invoices in Vertec in general, you can instead use the Additional Feature E-Invoice Templates, with which you can define e-invoices (ZUGfERD and XRechnungen) and define content criteria (also per invoice recipient).
The example implementation uses the profile EN 16931. In order to be able to create valid ZUGFeRD invoices, the following criteria must be observed or fulfilled:
With Vertec, E-Invoices can be created according to the Zugferd standard. For this purpose, the XML metadata is generated in the code of the Office Report and passed to the report mechanism, which integrates the metadata into the PDF.
There is a method for this in the Office reports
metadata_zugferd(context)
This returns a tuple consisting of :
The following ZUGFeRD profiles are supported as built-in profiles:
The supplied standard report invoice with list of services contains a corresponding example code for the profile EN 16931.
Customers who want to use their invoices according to the ZUGFeRD standard or as X-invoices must adapt this code according to the requirements of their invoice recipients.
def metadata_zugferd(context):
First, the template is created. The XML is created with Vertec’s built-in template engine in Python. This allows the XML to use variables that contain the numbers from Vertec. The XML is then created with the method vtcapp.rendertemplate().
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)
The method returns the schema as well as the finished XML, which is integrated into the PDF by the report mechanism.
As ZUGFeRD 2.0 (standard):
return ("EN 16931", zugferdxml)
As ZUGFeRD 2.1 (from version 6.4.0.16):
return ("EN 16931", zugferdxml, "2.1.1")
def metadata_zugferd(context):
First, the template is created. The XML is created with Vertec’s built-in template engine in Python. This allows the XML to use variables that contain the numbers from Vertec. The XML is then created with the method vtcapp.rendertemplate().
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)
In addition, the schema is passed as XML:
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=""> ..."""
The method returns the finished XML as well as the schema, which is integrated into the PDF by the report mechanism.
return ("", zugferdxml, Schema)
Further information about ZUGFeRD can be found on the official FeRD website.