Rechnungen nach ZUGFeRD Standard (XRechnung)

E-Rechnungen mit ZUGFeRD

Produktlinie

Standard

|

Expert

Betriebsart

Cloud Abo

|

ON-PREMISES

Module

Leistung & CRM

Budget & Teilprojekt

Fremdkosten

Ressourcenplanung

Business Intelligence

Erstellt: 04.09.2019
Aktualisiert: 29.01.2025 | Abschnitt "Voraussetzungen" ergänzt.

Die Rechnung mit Leistungsliste enthält ab Vertec Version 6.3.0.12 eine ZUGFeRD-Beispielimplementation, welche Metadaten nach ZUGFeRD Standard im PDF generiert.​ Um damit gültige ZUGFeRD-Rechnungen erstellen zu können, müssen gewisse Kriterien erfüllt sein. Diese sind hier nachfolgend beschrieben.

Um generell E-Rechnungen in Vertec einzurichten, können Sie stattdessen die Zusatzfunktion E-Rechnungsvorlagen verwenden, womit Sie E-Rechnungen (ZUGfERD- und XRechnungen) definieren und inhaltliche Kriterien (auch pro Rechnungsempfänger) hinterlegen können.

ZUGFeRD Beispielimplementation

Die Beispielimplementation verwendet das Profil EN 16931. Um damit gültige ZUGFeRD-Rechnungen erstellen zu können, müssen folgende Kriterien beachtet bzw. erfüllt werden:

  1. In den Systemeinstellungen muss die eigene Firma hinterlegt sein (Rechnungssteller).
  2. Die Adressen (Rechnungssteller und Rechnungsempfänger) müssen folgende Angaben enthalten:
    1. Vollständige und gültige Adresse (Anschrift).
    2. Land als 2-stelliger ISO-Ländercode (siehe z.B. https://de.wikipedia.org/wiki/ISO-3166-1-Kodierliste).
    3. Auf der Seite Weitere Info muss die MwSt-Nummer (USt-IdNr.) der Firma eingetragen sein.
  3. Die Währung muss eine Rundung auf 0.01 eingestellt haben, sonst gibt es Rundungsfehler.
  4. Es kann nur eine Währung pro Rechnung verwendet werden.
  5. Vorschüsse werden als Artikel wie Leistungen, Spesen und Auslagen übergeben.
  6. Als Rechnungstyp wird fix 380 (Handelsrechnung) verwendet.
  7. Die verwendeten MwSt-Typen müssen als Code die Steuerkategorie nach UNCL5305 enthalten:
    • S = Umsatzsteuer fällt mit Normalsatz an
    • Z = nach dem Nullsatz zu versteuernde Waren
    • E = steuerbefreit
    • AE = Umkehrung der Steuerschuldnerschaft
    • AA = Reduzierter Steuersatz
    • K = kein Ausweis der Umsatzsteuer bei innergemeinschaftlichen Lieferungen
    • G = Steuer nicht erhoben aufgrund von Export ausserhalb der EU
    • O = ausserhalb des Steueranwendungsbereichs

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.