Diese Action konvertiert eine CSV in eine MSCONS.

Die Action org.b2bbp.runtime.actions.internal.conversion.CsvToMsconsConverter konvertiert eine CSV in eine MSCONS.

Die Action verfügt über keine Konfigurationsmöglichkeiten, gesteuert werden kann nur der Aufbau der CSV.

Die CSV wird aus einem dieser MessageContext Einträge geladen: B3P_BASE_MESSAGE oder sonst CURRENT_PAYLOAD

Nach der Konvertierung wird die MSCONS-Edifact im MessageContext Eintrag B3P_BASE_MESSAGE gespeichert. Die CSV wird im Eintrag CURRENT_PAYLOAD gespeichert.

Wenn man in der weiteren Nachrichtenverarbeitung mit der Edifact arbeiten möchte (z.B. validieren oder verschicken), muss der Wert aus B3P_BASE_MESSAGE in CURRENT_PAYLOAD kopiert werden. Das kann über die SetPropertyAction mit der Eigenschaft CURRENT_PAYLOAD = ${var(B3P_BASE_MESSAGE)} (Kontext überschreiben) realisiert werden.

CSV Aufbau

Im Folgenden wird der Aufbau der CSV beschrieben.

Der Zeilenumbruch wird automatisch erkannt. (Mögliche Steuerzeichen sind \r und \n).

Als Feldtrennsymbol wird das Semikolon ; genutzt.

Ein Feld darf nie in Anführungszeichen stehen. Somit darf insbesondere das Semikolon und der Zeilenumbruch nicht innerhalb eines Feldes genutzt werden.

Falls die Zeile leer ist oder alle Felder einer Zeile leer sind, wird die Zeile ignoriert. Die folgende Zeilenzählung ignoriert leere Zeilen.

Die CSV muss in Zeile 1 und in Zeile 3 einen Header definieren.

Zeile 2 enthält Daten zum ersten Header (Kopfdaten), Zeile 4 und die folgenden enthalten Daten zum zweiten Header (Messintervalle)

Kopfdaten

Der erste Header der CSV muss folgendermaßen aufgebaut sein:

BDEW_SENDER;BDEW_RECIPIENT;METERINGPOINT_ID;START_DAY;END_DAY;METER_ID;REASON;REGISTRATION;TYPE;REFERENCE_NUMBER

BDEW_SENDER,BDEW_RECIPIENT: ILN

METERINGPOINT_ID: Meldepunkt in LOC+172

START_DAY,END_DAY: Grundlage für SG6/DTM+163/164 Beginn/Ende Messperiode Übertragungszeitraum

METER_ID: ungenutzt, muss aber vorhanden sein

REASON: ungenutzt, muss aber vorhanden sein

REGISTRATION: ungenutzt, muss aber vorhanden sein

TYPE: TL oder VL, UNB Anwendungsreferenz

REFERENCE_NUMBER: in UNB und UNH

SECTOR: kann genutzt werden, muss aber nicht vorhanden sein. falls Marktpartner 4* ist. Soll letzte , nach ;REFERENCE_NUMBER stehen.

Messintervalle

Der zweite Header der CSV hat folgenden Aufbau:

QUALITY;START_TIME;END_TIME;<OBIS-1>;<OBIS-2>;...

Beispiel für einen OBIS-Header: 1-1:1.5.0

Es können mehrere OBIS-Spalten angegeben werden. Nach den OBIS-Spalten dürfen keine anderen Spalten mehr folgen.

QUALITY: gemäß SG9/SG10/QTY Menge Qualifier

START_TIME, END_TIME:YYYYMMDDHHmm Grundlage für SG9/SG10/DTM+163/164 Beginn/Ende Messperiode

OBIS_X: gemäß SG9/SG10/QTY Menge

Für jede OBIS-Spalte wird eine zugehörige SG9 mit Positionsdaten angelegt.

Für jede Messintervall-Zeile wird eine zugehörige SG10 angelegt.

EDIFACT Generierung

Im Folgenden wird beschrieben, wie die EDIFACT aus der CSV generiert wird.

kein UNA

UNB

