Rechnungen nach ZUGFeRD Standard (XRechnung)

E-Rechnungen mit ZUGFeRD

Die Rechnung mit Leistungsliste (ab Vertec 6.3.0.12), die Rechnung mit Bearbeitersummen und die Rechnung mit Phasensummen (ab Vertec 6.8.0.12) enthalten eine ZUGFeRD Implementation, welche Metadaten nach ZUGFeRD-Standard im PDF einbettet.​ Somit ist jede Rechnung, die auf einer dieser Vorlagen basiert und als PDF generiert wird, automatisch auch eine E-Rechnung.

Für spezifischere Anwendungen, falls Sie Anforderungen auf Empfängerseite erfüllen müssen, können Sie die Zusatzfunktion E-Rechnungsvorlagen verwenden, womit Sie E-Rechnungen (ZUGfERD- und XRechnungen) detailliert definieren und inhaltliche Kriterien auch pro Rechnungsempfänger hinterlegen können.

ZUGFeRD Standardimplementation

Die ZUGFeRD Implementation in den mitgelieferten Rechnungsvorlagen verwendet das Profil EN 16931 und folgende Kriterien:

Rechnungssteller

Als Rechnungssteller wird die Company auf der Rechnung verwendet. Dies ist:

  • Die hinterlegte Rechnungsadresse auf dem entsprechenden Zahlungstyp oder, falls dort nicht explizit hinterlegt,
  • Die eigene Firma aus den Systemeinstellungen.
Rechnungsempfänger
Als Rechnungsempfänger wird die Rechnungsadresse (InvoiceAddress) der Rechnung verwendet. 
Rechnungstyp
Als Rechnungstyp wird fix 380 (Handelsrechnung) verwendet.
Adressen

Die Adressen (Rechnungssteller und Rechnungsempfänger) müssen folgende Angaben enthalten:

  • Auf der Seite Weitere Info muss die MwSt-Nummer (USt-IdNr.) der Firma eingetragen sein.
  • Eine vollständige und gültige Adresse (Anschrift)
  • Als Land wird von ZUGFeRD ein 2-stelliger ISO-Ländercode (siehe z.B. https://de.wikipedia.org/wiki/ISO-3166-1-Kodierliste) verlangt. 
    • In Rechnungsvorlagen vor Vertec 6.8.0.12 (bzw. wenn sie vor dieser Version angepasst wurden), muss der 2-stellige ISO-Code als Land auf den Adressen eingetragen werden. 
    • Vorlagen ab Vertec 6.8.0.12 verwenden dafür folgendes Mapping, falls es sich beim Land nicht um einen 2-stelligen ISO-Code handelt:
      • Deutschland/Germany/Allemagne/Germania = DE
      • Österreich/Austria/Autriche/Austria = AT
      • Frankreich/France/Francia = FR
      • Schweiz/Switzerland/Suisse/Svizzera = CH
      • Niederlande/Netherlands/Pays-bas/Paesi bassi = NL
      • Großbritannien/Grossbritannien/Great Britain/Vereinigtes Königreich/United Kingdom/Royaume-uni/Regno unito = GB

Falls das Land des Rechnungsempfängers leer ist, wird das Land des Rechnungsstellers auch für den Rechnungsempfänger verwendet, da wir dann davon ausgehen, dass sich der Rechnungsempfänger im Inland befindet. 

Währungen

Es kann pro Rechnung immer nur eine Währung verwendet werden.

Auf der Währung sollte die Rundung auf 0.01 eingestellt sein, sonst kann es zu Rundungsfehlern kommen, welche von ZUGFeRD abgelehnt werden.

Leistungen
Spesen
Auslagen

Leistungen, Spesen und Auslagen werden summiert und als jeweils einzelner Artikel übergeben.

Rabatte werden dabei einfach von den Leistungen abgezogen.

Vorschüsse
Vorschüsse werden als Artikel wie Leistungen, Spesen und Auslagen übergeben.
MwSt

Bei den verwendeten MwSt-Typen muss die passende Steuerkategorie nach UNCL5305 angegeben werden. 

Sind diese Anforderungen erfüllt, werden im Code des Office-Berichts die XML-Metadaten generiert und dem Bericht-Mechanismus übergeben, welcher die Metadaten ins PDF integriert.

Dafür gibt es in den Office-Berichten die 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, oder es muss als 3. Argument eine Schema-Definition zurückgegeben werden. Ansonsten meldet der Bericht beim Ausführen einen Fehler. 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 Beispielcode für das Profil EN 16931.
  • 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.

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 Bericht-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 Bericht-Mechanismus ins PDF integriert wird.

    return ("", zugferdxml, Schema)

Weitere Informationen zu ZUGFeRD finden Sie auf der offiziellen FeRD-Website.

Netherlands

United Kingdom