Dieses Kapitel richtet sich an Administratoren oder Support-Mitarbeiter, die einen DEsE-Export erzeugen wollen.

Verwendung

DEsE ist eine Java-Anwendung, die als ausführbare JAR-Datei ausgeliefert wird. Um die Anwendung ausführen zu können, muss eine Java Runtime Environment (JRE) Version 8 oder höher installiert sein.

Die Ausführung erfolgt per Kommandozeile mit dem Aufruf

nohup java -jar dese-0.3.1.jar > dese.out 2>&1 &

Das nohup und das &bewirken, dass die Anwendung von des aktuellen putty Session entkoppelt wird und somit auch nach deren Beendigung weiter läuft.

Durch die Ausführung von DEsE werden zwei Dateien erzeugt:

  • der digitale Energiesteuerausweis als CSV-Datei (z. B. dese.csv)
  • eine LOG-Datei mit Informationen über den Programmablauf (z. B. dese.log)

Für eine erfolgreiche Ausführung benötigt DEsE Zugriff auf die folgenden Umsysteme:

  • Eine MBS-Datenbank mit den auszuwertenden Kunden-, Vertrags- und Verbrauchsdaten (siehe Konfiguration, db.*)

Für eine DEsE Umgebung bis 1.0.0 sind außerdem nötig:

  • Für Stromverträge eine Elasticsearch-Instanz, die Lastprofile zur Verbrauchshochrechnung enthält. Der Zugriff auf diese Instanz muss in der MBS-Datenbank in der Global Property ELASTICSEARCH_HOST (und evtl. weiteren ELASTICSEARCH_*-Properties) definiert sein. + Lastprofile werden in der Elasticsearch-Instanz pro Mandant / Client gespeichert. Zur Auswahl des Mandanten wird die Global Property CLIENT_NAME verwendet. Diese muss in der MBS-Datenbank gesetzt sein und für den Mandanten müssen Lastprofile in Elasticsearch vorhanden sein. Ist dies nicht der Fall, treten Fehler der Form ERROR An error occured while processing contract XXXXXXXXXXXX: missing LoadProfiles for H0 DefaultNet uncovered periods: [01.01.2018-31.12.2018] auf.

  • Für Gasverträge eine MBS-Instanz mit der REST-Schnittstelle zur Ermittlung der Verbrauchshochrechnung basierend auf GradTagsZahlen (siehe Konfiguration, degreeDayConsumptionCalculator.*)

Konfiguration

DEsE benötigt einige Konfigurationsparameter. Diese müssen in der Konfigurationsdatei dese.properties im gleichen Ordner wie dese.jar abgelegt werden.

Folgende Einstellungen sind möglich.