BDEW_SENDER (Teilnehmerbezeichnung Qualifier wird automatisch ermittelt)

BDEW_RECIPIENT (Teilnehmerbezeichnung Qualifier wird automatisch ermittelt)

REFERENCE_NUMBER

Datum & Uhrzeit der Erstellung: jetzt

TYPE: TL oder VL

UNH

REFERENCE_NUMBER

Die MSCONS hat das aktuelle Format.

Die Nachricht enthält genau einen UNH-UNT-Block.

BGM

Dokumentenname: 7

Dokumentnummer: automatisch generiert

Nachrichtenfunktion: 9

DTM+137

jetzt

RFF+Z13

Vorgang Gas: falls Marktpartner 98*
TL(LG) dann 13008, falls VL dann 13002, falls EM dann 13009
Vorgang Strom: falls Marktpartner 99*
TL(LG) dann 13018, falls VL dann 13017, falls EM dann 13019

NAD+MS, NAD+MR

gemäß BDEW_SENDER & BDEW_RECIPIENT

Verantwortliche Stelle für die Codepflege wird automatisch ermittelt

kein CTA, kein COM

UNS+D

SG5/NAD+DP

SG6/LOC+172

METERINGPOINT_ID

SG6/DTM+163/164

befüllt mit START_DAY/END_DAY, 0 Uhr, Zeitzone +01 (Berlin)

SG9 Positionsdaten

je OBIS-Spalte wiederholt

SG9/LIN

beginnt mit 1 und wird mit den OBIS-Spalten hochgezählt

SG9/PIA

befüllt mit OBIS-Code gemäß OBIS-Spalte.

SG10 QTY-DTM-STS

je Messintervall wiederholt

SG10/QTY

befüllt mit QUALITY des Messintervalls sowie dem Messwert des zugehörigen OBIS-Codes

SG10/STS 9013

befüllt mit ADDITIONAL_INFORMATION;Z31;Z32;Z33_1;Z33_2;Z33_3;Z33_4;Z34; ADDITIONAL_INFORMATION ist für STS+8 , laut BDEW ab Version 2.3C ungenutzt.

SG10/DTM+163/164

befüllt mit START_TIME/END_TIME des Messintervalls & Zeitzone +01 (Berlin), Format 303

UNT

Standard

UNZ

Standard

Anhang

Beispiel CSV

BDEW_SENDER;BDEW_RECIPIENT;METERINGPOINT_ID;START_DAY;END_DAY;METER_ID;REASON;REGISTRATION;TYPE;REFERENCE_NUMBER
9911111111111;9911111111111;DE00100018314DV100000000000124196;20140108;20140109;;;;TL;cec343a7f93928

QUALITY;START_TIME;END_TIME;1-1:1.5.0;1-1:2.5.0;1-1:3.5.0;1-1:4.5.0
220;201401080015;201401080030;0.5;0;0;2
220;201401080030;201401080045;0.5;0;0;1.5
220;201401080045;201401080100;0.5;0;0;2

Beispiel Edifact

(resultiert aus der vorherigen CSV)

