@golemio/energetics 1.12.2-dev.2740928370 → 1.12.2-dev.2741327856
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/example/00_clear_test_data.sql +19 -0
- package/db/example/06_eno.sql +36 -0
- package/db/example/07_enapo_om_detail.sql +140 -0
- package/db/example/08_ded_search.sql +25 -0
- package/db/migrations/postgresql/20260807090000-enapo-gid-mapping-om-detail.js +53 -0
- package/db/migrations/postgresql/20260807091000-enapo-om-detail-porsenna.js +53 -0
- package/db/migrations/postgresql/20260807092000-ded-building-search.js +53 -0
- package/db/migrations/postgresql/sqls/20260807090000-enapo-gid-mapping-om-detail-down.sql +3 -0
- package/db/migrations/postgresql/sqls/20260807090000-enapo-gid-mapping-om-detail-up.sql +182 -0
- package/db/migrations/postgresql/sqls/20260807091000-enapo-om-detail-porsenna-down.sql +135 -0
- package/db/migrations/postgresql/sqls/20260807091000-enapo-om-detail-porsenna-up.sql +292 -0
- package/db/migrations/postgresql/sqls/20260807092000-ded-building-search-down.sql +41 -0
- package/db/migrations/postgresql/sqls/20260807092000-ded-building-search-up.sql +262 -0
- package/db/scripts/ded_gid_mapping_mock_import.sql +107 -0
- package/dist/integration-engine/enapo/ioc/Di.js +5 -1
- package/dist/integration-engine/enapo/ioc/Di.js.map +1 -1
- package/dist/integration-engine/enapo/ioc/EnapoWorkerContainerToken.d.ts +2 -0
- package/dist/integration-engine/enapo/ioc/EnapoWorkerContainerToken.js +2 -0
- package/dist/integration-engine/enapo/ioc/EnapoWorkerContainerToken.js.map +1 -1
- package/dist/integration-engine/enapo/repositories/DedSearchIndexRepository.d.ts +7 -0
- package/dist/integration-engine/enapo/repositories/DedSearchIndexRepository.js +50 -0
- package/dist/integration-engine/enapo/repositories/DedSearchIndexRepository.js.map +1 -0
- package/dist/integration-engine/enapo/repositories/interfaces/IDedSearchIndexRepository.d.ts +7 -0
- package/dist/integration-engine/enapo/repositories/interfaces/IDedSearchIndexRepository.js +3 -0
- package/dist/integration-engine/enapo/repositories/interfaces/IDedSearchIndexRepository.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/task/DedSearchIndexRefreshTask.d.ts +21 -0
- package/dist/integration-engine/enapo/workers/task/DedSearchIndexRefreshTask.js +58 -0
- package/dist/integration-engine/enapo/workers/task/DedSearchIndexRefreshTask.js.map +1 -0
- package/dist/integration-engine/enapo/workers/task/EnoGeometryTask.d.ts +13 -1
- package/dist/integration-engine/enapo/workers/task/EnoGeometryTask.js +25 -2
- package/dist/integration-engine/enapo/workers/task/EnoGeometryTask.js.map +1 -1
- package/dist/output-gateway/constants/DedSearchWeights.d.ts +60 -0
- package/dist/output-gateway/constants/DedSearchWeights.js +42 -0
- package/dist/output-gateway/constants/DedSearchWeights.js.map +1 -0
- package/dist/output-gateway/constants/Links.d.ts +1 -0
- package/dist/output-gateway/constants/Links.js +2 -1
- package/dist/output-gateway/constants/Links.js.map +1 -1
- package/dist/output-gateway/controllers/v2/EnoBuildingsController.d.ts +16 -0
- package/dist/output-gateway/controllers/v2/EnoBuildingsController.js +80 -0
- package/dist/output-gateway/controllers/v2/EnoBuildingsController.js.map +1 -0
- package/dist/output-gateway/helpers/objectMappers.d.ts +10 -0
- package/dist/output-gateway/helpers/objectMappers.js +37 -0
- package/dist/output-gateway/helpers/objectMappers.js.map +1 -0
- package/dist/output-gateway/index.js +8 -1
- package/dist/output-gateway/index.js.map +1 -1
- package/dist/output-gateway/ioc/Di.js +13 -1
- package/dist/output-gateway/ioc/Di.js.map +1 -1
- package/dist/output-gateway/ioc/ModuleContainerToken.d.ts +6 -0
- package/dist/output-gateway/ioc/ModuleContainerToken.js +6 -0
- package/dist/output-gateway/ioc/ModuleContainerToken.js.map +1 -1
- package/dist/output-gateway/models/DedBuildingSearchViewModel.d.ts +30 -0
- package/dist/output-gateway/models/DedBuildingSearchViewModel.js +38 -0
- package/dist/output-gateway/models/DedBuildingSearchViewModel.js.map +1 -0
- package/dist/output-gateway/models/EnoBuildingDetailViewModel.d.ts +49 -0
- package/dist/output-gateway/models/EnoBuildingDetailViewModel.js +57 -0
- package/dist/output-gateway/models/EnoBuildingDetailViewModel.js.map +1 -0
- package/dist/output-gateway/models/EnoConsumptionPointViewModel.d.ts +106 -0
- package/dist/output-gateway/models/EnoConsumptionPointViewModel.js +119 -0
- package/dist/output-gateway/models/EnoConsumptionPointViewModel.js.map +1 -0
- package/dist/output-gateway/models/EnoPorsennaDeviceViewModel.d.ts +27 -0
- package/dist/output-gateway/models/EnoPorsennaDeviceViewModel.js +41 -0
- package/dist/output-gateway/models/EnoPorsennaDeviceViewModel.js.map +1 -0
- package/dist/output-gateway/models/interfaces/IDedBuildingSearchView.d.ts +24 -0
- package/dist/output-gateway/models/interfaces/IDedBuildingSearchView.js +3 -0
- package/dist/output-gateway/models/interfaces/IDedBuildingSearchView.js.map +1 -0
- package/dist/output-gateway/models/interfaces/IEnoBuildingDetailView.d.ts +44 -0
- package/dist/output-gateway/models/interfaces/IEnoBuildingDetailView.js +3 -0
- package/dist/output-gateway/models/interfaces/IEnoBuildingDetailView.js.map +1 -0
- package/dist/output-gateway/models/interfaces/IEnoConsumptionPointView.d.ts +106 -0
- package/dist/output-gateway/models/interfaces/IEnoConsumptionPointView.js +3 -0
- package/dist/output-gateway/models/interfaces/IEnoConsumptionPointView.js.map +1 -0
- package/dist/output-gateway/models/interfaces/IEnoPorsennaDeviceView.d.ts +22 -0
- package/dist/output-gateway/models/interfaces/IEnoPorsennaDeviceView.js +3 -0
- package/dist/output-gateway/models/interfaces/IEnoPorsennaDeviceView.js.map +1 -0
- package/dist/output-gateway/repositories/AbstractNumericParsingRepository.d.ts +12 -0
- package/dist/output-gateway/repositories/AbstractNumericParsingRepository.js +41 -0
- package/dist/output-gateway/repositories/AbstractNumericParsingRepository.js.map +1 -0
- package/dist/output-gateway/repositories/DedBuildingSearchRepository.d.ts +16 -0
- package/dist/output-gateway/repositories/DedBuildingSearchRepository.js +250 -0
- package/dist/output-gateway/repositories/DedBuildingSearchRepository.js.map +1 -0
- package/dist/output-gateway/repositories/EnoBuildingAddressesRepository.d.ts +8 -0
- package/dist/output-gateway/repositories/EnoBuildingAddressesRepository.js +62 -0
- package/dist/output-gateway/repositories/EnoBuildingAddressesRepository.js.map +1 -0
- package/dist/output-gateway/repositories/EnoBuildingDetailRepository.d.ts +18 -0
- package/dist/output-gateway/repositories/EnoBuildingDetailRepository.js +100 -0
- package/dist/output-gateway/repositories/EnoBuildingDetailRepository.js.map +1 -0
- package/dist/output-gateway/repositories/EnoConsumptionPointsRepository.d.ts +8 -0
- package/dist/output-gateway/repositories/EnoConsumptionPointsRepository.js +51 -0
- package/dist/output-gateway/repositories/EnoConsumptionPointsRepository.js.map +1 -0
- package/dist/output-gateway/repositories/EnoPorsennaDevicesRepository.d.ts +8 -0
- package/dist/output-gateway/repositories/EnoPorsennaDevicesRepository.js +51 -0
- package/dist/output-gateway/repositories/EnoPorsennaDevicesRepository.js.map +1 -0
- package/dist/output-gateway/repositories/PorsennaConsumptionsRepository.d.ts +8 -0
- package/dist/output-gateway/repositories/PorsennaConsumptionsRepository.js +52 -0
- package/dist/output-gateway/repositories/PorsennaConsumptionsRepository.js.map +1 -0
- package/dist/output-gateway/repositories/PpasInvoiceChildRepository.d.ts +13 -0
- package/dist/output-gateway/repositories/PpasInvoiceChildRepository.js +39 -0
- package/dist/output-gateway/repositories/PpasInvoiceChildRepository.js.map +1 -0
- package/dist/output-gateway/repositories/interfaces/IDedBuildingSearchRow.d.ts +14 -0
- package/dist/output-gateway/repositories/interfaces/IDedBuildingSearchRow.js +3 -0
- package/dist/output-gateway/repositories/interfaces/IDedBuildingSearchRow.js.map +1 -0
- package/dist/output-gateway/repositories/interfaces/IEnoBuildingDetailAggregate.d.ts +22 -0
- package/dist/output-gateway/repositories/interfaces/IEnoBuildingDetailAggregate.js +3 -0
- package/dist/output-gateway/repositories/interfaces/IEnoBuildingDetailAggregate.js.map +1 -0
- package/dist/output-gateway/routers/interfaces/IDedBuildingSearchResponse.d.ts +50 -0
- package/dist/output-gateway/routers/interfaces/IDedBuildingSearchResponse.js +3 -0
- package/dist/output-gateway/routers/interfaces/IDedBuildingSearchResponse.js.map +1 -0
- package/dist/output-gateway/routers/interfaces/IEnoBuildingDetailResponse.d.ts +130 -0
- package/dist/output-gateway/routers/interfaces/IEnoBuildingDetailResponse.js +3 -0
- package/dist/output-gateway/routers/interfaces/IEnoBuildingDetailResponse.js.map +1 -0
- package/dist/output-gateway/routers/interfaces/IEnoRegistrationUnit.d.ts +11 -0
- package/dist/output-gateway/routers/interfaces/IEnoRegistrationUnit.js +3 -0
- package/dist/output-gateway/routers/interfaces/IEnoRegistrationUnit.js.map +1 -0
- package/dist/output-gateway/routers/v2/V2EnoBuildingsRouter.d.ts +11 -0
- package/dist/output-gateway/routers/v2/V2EnoBuildingsRouter.js +45 -0
- package/dist/output-gateway/routers/v2/V2EnoBuildingsRouter.js.map +1 -0
- package/dist/output-gateway/transformations/DedBuildingSearchTransformation.d.ts +11 -0
- package/dist/output-gateway/transformations/DedBuildingSearchTransformation.js +57 -0
- package/dist/output-gateway/transformations/DedBuildingSearchTransformation.js.map +1 -0
- package/dist/output-gateway/transformations/EnoBuildingDetailTransformation.d.ts +18 -0
- package/dist/output-gateway/transformations/EnoBuildingDetailTransformation.js +193 -0
- package/dist/output-gateway/transformations/EnoBuildingDetailTransformation.js.map +1 -0
- package/dist/schema-definitions/models/enapo/EnapoGidMappingModel.d.ts +17 -0
- package/dist/schema-definitions/models/enapo/EnapoGidMappingModel.js +63 -0
- package/dist/schema-definitions/models/enapo/EnapoGidMappingModel.js.map +1 -0
- package/dist/schema-definitions/models/enapo/interfaces/IEnapoGidMapping.d.ts +11 -0
- package/dist/schema-definitions/models/enapo/interfaces/IEnapoGidMapping.js +3 -0
- package/dist/schema-definitions/models/enapo/interfaces/IEnapoGidMapping.js.map +1 -0
- package/dist/schema-definitions/models/eno/AddressModel.d.ts +1 -1
- package/dist/schema-definitions/models/eno/AddressModel.js +1 -1
- package/dist/schema-definitions/models/eno/AddressModel.js.map +1 -1
- package/dist/schema-definitions/models/eno/interfaces/IAddress.d.ts +1 -1
- package/docs/implementation_documentation.md +90 -2
- package/docs/openapi-output.yaml +554 -1
- package/package.json +1 -1
|
@@ -0,0 +1,193 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.EnoBuildingDetailTransformation = void 0;
|
|
10
|
+
const objectMappers_1 = require("../helpers/objectMappers");
|
|
11
|
+
const AbstractTransformation_1 = require("@golemio/core/dist/helpers/transformation/AbstractTransformation");
|
|
12
|
+
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
13
|
+
let EnoBuildingDetailTransformation = class EnoBuildingDetailTransformation extends AbstractTransformation_1.AbstractTransformation {
|
|
14
|
+
constructor() {
|
|
15
|
+
super(...arguments);
|
|
16
|
+
this.name = "EnoBuildingDetailTransformation";
|
|
17
|
+
this.transformInternal = (element) => {
|
|
18
|
+
return {
|
|
19
|
+
gid: element.gid,
|
|
20
|
+
building: element.building === null ? null : this.extractBuilding(element.building),
|
|
21
|
+
property: element.building === null ? null : this.transformProperty(element.building),
|
|
22
|
+
addresses: element.addresses.map((address) => ({
|
|
23
|
+
popis: address.popis ?? null,
|
|
24
|
+
hlavni: address.hlavni ?? null,
|
|
25
|
+
poradi: address.poradi,
|
|
26
|
+
})),
|
|
27
|
+
energy_management: this.transformEnergyManagement(element),
|
|
28
|
+
consumption_points: element.points.map((point) => this.transformPoint(point, element)),
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
this.extractBuilding = (building) => {
|
|
32
|
+
return (0, objectMappers_1.omitKeys)(building, [
|
|
33
|
+
"gid",
|
|
34
|
+
"ej_id",
|
|
35
|
+
"ej_kod",
|
|
36
|
+
"ej_nazev",
|
|
37
|
+
"ej_typ",
|
|
38
|
+
"spm_id",
|
|
39
|
+
"spm_kod",
|
|
40
|
+
"spm_nazev",
|
|
41
|
+
"spm_ic",
|
|
42
|
+
"spm_dic",
|
|
43
|
+
"spu_id",
|
|
44
|
+
"spu_kod",
|
|
45
|
+
"spu_nazev",
|
|
46
|
+
"spu_ic",
|
|
47
|
+
"spu_dic",
|
|
48
|
+
]);
|
|
49
|
+
};
|
|
50
|
+
this.transformProperty = (building) => {
|
|
51
|
+
const registrationUnit = this.buildRegistrationUnit(building);
|
|
52
|
+
const mandate = this.buildManager(building, "spm_");
|
|
53
|
+
const accountingUnit = this.buildManager(building, "spu_");
|
|
54
|
+
if (registrationUnit === null && mandate === null && accountingUnit === null) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
registration_unit: registrationUnit,
|
|
59
|
+
managers: {
|
|
60
|
+
mandate,
|
|
61
|
+
accounting_unit: accountingUnit,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
this.buildRegistrationUnit = (building) => {
|
|
66
|
+
const unit = (0, objectMappers_1.stripPrefix)(building, "ej_");
|
|
67
|
+
return unit.id === null ? null : unit;
|
|
68
|
+
};
|
|
69
|
+
this.buildManager = (building, prefix) => {
|
|
70
|
+
const manager = (0, objectMappers_1.stripPrefix)(building, prefix);
|
|
71
|
+
return manager.id === null ? null : manager;
|
|
72
|
+
};
|
|
73
|
+
this.transformPoint = (point, aggregate) => {
|
|
74
|
+
const porsenna = this.buildPorsennaBlock(point, aggregate);
|
|
75
|
+
return {
|
|
76
|
+
place_id: point.place_id,
|
|
77
|
+
id_type: point.id_type,
|
|
78
|
+
commodity: point.commodity,
|
|
79
|
+
is_first_gid: point.is_first_gid,
|
|
80
|
+
is_active: point.is_active,
|
|
81
|
+
link_source: point.link_source,
|
|
82
|
+
valid_from: point.valid_from,
|
|
83
|
+
valid_to: point.valid_to,
|
|
84
|
+
address: this.resolveAddress(point),
|
|
85
|
+
...(point.commodity === "electricity" ? { electricity: this.transformElectricity(point, porsenna) } : {}),
|
|
86
|
+
...(point.commodity === "gas" ? { gas: this.transformGas(point, aggregate, porsenna) } : {}),
|
|
87
|
+
...(point.commodity === "heat" ? { heat: { porsenna } } : {}),
|
|
88
|
+
...(point.commodity === "water" ? { water: { porsenna } } : {}),
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
this.transformElectricity = (point, porsenna) => {
|
|
92
|
+
return {
|
|
93
|
+
metadata: point.md_year === null ? null : (0, objectMappers_1.stripPrefix)(point, "md_"),
|
|
94
|
+
...(porsenna === null ? {} : { porsenna }),
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
this.transformGas = (point, aggregate, porsenna) => {
|
|
98
|
+
return {
|
|
99
|
+
distribution: point.di_id === null
|
|
100
|
+
? null
|
|
101
|
+
: {
|
|
102
|
+
invoice: (0, objectMappers_1.stripPrefix)(point, "di_"),
|
|
103
|
+
installation: (0, objectMappers_1.omitKeys)((0, objectMappers_1.stripPrefix)(point, "dinst_"), ["place_id"]),
|
|
104
|
+
devices: aggregate.distributionDevices
|
|
105
|
+
.filter((device) => device.invoice_id === point.di_id && device.place_id === point.dinst_place_id)
|
|
106
|
+
.map((device) => (0, objectMappers_1.omitKeys)(device, ["invoice_id", "place_id"])),
|
|
107
|
+
prices: aggregate.distributionPrices
|
|
108
|
+
.filter((price) => price.invoice_id === point.di_id && price.place_id === point.dinst_place_id)
|
|
109
|
+
.map((price) => (0, objectMappers_1.omitKeys)(price, ["invoice_id", "customer_id", "place_id"])),
|
|
110
|
+
},
|
|
111
|
+
commercial: point.ci_id === null
|
|
112
|
+
? null
|
|
113
|
+
: {
|
|
114
|
+
invoice: (0, objectMappers_1.stripPrefix)(point, "ci_"),
|
|
115
|
+
installation: (0, objectMappers_1.omitKeys)((0, objectMappers_1.stripPrefix)(point, "cinst_"), ["place_id"]),
|
|
116
|
+
devices: aggregate.commercialDevices
|
|
117
|
+
.filter((device) => device.invoice_id === point.ci_id && device.place_id === point.cinst_place_id)
|
|
118
|
+
.map((device) => (0, objectMappers_1.omitKeys)(device, ["invoice_id", "place_id"])),
|
|
119
|
+
prices: aggregate.commercialPrices
|
|
120
|
+
.filter((price) => price.invoice_id === point.ci_id && price.place_id === point.cinst_place_id)
|
|
121
|
+
.map((price) => (0, objectMappers_1.omitKeys)(price, ["invoice_id", "customer_id", "place_id"])),
|
|
122
|
+
},
|
|
123
|
+
...(porsenna === null ? {} : { porsenna }),
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
this.buildPorsennaBlock = (point, aggregate) => {
|
|
127
|
+
const device = aggregate.porsennaDevices.find((candidate) => candidate.identifier === point.place_id && (candidate.level === null || candidate.level === "main"));
|
|
128
|
+
if (device === undefined) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
device: {
|
|
133
|
+
name: device.name,
|
|
134
|
+
type: device.type,
|
|
135
|
+
level: device.level,
|
|
136
|
+
measurement_target: device.measurement_target,
|
|
137
|
+
meter_number: device.meter_number,
|
|
138
|
+
supply_point_number: device.supply_point_number,
|
|
139
|
+
disabled_at: device.disabled_at,
|
|
140
|
+
tenant: device.source,
|
|
141
|
+
},
|
|
142
|
+
sub_devices: aggregate.porsennaDevices
|
|
143
|
+
.filter((candidate) => candidate.parent_device_id === device.device_id)
|
|
144
|
+
.map((candidate) => ({
|
|
145
|
+
name: candidate.name,
|
|
146
|
+
type: candidate.type,
|
|
147
|
+
meter_number: candidate.meter_number,
|
|
148
|
+
disabled_at: candidate.disabled_at,
|
|
149
|
+
})),
|
|
150
|
+
yearly_consumption: aggregate.porsennaConsumption
|
|
151
|
+
.filter((row) => row.device_id === device.device_id && row.var === "yearly")
|
|
152
|
+
.map((row) => ({
|
|
153
|
+
period: row.period,
|
|
154
|
+
value: row.value,
|
|
155
|
+
unit: row.unit,
|
|
156
|
+
days_covered: row.count,
|
|
157
|
+
})),
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
this.transformEnergyManagement = (aggregate) => {
|
|
161
|
+
const devices = aggregate.porsennaDevices;
|
|
162
|
+
if (devices.length === 0) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
const primary = devices[0];
|
|
166
|
+
return {
|
|
167
|
+
source: primary.source,
|
|
168
|
+
building_name: primary.building_name,
|
|
169
|
+
address: this.composeAddress(primary.building_street, primary.building_house_number, primary.building_street_number, primary.building_city, primary.building_postcode),
|
|
170
|
+
devices_total: devices.length,
|
|
171
|
+
devices_active: devices.filter((device) => device.disabled_at === null).length,
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
this.resolveAddress = (point) => {
|
|
175
|
+
if (point.md_address !== null) {
|
|
176
|
+
return point.md_address;
|
|
177
|
+
}
|
|
178
|
+
return (this.composeAddress(point.dinst_address_street, point.dinst_address_house_number, point.dinst_address_house_org_number, point.dinst_address_city, point.dinst_address_post_code) ??
|
|
179
|
+
this.composeAddress(point.cinst_address_street, point.cinst_address_house_number, point.cinst_address_house_org_number, point.cinst_address_city, point.cinst_address_post_code));
|
|
180
|
+
};
|
|
181
|
+
this.composeAddress = (street, houseNumber, houseOrgNumber, city, postCode) => {
|
|
182
|
+
const numberPart = [houseNumber, houseOrgNumber].filter((part) => part !== null && part !== "").join("/");
|
|
183
|
+
const streetPart = [street, numberPart].filter((part) => part !== null && part !== "").join(" ");
|
|
184
|
+
const parts = [streetPart, city, postCode].filter((part) => part !== null && part !== "");
|
|
185
|
+
return parts.length > 0 ? parts.join(", ") : null;
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
exports.EnoBuildingDetailTransformation = EnoBuildingDetailTransformation;
|
|
190
|
+
exports.EnoBuildingDetailTransformation = EnoBuildingDetailTransformation = __decorate([
|
|
191
|
+
(0, tsyringe_1.injectable)()
|
|
192
|
+
], EnoBuildingDetailTransformation);
|
|
193
|
+
//# sourceMappingURL=EnoBuildingDetailTransformation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnoBuildingDetailTransformation.js","sourceRoot":"","sources":["../../../src/output-gateway/transformations/EnoBuildingDetailTransformation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { JSONSchemaType } from "@golemio/core/dist/shared/ajv";
|
|
2
|
+
import { Model, ModelAttributes } from "@golemio/core/dist/shared/sequelize";
|
|
3
|
+
import { IEnapoGidMapping } from "./interfaces/IEnapoGidMapping";
|
|
4
|
+
export declare class EnapoGidMappingModel extends Model<IEnapoGidMapping> implements IEnapoGidMapping {
|
|
5
|
+
static TABLE_NAME: string;
|
|
6
|
+
static REPOSITORY_NAME: string;
|
|
7
|
+
place_id: string;
|
|
8
|
+
id_type: "ean" | "eic";
|
|
9
|
+
commodity: "electricity" | "gas" | "heat" | "water";
|
|
10
|
+
gid: string;
|
|
11
|
+
is_first_gid: boolean;
|
|
12
|
+
link_source: string;
|
|
13
|
+
valid_from: string | null;
|
|
14
|
+
valid_to: string | null;
|
|
15
|
+
static attributeModel: ModelAttributes<EnapoGidMappingModel, IEnapoGidMapping>;
|
|
16
|
+
static jsonSchema: JSONSchemaType<IEnapoGidMapping[]>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnapoGidMappingModel = void 0;
|
|
4
|
+
const sequelize_1 = require("@golemio/core/dist/shared/sequelize");
|
|
5
|
+
class EnapoGidMappingModel extends sequelize_1.Model {
|
|
6
|
+
}
|
|
7
|
+
exports.EnapoGidMappingModel = EnapoGidMappingModel;
|
|
8
|
+
EnapoGidMappingModel.TABLE_NAME = "enapo_gid_mapping";
|
|
9
|
+
EnapoGidMappingModel.REPOSITORY_NAME = "EnapoGidMappingRepository";
|
|
10
|
+
EnapoGidMappingModel.attributeModel = {
|
|
11
|
+
place_id: {
|
|
12
|
+
type: sequelize_1.DataTypes.STRING(50),
|
|
13
|
+
allowNull: false,
|
|
14
|
+
primaryKey: true,
|
|
15
|
+
},
|
|
16
|
+
id_type: {
|
|
17
|
+
type: sequelize_1.DataTypes.STRING(10),
|
|
18
|
+
allowNull: false,
|
|
19
|
+
},
|
|
20
|
+
commodity: {
|
|
21
|
+
type: sequelize_1.DataTypes.STRING(20),
|
|
22
|
+
allowNull: false,
|
|
23
|
+
},
|
|
24
|
+
gid: {
|
|
25
|
+
type: sequelize_1.DataTypes.STRING,
|
|
26
|
+
allowNull: false,
|
|
27
|
+
primaryKey: true,
|
|
28
|
+
},
|
|
29
|
+
is_first_gid: {
|
|
30
|
+
type: sequelize_1.DataTypes.BOOLEAN,
|
|
31
|
+
allowNull: false,
|
|
32
|
+
defaultValue: false,
|
|
33
|
+
},
|
|
34
|
+
link_source: {
|
|
35
|
+
type: sequelize_1.DataTypes.STRING(50),
|
|
36
|
+
allowNull: false,
|
|
37
|
+
primaryKey: true,
|
|
38
|
+
},
|
|
39
|
+
valid_from: {
|
|
40
|
+
type: sequelize_1.DataTypes.DATEONLY,
|
|
41
|
+
},
|
|
42
|
+
valid_to: {
|
|
43
|
+
type: sequelize_1.DataTypes.DATEONLY,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
EnapoGidMappingModel.jsonSchema = {
|
|
47
|
+
type: "array",
|
|
48
|
+
items: {
|
|
49
|
+
type: "object",
|
|
50
|
+
properties: {
|
|
51
|
+
place_id: { type: "string" },
|
|
52
|
+
id_type: { type: "string", enum: ["ean", "eic"] },
|
|
53
|
+
commodity: { type: "string", enum: ["electricity", "gas", "heat", "water"] },
|
|
54
|
+
gid: { type: "string" },
|
|
55
|
+
is_first_gid: { type: "boolean" },
|
|
56
|
+
link_source: { type: "string" },
|
|
57
|
+
valid_from: { oneOf: [{ type: "string" }, { type: "null", nullable: true }] },
|
|
58
|
+
valid_to: { oneOf: [{ type: "string" }, { type: "null", nullable: true }] },
|
|
59
|
+
},
|
|
60
|
+
required: ["place_id", "id_type", "commodity", "gid", "is_first_gid", "link_source"],
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=EnapoGidMappingModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnapoGidMappingModel.js","sourceRoot":"","sources":["../../../../src/schema-definitions/models/enapo/EnapoGidMappingModel.ts"],"names":[],"mappings":";;;AACA,mEAAwF;AAGxF,MAAa,oBAAqB,SAAQ,iBAAuB;;AAAjE,oDAmEC;AAlEiB,+BAAU,GAAG,mBAAmB,CAAC;AACjC,oCAAe,GAAG,2BAA2B,CAAC;AAW9C,mCAAc,GAA4D;IACpF,QAAQ,EAAE;QACN,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI;KACnB;IACD,OAAO,EAAE;QACL,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,SAAS,EAAE,KAAK;KACnB;IACD,SAAS,EAAE;QACP,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,SAAS,EAAE,KAAK;KACnB;IACD,GAAG,EAAE;QACD,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI;KACnB;IACD,YAAY,EAAE;QACV,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACtB;IACD,WAAW,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI;KACnB;IACD,UAAU,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,QAAQ;KAC3B;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,qBAAS,CAAC,QAAQ;KAC3B;CACJ,CAAC;AAEY,+BAAU,GAAuC;IAC3D,IAAI,EAAE,OAAO;IACb,KAAK,EAAE;QACH,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACR,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC5B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACjD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;YAC5E,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACvB,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACjC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC/B,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE;YAC7E,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE;SAC9E;QACD,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC;KACvF;CACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type EnapoCommodity = "electricity" | "gas" | "heat" | "water";
|
|
2
|
+
export interface IEnapoGidMapping {
|
|
3
|
+
place_id: string;
|
|
4
|
+
id_type: "ean" | "eic";
|
|
5
|
+
commodity: EnapoCommodity;
|
|
6
|
+
gid: string;
|
|
7
|
+
is_first_gid: boolean;
|
|
8
|
+
link_source: string;
|
|
9
|
+
valid_from: string | null;
|
|
10
|
+
valid_to: string | null;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IEnapoGidMapping.js","sourceRoot":"","sources":["../../../../../src/schema-definitions/models/enapo/interfaces/IEnapoGidMapping.ts"],"names":[],"mappings":""}
|
|
@@ -8,7 +8,7 @@ export declare class AddressModel extends Model<IAddress> implements IAddress {
|
|
|
8
8
|
poradi: number;
|
|
9
9
|
zdroj: string;
|
|
10
10
|
id: number;
|
|
11
|
-
popis: string;
|
|
11
|
+
popis: string | null;
|
|
12
12
|
hlavni: boolean;
|
|
13
13
|
static attributeModel: ModelAttributes<AddressModel, IAddress>;
|
|
14
14
|
static jsonSchema: JSONSchemaType<IAddress[]>;
|
|
@@ -39,7 +39,7 @@ AddressModel.jsonSchema = {
|
|
|
39
39
|
poradi: { type: "number" },
|
|
40
40
|
zdroj: { type: "string" },
|
|
41
41
|
id: { type: "number" },
|
|
42
|
-
popis: { type: "string" },
|
|
42
|
+
popis: { oneOf: [{ type: "string" }, { type: "null", nullable: true }] },
|
|
43
43
|
hlavni: { type: "boolean" },
|
|
44
44
|
},
|
|
45
45
|
required: ["gid", "gid_typ", "poradi", "zdroj"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddressModel.js","sourceRoot":"","sources":["../../../../src/schema-definitions/models/eno/AddressModel.ts"],"names":[],"mappings":";;;AACA,mEAAwF;AAGxF,MAAa,YAAa,SAAQ,iBAAe;;AAAjD,oCAmDC;AAlD0B,uBAAU,GAAG,YAAY,CAAC;AAUnC,2BAAc,GAA4C;IACpE,GAAG,EAAE;QACD,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,qBAAS,CAAC,IAAI;KACvB;IACD,OAAO,EAAE;QACL,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,qBAAS,CAAC,IAAI;KACvB;IACD,MAAM,EAAE;QACJ,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,qBAAS,CAAC,MAAM;KACzB;IACD,KAAK,EAAE;QACH,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,qBAAS,CAAC,IAAI;KACvB;IACD,EAAE,EAAE;QACA,IAAI,EAAE,qBAAS,CAAC,MAAM;KACzB;IACD,KAAK,EAAE,qBAAS,CAAC,IAAI;IACrB,MAAM,EAAE,qBAAS,CAAC,OAAO;CAC5B,CAAC;AAEY,uBAAU,GAA+B;IACnD,IAAI,EAAE,OAAO;IACb,KAAK,EAAE;QACH,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACR,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACvB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"AddressModel.js","sourceRoot":"","sources":["../../../../src/schema-definitions/models/eno/AddressModel.ts"],"names":[],"mappings":";;;AACA,mEAAwF;AAGxF,MAAa,YAAa,SAAQ,iBAAe;;AAAjD,oCAmDC;AAlD0B,uBAAU,GAAG,YAAY,CAAC;AAUnC,2BAAc,GAA4C;IACpE,GAAG,EAAE;QACD,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,qBAAS,CAAC,IAAI;KACvB;IACD,OAAO,EAAE;QACL,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,qBAAS,CAAC,IAAI;KACvB;IACD,MAAM,EAAE;QACJ,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,qBAAS,CAAC,MAAM;KACzB;IACD,KAAK,EAAE;QACH,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,qBAAS,CAAC,IAAI;KACvB;IACD,EAAE,EAAE;QACA,IAAI,EAAE,qBAAS,CAAC,MAAM;KACzB;IACD,KAAK,EAAE,qBAAS,CAAC,IAAI;IACrB,MAAM,EAAE,qBAAS,CAAC,OAAO;CAC5B,CAAC;AAEY,uBAAU,GAA+B;IACnD,IAAI,EAAE,OAAO;IACb,KAAK,EAAE;QACH,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACR,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACvB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACtB,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE;YACxE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC9B;QACD,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC;KAClD;CACJ,CAAC"}
|
|
@@ -512,7 +512,7 @@ Task zpracovává zasílaná data o spotřebě elektřiny. Data jsou nám zasíl
|
|
|
512
512
|
- v případě, že se u measurementů vyskytnou dvě hodnoty ve stejném čase, tak se hodnoty sečtou viz [sumDuplicates](../src/integration-engine/commodity-providers/helper/PreMeasurementFilter.ts)
|
|
513
513
|
- device_serial_number is extracted from raw_data `meter_replaced` value
|
|
514
514
|
- default time for meter change is set to static value `10:00` Europe/Prague time
|
|
515
|
-
- If change occurs e.g. `"meter_replaced": "2025-06-19|54292510|55505332|2025-06-30|55505332|96933662"` measurements before 19.6.2025 will have serial number `54292510`
|
|
515
|
+
- If change occurs e.g. `"meter_replaced": "2025-06-19|54292510|55505332|2025-06-30|55505332|96933662"` measurements before 19.6.2025 will have serial number `54292510` measurements after `2025-06-19 10:00` will have serial number `55505332` and measurements after `2025-06-30 10:00` will have serial number `96933662`
|
|
516
516
|
- [DeviceSerialNumberExtractor](../src/integration-engine/enapo/transformations/pre/helpers/DeviceSerialNumberExtractor.ts)
|
|
517
517
|
- data modely
|
|
518
518
|
- [EnapoMeasurementsModel](../src/schema-definitions/models/enapo/EnapoMeasurementsModel.ts) tabulka `enapo_measurements`
|
|
@@ -651,6 +651,30 @@ Task stahuje geometrie (polygony) pro budovy a stavby ze systému ENO. Je automa
|
|
|
651
651
|
- unit testy
|
|
652
652
|
- [EnoGeometryTask.test.ts](../test/integration-engine/enapo/task/EnoGeometryTask.test.ts)
|
|
653
653
|
|
|
654
|
+
#### _task: DedSearchIndexRefreshTask_
|
|
655
|
+
|
|
656
|
+
Task přegeneruje materializovaný pohled `mv_ded_building_search`, nad kterým běží vyhledávací endpoint `/v2/energetics/ded/buildings`.
|
|
657
|
+
|
|
658
|
+
- vstupní rabbitmq fronta
|
|
659
|
+
- název: dataplatform.enapoenergetics.refreshDedSearchIndex
|
|
660
|
+
- TTL: 30 minut (starší zpráva už je překonaná novější, nemá smysl ji zpracovávat)
|
|
661
|
+
- parametry: žádné — refresh vždy přestaví celý index, takže není co validovat a `schema` je záměrně `undefined`
|
|
662
|
+
- cron definice
|
|
663
|
+
- cron.dataplatform.enapoenergetics.refreshDedSearchIndex — noční pojistka po okně synchronizace ENO
|
|
664
|
+
- rabin `0 30 3 * * *`
|
|
665
|
+
- prod `0 30 3 * * *`
|
|
666
|
+
- samotná definice cronu je vedena mimo tento repozitář (deployment konfigurace); hodnoty výše jsou zamýšlený rozvrh, běžnou cestou přestavby indexu je událost z [EnoGeometryTask](#task-enogeometrytask)
|
|
667
|
+
- spouštění na základě událostí
|
|
668
|
+
- [EnoGeometryTask](#task-enogeometrytask) po dokončení odesílá zprávu do fronty `refreshDedSearchIndex`; geometrie je poslední krok obou ENO řetězců (budovy i stavby ji spouštějí), takže se index přestaví jednou na konci, ne po každém dílčím tasku
|
|
669
|
+
- selhání tohoto odeslání se pouze zaloguje a task se nepřeposílá do fronty znovu — geometrie je už uložená a noční běh je pojistka
|
|
670
|
+
- data modely
|
|
671
|
+
- [DedSearchIndexRepository](../src/integration-engine/enapo/repositories/DedSearchIndexRepository.ts) — `REFRESH MATERIALIZED VIEW CONCURRENTLY energetics.mv_ded_building_search`, kontrakt [IDedSearchIndexRepository](../src/integration-engine/enapo/repositories/interfaces/IDedSearchIndexRepository.ts)
|
|
672
|
+
- funkce
|
|
673
|
+
- **CONCURRENTLY**: refresh neblokuje čtenáře, takže vyhledávání funguje i během přestavby; vyžaduje unikátní index nad `gid` (vytvořen migrací) a **nesmí běžet v transakci** — proto se příkaz posílá na běžné (autocommit) spojení a nikdy se neobaluje transakcí
|
|
674
|
+
- ve fixturách pro testy se používá neconcurrent `REFRESH MATERIALIZED VIEW` (v transakci loaderu concurrent varianta není povolená)
|
|
675
|
+
- unit testy
|
|
676
|
+
- [DedSearchIndexRefreshTask.test.ts](../test/integration-engine/enapo/task/DedSearchIndexRefreshTask.test.ts)
|
|
677
|
+
|
|
654
678
|
#### _PPAS Distribution API_
|
|
655
679
|
|
|
656
680
|
- zdroj dat
|
|
@@ -813,12 +837,28 @@ Task stahuje data o měřidlech a spotřebách z Porsenna API (e-Manazer).
|
|
|
813
837
|
- zdrojový soubor: [openapi-output.yaml](./openapi-output.yaml)
|
|
814
838
|
- rabin: https://rabin.golemio.cz/v2/docs/openapi/
|
|
815
839
|
- golem: https://api.golemio.cz/v2/docs/openapi/
|
|
816
|
-
- přístup je řízen pomocí interního parametru `accessLimit`, který
|
|
840
|
+
- přístup je řízen pomocí interního parametru `accessLimit`, který nastavuje permission proxy (klient ho neposílá)
|
|
817
841
|
- při obdržení dotazu na API se stáhnou povolené organizace z tabulky `access_limit` a omezí se podle toho dotazy do databáze
|
|
818
842
|
- pokud je `accessLimit` nastaven na `admin`, tak se vždy dotazuje na všechny organizace
|
|
843
|
+
- `accessLimit` vyžadují všechny endpointy nad původní datovou doménou OICT Energetika (tabulky `organizations*` a `consumption_energy_*`), kde jsou data vázaná na organizace; endpointy projektu ENAPO (aktuální oficiální zkratka **DeD** — v URL se používá `/ded/`, tabulky si ponechávají prefix `enapo_` / `eno_`) parametr nepoužívají vůbec — data nejsou vázaná na organizace a validace `checkErrors` (`checkExact`) parametr odmítne jako nedeklarovaný s HTTP 400
|
|
819
844
|
|
|
820
845
|
### API
|
|
821
846
|
|
|
847
|
+
Přehled endpointů a parametru `accessLimit`:
|
|
848
|
+
|
|
849
|
+
| Endpoint | Datová doména (tabulky) | `accessLimit` |
|
|
850
|
+
| --------------------------------------------- | ---------------------------------------- | ---------------------------------------------- |
|
|
851
|
+
| `/v2/energetics/buildings` | OICT Energetika (`consumption_energy_*`) | povinný |
|
|
852
|
+
| `/v2/energetics/buildings/:id` | OICT Energetika (`consumption_energy_*`) | povinný |
|
|
853
|
+
| `/v2/energetics/organizations` | OICT Energetika (`organizations*`) | povinný |
|
|
854
|
+
| `/v2/energetics/organizations/:id` | OICT Energetika (`organizations*`) | povinný |
|
|
855
|
+
| `/v2/energetics/devices` | OICT Energetika (`consumption_energy_*`) | povinný |
|
|
856
|
+
| `/v2/energetics/devices/:id` | OICT Energetika (`consumption_energy_*`) | povinný |
|
|
857
|
+
| `/v2/energetics/measurements` | OICT Energetika (`consumption_energy_*`) | povinný |
|
|
858
|
+
| `/v2/energetics/measurements/monthly-reading` | OICT Energetika (`consumption_energy_*`) | povinný |
|
|
859
|
+
| `/v2/energetics/ded/buildings` | DeD / ENAPO (`enapo_*`, `eno_*`) | nepoužívá se — parametr je odmítnut s HTTP 400 |
|
|
860
|
+
| `/v2/energetics/ded/buildings/:gid` | DeD / ENAPO (`enapo_*`, `eno_*`) | nepoužívá se — parametr je odmítnut s HTTP 400 |
|
|
861
|
+
|
|
822
862
|
#### _/v2/energetics/buildings_
|
|
823
863
|
|
|
824
864
|
#### _/v2/energetics/buildings/:id_
|
|
@@ -850,3 +890,51 @@ Task stahuje data o měřidlech a spotřebách z Porsenna API (e-Manazer).
|
|
|
850
890
|
|
|
851
891
|
- zdrojové tabulky
|
|
852
892
|
- consumption_energy_measurements
|
|
893
|
+
|
|
894
|
+
#### _/v2/energetics/ded/buildings_
|
|
895
|
+
|
|
896
|
+
- našeptávač (suggestion endpoint) pro mapu DeD — vyhledání budovy podle názvu, adresy, GID, EAN, EIC nebo OM identifikátoru
|
|
897
|
+
- přístup: bez `accessLimit` — stejně jako detail budovy (viz níže); jiné než deklarované query parametry endpoint odmítne s HTTP 400
|
|
898
|
+
- parametry
|
|
899
|
+
- `q` (povinný) — hledaný text, 1–100 znaků; jedno vstupní pole pro všechny typy hledání
|
|
900
|
+
- `limit` (volitelný) — 1–50, výchozí 10
|
|
901
|
+
- zdrojové tabulky a pohledy
|
|
902
|
+
- `mv_ded_building_search` — materializovaný pohled, jeden řádek na GID budovy; skládá se z `v_enapo_building_detail`, `eno_adresa` (`gid_typ = 'budova'`), `v_enapo_building_consumption_points`, `v_enapo_building_porsenna_devices` a `eno_geometrie`; vyřazené budovy (`eno_vyrazeno`) jsou z indexu vynechány
|
|
903
|
+
- stavby (`eno_stavba`) endpoint záměrně nepokrývá — stejně jako detail budovy
|
|
904
|
+
- funkce
|
|
905
|
+
- **Dvě úrovně shody**: přesná shoda na EAN / EIC / OM / GID má vlastní úroveň se skóre 1000 a fuzzy kandidáti se v takovém případě zahodí (`matched_exactly = true`). Jeden identifikátor může být namapován na více budov, takže i přesná shoda může vrátit více výsledků — mapa má zoomovat automaticky jen při jediném výsledku
|
|
906
|
+
- **Vážené řazení**: kombinace fulltextu (`tsvector` s vahami A/B/C/D — A název a označení, B hlavní adresa, C ostatní adresy, D identifikátory) a trigramové podobnosti; váhy jsou v [DedSearchWeights.ts](../src/output-gateway/constants/DedSearchWeights.ts) včetně zdůvodnění
|
|
907
|
+
- **Deterministická množina kandidátů**: fulltextová i trigramová větev si své kandidáty nejdřív seřadí (`ts_rank_cd`, resp. `<->`) a teprve pak ořízne na `DED_SEARCH_FTS_CANDIDATES` / `DED_SEARCH_FUZZY_CANDIDATES`; bez toho by `LIMIT` vzal libovolné řádky v pořadí, v jakém je vrátil index, a stejný dotaz by po autovacuum mohl odpovědět jinak
|
|
908
|
+
- **Evidenční jednotka**: `registration_unit` má záměrně stejný tvar (`id` / `kod` / `nazev` / `typ`) jako na detailu budovy, takže klient může pro obě odpovědi použít jeden typ
|
|
909
|
+
- **Projekce PostGIS až na výsledné stránce**: `ST_AsGeoJSON`, bbox a centroid se počítají až po filtru a `LIMIT`; trigramová větev se navíc při přesné shodě vůbec nespustí, protože její řádky by finální `WHERE` stejně zahodil
|
|
910
|
+
- **Diakritika**: dotaz i indexované sloupce se normalizují přes `lower(public.unaccent(...))`, takže hledání bez diakritiky funguje běžně; stejný výraz musí zůstat v migraci i v [DedBuildingSearchRepository](../src/output-gateway/repositories/DedBuildingSearchRepository.ts), jinak by normalizované sloupce přestaly odpovídat hledanému textu
|
|
911
|
+
- **Geometrie**: `geometry` (GeoJSON), `bbox` a `centroid` se počítají z PostGIS geometrie uložené v pohledu už v EPSG:4326 (zdroj `eno_geometrie` je v S-JTSK 5514); u budov bez použitelné geometrie jsou všechny tři `null` a `geometry_source` je `null`
|
|
912
|
+
- **Nečitelná geometrie**: `f_ded_safe_geom` vrací pro nevalidní WKT `NULL` místo chyby, aby jeden vadný řádek nezastavil refresh indexu
|
|
913
|
+
- index je aktualizován taskem [DedSearchIndexRefreshTask](#task-dedsearchindexrefreshtask)
|
|
914
|
+
- unit testy
|
|
915
|
+
- [V2EnoBuildingsSearchRouter.test.ts](../test/output-gateway/routers/v2/V2EnoBuildingsSearchRouter.test.ts)
|
|
916
|
+
- [DedBuildingSearchTransformation.test.ts](../test/output-gateway/transformations/DedBuildingSearchTransformation.test.ts)
|
|
917
|
+
|
|
918
|
+
#### _/v2/energetics/ded/buildings/:gid_
|
|
919
|
+
|
|
920
|
+
- detail budovy (ENO) s odběrnými místy (OM) a technickými parametry pro DeD
|
|
921
|
+
- přístup: bez `accessLimit` — endpoint čte výhradně tabulky ENAPO (`enapo_*`, `eno_*`), které nejsou vázané na organizace z domény OICT Energetika, takže se nefiltruje přes tabulku `access_limit`; parametr `accessLimit` (ani žádný jiný query parametr) endpoint nepřijímá a vrací pro něj 400
|
|
922
|
+
- zdrojové tabulky a pohledy
|
|
923
|
+
- `v_enapo_building_detail` — pohled nad `eno_budova` (dedup přes `zdroj` pomocí `DISTINCT ON (gid)`)
|
|
924
|
+
- `eno_adresa` — všechny adresy budovy (deduplikované podle `popis`)
|
|
925
|
+
- `v_enapo_building_consumption_points` — pohled nad `enapo_gid_mapping` obohacený o:
|
|
926
|
+
- `enapo_pre_metadata_history` — poslední měsíc metadat PRE (jen EAN / elektřina)
|
|
927
|
+
- `enapo_ppas_distribution_invoice(_installation)` — poslední nestornovaná distribuční faktura (jen EIC / plyn, join přes `eic` v tabulce instalací)
|
|
928
|
+
- `enapo_ppas_commercial_invoice(_installations)` — poslední nestornovaná obchodní faktura (jen EIC / plyn, join přes `eic`)
|
|
929
|
+
- `UNION ALL` větev pro OM známá pouze z Porsenny (e-manažer): hlavní měřidla (`level = main`) z `enapo_porsenna_devices`, jejichž `identifier` není namapován na daný GID v `enapo_gid_mapping`; `commodity` z typu měřidla (v reálných datech existují pouze `electricity_meter` / `gasometer` / `heat_meter` / `water_meter`), `id_type` odvozen přímo z komodity (elektřina → ean, plyn → eic, teplo a voda → `om` — standardní identifikátor nemají), `link_source = 'porsenna'`, `is_active` z `disabled_at`
|
|
930
|
+
- `v_enapo_building_porsenna_devices` — měřidla Porsenny s budovou (`enapo_porsenna_devices` × `enapo_porsenna_buildings` přes `(source, building_id)`); slouží pro obohacení OM o blok `porsenna` (měřidlo + podružná měřidla + roční spotřeby z `enapo_porsenna_consumption`) a pro blok `energy_management` na úrovni budovy
|
|
931
|
+
- `enapo_ppas_distribution_invoice_device` / `_price`, `enapo_ppas_commercial_invoice_device` / `_price` — dotahované podle id faktury a filtrované podle `place_id` instalace (jedna faktura může účtovat více OM, bez filtru by se řádky mísily)
|
|
932
|
+
- mapovací tabulka `enapo_gid_mapping`
|
|
933
|
+
- vlastní kontrakt modulu; aktuálně plněná mock daty (`link_source = 'mock'`)
|
|
934
|
+
- v budoucnu ji bude plnit synchronizační task z dbt výstupu datového týmu (`tmp.ded_gid_mapping`, `link_source = 'energobroker_kod_eno'`)
|
|
935
|
+
- sloupec `is_active` v pohledu je odvozený z `valid_to` (NULL nebo v budoucnu = aktivní); expirovaná mapování se vracejí s příznakem
|
|
936
|
+
- struktura odpovědi
|
|
937
|
+
- komoditně specifická data jsou vnořená pod klíči `electricity` / `gas` u každého OM; v odpovědi je pouze klíč odpovídající poli `commodity`, ostatní jsou zcela vynechány
|
|
938
|
+
- detail existuje, pokud pro GID máme jakákoli data — zná ho alespoň jeden zdroj (`eno_budova`, `eno_adresa`, `enapo_gid_mapping`, nebo Porsenna): pokud GID není v `eno_budova`, ale má adresy, namapovaná OM či měřidla, vrací se 200 s `building: null` a chybějící části jako `null` / prázdná pole (cca 29 % GIDů z mapování nemá záznam v ENO); 404 pouze pokud GID nezná žádný zdroj
|
|
939
|
+
- OM známé z obou zdrojů (mapování i Porsenna) je v odpovědi jednou — data Porsenny jsou vnořená jako blok `porsenna` v příslušném komoditním klíči; duplicitní záznamy nevznikají
|
|
940
|
+
- budoucí komodity (teplo, voda) se přidají jako nové klíče bez breaking change
|