Variable Beschreibung Version Standardwert Erforderlich
mbs.db.user Loginname für das mbs Schema ab 1.0.0 - Ja
mbs.db.password Passwort für das mbs Schema ab 1.0.0 - Ja
mbs.db.url URL zum das mbs Schema ab 1.0.0 - Ja
dese.db.user Loginname für das dese Schema bis 1.0.0 / ab 3.1. - bis 1.0.0 / ab 3.1.0
dese.db.password Passwort für das dese Schema bis 1.0.0 / ab 3.1.0 - bis 1.0.0 / ab 3.1.0
dese.db.url URL zum das dese Schema bis 1.0.0 / ab 3.0.1 - bis 1.0.0 / ab 3.0.1
csv.separator Zeichen zur Trennung von CSV-Datenfeldern (Spalten) ab 1.0.0 *;* Ja
csv.quotechar Feldbegrenzerzeichen bei Verwendung von Sonderzeichen in Feldern ab 1.0.0 *"* Ja
csv.escapechar Maskierungszeichen bei Verwendung des Feldbegrenzerzeichen im Feld ab 1.0.0 *"* Ja
csv.lineend Zeichen zur Trennung von CSV-Datensätzen (Zeilen) ab 1.0.0 *\n* Ja
csv.filename.electricity Dateiname der Ausgabedatei, mit .csv Endung bis 3.0.0 dese-strom.csv OBSOLETE
csv.filename.gas Dateiname der Ausgabedatei, mit .csv Endung bis 3.0.0 dese-gas.csv OBSOLETE
csv.encoding Zeichenkodierung der CSV-Datei ab 1.0.0 *UTF-8* Ja
dese.export.prefix konfigurierbares Prefix für den Namen der Export-Datei ab 3.0.1 dese Nein
dese.export.folder konfigurierbarer Pfad, wohin die Export-Datei(en) abgelegt werden ab 3.0.1 - Nein
section Sparte, für die DEsE ausgeführt werden soll (Electricity / Gas) ab 1.0.0 - Ja
year Das Jahr, für das die Berechnung durchgeführt werden soll (Veranlagungszeitraum) ab 1.0.0 - Ja
nThreads max. Anzahl der parallelen Threads, in denen DEsE ausgeführt wird ab 1.0.0 1 Ja
degreeDayConsumptionCalculator.user Benutzername der o.g. MBS-Schnittstelle bis 1.0.0 - OBSOLETE
degreeDayConsumptionCalculator.url Die URL (inkl. Parameter) für die MBS-Schnittstelle zur Ermittlung der Verbrauchshochrechnung basierend auf GradTagsZahlen bis 1.0.0 - OBSOLETE
degreeDayConsumptionCalculator.password Passwort der o.g. MBS-Schnittstelle bis 1.0.0 - OBSOLETE
mode.identifier (Stichtag / Rollierer) ab 3.0.0 Rollierer Ja
mode.annualaccountingdate.day Angabe des Jahresabschlussdatums / Tag ab 3.0.0 15 Ja
mode.annualaccountingdate.month Angabe des Jahresabschlussdatums / Monat ab 3.0.0 2 Ja
mode.previousexportdate.day Angabe des vorherigen Exportdatums / Tag nur in 3.0.0 31 Ja
mode.previousexportdate.month Angabe des vorherigen Exportdatums / Monat nur in 3.0.0 5 Ja
mode.referencedate.day Angabe des Stichtags / Tag im Stichtagsverfahren ab 3.0.0 31 Ja, bei mode.identifier=Stichtag
mode.referencedate.month Angabe des Stichtags / Monat im Stichtagsverfahren ab 3.0.0 12 Ja, bei mode.identifier=Stichtag
dese.evaluation.printerrorstacks Analysewerkzeug für Konsolenausgabe: umfangreiche Ausgabe von technischen Fehlern (Stacktraces) ab 3.0.0 false Optional
dese.evaluation.printzerocontracts Analysewerkzeug für Konsolenausgabe: Ausgabe von Verträgen ohne Zeile im DEsE-Export ab 3.0.0 false Optional
dese.test.contracts Testfunktion: DEsE wird nur für angegebene Vertragsnummern angewendet / Angabe als Komma-separierte Liste ab 3.0.0 - Optional
dese.test.persistExport Testfunktion: Im Standard wird DEsE bei jeder Ausführung das Ergebnis in die Datenbank schreiben. Für Testzwecke kann diese Konfiguration genutzt werden (false), um dies zu übersteuern ab 3.1.0 true Nein
dese.constants.taxassessment.electricity Konstanter Text, der in das Feld STEUERLICHE_BEWERTUNG exportiert wird (nur wenn section=Electricity) ab 3.1.0 - Nein
dese.constants.taxassessment.gas Konstanter Text, der in das Feld STEUERLICHE_BEWERTUNG exportiert wird (nur wenn section=Gas) ab 3.1.0 - Nein
dese.translatecustomertype Konfiguration, ob das Feld ‘KundenArt’ 1:1 aus MBS übernommen wird ab 3.1.4 NONE Nein
mode.rolling.emptyconsumptionvaluesmode Konfiguration, wie mit leeren Verbrauchsangaben für SaV-Segmente umgegangen wird (nur im rollierenden Verfahren) ab 3.1.4 EXPORT Nein

Konfigurationen, die einen Standardwert haben und erforderlich sind, nehmen den angegebenen Standardwert an, wenn diese nicht explizit in dese.properties angegeben sind.

