@enervance/insight-cim-model 0.0.484 → 0.0.486

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/etl/etl-neplan/etl-neplan-csv.js +3 -3
  2. package/dist/etl/etl-neplan/etl-neplan-csv.js.map +1 -1
  3. package/dist/etl/etl-neplan/{et-neplan-regex.js → etl-neplan-regex.js} +1 -1
  4. package/dist/etl/etl-neplan/etl-neplan-regex.js.map +1 -0
  5. package/dist/etl/etl-neplan/etl-neplan.d.ts +0 -52
  6. package/dist/etl/etl-neplan/etl-neplan.js +0 -655
  7. package/dist/etl/etl-neplan/etl-neplan.js.map +1 -1
  8. package/dist/index.d.ts +4 -5
  9. package/dist/index.js +15 -12
  10. package/dist/index.js.map +1 -1
  11. package/dist/model/assets/Tower.d.ts +1 -0
  12. package/dist/model/assets/Tower.js +3 -0
  13. package/dist/model/assets/Tower.js.map +1 -1
  14. package/dist/model/extensions/amprion/assets/AMPRIONConstructionContainer.d.ts +2 -0
  15. package/dist/model/extensions/amprion/assets/AMPRIONConstructionContainer.js +6 -1
  16. package/dist/model/extensions/amprion/assets/AMPRIONConstructionContainer.js.map +1 -1
  17. package/dist/model/extensions/amprion/assets/AMPRIONTower.d.ts +3 -0
  18. package/dist/model/extensions/amprion/assets/AMPRIONTower.js +8 -1
  19. package/dist/model/extensions/amprion/assets/AMPRIONTower.js.map +1 -1
  20. package/dist/model/extensions/amprion/assets/AMPRIONTowerConstructionKind.d.ts +6 -0
  21. package/dist/model/extensions/amprion/assets/AMPRIONTowerConstructionKind.js +11 -0
  22. package/dist/model/extensions/amprion/assets/AMPRIONTowerConstructionKind.js.map +1 -0
  23. package/package.json +1 -1
  24. package/dist/etl/etl-neplan/et-neplan-regex.js.map +0 -1
  25. package/dist/etl/etl-neplan/etl-neplan-util.d.ts +0 -4
  26. package/dist/etl/etl-neplan/etl-neplan-util.js +0 -65
  27. package/dist/etl/etl-neplan/etl-neplan-util.js.map +0 -1
  28. /package/dist/etl/etl-neplan/{et-neplan-regex.d.ts → etl-neplan-regex.d.ts} +0 -0
@@ -1,666 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NeplanModelEnrichment = void 0;
4
3
  exports.getUnifiedEnergyConsumersNames = getUnifiedEnergyConsumersNames;
5
4
  exports.determineMeasuredContractualPower = determineMeasuredContractualPower;
6
5
  exports.getEnergyConsumerSPARQL = getEnergyConsumerSPARQL;
7
6
  exports.getDeleteDiagramSPARQLFromObject = getDeleteDiagramSPARQLFromObject;
8
7
  exports.getTrafoApprentPower = getTrafoApprentPower;
9
8
  const sparql_utils_1 = require("../../util/sparql/sparql-utils.js");
