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