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'