@golemio/energetics 1.10.1-dev.2609634792 → 1.10.1-dev.2634930492
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/db/migrations/postgresql/20260619000001-ppas-commercial-invoice.js +47 -0
- package/db/migrations/postgresql/sqls/20260619000001-ppas-commercial-invoice-down.sql +4 -0
- package/db/migrations/postgresql/sqls/20260619000001-ppas-commercial-invoice-up.sql +99 -0
- package/dist/integration-engine/enapo/datasources/ppas/AbstractPpasDatasource.d.ts +16 -0
- package/dist/integration-engine/enapo/datasources/ppas/AbstractPpasDatasource.js +88 -0
- package/dist/integration-engine/enapo/datasources/ppas/AbstractPpasDatasource.js.map +1 -0
- package/dist/integration-engine/enapo/datasources/ppas/commercial/PpasCommercialDatasource.d.ts +13 -0
- package/dist/integration-engine/enapo/datasources/ppas/commercial/PpasCommercialDatasource.js +66 -0
- package/dist/integration-engine/enapo/datasources/ppas/commercial/PpasCommercialDatasource.js.map +1 -0
- package/dist/integration-engine/enapo/datasources/ppas/distribution/PpasDistributionDatasource.d.ts +3 -14
- package/dist/integration-engine/enapo/datasources/ppas/distribution/PpasDistributionDatasource.js +6 -86
- package/dist/integration-engine/enapo/datasources/ppas/distribution/PpasDistributionDatasource.js.map +1 -1
- package/dist/integration-engine/enapo/ioc/Di.js +14 -0
- package/dist/integration-engine/enapo/ioc/Di.js.map +1 -1
- package/dist/integration-engine/enapo/ioc/EnapoWorkerContainerToken.d.ts +7 -0
- package/dist/integration-engine/enapo/ioc/EnapoWorkerContainerToken.js +7 -0
- package/dist/integration-engine/enapo/ioc/EnapoWorkerContainerToken.js.map +1 -1
- package/dist/integration-engine/enapo/repositories/ppas/PpasCommercialInvoiceDeviceRepository.d.ts +7 -0
- package/dist/integration-engine/enapo/repositories/ppas/PpasCommercialInvoiceDeviceRepository.js +35 -0
- package/dist/integration-engine/enapo/repositories/ppas/PpasCommercialInvoiceDeviceRepository.js.map +1 -0
- package/dist/integration-engine/enapo/repositories/ppas/PpasCommercialInvoiceInstallationRepository.d.ts +7 -0
- package/dist/integration-engine/enapo/repositories/ppas/PpasCommercialInvoiceInstallationRepository.js +35 -0
- package/dist/integration-engine/enapo/repositories/ppas/PpasCommercialInvoiceInstallationRepository.js.map +1 -0
- package/dist/integration-engine/enapo/repositories/ppas/PpasCommercialInvoicePriceRepository.d.ts +7 -0
- package/dist/integration-engine/enapo/repositories/ppas/PpasCommercialInvoicePriceRepository.js +35 -0
- package/dist/integration-engine/enapo/repositories/ppas/PpasCommercialInvoicePriceRepository.js.map +1 -0
- package/dist/integration-engine/enapo/repositories/ppas/PpasCommercialInvoiceRepository.d.ts +7 -0
- package/dist/integration-engine/enapo/repositories/ppas/PpasCommercialInvoiceRepository.js +35 -0
- package/dist/integration-engine/enapo/repositories/ppas/PpasCommercialInvoiceRepository.js.map +1 -0
- package/dist/integration-engine/enapo/transformations/ppas/PpasCommercialTransformation.d.ts +28 -0
- package/dist/integration-engine/enapo/transformations/ppas/PpasCommercialTransformation.js +184 -0
- package/dist/integration-engine/enapo/transformations/ppas/PpasCommercialTransformation.js.map +1 -0
- package/dist/integration-engine/enapo/transformations/ppas/PpasDistributionTransformation.d.ts +0 -18
- package/dist/integration-engine/enapo/transformations/ppas/PpasDistributionTransformation.js +14 -82
- package/dist/integration-engine/enapo/transformations/ppas/PpasDistributionTransformation.js.map +1 -1
- package/dist/integration-engine/enapo/transformations/ppas/PpasInvoicePriceTypeHelper.d.ts +33 -0
- package/dist/integration-engine/enapo/transformations/ppas/PpasInvoicePriceTypeHelper.js +87 -0
- package/dist/integration-engine/enapo/transformations/ppas/PpasInvoicePriceTypeHelper.js.map +1 -0
- package/dist/integration-engine/enapo/workers/EnapoWorker.js +1 -0
- package/dist/integration-engine/enapo/workers/EnapoWorker.js.map +1 -1
- package/dist/integration-engine/enapo/workers/interfaces/IEnapoPpasCommercialParams.d.ts +4 -0
- package/dist/integration-engine/enapo/workers/interfaces/IEnapoPpasCommercialParams.js +3 -0
- package/dist/integration-engine/enapo/workers/interfaces/IEnapoPpasCommercialParams.js.map +1 -0
- package/dist/integration-engine/enapo/workers/schema/EnapoPpasCommercialParamsSchema.d.ts +5 -0
- package/dist/integration-engine/enapo/workers/schema/EnapoPpasCommercialParamsSchema.js +29 -0
- package/dist/integration-engine/enapo/workers/schema/EnapoPpasCommercialParamsSchema.js.map +1 -0
- package/dist/integration-engine/enapo/workers/task/EnapoPpasCommercialTask.d.ts +34 -0
- package/dist/integration-engine/enapo/workers/task/EnapoPpasCommercialTask.js +181 -0
- package/dist/integration-engine/enapo/workers/task/EnapoPpasCommercialTask.js.map +1 -0
- package/dist/integration-engine/enapo/workers/task/EnapoPpasDistributionTask.js.map +1 -1
- package/dist/schema-definitions/datasources/enapo/ppas/IPpasInvoiceCommon.d.ts +23 -0
- package/dist/schema-definitions/datasources/enapo/ppas/IPpasInvoiceCommon.js +3 -0
- package/dist/schema-definitions/datasources/enapo/ppas/IPpasInvoiceCommon.js.map +1 -0
- package/dist/schema-definitions/datasources/enapo/ppas/commercial/IPpasCommercialInvoiceDetailInput.d.ts +62 -0
- package/dist/schema-definitions/datasources/enapo/ppas/commercial/IPpasCommercialInvoiceDetailInput.js +3 -0
- package/dist/schema-definitions/datasources/enapo/ppas/commercial/IPpasCommercialInvoiceDetailInput.js.map +1 -0
- package/dist/schema-definitions/datasources/enapo/ppas/commercial/IPpasCommercialInvoiceListInput.d.ts +26 -0
- package/dist/schema-definitions/datasources/enapo/ppas/commercial/IPpasCommercialInvoiceListInput.js +3 -0
- package/dist/schema-definitions/datasources/enapo/ppas/commercial/IPpasCommercialInvoiceListInput.js.map +1 -0
- package/dist/schema-definitions/datasources/enapo/ppas/commercial/PpasCommercialSchema.d.ts +5 -0
- package/dist/schema-definitions/datasources/enapo/ppas/commercial/PpasCommercialSchema.js +185 -0
- package/dist/schema-definitions/datasources/enapo/ppas/commercial/PpasCommercialSchema.js.map +1 -0
- package/dist/schema-definitions/datasources/enapo/ppas/distribution/IPpasDistributionInvoiceDetailInput.d.ts +7 -6
- package/dist/schema-definitions/datasources/enapo/ppas/distribution/IPpasDistributionInvoiceListInput.d.ts +5 -27
- package/dist/schema-definitions/datasources/enapo/ppas/distribution/PpasDistributionSchema.js.map +1 -1
- package/dist/schema-definitions/models/enapo/ppas/PpasCommercialInvoiceDeviceModel.d.ts +24 -0
- package/dist/schema-definitions/models/enapo/ppas/PpasCommercialInvoiceDeviceModel.js +54 -0
- package/dist/schema-definitions/models/enapo/ppas/PpasCommercialInvoiceDeviceModel.js.map +1 -0
- package/dist/schema-definitions/models/enapo/ppas/PpasCommercialInvoiceInstallationModel.d.ts +26 -0
- package/dist/schema-definitions/models/enapo/ppas/PpasCommercialInvoiceInstallationModel.js +56 -0
- package/dist/schema-definitions/models/enapo/ppas/PpasCommercialInvoiceInstallationModel.js.map +1 -0
- package/dist/schema-definitions/models/enapo/ppas/PpasCommercialInvoiceModel.d.ts +30 -0
- package/dist/schema-definitions/models/enapo/ppas/PpasCommercialInvoiceModel.js +64 -0
- package/dist/schema-definitions/models/enapo/ppas/PpasCommercialInvoiceModel.js.map +1 -0
- package/dist/schema-definitions/models/enapo/ppas/PpasCommercialInvoicePriceModel.d.ts +23 -0
- package/dist/schema-definitions/models/enapo/ppas/PpasCommercialInvoicePriceModel.js +52 -0
- package/dist/schema-definitions/models/enapo/ppas/PpasCommercialInvoicePriceModel.js.map +1 -0
- package/dist/schema-definitions/models/enapo/ppas/interfaces/IPpasCommercialInvoice.d.ts +24 -0
- package/dist/schema-definitions/models/enapo/ppas/interfaces/IPpasCommercialInvoice.js +3 -0
- package/dist/schema-definitions/models/enapo/ppas/interfaces/IPpasCommercialInvoice.js.map +1 -0
- package/dist/schema-definitions/models/enapo/ppas/interfaces/IPpasCommercialInvoiceDevice.d.ts +19 -0
- package/dist/schema-definitions/models/enapo/ppas/interfaces/IPpasCommercialInvoiceDevice.js +3 -0
- package/dist/schema-definitions/models/enapo/ppas/interfaces/IPpasCommercialInvoiceDevice.js.map +1 -0
- package/dist/schema-definitions/models/enapo/ppas/interfaces/IPpasCommercialInvoiceInstallation.d.ts +20 -0
- package/dist/schema-definitions/models/enapo/ppas/interfaces/IPpasCommercialInvoiceInstallation.js +3 -0
- package/dist/schema-definitions/models/enapo/ppas/interfaces/IPpasCommercialInvoiceInstallation.js.map +1 -0
- package/dist/schema-definitions/models/enapo/ppas/interfaces/IPpasCommercialInvoicePrice.d.ts +18 -0
- package/dist/schema-definitions/models/enapo/ppas/interfaces/IPpasCommercialInvoicePrice.js +3 -0
- package/dist/schema-definitions/models/enapo/ppas/interfaces/IPpasCommercialInvoicePrice.js.map +1 -0
- package/docs/implementation_documentation.md +60 -1
- package/package.json +1 -1
package/dist/integration-engine/enapo/transformations/ppas/PpasDistributionTransformation.js
CHANGED
|
@@ -16,10 +16,7 @@ exports.PpasDistributionTransformation = void 0;
|
|
|
16
16
|
const CoreToken_1 = require("@golemio/core/dist/helpers/ioc/CoreToken");
|
|
17
17
|
const AbstractTransformation_1 = require("@golemio/core/dist/helpers/transformation/AbstractTransformation");
|
|
18
18
|
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
19
|
-
const
|
|
20
|
-
STANDARD: "STANDARD",
|
|
21
|
-
CORRECTION: "CORRECTION",
|
|
22
|
-
};
|
|
19
|
+
const PpasInvoicePriceTypeHelper_1 = require("./PpasInvoicePriceTypeHelper");
|
|
23
20
|
let PpasDistributionTransformation = exports.PpasDistributionTransformation = class PpasDistributionTransformation extends AbstractTransformation_1.AbstractTransformation {
|
|
24
21
|
constructor(logger) {
|
|
25
22
|
super();
|
|
@@ -36,8 +33,8 @@ let PpasDistributionTransformation = exports.PpasDistributionTransformation = cl
|
|
|
36
33
|
customer_name: element.customer.name,
|
|
37
34
|
customer_contract_account_id: element.customer.contractAccountId,
|
|
38
35
|
customer_address_street: element.customerAddress.street,
|
|
39
|
-
customer_address_house_number:
|
|
40
|
-
customer_address_house_org_number:
|
|
36
|
+
customer_address_house_number: (0, PpasInvoicePriceTypeHelper_1.normalizeToStringOrNull)(element.customerAddress.houseNumber),
|
|
37
|
+
customer_address_house_org_number: (0, PpasInvoicePriceTypeHelper_1.normalizeToStringOrNull)(element.installations.address.houseOrgNumber),
|
|
41
38
|
customer_address_city: element.customerAddress.city,
|
|
42
39
|
customer_address_city_part: element.customerAddress.cityPart,
|
|
43
40
|
customer_address_post_code: element.customerAddress.postCode,
|
|
@@ -55,13 +52,13 @@ let PpasDistributionTransformation = exports.PpasDistributionTransformation = cl
|
|
|
55
52
|
place_id: element.installations.installation,
|
|
56
53
|
installations_billing_class: element.installations.billingClass,
|
|
57
54
|
installations_measurement_type: element.installations.measurementType,
|
|
58
|
-
installations_contract_contract_id:
|
|
55
|
+
installations_contract_contract_id: (0, PpasInvoicePriceTypeHelper_1.normalizeToStringOrNull)(element.installations.contract.contractId),
|
|
59
56
|
installations_contract_move_in_date: element.installations.contract.moveInDate,
|
|
60
57
|
installations_contract_move_out_date: element.installations.contract.moveOutDate,
|
|
61
58
|
installations_tdd_class: element.installations.tddClass,
|
|
62
59
|
installations_address_street: element.installations.address.street,
|
|
63
|
-
installations_address_house_number:
|
|
64
|
-
installations_address_house_org_number:
|
|
60
|
+
installations_address_house_number: (0, PpasInvoicePriceTypeHelper_1.normalizeToStringOrNull)(element.installations.address.houseNumber),
|
|
61
|
+
installations_address_house_org_number: (0, PpasInvoicePriceTypeHelper_1.normalizeToStringOrNull)(element.installations.address.houseOrgNumber),
|
|
65
62
|
installations_address_city: element.installations.address.city,
|
|
66
63
|
installations_address_city_part: element.installations.address.cityPart,
|
|
67
64
|
installations_address_post_code: element.installations.address.postCode,
|
|
@@ -81,9 +78,9 @@ let PpasDistributionTransformation = exports.PpasDistributionTransformation = cl
|
|
|
81
78
|
device.readings = [device.readings];
|
|
82
79
|
}
|
|
83
80
|
for (const reading of device.readings) {
|
|
84
|
-
const deviceGroupKey =
|
|
85
|
-
const deviceGroupState =
|
|
86
|
-
const resolvedReadingType =
|
|
81
|
+
const deviceGroupKey = (0, PpasInvoicePriceTypeHelper_1.createDeviceGroupKey)(device, reading);
|
|
82
|
+
const deviceGroupState = (0, PpasInvoicePriceTypeHelper_1.getOrCreateGroupState)(deviceGroupStateByKey, deviceGroupKey);
|
|
83
|
+
const resolvedReadingType = (0, PpasInvoicePriceTypeHelper_1.determinePriceType)(reading?.gas?.consumptionKwh ?? 0, 0, deviceGroupState);
|
|
87
84
|
const deviceRow = {
|
|
88
85
|
device_serial_number: device.number,
|
|
89
86
|
type: device.type,
|
|
@@ -95,14 +92,14 @@ let PpasDistributionTransformation = exports.PpasDistributionTransformation = cl
|
|
|
95
92
|
reading_to: reading.readingTo,
|
|
96
93
|
consumption: reading.consumption,
|
|
97
94
|
unit: reading.unit,
|
|
98
|
-
meter_reading_type:
|
|
95
|
+
meter_reading_type: (0, PpasInvoicePriceTypeHelper_1.normalizeToStringOrNull)(reading.mrType),
|
|
99
96
|
reading_type: resolvedReadingType,
|
|
100
97
|
gas_consumption_kwh: reading?.gas?.consumptionKwh,
|
|
101
98
|
volume_coefficient: reading?.gas?.volumeCoefficient,
|
|
102
99
|
combustion_heat: reading?.gas?.combustionHeat,
|
|
103
100
|
normometers_nm3: reading?.gas?.normometersNm3,
|
|
104
101
|
};
|
|
105
|
-
const inputReadingKey =
|
|
102
|
+
const inputReadingKey = (0, PpasInvoicePriceTypeHelper_1.createDeviceGroupKey)(device, reading);
|
|
106
103
|
if (uniqueDeviceReadingKeys.has(inputReadingKey)) {
|
|
107
104
|
this.logger.info(`${this.name}: Duplicate device key for device_serial_number ${device.number}
|
|
108
105
|
and invoice_id ${element.id.intNum}`);
|
|
@@ -115,9 +112,9 @@ let PpasDistributionTransformation = exports.PpasDistributionTransformation = cl
|
|
|
115
112
|
const groupStateByKey = new Map();
|
|
116
113
|
const uniquePriceConflictKeys = new Set();
|
|
117
114
|
for (const price of element.installations.prices) {
|
|
118
|
-
const groupKey =
|
|
119
|
-
const groupState =
|
|
120
|
-
const priceType =
|
|
115
|
+
const groupKey = (0, PpasInvoicePriceTypeHelper_1.createPriceGroupKey)(price);
|
|
116
|
+
const groupState = (0, PpasInvoicePriceTypeHelper_1.getOrCreateGroupState)(groupStateByKey, groupKey);
|
|
117
|
+
const priceType = (0, PpasInvoicePriceTypeHelper_1.determinePriceType)(price.priceNetto, price.quantity, groupState);
|
|
121
118
|
const priceRow = {
|
|
122
119
|
invoice_id: element.id.intNum,
|
|
123
120
|
customer_id: element.customer.id,
|
|
@@ -157,74 +154,9 @@ let PpasDistributionTransformation = exports.PpasDistributionTransformation = cl
|
|
|
157
154
|
};
|
|
158
155
|
};
|
|
159
156
|
}
|
|
160
|
-
normalizeToStringOrNull(value) {
|
|
161
|
-
const str = String(value).trim();
|
|
162
|
-
return str === "" ? null : str;
|
|
163
|
-
}
|
|
164
|
-
getOrCreateDistributionGroupState(groupStateByKey, groupKey) {
|
|
165
|
-
const existingState = groupStateByKey.get(groupKey);
|
|
166
|
-
if (existingState)
|
|
167
|
-
return existingState;
|
|
168
|
-
const initialState = {
|
|
169
|
-
occurrenceIndex: 0,
|
|
170
|
-
zeroOccurrenceIndex: 0,
|
|
171
|
-
hasStandardInGroup: false,
|
|
172
|
-
hasCorrectionInGroup: false,
|
|
173
|
-
};
|
|
174
|
-
groupStateByKey.set(groupKey, initialState);
|
|
175
|
-
return initialState;
|
|
176
|
-
}
|
|
177
|
-
resolveNeutralDistributionPriceType(groupState) {
|
|
178
|
-
if (!groupState.hasStandardInGroup)
|
|
179
|
-
return DISTRIBUTION_PRICE_TYPE.STANDARD;
|
|
180
|
-
if (!groupState.hasCorrectionInGroup)
|
|
181
|
-
return DISTRIBUTION_PRICE_TYPE.CORRECTION;
|
|
182
|
-
return groupState.zeroOccurrenceIndex % 2 === 0 ? DISTRIBUTION_PRICE_TYPE.STANDARD : DISTRIBUTION_PRICE_TYPE.CORRECTION;
|
|
183
|
-
}
|
|
184
|
-
determineDistributionPriceType(priceNetto, quantity, groupState) {
|
|
185
|
-
const priceNettoValue = priceNetto ?? 0;
|
|
186
|
-
const quantityValue = quantity ?? 0;
|
|
187
|
-
const isPositive = priceNettoValue > 0 || quantityValue > 0;
|
|
188
|
-
const isNegative = priceNettoValue < 0 || quantityValue < 0;
|
|
189
|
-
const isZeroRow = priceNettoValue === 0 && quantityValue === 0;
|
|
190
|
-
if (isPositive) {
|
|
191
|
-
groupState.hasStandardInGroup = true;
|
|
192
|
-
return DISTRIBUTION_PRICE_TYPE.STANDARD;
|
|
193
|
-
}
|
|
194
|
-
if (isNegative) {
|
|
195
|
-
groupState.hasCorrectionInGroup = true;
|
|
196
|
-
return DISTRIBUTION_PRICE_TYPE.CORRECTION;
|
|
197
|
-
}
|
|
198
|
-
const resolvedType = this.resolveNeutralDistributionPriceType(groupState);
|
|
199
|
-
if (resolvedType === DISTRIBUTION_PRICE_TYPE.STANDARD) {
|
|
200
|
-
groupState.hasStandardInGroup = true;
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
groupState.hasCorrectionInGroup = true;
|
|
204
|
-
}
|
|
205
|
-
if (isZeroRow) {
|
|
206
|
-
groupState.zeroOccurrenceIndex += 1;
|
|
207
|
-
}
|
|
208
|
-
return resolvedType;
|
|
209
|
-
}
|
|
210
|
-
createDistributionPriceGroupKey(price) {
|
|
211
|
-
return [
|
|
212
|
-
price.dateFrom,
|
|
213
|
-
price.dateTo,
|
|
214
|
-
price.kind,
|
|
215
|
-
price.unit ?? "",
|
|
216
|
-
price.unitPrice ?? "",
|
|
217
|
-
price.timeSlot ?? "",
|
|
218
|
-
price.description ?? "",
|
|
219
|
-
price.priceGroup ?? "",
|
|
220
|
-
].join("|");
|
|
221
|
-
}
|
|
222
157
|
createInvoicePriceConflictKey(row) {
|
|
223
158
|
return [row.invoice_id, row.customer_id, row.date_from, row.date_to, row.kind, row.price_type].join("|");
|
|
224
159
|
}
|
|
225
|
-
createDeviceGroupKey(device, reading) {
|
|
226
|
-
return [device.number, reading.dateFrom, reading.dateTo, device.kind ?? reading.kind ?? ""].join("|");
|
|
227
|
-
}
|
|
228
160
|
};
|
|
229
161
|
exports.PpasDistributionTransformation = PpasDistributionTransformation = __decorate([
|
|
230
162
|
(0, tsyringe_1.injectable)(),
|
package/dist/integration-engine/enapo/transformations/ppas/PpasDistributionTransformation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PpasDistributionTransformation.js","sourceRoot":"","sources":["../../../../../src/integration-engine/enapo/transformations/ppas/PpasDistributionTransformation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAIA,wEAAqE;AAErE,6GAA0G;AAC1G,iEAAwE;
|
|
1
|
+
{"version":3,"file":"PpasDistributionTransformation.js","sourceRoot":"","sources":["../../../../../src/integration-engine/enapo/transformations/ppas/PpasDistributionTransformation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare const PPAS_INVOICE_PRICE_TYPE: {
|
|
2
|
+
readonly STANDARD: "STANDARD";
|
|
3
|
+
readonly CORRECTION: "CORRECTION";
|
|
4
|
+
};
|
|
5
|
+
export type PpasInvoicePriceType = (typeof PPAS_INVOICE_PRICE_TYPE)[keyof typeof PPAS_INVOICE_PRICE_TYPE];
|
|
6
|
+
export type PpasInvoiceGroupState = {
|
|
7
|
+
occurrenceIndex: number;
|
|
8
|
+
zeroOccurrenceIndex: number;
|
|
9
|
+
hasStandardInGroup: boolean;
|
|
10
|
+
hasCorrectionInGroup: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare function getOrCreateGroupState(groupStateByKey: Map<string, PpasInvoiceGroupState>, groupKey: string): PpasInvoiceGroupState;
|
|
13
|
+
export declare function determinePriceType(priceNetto: number | null | undefined, quantity: number | null | undefined, groupState: PpasInvoiceGroupState): PpasInvoicePriceType;
|
|
14
|
+
export declare function createDeviceGroupKey(device: {
|
|
15
|
+
number: string;
|
|
16
|
+
kind?: string;
|
|
17
|
+
}, reading: {
|
|
18
|
+
dateFrom: string;
|
|
19
|
+
dateTo: string;
|
|
20
|
+
kind?: string;
|
|
21
|
+
}): string;
|
|
22
|
+
export declare function createPriceGroupKey(price: {
|
|
23
|
+
dateFrom: string;
|
|
24
|
+
dateTo: string;
|
|
25
|
+
kind: string;
|
|
26
|
+
unit?: string;
|
|
27
|
+
unitPrice?: number;
|
|
28
|
+
timeSlot?: number | string | null;
|
|
29
|
+
description?: string;
|
|
30
|
+
priceGroup?: string;
|
|
31
|
+
}): string;
|
|
32
|
+
export declare function normalizeToStringOrNull(value: string | number | undefined | null): string | null;
|
|
33
|
+
export declare function normalizeToNumberOrNull(value: string | number | undefined | null): number | null;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeToNumberOrNull = exports.normalizeToStringOrNull = exports.createPriceGroupKey = exports.createDeviceGroupKey = exports.determinePriceType = exports.getOrCreateGroupState = exports.PPAS_INVOICE_PRICE_TYPE = void 0;
|
|
4
|
+
exports.PPAS_INVOICE_PRICE_TYPE = {
|
|
5
|
+
STANDARD: "STANDARD",
|
|
6
|
+
CORRECTION: "CORRECTION",
|
|
7
|
+
};
|
|
8
|
+
function getOrCreateGroupState(groupStateByKey, groupKey) {
|
|
9
|
+
const existingState = groupStateByKey.get(groupKey);
|
|
10
|
+
if (existingState)
|
|
11
|
+
return existingState;
|
|
12
|
+
const initialState = {
|
|
13
|
+
occurrenceIndex: 0,
|
|
14
|
+
zeroOccurrenceIndex: 0,
|
|
15
|
+
hasStandardInGroup: false,
|
|
16
|
+
hasCorrectionInGroup: false,
|
|
17
|
+
};
|
|
18
|
+
groupStateByKey.set(groupKey, initialState);
|
|
19
|
+
return initialState;
|
|
20
|
+
}
|
|
21
|
+
exports.getOrCreateGroupState = getOrCreateGroupState;
|
|
22
|
+
function resolveNeutralPriceType(groupState) {
|
|
23
|
+
if (!groupState.hasStandardInGroup)
|
|
24
|
+
return exports.PPAS_INVOICE_PRICE_TYPE.STANDARD;
|
|
25
|
+
if (!groupState.hasCorrectionInGroup)
|
|
26
|
+
return exports.PPAS_INVOICE_PRICE_TYPE.CORRECTION;
|
|
27
|
+
return groupState.zeroOccurrenceIndex % 2 === 0 ? exports.PPAS_INVOICE_PRICE_TYPE.STANDARD : exports.PPAS_INVOICE_PRICE_TYPE.CORRECTION;
|
|
28
|
+
}
|
|
29
|
+
function determinePriceType(priceNetto, quantity, groupState) {
|
|
30
|
+
const priceNettoValue = priceNetto ?? 0;
|
|
31
|
+
const quantityValue = quantity ?? 0;
|
|
32
|
+
const isPositive = priceNettoValue > 0 || quantityValue > 0;
|
|
33
|
+
const isNegative = priceNettoValue < 0 || quantityValue < 0;
|
|
34
|
+
const isZeroRow = priceNettoValue === 0 && quantityValue === 0;
|
|
35
|
+
if (isPositive) {
|
|
36
|
+
groupState.hasStandardInGroup = true;
|
|
37
|
+
return exports.PPAS_INVOICE_PRICE_TYPE.STANDARD;
|
|
38
|
+
}
|
|
39
|
+
if (isNegative) {
|
|
40
|
+
groupState.hasCorrectionInGroup = true;
|
|
41
|
+
return exports.PPAS_INVOICE_PRICE_TYPE.CORRECTION;
|
|
42
|
+
}
|
|
43
|
+
const resolvedType = resolveNeutralPriceType(groupState);
|
|
44
|
+
if (resolvedType === exports.PPAS_INVOICE_PRICE_TYPE.STANDARD) {
|
|
45
|
+
groupState.hasStandardInGroup = true;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
groupState.hasCorrectionInGroup = true;
|
|
49
|
+
}
|
|
50
|
+
if (isZeroRow) {
|
|
51
|
+
groupState.zeroOccurrenceIndex += 1;
|
|
52
|
+
}
|
|
53
|
+
return resolvedType;
|
|
54
|
+
}
|
|
55
|
+
exports.determinePriceType = determinePriceType;
|
|
56
|
+
function createDeviceGroupKey(device, reading) {
|
|
57
|
+
return [device.number, reading.dateFrom, reading.dateTo, device.kind ?? reading.kind ?? ""].join("|");
|
|
58
|
+
}
|
|
59
|
+
exports.createDeviceGroupKey = createDeviceGroupKey;
|
|
60
|
+
function createPriceGroupKey(price) {
|
|
61
|
+
return [
|
|
62
|
+
price.dateFrom,
|
|
63
|
+
price.dateTo,
|
|
64
|
+
price.kind,
|
|
65
|
+
price.unit ?? "",
|
|
66
|
+
price.unitPrice ?? "",
|
|
67
|
+
price.timeSlot ?? "",
|
|
68
|
+
price.description ?? "",
|
|
69
|
+
price.priceGroup ?? "",
|
|
70
|
+
].join("|");
|
|
71
|
+
}
|
|
72
|
+
exports.createPriceGroupKey = createPriceGroupKey;
|
|
73
|
+
function normalizeToStringOrNull(value) {
|
|
74
|
+
if (value === undefined || value === null)
|
|
75
|
+
return null;
|
|
76
|
+
const str = String(value).trim();
|
|
77
|
+
return str === "" ? null : str;
|
|
78
|
+
}
|
|
79
|
+
exports.normalizeToStringOrNull = normalizeToStringOrNull;
|
|
80
|
+
function normalizeToNumberOrNull(value) {
|
|
81
|
+
if (value === undefined || value === null || value === "")
|
|
82
|
+
return null;
|
|
83
|
+
const num = Number(value);
|
|
84
|
+
return Number.isFinite(num) ? num : null;
|
|
85
|
+
}
|
|
86
|
+
exports.normalizeToNumberOrNull = normalizeToNumberOrNull;
|
|
87
|
+
//# sourceMappingURL=PpasInvoicePriceTypeHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PpasInvoicePriceTypeHelper.js","sourceRoot":"","sources":["../../../../../src/integration-engine/enapo/transformations/ppas/PpasInvoicePriceTypeHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ class EnapoWorker extends integration_engine_1.AbstractWorker {
|
|
|
21
21
|
this.registerTask(Di_1.EnapoContainer.resolve(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.EnoStructureTask));
|
|
22
22
|
this.registerTask(Di_1.EnapoContainer.resolve(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.EnoGeometryTask));
|
|
23
23
|
this.registerTask(Di_1.EnapoContainer.resolve(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.EnapoPpasDistributionTask));
|
|
24
|
+
this.registerTask(Di_1.EnapoContainer.resolve(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.EnapoPpasCommercialTask));
|
|
24
25
|
this.registerTask(Di_1.EnapoContainer.resolve(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.PorsennaDistributionTask));
|
|
25
26
|
}
|
|
26
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnapoWorker.js","sourceRoot":"","sources":["../../../../src/integration-engine/enapo/workers/EnapoWorker.ts"],"names":[],"mappings":";;;AAAA,8EAAuE;AAEvE,4CAAiD;AACjD,kCAA2C;AAC3C,gFAA6E;AAE7E,MAAa,WAAY,SAAQ,mCAAc;IAG3C;QACI,KAAK,EAAE,CAAC;QAHF,SAAI,GAAG,6BAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"EnapoWorker.js","sourceRoot":"","sources":["../../../../src/integration-engine/enapo/workers/EnapoWorker.ts"],"names":[],"mappings":";;;AAAA,8EAAuE;AAEvE,4CAAiD;AACjD,kCAA2C;AAC3C,gFAA6E;AAE7E,MAAa,WAAY,SAAQ,mCAAc;IAG3C;QACI,KAAK,EAAE,CAAC;QAHF,SAAI,GAAG,6BAAiB,CAAC;QAiB5B,iBAAY,GAAG,CAAC,IAAW,EAAQ,EAAE;YACxC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7C,CAAC,CAAC;QAfE,iBAAiB;QACjB,IAAI,CAAC,YAAY,CAAC,mBAAc,CAAC,OAAO,CAAQ,qDAAyB,CAAC,aAAa,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,YAAY,CAAC,mBAAc,CAAC,OAAO,CAAQ,qDAAyB,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,YAAY,CAAC,mBAAc,CAAC,OAAO,CAAQ,qDAAyB,CAAC,aAAa,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,YAAY,CAAC,mBAAc,CAAC,OAAO,CAAQ,qDAAyB,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,YAAY,CAAC,mBAAc,CAAC,OAAO,CAAQ,qDAAyB,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,YAAY,CAAC,mBAAc,CAAC,OAAO,CAAQ,qDAAyB,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,YAAY,CAAC,mBAAc,CAAC,OAAO,CAAQ,qDAAyB,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,YAAY,CAAC,mBAAc,CAAC,OAAO,CAAQ,qDAAyB,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,YAAY,CAAC,mBAAc,CAAC,OAAO,CAAQ,qDAAyB,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACzG,CAAC;CAMJ;AAtBD,kCAsBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IEnapoPpasCommercialParams.js","sourceRoot":"","sources":["../../../../../src/integration-engine/enapo/workers/interfaces/IEnapoPpasCommercialParams.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.EnapoPpasCommercialParamsSchema = void 0;
|
|
13
|
+
const class_validator_1 = require("@golemio/core/dist/shared/class-validator");
|
|
14
|
+
class EnapoPpasCommercialParamsSchema {
|
|
15
|
+
}
|
|
16
|
+
exports.EnapoPpasCommercialParamsSchema = EnapoPpasCommercialParamsSchema;
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, class_validator_1.IsOptional)(),
|
|
19
|
+
(0, class_validator_1.IsISO8601)({ strict: true }),
|
|
20
|
+
(0, class_validator_1.Length)(10, 10),
|
|
21
|
+
__metadata("design:type", String)
|
|
22
|
+
], EnapoPpasCommercialParamsSchema.prototype, "from", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_validator_1.IsOptional)(),
|
|
25
|
+
(0, class_validator_1.IsISO8601)({ strict: true }),
|
|
26
|
+
(0, class_validator_1.Length)(10, 10),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], EnapoPpasCommercialParamsSchema.prototype, "to", void 0);
|
|
29
|
+
//# sourceMappingURL=EnapoPpasCommercialParamsSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnapoPpasCommercialParamsSchema.js","sourceRoot":"","sources":["../../../../../src/integration-engine/enapo/workers/schema/EnapoPpasCommercialParamsSchema.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+EAA0F;AAG1F,MAAa,+BAA+B;CAS3C;AATD,0EASC;AALG;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC3B,IAAA,wBAAM,EAAC,EAAE,EAAE,EAAE,CAAC;;6DACD;AAId;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC3B,IAAA,wBAAM,EAAC,EAAE,EAAE,EAAE,CAAC;;2DACH"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { PpasCommercialDatasource } from "../../datasources/ppas/commercial/PpasCommercialDatasource";
|
|
2
|
+
import { PpasCommercialInvoiceDeviceRepository } from "../../repositories/ppas/PpasCommercialInvoiceDeviceRepository";
|
|
3
|
+
import { PpasCommercialInvoiceInstallationRepository } from "../../repositories/ppas/PpasCommercialInvoiceInstallationRepository";
|
|
4
|
+
import { PpasCommercialInvoicePriceRepository } from "../../repositories/ppas/PpasCommercialInvoicePriceRepository";
|
|
5
|
+
import { PpasCommercialInvoiceRepository } from "../../repositories/ppas/PpasCommercialInvoiceRepository";
|
|
6
|
+
import { PpasCommercialTransformation } from "../../transformations/ppas/PpasCommercialTransformation";
|
|
7
|
+
import { IDatabaseConnector } from "@golemio/core/dist/helpers/data-access/postgres/IDatabaseConnector";
|
|
8
|
+
import { ISimpleConfig } from "@golemio/core/dist/helpers/configuration/ISimpleConfig";
|
|
9
|
+
import { ILogger } from "@golemio/core/dist/helpers/logger/LoggerProvider";
|
|
10
|
+
import { AbstractTask } from "@golemio/core/dist/integration-engine";
|
|
11
|
+
import { IEnapoPpasCommercialParams } from "../interfaces/IEnapoPpasCommercialParams";
|
|
12
|
+
import { EnapoPpasCommercialParamsSchema } from "../schema/EnapoPpasCommercialParamsSchema";
|
|
13
|
+
export declare class EnapoPpasCommercialTask extends AbstractTask<IEnapoPpasCommercialParams> {
|
|
14
|
+
protected dbConnector: IDatabaseConnector;
|
|
15
|
+
protected datasource: PpasCommercialDatasource;
|
|
16
|
+
protected ppasCommercialInvoiceRepository: PpasCommercialInvoiceRepository;
|
|
17
|
+
protected ppasCommercialInvoiceInstallationRepository: PpasCommercialInvoiceInstallationRepository;
|
|
18
|
+
protected ppasCommercialInvoiceDeviceRepository: PpasCommercialInvoiceDeviceRepository;
|
|
19
|
+
protected ppasCommercialInvoicePriceRepository: PpasCommercialInvoicePriceRepository;
|
|
20
|
+
protected ppasCommercialTransformation: PpasCommercialTransformation;
|
|
21
|
+
protected logger: ILogger;
|
|
22
|
+
queueName: string;
|
|
23
|
+
queueTtl: number;
|
|
24
|
+
schema: typeof EnapoPpasCommercialParamsSchema;
|
|
25
|
+
private readonly requestDelayMs;
|
|
26
|
+
constructor(config: ISimpleConfig, dbConnector: IDatabaseConnector, datasource: PpasCommercialDatasource, ppasCommercialInvoiceRepository: PpasCommercialInvoiceRepository, ppasCommercialInvoiceInstallationRepository: PpasCommercialInvoiceInstallationRepository, ppasCommercialInvoiceDeviceRepository: PpasCommercialInvoiceDeviceRepository, ppasCommercialInvoicePriceRepository: PpasCommercialInvoicePriceRepository, ppasCommercialTransformation: PpasCommercialTransformation, logger: ILogger);
|
|
27
|
+
execute(params: IEnapoPpasCommercialParams): Promise<void>;
|
|
28
|
+
private saveInvoice;
|
|
29
|
+
private resolveDateRange;
|
|
30
|
+
private buildDateWindows;
|
|
31
|
+
private getLastInvoiceDateOrFallback;
|
|
32
|
+
protected sleep(ms: number): Promise<void>;
|
|
33
|
+
private readConfigOrDefault;
|
|
34
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.EnapoPpasCommercialTask = void 0;
|
|
16
|
+
const constants_1 = require("../../constants");
|
|
17
|
+
const PpasCommercialDatasource_1 = require("../../datasources/ppas/commercial/PpasCommercialDatasource");
|
|
18
|
+
const EnapoWorkerContainerToken_1 = require("../../ioc/EnapoWorkerContainerToken");
|
|
19
|
+
const PpasCommercialInvoiceDeviceRepository_1 = require("../../repositories/ppas/PpasCommercialInvoiceDeviceRepository");
|
|
20
|
+
const PpasCommercialInvoiceInstallationRepository_1 = require("../../repositories/ppas/PpasCommercialInvoiceInstallationRepository");
|
|
21
|
+
const PpasCommercialInvoicePriceRepository_1 = require("../../repositories/ppas/PpasCommercialInvoicePriceRepository");
|
|
22
|
+
const PpasCommercialInvoiceRepository_1 = require("../../repositories/ppas/PpasCommercialInvoiceRepository");
|
|
23
|
+
const PpasCommercialTransformation_1 = require("../../transformations/ppas/PpasCommercialTransformation");
|
|
24
|
+
const CoreToken_1 = require("@golemio/core/dist/helpers/ioc/CoreToken");
|
|
25
|
+
const integration_engine_1 = require("@golemio/core/dist/integration-engine");
|
|
26
|
+
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
|
|
27
|
+
const luxon_1 = require("@golemio/core/dist/shared/luxon");
|
|
28
|
+
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
29
|
+
const EnapoPpasCommercialParamsSchema_1 = require("../schema/EnapoPpasCommercialParamsSchema");
|
|
30
|
+
const BACKFILL_FROM_DATE = "2024-01-01";
|
|
31
|
+
const MAX_DATE_RANGE_DAYS = 366;
|
|
32
|
+
const DEFAULT_REQUEST_DELAY_MS = 650;
|
|
33
|
+
let EnapoPpasCommercialTask = exports.EnapoPpasCommercialTask = class EnapoPpasCommercialTask extends integration_engine_1.AbstractTask {
|
|
34
|
+
constructor(config, dbConnector, datasource, ppasCommercialInvoiceRepository, ppasCommercialInvoiceInstallationRepository, ppasCommercialInvoiceDeviceRepository, ppasCommercialInvoicePriceRepository, ppasCommercialTransformation, logger) {
|
|
35
|
+
super(constants_1.ENAPO_WORKER_NAME);
|
|
36
|
+
this.dbConnector = dbConnector;
|
|
37
|
+
this.datasource = datasource;
|
|
38
|
+
this.ppasCommercialInvoiceRepository = ppasCommercialInvoiceRepository;
|
|
39
|
+
this.ppasCommercialInvoiceInstallationRepository = ppasCommercialInvoiceInstallationRepository;
|
|
40
|
+
this.ppasCommercialInvoiceDeviceRepository = ppasCommercialInvoiceDeviceRepository;
|
|
41
|
+
this.ppasCommercialInvoicePriceRepository = ppasCommercialInvoicePriceRepository;
|
|
42
|
+
this.ppasCommercialTransformation = ppasCommercialTransformation;
|
|
43
|
+
this.logger = logger;
|
|
44
|
+
this.queueName = "fetchPpasCommercial";
|
|
45
|
+
this.queueTtl = 60 * 60 * 1000;
|
|
46
|
+
this.schema = EnapoPpasCommercialParamsSchema_1.EnapoPpasCommercialParamsSchema;
|
|
47
|
+
this.requestDelayMs = this.readConfigOrDefault(config, "module.energetics.enapo.ppas.commercial.requestDelayMs", DEFAULT_REQUEST_DELAY_MS);
|
|
48
|
+
}
|
|
49
|
+
async execute(params) {
|
|
50
|
+
try {
|
|
51
|
+
const companyIdList = await this.datasource.getCompanyIdList();
|
|
52
|
+
const processedIntNums = new Set();
|
|
53
|
+
let isFirstRequest = true;
|
|
54
|
+
for (const companyId of companyIdList) {
|
|
55
|
+
const { from, to } = await this.resolveDateRange(params, companyId);
|
|
56
|
+
for (const window of this.buildDateWindows(from, to)) {
|
|
57
|
+
if (!isFirstRequest) {
|
|
58
|
+
await this.sleep(this.requestDelayMs);
|
|
59
|
+
}
|
|
60
|
+
isFirstRequest = false;
|
|
61
|
+
let invoiceList;
|
|
62
|
+
try {
|
|
63
|
+
invoiceList = await this.datasource.getInvoiceList(window.from, window.to, companyId);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
// Stop this company's windows (don't continue) so the timestamp watermark cannot advance
|
|
67
|
+
// past the failed window — the next run retries it from MAX(facts_doc_date) + 1.
|
|
68
|
+
this.logger.error(`${this.constructor.name}: Skipping company ${companyId} from ${window.from} to ${window.to}` +
|
|
69
|
+
` due to error: ` +
|
|
70
|
+
(err instanceof Error ? err.message : String(err)));
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
for (const invoiceRef of invoiceList) {
|
|
74
|
+
const intNum = invoiceRef.id?.intNum;
|
|
75
|
+
if (!intNum || processedIntNums.has(intNum)) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
processedIntNums.add(intNum);
|
|
79
|
+
await this.sleep(this.requestDelayMs);
|
|
80
|
+
try {
|
|
81
|
+
await this.saveInvoice(intNum);
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
this.logger.error(`${this.constructor.name}: Skipping invoice ${intNum} due to error: ` +
|
|
85
|
+
(err instanceof Error ? err.message : String(err)));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
if (err instanceof golemio_errors_1.AbstractGolemioError) {
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
95
|
+
throw new golemio_errors_1.GeneralError(`Unable to download PPAS commercial data`, this.constructor.name, err);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async saveInvoice(intNum) {
|
|
99
|
+
const transaction = await this.dbConnector.getConnection().transaction();
|
|
100
|
+
try {
|
|
101
|
+
const invoiceDetail = await this.datasource.getInvoiceDetail(intNum);
|
|
102
|
+
const { invoiceHeader, rowInstallations, rowDevices, rowPrice } = this.ppasCommercialTransformation.transformElement(invoiceDetail);
|
|
103
|
+
await this.ppasCommercialInvoiceRepository.bulkSave([invoiceHeader], undefined, undefined, undefined, transaction);
|
|
104
|
+
await this.ppasCommercialInvoiceInstallationRepository.bulkSave(rowInstallations, undefined, undefined, undefined, transaction);
|
|
105
|
+
await this.ppasCommercialInvoicePriceRepository.bulkSave(rowPrice, undefined, undefined, undefined, transaction);
|
|
106
|
+
if (rowDevices.length > 0) {
|
|
107
|
+
await this.ppasCommercialInvoiceDeviceRepository.bulkSave(rowDevices, undefined, undefined, undefined, transaction);
|
|
108
|
+
}
|
|
109
|
+
await transaction.commit();
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
await transaction.rollback();
|
|
113
|
+
throw err;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async resolveDateRange(params, companyId) {
|
|
117
|
+
if (params.from && params.to) {
|
|
118
|
+
return { from: params.from, to: params.to };
|
|
119
|
+
}
|
|
120
|
+
const from = await this.getLastInvoiceDateOrFallback(companyId);
|
|
121
|
+
const to = luxon_1.DateTime.now().toFormat("yyyy-LL-dd");
|
|
122
|
+
return { from, to };
|
|
123
|
+
}
|
|
124
|
+
// The upstream API limits a single query to MAX_DATE_RANGE_DAYS, so a longer range is split
|
|
125
|
+
// into consecutive windows. This also advances coverage to today even when a company has no
|
|
126
|
+
// invoices in early windows — otherwise the timestamp watermark would never move past the backfill date.
|
|
127
|
+
buildDateWindows(from, to) {
|
|
128
|
+
const windows = [];
|
|
129
|
+
const end = luxon_1.DateTime.fromISO(to);
|
|
130
|
+
let cursor = luxon_1.DateTime.fromISO(from);
|
|
131
|
+
while (cursor <= end) {
|
|
132
|
+
const windowEnd = luxon_1.DateTime.min(cursor.plus({ days: MAX_DATE_RANGE_DAYS }), end);
|
|
133
|
+
windows.push({ from: cursor.toFormat("yyyy-LL-dd"), to: windowEnd.toFormat("yyyy-LL-dd") });
|
|
134
|
+
cursor = windowEnd.plus({ days: 1 });
|
|
135
|
+
}
|
|
136
|
+
return windows;
|
|
137
|
+
}
|
|
138
|
+
async getLastInvoiceDateOrFallback(companyId) {
|
|
139
|
+
const result = (await this.dbConnector
|
|
140
|
+
.getConnection()
|
|
141
|
+
.query(`SELECT MAX(facts_doc_date)::text AS last_date FROM energetics.enapo_ppas_commercial_invoice ` +
|
|
142
|
+
`WHERE customer_company_id = :companyId`, {
|
|
143
|
+
type: "SELECT",
|
|
144
|
+
replacements: { companyId },
|
|
145
|
+
}));
|
|
146
|
+
if (result.length > 0 && result[0].last_date) {
|
|
147
|
+
return luxon_1.DateTime.fromISO(result[0].last_date).plus({ days: 1 }).toFormat("yyyy-LL-dd");
|
|
148
|
+
}
|
|
149
|
+
return BACKFILL_FROM_DATE;
|
|
150
|
+
}
|
|
151
|
+
sleep(ms) {
|
|
152
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
153
|
+
}
|
|
154
|
+
readConfigOrDefault(config, key, defaultValue) {
|
|
155
|
+
try {
|
|
156
|
+
return config.getValue(key);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return defaultValue;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
exports.EnapoPpasCommercialTask = EnapoPpasCommercialTask = __decorate([
|
|
164
|
+
(0, tsyringe_1.injectable)(),
|
|
165
|
+
__param(0, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.SimpleConfig)),
|
|
166
|
+
__param(1, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.PostgresConnector)),
|
|
167
|
+
__param(2, (0, tsyringe_1.inject)(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.EnapoPpasCommercialDatasource)),
|
|
168
|
+
__param(3, (0, tsyringe_1.inject)(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.PpasCommercialInvoiceRepository)),
|
|
169
|
+
__param(4, (0, tsyringe_1.inject)(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.PpasCommercialInvoiceInstallationRepository)),
|
|
170
|
+
__param(5, (0, tsyringe_1.inject)(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.PpasCommercialInvoiceDeviceRepository)),
|
|
171
|
+
__param(6, (0, tsyringe_1.inject)(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.PpasCommercialInvoicePriceRepository)),
|
|
172
|
+
__param(7, (0, tsyringe_1.inject)(EnapoWorkerContainerToken_1.EnapoWorkerContainerToken.PpasCommercialTransformation)),
|
|
173
|
+
__param(8, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.Logger)),
|
|
174
|
+
__metadata("design:paramtypes", [Object, Object, PpasCommercialDatasource_1.PpasCommercialDatasource,
|
|
175
|
+
PpasCommercialInvoiceRepository_1.PpasCommercialInvoiceRepository,
|
|
176
|
+
PpasCommercialInvoiceInstallationRepository_1.PpasCommercialInvoiceInstallationRepository,
|
|
177
|
+
PpasCommercialInvoiceDeviceRepository_1.PpasCommercialInvoiceDeviceRepository,
|
|
178
|
+
PpasCommercialInvoicePriceRepository_1.PpasCommercialInvoicePriceRepository,
|
|
179
|
+
PpasCommercialTransformation_1.PpasCommercialTransformation, Object])
|
|
180
|
+
], EnapoPpasCommercialTask);
|
|
181
|
+
//# sourceMappingURL=EnapoPpasCommercialTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnapoPpasCommercialTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/enapo/workers/task/EnapoPpasCommercialTask.ts"],"names":[],"mappings":"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"}
|