Beispieldatei

    mbs.db.user=postgres
    mbs.db.password=postgres
    mbs.db.url=jdbc:postgresql://localhost:5432/mbs?currentSchema=mbs
    dese.db.user=postgres
    dese.db.password=postgres
    dese.db.url=jdbc:postgresql://localhost:5432/mbs?currentSchema=dese
    csv.separator=;
    csv.quotechar="
    csv.escapechar="
    csv.lineend=\n
    csv.filename=dese.csv
    year=2018
    section=Electricity
    mode.identifier=Rollierer
    mode.annualaccountingdate.day=15
    mode.annualaccountingdate.month=2

Besonderheiten der Konfiguration ab DEsE 3.0.0

Jahresabschlussdatum

DEsE benötigt die Angabe des Jahresabschlusses für den zu exportierenden Veranlagungszeitraum.

Ergebnis ist ein Datum im Format DD/MM/YYYY, welches aus der Konfiguration nach folgender Logik erstellt wird:

mode.annualaccountingdate.day/mode.annualaccountingdate.month/year+1

Beispiel

  year=2020
  mode.annualaccountingdate.day=12
  mode.annualaccountingdate.month=3

Ergebnis: 12. März 2021

Diese Angabe ist für Normal- und rollierendes Verfahren relevant, z.B. zur Ermittlung der Abgrenzungsart AVnV.

Vorheriges Exportdatum (nur relevant für DEsE 3.0.0, ab 3.1.0 nicht mehr relevant)

DEsE benötigt die Angabe des vorherigen DEsE-Reports, der an das Hauptzollamt übermittelt wurde. Es ist hierbei das offzielle Datum des zuletzt erstellten DEsE-Reports aus dem vorherigen Veranlagungszeitraum anzugeben.

Ergebnis ist ein Datum im Format DD/MM/YYYY, welches aus der Konfiguration nach folgender Logik erstellt wird:

mode.previousexportdate.day/mode.previousexportdate.month/year-1

Beispiel

  year=2020
  mode.previousexportdate.day=18
  mode.previousexportdate.month=4

Ergebnis: 18. April 2019

Diese Angabe ist für Normal- und rollierendes Verfahren relevant, z.B. zur Ermittlung der Abgrenzungsart AvV.

Stichtag

Im Normalverfahren benötigt DEsE die Angabe des Stichtages, zu dem die Jahresabrechnung für die Endkunden erstellt wird.

Ergebnis ist ein Datum im Format DD/MM/YYYY, welches aus der Konfiguration nach folgender Logik erstellt wird:

mode.referencedate.day/mode.referencedate.month/year

Beispiel

  year=2020
  mode.referencedate.day=31
  mode.referencedate.month=12

Ergebnis: 31. Dezember 2020

Implizit wird damit zusätzlich der Beginn der Jahresrechnung berechnet, in dem “minus 1 Jahr, plus 1 Tag” angenommen wird.

Im obrigen Beispiel wird damit der 01.01.2020 als Beginn der Jahresabrechnung angenommen.

Diese Angabe ist nur im Normalverfahren relevant.

Besonderheiten der Konfiguration ab DEsE 3.0.1

Dateinamen

Der Dateiname des DEsE-Exports wird nun nicht mehr durch die Konfigurationen csv.filename.electricity bzw. csv.filename.gas vorgegeben. Stattdessen wird der Dateiname durch die Konfiguration automatisch nach folgendem Schema ermittelt:

prefix-version-section-year-yyyyDDmm.csv
  • prefix: ein fester Wert, der durch die Konfiguration dese.export.prefix angepasst werden kann. Ist dieser Wert nicht gesetzt, wird das Präfix “dese” verwendet
  • version: Angabe der Versionsnummer, mit der DEsE ausgeführt wird, z.B. “3.0.1”
  • section: Entspricht dem (deutschen) Wert zu gleichnamiger Konfiguration (“strom” oder “gas”)
  • year: Entschricht der gleichnamigen Konfiguration, z.B. “2020”
  • yyyyDDmm: Zeitstempel, zu dem DEsE ausgeführt wurde

Wurde beispielsweise ein DEsE-Export für Strom im Veranlagungszeitraum 2020 am 15.04.2021 erzeugt, wird die Datei wie folgt benannt:

dese-3.0.1-strom-2020-20210415.csv

Exportpfad