UNB+UNOC:3+9911111111111:500+9911111111111:500+181112:1430+cec343a7f93928++TL'
UNH+cec343a7f93928+MSCONS:D:04B:UN:2.2h'
BGM+7+D1542029439003+9'
DTM+137:201811121430:203'
RFF+Z13:13008'
NAD+MS+9911111111111::293'
NAD+MR+9911111111111::293'
UNS+D'
NAD+DP'
LOC+172+DE00100018314DV100000000000124196'
DTM+163:201401080000?+01:303'
DTM+164:201401090000?+01:303'
LIN+1'
PIA+5+1-1?:1.5.0:SRW'
QTY+220:0.5'
DTM+163:201401080015?+01:303'
DTM+164:201401080030?+01:303'
QTY+220:0.5'
DTM+163:201401080030?+01:303'
DTM+164:201401080045?+01:303'
QTY+220:0.5'
DTM+163:201401080045?+01:303'
DTM+164:201401080100?+01:303'
LIN+2'
PIA+5+1-1?:2.5.0:SRW'
QTY+220:0'
DTM+163:201401080015?+01:303'
DTM+164:201401080030?+01:303'
QTY+220:0'
DTM+163:201401080030?+01:303'
DTM+164:201401080045?+01:303'
QTY+220:0'
DTM+163:201401080045?+01:303'
DTM+164:201401080100?+01:303'
LIN+3'
PIA+5+1-1?:3.5.0:SRW'
QTY+220:0'
DTM+163:201401080015?+01:303'
DTM+164:201401080030?+01:303'
QTY+220:0'
DTM+163:201401080030?+01:303'
DTM+164:201401080045?+01:303'
QTY+220:0'
DTM+163:201401080045?+01:303'
DTM+164:201401080100?+01:303'
LIN+4'
PIA+5+1-1?:4.5.0:SRW'
QTY+220:2'
DTM+163:201401080015?+01:303'
DTM+164:201401080030?+01:303'
QTY+220:1.5'
DTM+163:201401080030?+01:303'
DTM+164:201401080045?+01:303'
QTY+220:2'
DTM+163:201401080045?+01:303'
DTM+164:201401080100?+01:303'
UNT+56+cec343a7f93928'
UNZ+1+cec343a7f93928'

Beispiel CSV mit Sector Strom

BDEW_SENDER;BDEW_RECIPIENT;METERINGPOINT_ID;START_DAY;END_DAY;METER_ID;REASON;REGISTRATION;TYPE;REFERENCE_NUMBER;SECTOR
9977988000009;4033872000058;51560891380;20211003;20211004;1ACT1600001085;PMR;MRV;TL;2110040381359;Strom
QUALITY;ADDITIONAL_INFORMATION;Z31;Z32;Z33_1;Z33_2;Z33_3;Z33_4;Z34;START_TIME;END_TIME;1-1:1.29.0;1-1:3.29.0
67;;;Z92;Z84;;;;;202110030000-MESZ;202110030015-MESZ;0.000;0.000
220;;;;;;;;;202110030015-MESZ;202110030030-MESZ;0.000;0.000
220;;;;;Z83;;;;202110030030-MESZ;202110030045-MESZ;0.000;0.000
220;;;;Z84;;;;;202110030045-MESZ;202110030100-MESZ;0.000;0.000
220;;;;Z83;Z84;Z85;Z86;;202110030100-MESZ;202110030115-MESZ;0.000;0.000
220;;;;;;;;;202110030115-MESZ;202110030130-MESZ;0.000;0.000

Beispiel Edifact

(resultiert aus der vorherigen CSV)

UNB+UNOC:3+9977988000009:500+4033872000058:14+211012:1346+2110040381359++TL'
UNH+2110040381359+MSCONS:D:04B:UN:2.3c'
BGM+Z48+D1634039214398+9'
DTM+137:202110121346:203'
RFF+Z13:13025'
NAD+MS+9977988000009::293'
NAD+MR+4033872000058::9'
UNS+D'
NAD+DP'
LOC+172+51560891380'
DTM+163:202110030000?+02:303'
DTM+164:202110040000?+02:303'
LIN+1'
PIA+5+1-1?:1.29.0:SRW'
QTY+67:0.000'
DTM+163:202110030000?+02:303'
DTM+164:202110030015?+02:303'
STS+Z32++Z92'
STS+Z33++Z84'
QTY+220:0.000'
DTM+163:202110030015?+02:303'
DTM+164:202110030030?+02:303'
QTY+220:0.000'
DTM+163:202110030030?+02:303'
DTM+164:202110030045?+02:303'
STS+Z33++Z83'
QTY+220:0.000'
DTM+163:202110030045?+02:303'
DTM+164:202110030100?+02:303'
STS+Z33++Z84'
QTY+220:0.000'
DTM+163:202110030100?+02:303'
DTM+164:202110030115?+02:303'
STS+Z33++Z83'
STS+Z33++Z84'
STS+Z33++Z85'
STS+Z33++Z86'
QTY+220:0.000'
DTM+163:202110030115?+02:303'
DTM+164:202110030130?+02:303'
View Me   Edit Me