10
- const AssetDeployment_1 = require("../../model/assets/AssetDeployment.js");
11
- const ConnectivityNode_1 = require("../../model/core/ConnectivityNode.js");
12
- const VoltageLevel_1 = require("../../model/core/VoltageLevel.js");
13
- const ExternalNetworkInjection_1 = require("../../model/wires/ExternalNetworkInjection.js");
14
- const common_utils_1 = require("../../utils2/common.utils.js");
15
- const ACLineSegment_1 = require("../../model/wires/ACLineSegment.js");
16
- const WNFacility_1 = require("../../model/extensions/westnetz-neplan/assets/WNFacility.js");
17
- const Equipment_1 = require("../../model/core/Equipment.js");
18
- const Switch_1 = require("../../model/wires/Switch.js");
19
- const Terminal_1 = require("../../model/core/Terminal.js");
20
- const Bay_1 = require("../../model/core/Bay.js");
21
- const BusbarSection_1 = require("../../model/wires/BusbarSection.js");
22
- const utils_1 = require("../../util/utils.js");
23
- class NeplanModelEnrichment {
24
- /**
25
- * Ändert (Bestands-)Terminalinstanzen in EVTerminals um
26
- * @param modelContainer Netzmodel
27
- * */
28
- static typeTerminals(modelContainer) {
29
- const graphURI = modelContainer.getGraphURI();
30
- const deleteRdfTypes = new Array();
31
- const insertRdfType = new Array();
32
- for (const terminal of modelContainer.terminals.values()) {
33
- /**
34
- * Aufgrund der Erweiterung rdf:type von cim:ConnectivityNode zu westnetzneplan:WNConnectivityNode wechseln. */
35
- deleteRdfTypes.push(`<${terminal.baseIRI}${terminal.mrid}> rdf:type cim:Terminal .`);
36
- insertRdfType.push(`<${terminal.baseIRI}${terminal.mrid}> rdf:type enervance:EVTerminal .`);
37
- }
38
- const length = insertRdfType.length + deleteRdfTypes.length;
39
- const insertDataStatement = [];
40
- if (length) {
41
- insertDataStatement.push(`
42
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
43
- PREFIX enervance: <http://enervance.com/CIM/Extensions#>
44
- PREFIX cim: <http://iec.ch/TC57/2013/CIM-schema-cim16#>
45
- PREFIX westnetzneplan: <http://westnetzneplan.de/CIM/Extensions#>
46
-
47
- ${(0, sparql_utils_1.getInsertDataPartStatement)(graphURI, insertRdfType)}
48
- ${(0, sparql_utils_1.getDeleteDataPartStatement)(graphURI, deleteRdfTypes)}
49
- `);
50
- }
51
- return insertDataStatement;
52
- }
53
- static typeACLineSegments(modelContainer) {
54
- const graphURI = modelContainer.getGraphURI();
55
- const deleteRdfTypes = new Array();
56
- const insertRdfType = new Array();
57
- for (const acLineSegment of modelContainer.acLineSegments.values()) {
58
- /**
59
- * Aufgrund der Erweiterung rdf:type von cim:ConnectivityNode zu westnetzneplan:WNConnectivityNode wechseln. */
60
- deleteRdfTypes.push(`<${acLineSegment.baseIRI}${acLineSegment.mrid}> rdf:type cim:ACLineSegment .`);
61
- insertRdfType.push(`<${acLineSegment.baseIRI}${acLineSegment.mrid}> rdf:type enervance:EVACLineSegment .`);
62
- }
63
- const length = insertRdfType.length + deleteRdfTypes.length;
64
- const insertDataStatement = [];
65
- if (length) {
66
- insertDataStatement.push(`
67
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
68
- PREFIX enervance: <http://enervance.com/CIM/Extensions#>
69
- PREFIX cim: <http://iec.ch/TC57/2013/CIM-schema-cim16#>
70
- PREFIX westnetzneplan: <http://westnetzneplan.de/CIM/Extensions#>
71
-
72
- ${(0, sparql_utils_1.getInsertDataPartStatement)(graphURI, insertRdfType)}
73
- ${(0, sparql_utils_1.getDeleteDataPartStatement)(graphURI, deleteRdfTypes)}
74
- `);
75
- }
76
- return insertDataStatement;
77
- }
78
- static rearrangeVoltageLevels(modelContainer, csvData) {
79
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
80
- const graphURI = modelContainer.getGraphURI();
81
- const deleteSparql = new Array();
82
- const insertSparql = new Array();
83
- const processedNodes = new Set();
84
- const nodesToCombine = new Array();
85
- /** 1) Alle zusammengehörige CNs und CunductingEquipments bestimmen */
86
- for (const connectivityNode of modelContainer.connectivityNodes.values()) {
87
- if (!processedNodes.has(connectivityNode === null || connectivityNode === void 0 ? void 0 : connectivityNode.getUUID())) {
88
- const objectsFound = NeplanModelEnrichment.getVoltageLevelObjects(connectivityNode);
89
- nodesToCombine.push(objectsFound);
90
- objectsFound.forEach(it => {
91
- processedNodes.add(it === null || it === void 0 ? void 0 : it.getUUID());
92
- });
93
- }
94
- }
95
- /** 2) Zussamengehördende VoltageLevels bestimmen */
96
- const voltageLevelToCombine = new Map();
97
- const psrTypeUA = modelContainer.getPsrTypeByName('Umspannanlage');
98
- if (psrTypeUA === undefined || psrTypeUA === null)
99
- return [];
100
- voltageLevelToCombine.set(psrTypeUA.getUUID(), new Array());
101
- const psrTypeONS = modelContainer.getPsrTypeByName('Ortsnetzstation');
102
- if (psrTypeONS === undefined || psrTypeONS === null)
103
- return [];
104
- voltageLevelToCombine.set(psrTypeONS.getUUID(), new Array());
105
- for (const nodes of nodesToCombine) {
106
- const vlSet = new Set();
107
- const connectivityNodes = new Set();
108
- const equipments = new Set();
109
- const substationType = nodes.some(it => it instanceof ExternalNetworkInjection_1.ExternalNetworkInjection) ? psrTypeUA : psrTypeONS;
110
- for (const node of nodes) {
111
- if (node instanceof Equipment_1.Equipment) {
112
- if (!node.equipmentContainer) {
113
- console.log(`node ${node.mrid} ohne equipmentContainer`);
114
- continue;
115
- }
116
- const equipmentContainer = node.equipmentContainer;
117
- vlSet.add(equipmentContainer);
118
- equipments.add(node);
119
- }
120
- else if (node instanceof ConnectivityNode_1.ConnectivityNode) {
121
- if (!node.connectivityNodeContainer) {
122
- console.log(`node ${node.mrid} ohne equipmentContainer`);
123
- continue;
124
- }
125
- const connectivityNodeContainer = node.connectivityNodeContainer;
126
- vlSet.add(connectivityNodeContainer);
127
- connectivityNodes.add(node);
128
- }
129
- else {
130
- console.log(`rearrangeVoltageLevels: unbekannter Node -> Class ${(_a = node === null || node === void 0 ? void 0 : node.constructor) === null || _a === void 0 ? void 0 : _a.name} | UUID ${node === null || node === void 0 ? void 0 : node.getUUID()}`);
131
- }
132
- }
133
- voltageLevelToCombine.get(substationType.getUUID()).push({
134
- voltageLevels: Array.from(vlSet),
135
- connectivityNodes: Array.from(connectivityNodes),
136
- equipments: Array.from(equipments)
137
- });
138
- }
139
- const baseURL = modelContainer.getBaseURL();
140
- /** VoltageLevels (ONS) ohne Spannungsquelle (Slack) zu einem Substation-Objekt zuordnen */
141
- const onsNodes = voltageLevelToCombine.get(psrTypeONS.getUUID());
142
- const removedVls = new Set();
143
- for (const onsValue of onsNodes) {
144
- const voltageLevels = onsValue.voltageLevels;
145
- const connectivityNodes = onsValue.connectivityNodes;
146
- const equipments = onsValue.equipments;
147
- if (!connectivityNodes.length) {
148
- console.log('keine VoltageLevels zur Zusammenfassung gefunden');
149
- continue;
150
- }
151
- const tp = (_b = connectivityNodes === null || connectivityNodes === void 0 ? void 0 : connectivityNodes.find(it => { var _a; return ((_a = it.name) === null || _a === void 0 ? void 0 : _a.length) === 10; })) === null || _b === void 0 ? void 0 : _b.name;
152
- const substationName = (0, utils_1.escapeSpecialChars)(tp ? tp : (_c = connectivityNodes === null || connectivityNodes === void 0 ? void 0 : connectivityNodes.find(it => it === null || it === void 0 ? void 0 : it.name)) === null || _c === void 0 ? void 0 : _c.name);
153
- const substationDescription = (0, utils_1.escapeSpecialChars)((_d = connectivityNodes === null || connectivityNodes === void 0 ? void 0 : connectivityNodes.find(it => it.description)) === null || _d === void 0 ? void 0 : _d.description);
154
- const newVoltageLevelUUID = common_utils_1.CommonUtils.generateUUID();
155
- const newSubstationUUID = common_utils_1.CommonUtils.generateUUID();
156
- const baseVoltage = (_e = connectivityNodes === null || connectivityNodes === void 0 ? void 0 : connectivityNodes.find(it => it.getBaseVoltage())) === null || _e === void 0 ? void 0 : _e.getBaseVoltage();
157
- const baseURL = modelContainer.getBaseURL();
158
- /** neue Substation */
159
- insertSparql.push(`<${baseURL}${newSubstationUUID}> rdf:type cim:Substation .`);
160
- insertSparql.push(`<${baseURL}${newSubstationUUID}> cim:IdentifiedObject.name '${substationName}' .`);
161
- insertSparql.push(`<${baseURL}${newSubstationUUID}> cim:IdentifiedObject.description '${substationDescription}' .`);
162
- insertSparql.push(`<${baseURL}${newSubstationUUID}> cim:PowerSystemResource.PSRType <${psrTypeONS.baseIRI}${psrTypeONS.getUUID()}> .`);
163
- /** neues VoltageLevel */
164
- insertSparql.push(`<${baseURL}${newVoltageLevelUUID}> rdf:type cim:VoltageLevel .`);
165
- insertSparql.push(`<${baseURL}${newVoltageLevelUUID}> cim:IdentifiedObject.name '${(baseVoltage === null || baseVoltage === void 0 ? void 0 : baseVoltage.name) ? baseVoltage.name : 'unbekannt'}' .`);
166
- insertSparql.push(`<${baseURL}${newVoltageLevelUUID}> cim:VoltageLevel.Substation <${baseURL}${newSubstationUUID}> .`);
167
- insertSparql.push(`<${baseURL}${newVoltageLevelUUID}> cim:VoltageLevel.BaseVoltage <${baseVoltage.baseIRI}${baseVoltage === null || baseVoltage === void 0 ? void 0 : baseVoltage.getUUID()}> .`);
168
- connectivityNodes.forEach(it => {
169
- const voltageLevel = it.connectivityNodeContainer;
170
- if (!removedVls.has(voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.getUUID())) {
171
- deleteSparql.push(`<${voltageLevel.baseIRI}${voltageLevel.getUUID()}> rdf:type cim:VoltageLevel .`);
172
- removedVls.add(voltageLevel.getUUID());
173
- }
174
- deleteSparql.push(`<${it.baseIRI}${it.getUUID()}> cim:ConnectivityNode.ConnectivityNodeContainer <${voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.baseIRI}${voltageLevel.getUUID()}> .`);
175
- insertSparql.push(`<${it.baseIRI}${it.getUUID()}> cim:ConnectivityNode.ConnectivityNodeContainer <${baseURL}${newVoltageLevelUUID}> .`);
176
- });
177
- equipments.forEach(it => {
178
- const voltageLevel = it.equipmentContainer;
179
- if (it.equipmentContainer) {
180
- // Lösche Vl, wenn kein SlackVL
181
- if (!removedVls.has(voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.getUUID())) {
182
- deleteSparql.push(`<${voltageLevel.baseIRI}${voltageLevel.getUUID()}> rdf:type cim:VoltageLevel .`);
183
- removedVls.add(voltageLevel.getUUID());
184
- }
185
- deleteSparql.push(`<${it.baseIRI}${it.getUUID()}> cim:Equipment.EquipmentContainer <${it.baseIRI}${voltageLevel.getUUID()}> .`);
186
- insertSparql.push(`<${it.baseIRI}${it.getUUID()}> cim:Equipment.EquipmentContainer <${baseURL}${newVoltageLevelUUID}> .`);
187
- }
188
- });
189
- for (const voltageLevel of voltageLevels) {
190
- const oldSubstation = voltageLevel.getSubstation();
191
- /** alte Substation aus VoltageLevel löschen */
192
- deleteSparql.push(`<${voltageLevel.baseIRI}${voltageLevel.getUUID()}> cim:VoltageLevel.Substation <${oldSubstation === null || oldSubstation === void 0 ? void 0 : oldSubstation.baseIRI}${oldSubstation === null || oldSubstation === void 0 ? void 0 : oldSubstation.getUUID()}> .`);
193
- deleteSparql.push(`<${voltageLevel.baseIRI}${voltageLevel.getUUID()}> cim:IdentifiedObject.name '${voltageLevel.name}' .`);
194
- }
195
- }
196
- /** VoltageLevels (Umspannanlage) mit Spannungsquelle (Slack) zu einem Substation-Objekt zuordnen */
197
- const uaNodes = voltageLevelToCombine.get(psrTypeUA.getUUID());
198
- for (const uaValue of uaNodes) {
199
- const equipmentContainers = uaValue.voltageLevels;
200
- const voltageLevels = equipmentContainers.filter(it => it instanceof VoltageLevel_1.VoltageLevel);
201
- const connectivityNodes = uaValue.connectivityNodes;
202
- const connectivityNodeNames = connectivityNodes.map(it => it.name);
203
- const equipments = uaValue.equipments;
204
- /** Name der Umspannanlage bestimmen */
205
- const nameData = (_f = csvData.find(it => connectivityNodeNames.includes(it.tp))) === null || _f === void 0 ? void 0 : _f.name;
206
- const substationName = nameData ? nameData : (_g = connectivityNodes === null || connectivityNodes === void 0 ? void 0 : connectivityNodes.find(it => it.name)) === null || _g === void 0 ? void 0 : _g.description;
207
- const substationTP = (_h = connectivityNodes === null || connectivityNodes === void 0 ? void 0 : connectivityNodes.find(it => it.name.length)) === null || _h === void 0 ? void 0 : _h.name.substr(0, 10);
208
- const substationDescription = substationTP ? substationTP : (_j = connectivityNodes === null || connectivityNodes === void 0 ? void 0 : connectivityNodes.find(it => it.name.length)) === null || _j === void 0 ? void 0 : _j.name;
209
- const baseVoltage = (_k = connectivityNodes === null || connectivityNodes === void 0 ? void 0 : connectivityNodes.find(it => it.getBaseVoltage() !== undefined)) === null || _k === void 0 ? void 0 : _k.getBaseVoltage();
210
- const newVoltageLevelUUID = common_utils_1.CommonUtils.generateUUID();
211
- const newSubstationUUID = common_utils_1.CommonUtils.generateUUID();
212
- /** neue Substation */
213
- insertSparql.push(`<${baseURL}${newSubstationUUID}> rdf:type cim:Substation .`);
214
- insertSparql.push(`<${baseURL}${newSubstationUUID}> cim:IdentifiedObject.name 'UA ${substationName ? substationName : 'unbekannt'}' .`);
215
- insertSparql.push(`<${baseURL}${newSubstationUUID}> cim:IdentifiedObject.description '${substationDescription}' .`);
216
- insertSparql.push(`<${baseURL}${newSubstationUUID}> cim:PowerSystemResource.PSRType <${psrTypeUA.baseIRI}${psrTypeUA.getUUID()}> .`);
217
- /** neues VoltageLevel */
218
- insertSparql.push(`<${baseURL}${newVoltageLevelUUID}> rdf:type cim:VoltageLevel .`);
219
- insertSparql.push(`<${baseURL}${newVoltageLevelUUID}> cim:IdentifiedObject.name '${(baseVoltage === null || baseVoltage === void 0 ? void 0 : baseVoltage.name) ? baseVoltage.name : 'unbekannt'}' .`);
220
- insertSparql.push(`<${baseURL}${newVoltageLevelUUID}> cim:VoltageLevel.Substation <${baseURL}${newSubstationUUID}> .`);
221
- insertSparql.push(`<${baseURL}${newVoltageLevelUUID}> cim:VoltageLevel.BaseVoltage <${baseVoltage.baseIRI}${baseVoltage === null || baseVoltage === void 0 ? void 0 : baseVoltage.getUUID()}> .`);
222
- connectivityNodes.forEach(it => {
223
- const voltageLevel = it.connectivityNodeContainer;
224
- if (!removedVls.has(voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.getUUID())) {
225
- deleteSparql.push(`<${voltageLevel.baseIRI}${voltageLevel.getUUID()}> rdf:type cim:VoltageLevel .`);
226
- removedVls.add(voltageLevel.getUUID());
227
- }
228
- deleteSparql.push(`<${it.baseIRI}${it.getUUID()}> cim:ConnectivityNode.ConnectivityNodeContainer <${voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.baseIRI}${voltageLevel.getUUID()}> .`);
229
- insertSparql.push(`<${it.baseIRI}${it.getUUID()}> cim:ConnectivityNode.ConnectivityNodeContainer <${baseURL}${newVoltageLevelUUID}> .`);
230
- });
231
- equipments.forEach(it => {
232
- const voltageLevel = it.equipmentContainer;
233
- if (it.equipmentContainer) {
234
- // Lösche Vl, wenn kein SlackVL
235
- if (!removedVls.has(voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.getUUID())) {
236
- deleteSparql.push(`<${voltageLevel.baseIRI}${voltageLevel.getUUID()}> rdf:type cim:VoltageLevel .`);
237
- removedVls.add(voltageLevel.getUUID());
238
- }
239
- deleteSparql.push(`<${it.baseIRI}${it.getUUID()}> cim:Equipment.EquipmentContainer <${it.baseIRI}${voltageLevel.getUUID()}> .`);
240
- insertSparql.push(`<${it.baseIRI}${it.getUUID()}> cim:Equipment.EquipmentContainer <${baseURL}${newVoltageLevelUUID}> .`);
241
- }
242
- });
243
- for (const voltageLevel of voltageLevels) {
244
- const oldSubstation = voltageLevel.getSubstation();
245
- /** alte Substation aus VoltageLevel löschen */
246
- deleteSparql.push(`<${oldSubstation.baseIRI}${oldSubstation.getUUID()}> rdf:type cim:Substation .`);
247
- deleteSparql.push(`<${voltageLevel.baseIRI}${voltageLevel.getUUID()}> cim:VoltageLevel.Substation <${oldSubstation.baseIRI}${oldSubstation.getUUID()}> .`);
248
- }
249
- }
250
- const length = insertSparql.length + deleteSparql.length;
251
- const insertDataStatement = [];
252
- if (length) {
253
- insertDataStatement.push(`
254
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
255
- PREFIX enervance: <http://enervance.com/CIM/Extensions#>
256
- PREFIX cim: <http://iec.ch/TC57/2013/CIM-schema-cim16#>
257
- PREFIX westnetzneplan: <http://westnetzneplan.de/CIM/Extensions#>
258
-
259
- ${(0, sparql_utils_1.getInsertDataPartStatement)(graphURI, insertSparql)}
260
- ${(0, sparql_utils_1.getDeleteDataPartStatement)(graphURI, deleteSparql)}
261
- `);
262
- }
263
- return insertDataStatement;
264
- }
265
- /**
266
- * Bestimmt alle zu einem VoltageLevel gehörigen Objekte.
267
- * @param startCN Startknoten
268
- * @return Ein Array mit zu einem VoltageLevel gehörigen Objekte
269
- * */
270
- static getVoltageLevelObjects(startCN) {
271
- const objectsFound = new Array();
272
- let nodesOnCurrentLevel = new Array();
273
- let nodesOnNextLevel = new Array(startCN);
274
- let nodesVisited = [];
275
- while (nodesOnNextLevel.length) {
276
- nodesOnCurrentLevel.length = 0;
277
- nodesOnCurrentLevel = [...nodesOnNextLevel];
278
- /** next level nodes leeren */
279
- nodesOnNextLevel.length = 0;
280
- for (const currentNode of nodesOnCurrentLevel) {
281
- objectsFound.push(currentNode);
282
- nodesVisited.push(currentNode.getUUID());
283
- for (const terminal of currentNode.terminals.values()) {
284
- if (!terminal)
285
- continue;
286
- /** Terminal traversierbar und nicht besucht */
287
- if (nodesVisited.indexOf(terminal.getUUID()) > -1)
288
- continue;
289
- const terminalConductingEquipment = terminal.conductingEquipment;
290
- if (!terminalConductingEquipment)
291
- continue;
292
- if (nodesVisited.indexOf(terminalConductingEquipment === null || terminalConductingEquipment === void 0 ? void 0 : terminalConductingEquipment.getUUID()) === -1) {
293
- let toAdd = true;
294
- /** Stromkreisabschnitte mit einer Länge von 0.001 oder 0 werden häufig als Hilfselemente verwendet innerhalb von Stationen verwendet.
295
- * Daher werden derartige Stromkreisabschnitte als Bestandteil von Station berücksichtigt.
296
- * Es gibt Stromkreisabschnitte mit einer kürzeren Länge. Die Letzteren sind 'korrekte' Abschnitte.
297
- * */
298
- if (terminalConductingEquipment instanceof ACLineSegment_1.ACLineSegment) {
299
- const acLineSegment = terminalConductingEquipment;
300
- const length = acLineSegment.length;
301
- if (length !== 0.001) {
302
- toAdd = false;
303
- }
304
- else if (!(acLineSegment === null || acLineSegment === void 0 ? void 0 : acLineSegment.isConnected())) {
305
- /** 1 Meter Leitung Sonderfall.
306
- * Wenn die Leitung nicht angeschlossen ist,
307
- * dann werden diese Knoten nicht zu einer ONS-Substation zusammengefasst. */
308
- toAdd = false;
309
- }
310
- }
311
- if (toAdd) {
312
- nodesOnNextLevel.push(terminalConductingEquipment);
313
- }
314
- }
315
- const terminalConnectivityNode = terminal.connectivityNode;
316
- if (!terminalConnectivityNode)
317
- continue;
318
- if (nodesVisited.indexOf(terminalConnectivityNode.getUUID()) === -1) {
319
- nodesOnNextLevel.push(terminalConnectivityNode);
320
- }
321
- }
322
- }
323
- }
324
- return objectsFound;
325
- }
326
- /**
327
- * Erstellt für ConnectivityNodes das Assetmodell.
328
- * @param modelContainer Netzmodel
329
- * */
330
- static createAssetModelConnectivityNode(modelContainer) {
331
- const graphURI = modelContainer.getGraphURI();
332
- const createObjectsSPARQL = [];
333
- const setValueSPARQL = [];
334
- const addReleationsSPARQL = [];
335
- const deleteRdfTypes = new Array();
336
- const insertRdfType = new Array();
337
- for (const cn of modelContainer.connectivityNodes.values()) {
338
- const facility = new WNFacility_1.WNFacility(common_utils_1.CommonUtils.generateUUID(), cn.mrid, '', '', cn.baseIRI);
339
- /** CN <-> Facility */
340
- createObjectsSPARQL.push(facility.createNewStatementSPARQL());
341
- addReleationsSPARQL.push(facility.addConnectivityNode(cn));
342
- /**
343
- * Aufgrund der Erweiterung rdf:type von cim:ConnectivityNode zu westnetzneplan:WNConnectivityNode wechseln.
344
- * */
345
- deleteRdfTypes.push(`<${cn.baseIRI}${cn.mrid}> rdf:type cim:ConnectivityNode .\n`);
346
- insertRdfType.push(`<${cn.baseIRI}${cn.mrid}> rdf:type westnetzneplan:WNConnectivityNode .\n`);
347
- }
348
- const length = createObjectsSPARQL.length + setValueSPARQL.length + addReleationsSPARQL.length;
349
- const insertDataStatement = [];
350
- if (length) {
351
- insertDataStatement.push(`
352
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
353
- PREFIX enervance: <http://enervance.com/CIM/Extensions#>
354
- PREFIX entsoe: <http://entsoe.eu/CIM/SchemaExtension/3/1#>
355
- PREFIX cim: <http://iec.ch/TC57/2013/CIM-schema-cim16#>
356
- PREFIX westnetzneplan: <http://westnetzneplan.de/CIM/Extensions#>
357
-
358
- ${(0, sparql_utils_1.getInsertDataPartStatement)(graphURI, [...createObjectsSPARQL, ...addReleationsSPARQL, ...setValueSPARQL, ...insertRdfType])}
359
- ${(0, sparql_utils_1.getDeleteDataPartStatement)(graphURI, deleteRdfTypes)}
360
- `);
361
- }
362
- return insertDataStatement;
363
- }
364
- /**
365
- * Erstellt für EnergySources das Assetmodell.
366
- * @param modelContainer Netzmodel
367
- * */
368
- static createAssetModelEnergySources(modelContainer) {
369
- const graphURI = modelContainer.getGraphURI();
370
- const createObjectsSPARQL = [];
371
- const setValueSPARQL = [];
372
- const addReleationsSPARQL = [];
373
- const energyConnections = [...modelContainer.energySources.values()];
374
- for (const ec of energyConnections) {
375
- const facility = new WNFacility_1.WNFacility(common_utils_1.CommonUtils.generateUUID(), ec.name, '', '', ec.baseIRI);
376
- const assetDeployment = new AssetDeployment_1.AssetDeployment(common_utils_1.CommonUtils.generateUUID(), ec.name, '', '', ec.baseIRI);
377
- /** CN <-> Facility */
378
- createObjectsSPARQL.push(facility.createNewStatementSPARQL());
379
- addReleationsSPARQL.push(facility.addPowerSystemResource(ec));
380
- /** AssetDeployment <-> Facility */
381
- createObjectsSPARQL.push(assetDeployment.createNewStatementSPARQL());
382
- addReleationsSPARQL.push(assetDeployment.setAsset(facility));
383
- }
384
- const length = createObjectsSPARQL.length + setValueSPARQL.length + addReleationsSPARQL.length;
385
- const insertDataStatement = [];
386
- if (length) {
387
- insertDataStatement.push(`
388
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
389
- PREFIX enervance: <http://enervance.com/CIM/Extensions#>
390
- PREFIX cim: <http://iec.ch/TC57/2013/CIM-schema-cim16#>
391
- PREFIX westnetzneplan: <http://westnetzneplan.de/CIM/Extensions#>
392
-
393
- ${(0, sparql_utils_1.getInsertDataPartStatement)(graphURI, [...createObjectsSPARQL, ...addReleationsSPARQL, ...setValueSPARQL])}
394
- `);
395
- }
396
- return insertDataStatement;
397
- }
398
- /**
399
- * Aufgrund der Erweiterung rdf:type von cim:EnergyConsumer
400
- * zu westnetzneplan:WNEnergyConsumer wechseln. */
401
- static transformEnergyConsumers(modelContainer) {
402
- const graphURI = modelContainer.getGraphURI();
403
- const deleteRdfTypes = new Array();
404
- const insertRdfType = new Array();
405
- for (const ec of modelContainer.energyConsumers.values()) {
406
- deleteRdfTypes.push(`<${ec.baseIRI}${ec.mrid}> rdf:type cim:EnergyConsumer .`);
407
- insertRdfType.push(`<${ec.baseIRI}${ec.mrid}> rdf:type westnetzneplan:WNEnergyConsumer .`);
408
- }
409
- const length = deleteRdfTypes.length + insertRdfType.length;
410
- const insertDataStatement = [];
411
- if (length) {
412
- insertDataStatement.push(`
413
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
414
- PREFIX cim: <http://iec.ch/TC57/2013/CIM-schema-cim16#>
415
- PREFIX westnetzneplan: <http://westnetzneplan.de/CIM/Extensions#>
416
-
417
- ${(0, sparql_utils_1.getInsertDataPartStatement)(graphURI, insertRdfType)}
418
- ${(0, sparql_utils_1.getDeleteDataPartStatement)(graphURI, deleteRdfTypes)}
419
- `);
420
- }
421
- return insertDataStatement;
422
- }
423
- static unifyEnergyConsumers(modelContainer) {
424
- const graphURI = modelContainer.getGraphURI();
425
- const sparqlUpdates = [];
426
- /** key unifiedName, Value -> EnergySourceArray*/
427
- const tpEnergyConsumerMap = getUnifiedEnergyConsumersNames(modelContainer);
428
- if (tpEnergyConsumerMap.size > 0) {
429
- for (const entry of tpEnergyConsumerMap.entries()) {
430
- const unifiedName = entry[0];
431
- const energyConsumers = entry[1];
432
- const energyConsumerUnified = determineMeasuredContractualPower(unifiedName, energyConsumers);
433
- if (energyConsumerUnified.size > 0) {
434
- const sparqlUpdate = getEnergyConsumerSPARQL(energyConsumerUnified, unifiedName, graphURI, 0);
435
- sparqlUpdates.push(sparqlUpdate);
436
- }
437
- }
438
- }
439
- else {
440
- console.log(`tpEnergyConsumerMap.size ${tpEnergyConsumerMap.size}`);
441
- }
442
- const insertQueries = [];
443
- for (const row of sparqlUpdates) {
444
- insertQueries.push(...row.insert);
445
- }
446
- const deleteWhereQueries = [];
447
- for (const row of sparqlUpdates) {
448
- deleteWhereQueries.push(...row.deleteWhere);
449
- }
450
- const deleteWhereValuesQueries = [];
451
- for (const row of sparqlUpdates) {
452
- deleteWhereValuesQueries.push(...row.deleteWhereValues);
453
- }
454
- const length = insertQueries.length + deleteWhereQueries.length + deleteWhereValuesQueries.length;
455
- const insertDataStatement = [];
456
- if (length) {
457
- insertDataStatement.push(`
458
- PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
459
- PREFIX cim:<http://iec.ch/TC57/2013/CIM-schema-cim16#>
460
- PREFIX entsoe: <http://entsoe.eu/CIM/SchemaExtension/3/1#>
461
- PREFIX enervance: <http://enervance.com/CIM/Extensions#>
462
- PREFIX westnetzneplan: <http://westnetzneplan.de/CIM/Extensions#>
463
-
464
- ${(0, sparql_utils_1.getDeleteWhereValuesPartStatement)(graphURI, deleteWhereValuesQueries)}
465
- ${(0, sparql_utils_1.getDeleteWherePartStatement)(graphURI, deleteWhereQueries)}
466
- ${(0, sparql_utils_1.getInsertDataPartStatement)(graphURI, insertQueries)}
467
- `);
468
- }
469
- return insertDataStatement;
470
- }
471
- /**
472
- * Anreicherungen der Mittelspannungsumspannanlagen um Schaltfeld-Objekte
473
- * */
474
- static createBays(modelContainer) {
475
- const substations = [...modelContainer.substations.values()].filter(it => { var _a; return ((_a = it.getPsrType()) === null || _a === void 0 ? void 0 : _a.getName()) === 'Umspannanlage'; });
476
- const baseURL = modelContainer.getBaseURL();
477
- const deleteSparql = new Array();
478
- const insertSparql = new Array();
479
- const report = new Array();
480
- report.push(`CreateBays: Netz ${modelContainer.graphUri}`);
481
- for (const substation of substations) {
482
- for (const feeder of substation.normalEnergizingFeeder.values()) {
483
- report.push(`\tAbgang ${feeder.name}`);
484
- /** Anfangsknoten */
485
- const headConnectivityNodes = Array.from(new Set([...feeder.normalHeadTerminal.values()].map(it => it.getConnectivityNode())));
486
- for (const headConnectivityNode of headConnectivityNodes) {
487
- const bayEquipments = NeplanModelEnrichment.getBusbarSectionConnectivityNode(headConnectivityNode);
488
- const bayVoltageLevel = headConnectivityNode.connectivityNodeContainer;
489
- const distinctConnectivityNode = Array.from(new Set([...bayEquipments.filter(it => it instanceof ConnectivityNode_1.ConnectivityNode)]));
490
- const distinctSwitches = Array.from(new Set([...bayEquipments.filter(it => it instanceof Switch_1.Switch)]));
491
- const distinctAcLines = Array.from(new Set([...bayEquipments.filter(it => it instanceof ACLineSegment_1.ACLineSegment)]));
492
- report.push(`\t\tConnectivityNode Anzahl ${distinctConnectivityNode === null || distinctConnectivityNode === void 0 ? void 0 : distinctConnectivityNode.length} | Switch Anzahl ${distinctSwitches === null || distinctSwitches === void 0 ? void 0 : distinctSwitches.length} | ACLineSegment Anzahl ${distinctAcLines === null || distinctAcLines === void 0 ? void 0 : distinctAcLines.length}`);
493
- if (!distinctSwitches.length) {
494
- console.log(`\t\tEs wird kein Schaltfeld angelegt`);
495
- continue;
496
- }
497
- const bayUuid = common_utils_1.CommonUtils.generateUUID();
498
- const bay = new Bay_1.Bay(bayUuid, feeder.name, feeder.number);
499
- bay.voltageLevel = bayVoltageLevel;
500
- insertSparql.push(`<${baseURL}${bayUuid}> rdf:type cim:Bay .`);
501
- insertSparql.push(`<${baseURL}${bayUuid}> cim:IdentifiedObject.name '${bay.name}' .`);
502
- insertSparql.push(`<${baseURL}${bayUuid}> entsoe:IdentifiedObject.shortName '${bay.shortName}' .`);
503
- insertSparql.push(`<${baseURL}${bayUuid}> cim:Bay.VoltageLevel <${bayVoltageLevel.baseIRI}${bayVoltageLevel.getUUID()}> .`);
504
- /** Switches vom VoltageLevel zu Schaltfeld umhängen */
505
- for (const swtch of distinctSwitches) {
506
- const equipmentContainer = swtch.equipmentContainer;
507
- insertSparql.push(`<${swtch.baseIRI}${swtch.getUUID()}> cim:Equipment.EquipmentContainer <${baseURL}${bayUuid}> .`);
508
- deleteSparql.push(`<${swtch.baseIRI}${swtch.getUUID()}> cim:Equipment.EquipmentContainer <${equipmentContainer.baseIRI}${equipmentContainer.getUUID()}> .`);
509
- }
510
- /** Connectivity vom VoltageLevel zu Schaltfeld umhängen */
511
- for (const cn of distinctConnectivityNode) {
512
- const connectivityNodeContainer = cn.connectivityNodeContainer;
513
- insertSparql.push(`<${cn.baseIRI}${cn.getUUID()}> cim:ConnectivityNode.ConnectivityNodeContainer <${baseURL}${bayUuid}> .`);
514
- deleteSparql.push(`<${cn.baseIRI}${cn.getUUID()}> cim:ConnectivityNode.ConnectivityNodeContainer <${connectivityNodeContainer.baseIRI}${connectivityNodeContainer.getUUID()}> .`);
515
- }
516
- report.push(`\t\tBay für Feeder ${feeder.name} hinzugefügt`);
517
- }
518
- }
519
- }
520
- const graphURI = modelContainer.getGraphURI();
521
- const length = insertSparql.length + deleteSparql.length;
522
- const insertDataStatement = [];
523
- if (length) {
524
- insertDataStatement.push(`
525
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
526
- PREFIX entsoe: <http://entsoe.eu/CIM/SchemaExtension/3/1#>
527
- PREFIX enervance: <http://enervance.com/CIM/Extensions#>
528
- PREFIX cim: <http://iec.ch/TC57/2013/CIM-schema-cim16#>
529
- PREFIX westnetzneplan: <http://westnetzneplan.de/CIM/Extensions#>
530
-
531
- ${(0, sparql_utils_1.getInsertDataPartStatement)(graphURI, insertSparql)}
532
- ${(0, sparql_utils_1.getDeleteDataPartStatement)(graphURI, deleteSparql)}
533
- `);
534
- }
535
- return { sparql: insertDataStatement, report: report };
536
- }
537
- /**
538
- * Sucht vom Anfang des Abgangs aus das ConnectivityNode mit assozierten Sammelschiene.
539
- * @param startCN Startknoten
540
- * @return Ein Array mit zu einem Bay gehörigen Objekte
541
- * */
542
- static getBusbarSectionConnectivityNode(startCN) {
543
- const objectsFound = new Array();
544
- let nodesOnCurrentLevel = new Array();
545
- let nodesOnNextLevel = new Array(startCN);
546
- let nodesVisited = [];
547
- while (nodesOnNextLevel.length) {
548
- nodesOnCurrentLevel.length = 0;
549
- nodesOnCurrentLevel = [...nodesOnNextLevel];
550
- /** next level nodes leeren */
551
- nodesOnNextLevel.length = 0;
552
- for (const currentNode of nodesOnCurrentLevel) {
553
- if (currentNode.getUUID() !== startCN.getUUID()) {
554
- objectsFound.push(currentNode);
555
- }
556
- nodesVisited.push(currentNode.getUUID());
557
- for (const terminal of currentNode.terminals.values()) {
558
- /** Terminal traversierbar und nicht besucht */
559
- if (nodesVisited.indexOf(terminal.getUUID()) > -1)
560
- continue;
561
- const terminalConductingEquipment = terminal.conductingEquipment;
562
- if (nodesVisited.indexOf(terminalConductingEquipment === null || terminalConductingEquipment === void 0 ? void 0 : terminalConductingEquipment.getUUID()) === -1) {
563
- let toAdd = true;
564
- /** Stromkreisabschnitte mit einer Länge von 0.001 oder 0 werden häufig als Hilfselemente verwendet innerhalb von Stationen verwendet.
565
- * Daher werden derartige Stromkreisabschnitte als Bestandteil von Station berücksichtigt.
566
- * Es gibt Stromkreisabschnitte mit einer kürzeren Länge. Die Letzteren sind 'korrekte' Abschnitte.
567
- * */
568
- if (terminalConductingEquipment instanceof ACLineSegment_1.ACLineSegment) {
569
- if (terminalConductingEquipment.length !== 0.001) {
570
- toAdd = false;
571
- }
572
- }
573
- else if (terminalConductingEquipment instanceof BusbarSection_1.BusbarSection) {
574
- toAdd = false;
575
- }
576
- if (toAdd) {
577
- nodesOnNextLevel.push(terminalConductingEquipment);
578
- }
579
- }
580
- const terminalConnectivityNode = terminal.connectivityNode;
581
- if (nodesVisited.indexOf(terminalConnectivityNode === null || terminalConnectivityNode === void 0 ? void 0 : terminalConnectivityNode.getUUID()) === -1) {
582
- const busbarSection = [...terminalConnectivityNode.terminals.values()].find(it => it.conductingEquipment instanceof BusbarSection_1.BusbarSection);
583
- if (!busbarSection)
584
- nodesOnNextLevel.push(terminalConnectivityNode);
585
- }
586
- }
587
- }
588
- }
589
- return objectsFound;
590
- }
591
- static getConnectedSwitches(terminals) {
592
- return [...terminals.values()].map(it => it.conductingEquipment).filter(it => it instanceof Switch_1.Switch);
593
- }
594
- static getConnectedProvisionalLineSegments(terminals) {
595
- return [...terminals.values()].map(it => {
596
- if (it.conductingEquipment instanceof ACLineSegment_1.ACLineSegment) {
597
- if (it.conductingEquipment.length === 0.001) {
598
- return it.conductingEquipment;
599
- }
600
- }
601
- }).filter(it => it instanceof ACLineSegment_1.ACLineSegment);
602
- }
603
- /**
604
- * Anreicherung der Mittelspannungsumspannanlagen um Sammelschienen-Objekte, wenn keine vorhanden sind.
605
- * */
606
- static createBusbarSections(modelContainer) {
607
- var _a;
608
- const substations = [...modelContainer.substations.values()].filter(it => { var _a; return ((_a = it.getPsrType()) === null || _a === void 0 ? void 0 : _a.getName()) === 'Umspannanlage'; });
609
- const insertSparql = new Array();
610
- const report = new Array();
611
- report.push(`Create createBusbarSections: Netz ${modelContainer.modelsContainer.graphUri}`);
612
- const baseURL = modelContainer.getBaseURL();
613
- for (const substation of substations) {
614
- for (const voltageLevel of substation.getVoltageLevels()) {
615
- /** Fahre fort, wenn keine Spannungsquelle vorhanden ist */
616
- // if (!slacks.length) continue;
617
- /** bestimme Anzahl der angeschlossenen Schaltelemente je Konten*/
618
- for (const cn of voltageLevel.connectivityNodes) {
619
- const busbarSectionCount = [...cn.terminals.values()].filter(it => it.conductingEquipment instanceof BusbarSection_1.BusbarSection).length;
620
- /** Wenn eine Sammelschiene bereits vorhanden ist, dann überspringe */
621
- if (busbarSectionCount > 0)
622
- continue;
623
- const switchCount = [...cn.terminals.values()].filter(it => it.conductingEquipment instanceof Switch_1.Switch).length;
624
- /** Für Knoten mit mehr als drei Switches wird eine Sammelschiene angelegt
625
- * 4-Fach kommen in MS-Netzen nicht vor */
626
- if (switchCount < 4)
627
- continue;
628
- const busbarSecUuid = common_utils_1.CommonUtils.generateUUID();
629
- const busbarSection = new BusbarSection_1.BusbarSection(busbarSecUuid, cn.name, 'SS', 'Eine automatisch generierte Sammelschiene');
630
- busbarSection.equipmentContainer = cn.connectivityNodeContainer;
631
- insertSparql.push(`<${baseURL}${busbarSecUuid}> rdf:type cim:BusbarSection .`);
632
- insertSparql.push(`<${baseURL}${busbarSecUuid}> cim:IdentifiedObject.name '${busbarSection.name}' .`);
633
- insertSparql.push(`<${baseURL}${busbarSecUuid}> entsoe:IdentifiedObject.shortName '${busbarSection.shortName}' .`);
634
- insertSparql.push(`<${baseURL}${busbarSecUuid}> cim:IdentifiedObject.description '${busbarSection.description}' .`);
635
- insertSparql.push(`<${baseURL}${busbarSecUuid}> cim:Equipment.EquipmentContainer <${cn.connectivityNodeContainer.baseIRI}${(_a = cn.connectivityNodeContainer) === null || _a === void 0 ? void 0 : _a.getUUID()}> .`);
636
- const terminalUuid = common_utils_1.CommonUtils.generateUUID();
637
- const terminal = new Terminal_1.Terminal(terminalUuid, 'SS Terminal');
638
- insertSparql.push(`<${baseURL}${terminalUuid}> rdf:type cim:Terminal .`);
639
- insertSparql.push(`<${baseURL}${terminalUuid}> cim:IdentifiedObject.name '${terminal.name}' .`);
640
- insertSparql.push(`<${baseURL}${terminalUuid}> cim:Terminal.ConductingEquipment <${baseURL}${busbarSecUuid}> .`);
641
- insertSparql.push(`<${baseURL}${terminalUuid}> cim:Terminal.ConnectivityNode <${cn.baseIRI}${cn.getUUID()}> .`);
642
- report.push(`\tSammelschiene für Knoten ${cn.name} hinzugefügt`);
643
- }
644
- }
645
- }
646
- const graphURI = modelContainer.getGraphURI();
647
- const length = insertSparql.length;
648
- const insertDataStatement = [];
649
- if (length) {
650
- insertDataStatement.push(`
651
- PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
652
- PREFIX entsoe: <http://entsoe.eu/CIM/SchemaExtension/3/1#>
653
- PREFIX enervance: <http://enervance.com/CIM/Extensions#>
654
- PREFIX cim: <http://iec.ch/TC57/2013/CIM-schema-cim16#>
655
- PREFIX westnetzneplan: <http://westnetzneplan.de/CIM/Extensions#>
656
-
657
- ${(0, sparql_utils_1.getInsertDataPartStatement)(graphURI, insertSparql)}
658
- `);
659
- }
660
- return { sparql: insertDataStatement, report: report };
661
- }
662
- }
663
- exports.NeplanModelEnrichment = NeplanModelEnrichment;
664
9
  function getUnifiedEnergyConsumersNames(cimModelXML) {
665
10
  const tpEnergyConsumerMap = new Map();
666
11
  for (const ec of cimModelXML.energyConsumers.values()) {