@powercalc/power-router 1.2.1 → 1.2.3
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.
- package/dist/interfaces/entsoe.d.ts +1 -0
- package/dist/services/ParseEdifact.d.ts +2 -1
- package/dist/services/ParseEdifact.js +47 -13
- package/dist/services/ParseEdifact.js.map +1 -1
- package/package.json +1 -1
- package/src/router/interfaces/entsoe.ts +1 -0
- package/src/router/services/ParseEdifact.ts +59 -17
|
@@ -13,6 +13,7 @@ export interface TimeSeries {
|
|
|
13
13
|
Period: EntsoePeriod[];
|
|
14
14
|
MktPSRType?: MktPSRType[];
|
|
15
15
|
'outBiddingZone_Domain.mRID': string;
|
|
16
|
+
'classificationSequence_AttributeInstanceComponent.position': string[];
|
|
16
17
|
}
|
|
17
18
|
export interface EntsoePeriod {
|
|
18
19
|
Point: EntsoePoint[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Entsoe, TimeSeries } from '../interfaces/entsoe';
|
|
1
|
+
import { Entsoe, EntsoePeriod, TimeSeries } from '../interfaces/entsoe';
|
|
2
2
|
import { Types } from '../interfaces/types';
|
|
3
3
|
import { AllEntsoe } from './Loader';
|
|
4
4
|
export interface DataPoint {
|
|
@@ -18,6 +18,7 @@ export declare class EdifactParser {
|
|
|
18
18
|
parseAll(all: AllEntsoe): AllInResulotions;
|
|
19
19
|
parse(json: Entsoe, key: string): AllInResulotions | undefined;
|
|
20
20
|
parseTimeSeries(timeSerie: TimeSeries, name: string): [string, DataPoint[]];
|
|
21
|
+
transformData(data: EntsoePeriod[]): DataPoint[];
|
|
21
22
|
makeTimeArray(startIsoString: string, endIsoString: string, resolution: string, timeSerie: TimeSeries): number[];
|
|
22
23
|
getStartEndResolution(timeSeries: TimeSeries[] | TimeSeries): {
|
|
23
24
|
startIsoString: any;
|
|
@@ -11,6 +11,7 @@ class EdifactParser {
|
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
parseAll(all) {
|
|
14
|
+
// console.log('all', all)
|
|
14
15
|
const flat = {};
|
|
15
16
|
Object.keys(all).forEach((key) => {
|
|
16
17
|
const parsed = this.parse(all[key], key);
|
|
@@ -42,7 +43,12 @@ class EdifactParser {
|
|
|
42
43
|
return 0
|
|
43
44
|
})
|
|
44
45
|
*/
|
|
45
|
-
timeSeries
|
|
46
|
+
timeSeries
|
|
47
|
+
.filter((item) => {
|
|
48
|
+
var _a;
|
|
49
|
+
return ((_a = item['classificationSequence_AttributeInstanceComponent.position']) === null || _a === void 0 ? void 0 : _a[0]) !== '2';
|
|
50
|
+
})
|
|
51
|
+
.forEach((timeSerie, i) => {
|
|
46
52
|
var _a, _b;
|
|
47
53
|
const psrType = ((_b = (_a = timeSerie === null || timeSerie === void 0 ? void 0 : timeSerie.MktPSRType) === null || _a === void 0 ? void 0 : _a[0].psrType) === null || _b === void 0 ? void 0 : _b[0]) || 'unknow';
|
|
48
54
|
name = this.psrName[psrType] || key;
|
|
@@ -80,14 +86,19 @@ class EdifactParser {
|
|
|
80
86
|
}
|
|
81
87
|
const startEndResolution = this.getStartEndResolution(timeSerie);
|
|
82
88
|
const timeArray = this.makeTimeArray(startEndResolution.startIsoString, startEndResolution.endIsoString, startEndResolution.resolution, timeSerie);
|
|
89
|
+
/*
|
|
83
90
|
const points = timeSerie.Period[0].Point;
|
|
84
|
-
const l
|
|
91
|
+
const l= parseInt(points[points.length -1].position[0]);
|
|
92
|
+
console.log ('tt', name,timeArray.length , l, startEndResolution) ;
|
|
85
93
|
if (timeArray.length > l) {
|
|
86
|
-
|
|
94
|
+
timeArray.length = l; //winter, summer time workaround
|
|
87
95
|
}
|
|
88
96
|
if (timeArray.length !== l) {
|
|
89
|
-
|
|
97
|
+
throw new Error(
|
|
98
|
+
`${name}: time array length: ${timeArray.length}, points length: ${points.length}`
|
|
99
|
+
);
|
|
90
100
|
}
|
|
101
|
+
*/
|
|
91
102
|
let sign = 1;
|
|
92
103
|
if (timeSerie['outBiddingZone_Domain.mRID']) {
|
|
93
104
|
sign = -1;
|
|
@@ -98,19 +109,42 @@ class EdifactParser {
|
|
|
98
109
|
if (name === 'other' && sign < 0) {
|
|
99
110
|
sign = 0; //workaround Austria Nov 2015
|
|
100
111
|
}
|
|
101
|
-
|
|
112
|
+
/*
|
|
113
|
+
const result: DataPoint[] = [];
|
|
102
114
|
points.forEach((point, i) => {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
115
|
+
const pos = parseInt(point.position[0]) - 1;
|
|
116
|
+
const val =
|
|
117
|
+
parseFloat(point.quantity?.[0] || point['price.amount']?.[0] || '0') ||
|
|
118
|
+
0;
|
|
119
|
+
result.push({
|
|
120
|
+
time: timeArray[pos],
|
|
121
|
+
value: val * sign,
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
*/
|
|
125
|
+
const result = this.transformData(timeSerie.Period).map((item) => {
|
|
126
|
+
return {
|
|
127
|
+
time: item.time,
|
|
128
|
+
value: item.value * sign,
|
|
129
|
+
};
|
|
111
130
|
});
|
|
112
131
|
return [startEndResolution.resolution, result];
|
|
113
132
|
}
|
|
133
|
+
transformData(data) {
|
|
134
|
+
const result = [];
|
|
135
|
+
data.forEach((segment) => {
|
|
136
|
+
const startTime = luxon_1.DateTime.fromISO(segment.timeInterval[0].start[0]);
|
|
137
|
+
const resolution = luxon_1.Duration.fromISO(segment.resolution[0]).toMillis();
|
|
138
|
+
segment.Point.forEach((point) => {
|
|
139
|
+
var _a, _b;
|
|
140
|
+
const position = parseInt(point.position[0], 10);
|
|
141
|
+
const quantity = parseFloat(((_a = point.quantity) === null || _a === void 0 ? void 0 : _a[0]) || ((_b = point === null || point === void 0 ? void 0 : point['price.amount']) === null || _b === void 0 ? void 0 : _b[0]) || '0');
|
|
142
|
+
const time = startTime.plus(resolution * position).toMillis();
|
|
143
|
+
result.push({ time, value: quantity });
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
114
148
|
makeTimeArray(startIsoString, endIsoString, resolution, timeSerie) {
|
|
115
149
|
const duration = luxon_1.Duration.fromISO(resolution).toMillis();
|
|
116
150
|
const localStartTime = luxon_1.DateTime.fromISO(startIsoString);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParseEdifact.js","sourceRoot":"","sources":["../../src/router/services/ParseEdifact.ts"],"names":[],"mappings":";;;AAEA,iCAA2C;AAc3C,MAAa,aAAa;IAIxB,YAAoB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;QAHxB,YAAO,GAEX,EAAE,CAAC;QAEL,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAChD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC;SACnC;IACH,CAAC;IACD,QAAQ,CAAC,GAAc;QACrB,MAAM,IAAI,GAAqB,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YACzC,IAAI,MAAM,EAAE;gBACV,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBACnC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,CAAC,IAAY,EAAE,GAAW;;QAC7B,MAAM,UAAU,GACd,CAAA,MAAA,IAAI,CAAC,iBAAiB,0CAAE,UAAU;aAClC,MAAA,IAAI,CAAC,0BAA0B,0CAAE,UAAU,CAAA,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"ParseEdifact.js","sourceRoot":"","sources":["../../src/router/services/ParseEdifact.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Entsoe, TimeSeries } from '../interfaces/entsoe';
|
|
1
|
+
import { Entsoe, EntsoePeriod, TimeSeries } from '../interfaces/entsoe';
|
|
2
2
|
import { Types } from '../interfaces/types';
|
|
3
3
|
import { DateTime, Duration } from 'luxon';
|
|
4
4
|
import { AllEntsoe } from './Loader';
|
|
@@ -24,6 +24,7 @@ export class EdifactParser {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
parseAll(all: AllEntsoe): AllInResulotions {
|
|
27
|
+
// console.log('all', all)
|
|
27
28
|
const flat: AllInResulotions = {};
|
|
28
29
|
Object.keys(all).forEach((key) => {
|
|
29
30
|
const parsed = this.parse(all[key], key);
|
|
@@ -41,8 +42,8 @@ export class EdifactParser {
|
|
|
41
42
|
json.GL_MarketDocument?.TimeSeries ||
|
|
42
43
|
json.Publication_MarketDocument?.TimeSeries;
|
|
43
44
|
if (!timeSeries) {
|
|
44
|
-
const reason =json.Acknowledgement_MarketDocument?.Reason[0]
|
|
45
|
-
console.debug(reason?.text[0])
|
|
45
|
+
const reason = json.Acknowledgement_MarketDocument?.Reason[0];
|
|
46
|
+
console.debug(reason?.text[0]);
|
|
46
47
|
return;
|
|
47
48
|
}
|
|
48
49
|
let name = 'what';
|
|
@@ -56,19 +57,26 @@ export class EdifactParser {
|
|
|
56
57
|
return 0
|
|
57
58
|
})
|
|
58
59
|
*/
|
|
59
|
-
timeSeries
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
60
|
+
timeSeries
|
|
61
|
+
.filter(
|
|
62
|
+
(item) =>
|
|
63
|
+
item[
|
|
64
|
+
'classificationSequence_AttributeInstanceComponent.position'
|
|
65
|
+
]?.[0] !== '2'
|
|
66
|
+
)
|
|
67
|
+
.forEach((timeSerie, i) => {
|
|
68
|
+
const psrType = timeSerie?.MktPSRType?.[0].psrType?.[0] || 'unknow';
|
|
69
|
+
name = this.psrName[psrType] || key;
|
|
70
|
+
const parsed = this.parseTimeSeries(timeSerie, name);
|
|
71
|
+
const resolution = parsed[0];
|
|
72
|
+
if (!all[name]) {
|
|
73
|
+
all[name] = {};
|
|
74
|
+
}
|
|
75
|
+
if (!all[name][resolution]) {
|
|
76
|
+
all[name][resolution] = [];
|
|
77
|
+
}
|
|
78
|
+
all[name][resolution] = all[name][resolution].concat(parsed[1]);
|
|
79
|
+
});
|
|
72
80
|
const result: AllInResulotions = {};
|
|
73
81
|
Object.keys(all).forEach((type) => {
|
|
74
82
|
Object.keys(all[type]).forEach((res) => {
|
|
@@ -98,8 +106,10 @@ export class EdifactParser {
|
|
|
98
106
|
startEndResolution.resolution,
|
|
99
107
|
timeSerie
|
|
100
108
|
);
|
|
109
|
+
/*
|
|
101
110
|
const points = timeSerie.Period[0].Point;
|
|
102
111
|
const l= parseInt(points[points.length -1].position[0]);
|
|
112
|
+
console.log ('tt', name,timeArray.length , l, startEndResolution) ;
|
|
103
113
|
if (timeArray.length > l) {
|
|
104
114
|
timeArray.length = l; //winter, summer time workaround
|
|
105
115
|
}
|
|
@@ -108,6 +118,7 @@ export class EdifactParser {
|
|
|
108
118
|
`${name}: time array length: ${timeArray.length}, points length: ${points.length}`
|
|
109
119
|
);
|
|
110
120
|
}
|
|
121
|
+
*/
|
|
111
122
|
let sign = 1;
|
|
112
123
|
if (timeSerie['outBiddingZone_Domain.mRID']) {
|
|
113
124
|
sign = -1;
|
|
@@ -115,9 +126,10 @@ export class EdifactParser {
|
|
|
115
126
|
if (name === 'consumption') {
|
|
116
127
|
sign = 1;
|
|
117
128
|
}
|
|
118
|
-
if(name === 'other' && sign < 0){
|
|
129
|
+
if (name === 'other' && sign < 0) {
|
|
119
130
|
sign = 0; //workaround Austria Nov 2015
|
|
120
131
|
}
|
|
132
|
+
/*
|
|
121
133
|
const result: DataPoint[] = [];
|
|
122
134
|
points.forEach((point, i) => {
|
|
123
135
|
const pos = parseInt(point.position[0]) - 1;
|
|
@@ -129,8 +141,38 @@ export class EdifactParser {
|
|
|
129
141
|
value: val * sign,
|
|
130
142
|
});
|
|
131
143
|
});
|
|
144
|
+
*/
|
|
145
|
+
const result = this.transformData(timeSerie.Period).map((item) => {
|
|
146
|
+
return {
|
|
147
|
+
time: item.time,
|
|
148
|
+
value: item.value * sign,
|
|
149
|
+
};
|
|
150
|
+
});
|
|
132
151
|
return [startEndResolution.resolution, result];
|
|
133
152
|
}
|
|
153
|
+
|
|
154
|
+
transformData(data: EntsoePeriod[]): DataPoint[] {
|
|
155
|
+
const result: DataPoint[] = [];
|
|
156
|
+
|
|
157
|
+
data.forEach((segment) => {
|
|
158
|
+
const startTime = DateTime.fromISO(segment.timeInterval[0].start[0]);
|
|
159
|
+
const resolution = Duration.fromISO(segment.resolution[0]).toMillis();
|
|
160
|
+
|
|
161
|
+
segment.Point.forEach((point) => {
|
|
162
|
+
const position = parseInt(point.position[0], 10);
|
|
163
|
+
const quantity = parseFloat(
|
|
164
|
+
point.quantity?.[0] || point?.['price.amount']?.[0] || '0'
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
const time = startTime.plus(resolution * position).toMillis();
|
|
168
|
+
|
|
169
|
+
result.push({ time, value: quantity });
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
return result;
|
|
174
|
+
}
|
|
175
|
+
|
|
134
176
|
makeTimeArray(
|
|
135
177
|
startIsoString: string,
|
|
136
178
|
endIsoString: string,
|