Mit der Konfiguration dese.export.folder kann ein Ordner angegeben werden, in den DEsE die Export-Dateien ablegen soll. Bisher wurden die Exporte immer in das Ausführungsverzeichnis von DEsE gelegt.

DEsE geht davon aus, dass der Ordner erreichbar und beschreibbar ist. Sollte es zu einem Fehler beim Kopieren in den Zielordner kommen, wird DEsE die Export-Dateien im Ausführungsverzeichnis belassen.

Es wird zu Beginn des Exports nur per Konsolenwarnung informiert, ob der Zielordner nicht existiert bzw. schreibbar ist. DEsE wird nicht abbrechen.

Der Exportpfad kann sowohl relativ als auch absolut angegeben werden.

Folgende Besonderheiten sind außerdem zu beachten:

Konfiguration unter Windows

  • Bei der Angabe des Exportpfades sind die Backslashs doppelt anzugeben, z.B. als C://users//myfolder
  • Windows interessiert sich nicht für Groß-/Kleinschreibung, daher sind die Angaben C://Temp, C://temp oder C://tEmP identisch
  • Auch wenn Windows etwas großzügiger mit Dateirechten umgeht, sollte sichergestellt sein, dass der Zielordner durch den DEsE-Prozess (Java) beschreibbar ist

Konfiguration unter Linux

  • Dateipfade werden unter Linux mit einfachen Slashs angegeben, z.B. /data/dese/export
  • Linux macht eine exakte Unterscheidung an Groß-/Kleinschreibung, d.h. die Ordner /data/DEsE und /data/dese sind unterschiedlich
  • Bei der Einrichtung der Dateirechte ist explizit darauf zu achten, dass der Zielordner durch den DEsE-Prozess beschreibbar ist

Besonderheiten der Konfiguration ab DEsE 3.1.0

Persistierung des erzeugten Reports

Mit Version 3.1.0 wird DEsE bei jeder Ausführung das Ergebnis in ein eigenes Datenbankmodell abspeichern. Diese zusätzliche Persistierung ist für bestimmte Szenarien, insbesondere im rollierenden Verfahren, notwendig. So ist es beispielweise notwendig, für geschätzte Zeiträume, die im vorherigen Jahr gemeldet wurden, Korrekturen im aktuellen Jahr anzugeben.

dese.db.user=postgres
dese.db.password=postgres
dese.db.url=jdbc:postgresql://localhost:5432/mbs?currentSchema=dese

Die Implementierung kann sowohl im gleichen Schema wie MBS als auch in einem eigenen Schema (oder Datenbank) operieren. Durch die getrennte Konfiguration ist es möglich, DEsE für den Zugriff auf MBS und die eigene Persistenz unterschiedliche Benutzer, Datenbanken und Schemata zur Verfügung zu stellen.

Ausschließlich für Testzwecke kann die folgende Konfiguration genutzt werden, um die Persistierung des Ergebnisses in der Datenbank zu unterbinden.

dese.test.persistExport=false

Besonderheiten der Konfiguration ab DEsE 3.1.4

dese.translatecustomertype

Mit MBS Release 144.0 wurde der Vertragstyp TLP eingeführt. In der Spalte ‘KundenArt’ wird nach Definition SLP oder RLM erwartet. Durch diese Konfiguration kann beeinflusst werden, ob der Vertragstyp TLP übernommen wird.

Folgende Einstellungen sind möglich:

  • NONE: alle Vertragstypen werden übernommen (Standardwert)
  • TRANSLATE_VALUES_TO_SLP: TLP wird mit SLP ausgegeben

mode.rolling.emptyconsumptionvaluesmode

Werden leere Verbräuche im Feld ‘Menge_in_kWh’ exportiert (i.d.r. durch fehlende Zählerstände bei Aufzeichnung von SaV-Segmenten), kann mit dieser Konfiguration beeinflusst werden, wie diese im CSV-Export dargestellt werden.

Folgende Einstellungen sind möglich:

  • EXPORT: die Felder werden leer exportiert (Standardwert)
  • OVERWRITE_WITH_ZERO: konnte kein Verbrauch ermittelt werden, wird 0 kWh angenommen und exportiert