@golemio/energetics 1.12.1 → 1.12.2-dev.2727447026
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 +13 -0
- package/db/example/06_eno.sql +25 -0
- package/db/example/07_enapo_om_detail.sql +131 -0
- package/db/migrations/postgresql/20260729100000-enapo-gid-mapping-om-detail.js +53 -0
- package/db/migrations/postgresql/20260730120000-enapo-om-detail-porsenna.js +53 -0
- package/db/migrations/postgresql/sqls/20260729100000-enapo-gid-mapping-om-detail-down.sql +3 -0
- package/db/migrations/postgresql/sqls/20260729100000-enapo-gid-mapping-om-detail-up.sql +179 -0
- package/db/migrations/postgresql/sqls/20260730120000-enapo-om-detail-porsenna-down.sql +132 -0
- package/db/migrations/postgresql/sqls/20260730120000-enapo-om-detail-porsenna-up.sql +287 -0
- package/db/scripts/ded_gid_mapping_mock_import.sql +48 -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 +11 -0
- package/dist/output-gateway/controllers/v2/EnoBuildingsController.js +53 -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 +9 -1
- package/dist/output-gateway/ioc/Di.js.map +1 -1
- package/dist/output-gateway/ioc/ModuleContainerToken.d.ts +4 -0
- package/dist/output-gateway/ioc/ModuleContainerToken.js +4 -0
- package/dist/output-gateway/ioc/ModuleContainerToken.js.map +1 -1
- package/dist/output-gateway/models/EnoBuildingDetailViewModel.d.ts +35 -0
- package/dist/output-gateway/models/EnoBuildingDetailViewModel.js +43 -0
- package/dist/output-gateway/models/EnoBuildingDetailViewModel.js.map +1 -0
- package/dist/output-gateway/models/EnoConsumptionPointViewModel.d.ts +105 -0
- package/dist/output-gateway/models/EnoConsumptionPointViewModel.js +118 -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/IEnoBuildingDetailView.d.ts +30 -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 +104 -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/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/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/IEnoBuildingDetailResponse.d.ts +106 -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/v2/V2EnoBuildingsRouter.d.ts +9 -0
- package/dist/output-gateway/routers/v2/V2EnoBuildingsRouter.js +40 -0
- package/dist/output-gateway/routers/v2/V2EnoBuildingsRouter.js.map +1 -0
- package/dist/output-gateway/transformations/EnoBuildingDetailTransformation.d.ts +14 -0
- package/dist/output-gateway/transformations/EnoBuildingDetailTransformation.js +149 -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 +41 -2
- package/docs/openapi-output.yaml +260 -1
- package/package.json +1 -1
|
@@ -0,0 +1,40 @@
|
|
|
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.V2EnoBuildingsRouter = void 0;
|
|
13
|
+
const Links_1 = require("../../constants/Links");
|
|
14
|
+
const RouteVersion_1 = require("../../constants/RouteVersion");
|
|
15
|
+
const Di_1 = require("../../ioc/Di");
|
|
16
|
+
const ModuleContainerToken_1 = require("../../ioc/ModuleContainerToken");
|
|
17
|
+
const AbstractRouter_1 = require("@golemio/core/dist/helpers/routing/AbstractRouter");
|
|
18
|
+
const Validation_1 = require("@golemio/core/dist/output-gateway/Validation");
|
|
19
|
+
const ioc_1 = require("@golemio/core/dist/output-gateway/ioc");
|
|
20
|
+
const express_validator_1 = require("@golemio/core/dist/shared/express-validator");
|
|
21
|
+
const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
|
|
22
|
+
let V2EnoBuildingsRouter = class V2EnoBuildingsRouter extends AbstractRouter_1.AbstractRouter {
|
|
23
|
+
constructor() {
|
|
24
|
+
super(RouteVersion_1.RouteVersion.v2, Links_1.DED_BUILDING_PATH);
|
|
25
|
+
this.maxAge = 6 * 60 * 60; // 6 hours
|
|
26
|
+
this.staleWhileRevalidate = 60; // 1 minute
|
|
27
|
+
this.controller = Di_1.OGEnergeticsContainer.resolve(ModuleContainerToken_1.ModuleContainerToken.EnoBuildingsController);
|
|
28
|
+
this.cacheHeaderMiddleware = Di_1.OGEnergeticsContainer.resolve(ioc_1.ContainerToken.CacheHeaderMiddleware);
|
|
29
|
+
this.initRoutes();
|
|
30
|
+
}
|
|
31
|
+
initRoutes() {
|
|
32
|
+
this.router.get("/:gid", (0, express_validator_1.param)("gid").exists().isString().not().isArray(), Validation_1.checkErrors, this.cacheHeaderMiddleware.getMiddleware(this.maxAge, this.staleWhileRevalidate), this.controller.getOne);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.V2EnoBuildingsRouter = V2EnoBuildingsRouter;
|
|
36
|
+
exports.V2EnoBuildingsRouter = V2EnoBuildingsRouter = __decorate([
|
|
37
|
+
(0, tsyringe_1.injectable)(),
|
|
38
|
+
__metadata("design:paramtypes", [])
|
|
39
|
+
], V2EnoBuildingsRouter);
|
|
40
|
+
//# sourceMappingURL=V2EnoBuildingsRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"V2EnoBuildingsRouter.js","sourceRoot":"","sources":["../../../../src/output-gateway/routers/v2/V2EnoBuildingsRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAAwD;AACxD,+DAA0D;AAE1D,qCAAmD;AACnD,yEAAoE;AACpE,sFAAmF;AAEnF,6EAA2E;AAC3E,+DAAuE;AACvE,mFAAoE;AACpE,iEAAgE;AAGzD,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,+BAAc;IAMpD;QACI,KAAK,CAAC,2BAAY,CAAC,EAAE,EAAE,yBAAiB,CAAC,CAAC;QAJtC,WAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU;QAChC,yBAAoB,GAAG,EAAE,CAAC,CAAC,WAAW;QAI1C,IAAI,CAAC,UAAU,GAAG,0BAAqB,CAAC,OAAO,CAAyB,2CAAoB,CAAC,sBAAsB,CAAC,CAAC;QACrH,IAAI,CAAC,qBAAqB,GAAG,0BAAqB,CAAC,OAAO,CAAwB,oBAAc,CAAC,qBAAqB,CAAC,CAAC;QACxH,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAES,UAAU;QAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CACX,OAAO,EACP,IAAA,yBAAK,EAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAChD,wBAAW,EACX,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAChF,IAAI,CAAC,UAAU,CAAC,MAAM,CACzB,CAAC;IACN,CAAC;CACJ,CAAA;AAtBY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,qBAAU,GAAE;;GACA,oBAAoB,CAsBhC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IEnoBuildingDetailAggregate } from "../repositories/interfaces/IEnoBuildingDetailAggregate";
|
|
2
|
+
import { IEnoBuildingDetailResponse } from "../routers/interfaces/IEnoBuildingDetailResponse";
|
|
3
|
+
import { AbstractTransformation } from "@golemio/core/dist/helpers/transformation/AbstractTransformation";
|
|
4
|
+
export declare class EnoBuildingDetailTransformation extends AbstractTransformation<IEnoBuildingDetailAggregate, IEnoBuildingDetailResponse> {
|
|
5
|
+
name: string;
|
|
6
|
+
protected transformInternal: (element: IEnoBuildingDetailAggregate) => IEnoBuildingDetailResponse;
|
|
7
|
+
private transformPoint;
|
|
8
|
+
private transformElectricity;
|
|
9
|
+
private transformGas;
|
|
10
|
+
private buildPorsennaBlock;
|
|
11
|
+
private transformEnergyManagement;
|
|
12
|
+
private resolveAddress;
|
|
13
|
+
private composeAddress;
|
|
14
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
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 : (0, objectMappers_1.omitKeys)(element.building, ["gid"]),
|
|
21
|
+
addresses: element.addresses.map((address) => ({
|
|
22
|
+
popis: address.popis ?? null,
|
|
23
|
+
hlavni: address.hlavni ?? null,
|
|
24
|
+
poradi: address.poradi,
|
|
25
|
+
})),
|
|
26
|
+
energy_management: this.transformEnergyManagement(element),
|
|
27
|
+
consumption_points: element.points.map((point) => this.transformPoint(point, element)),
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
this.transformPoint = (point, aggregate) => {
|
|
31
|
+
const porsenna = this.buildPorsennaBlock(point, aggregate);
|
|
32
|
+
return {
|
|
33
|
+
place_id: point.place_id,
|
|
34
|
+
id_type: point.id_type,
|
|
35
|
+
commodity: point.commodity,
|
|
36
|
+
is_first_gid: point.is_first_gid,
|
|
37
|
+
is_active: point.is_active,
|
|
38
|
+
link_source: point.link_source,
|
|
39
|
+
valid_from: point.valid_from,
|
|
40
|
+
valid_to: point.valid_to,
|
|
41
|
+
address: this.resolveAddress(point),
|
|
42
|
+
...(point.commodity === "electricity" ? { electricity: this.transformElectricity(point, porsenna) } : {}),
|
|
43
|
+
...(point.commodity === "gas" ? { gas: this.transformGas(point, aggregate, porsenna) } : {}),
|
|
44
|
+
...(point.commodity === "heat" ? { heat: { porsenna } } : {}),
|
|
45
|
+
...(point.commodity === "water" ? { water: { porsenna } } : {}),
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
this.transformElectricity = (point, porsenna) => {
|
|
49
|
+
return {
|
|
50
|
+
metadata: point.md_year === null ? null : (0, objectMappers_1.stripPrefix)(point, "md_"),
|
|
51
|
+
...(porsenna === null ? {} : { porsenna }),
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
this.transformGas = (point, aggregate, porsenna) => {
|
|
55
|
+
return {
|
|
56
|
+
distribution: point.di_id === null
|
|
57
|
+
? null
|
|
58
|
+
: {
|
|
59
|
+
invoice: (0, objectMappers_1.stripPrefix)(point, "di_"),
|
|
60
|
+
devices: aggregate.distributionDevices
|
|
61
|
+
.filter((device) => device.invoice_id === point.di_id)
|
|
62
|
+
.map((device) => (0, objectMappers_1.omitKeys)(device, ["invoice_id"])),
|
|
63
|
+
prices: aggregate.distributionPrices
|
|
64
|
+
.filter((price) => price.invoice_id === point.di_id)
|
|
65
|
+
.map((price) => (0, objectMappers_1.omitKeys)(price, ["invoice_id", "customer_id"])),
|
|
66
|
+
},
|
|
67
|
+
commercial: point.ci_id === null
|
|
68
|
+
? null
|
|
69
|
+
: {
|
|
70
|
+
invoice: (0, objectMappers_1.stripPrefix)(point, "ci_"),
|
|
71
|
+
installation: (0, objectMappers_1.omitKeys)((0, objectMappers_1.stripPrefix)(point, "cii_"), ["place_id"]),
|
|
72
|
+
devices: aggregate.commercialDevices
|
|
73
|
+
.filter((device) => device.invoice_id === point.ci_id && device.place_id === point.cii_place_id)
|
|
74
|
+
.map((device) => (0, objectMappers_1.omitKeys)(device, ["invoice_id", "place_id"])),
|
|
75
|
+
prices: aggregate.commercialPrices
|
|
76
|
+
.filter((price) => price.invoice_id === point.ci_id && price.place_id === point.cii_place_id)
|
|
77
|
+
.map((price) => (0, objectMappers_1.omitKeys)(price, ["invoice_id", "customer_id", "place_id"])),
|
|
78
|
+
},
|
|
79
|
+
...(porsenna === null ? {} : { porsenna }),
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
this.buildPorsennaBlock = (point, aggregate) => {
|
|
83
|
+
const device = aggregate.porsennaDevices.find((candidate) => candidate.identifier === point.place_id && (candidate.level === null || candidate.level === "main"));
|
|
84
|
+
if (device === undefined) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
device: {
|
|
89
|
+
name: device.name,
|
|
90
|
+
type: device.type,
|
|
91
|
+
level: device.level,
|
|
92
|
+
measurement_target: device.measurement_target,
|
|
93
|
+
meter_number: device.meter_number,
|
|
94
|
+
supply_point_number: device.supply_point_number,
|
|
95
|
+
disabled_at: device.disabled_at,
|
|
96
|
+
tenant: device.source,
|
|
97
|
+
},
|
|
98
|
+
sub_devices: aggregate.porsennaDevices
|
|
99
|
+
.filter((candidate) => candidate.parent_device_id === device.device_id)
|
|
100
|
+
.map((candidate) => ({
|
|
101
|
+
name: candidate.name,
|
|
102
|
+
type: candidate.type,
|
|
103
|
+
meter_number: candidate.meter_number,
|
|
104
|
+
disabled_at: candidate.disabled_at,
|
|
105
|
+
})),
|
|
106
|
+
yearly_consumption: aggregate.porsennaConsumption
|
|
107
|
+
.filter((row) => row.device_id === device.device_id && row.var === "yearly")
|
|
108
|
+
.map((row) => ({
|
|
109
|
+
period: row.period,
|
|
110
|
+
value: row.value,
|
|
111
|
+
unit: row.unit,
|
|
112
|
+
days_covered: row.count,
|
|
113
|
+
})),
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
this.transformEnergyManagement = (aggregate) => {
|
|
117
|
+
const devices = aggregate.porsennaDevices;
|
|
118
|
+
if (devices.length === 0) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
const primary = devices[0];
|
|
122
|
+
return {
|
|
123
|
+
source: primary.source,
|
|
124
|
+
building_name: primary.building_name,
|
|
125
|
+
address: this.composeAddress(primary.building_street, primary.building_house_number, primary.building_street_number, primary.building_city, primary.building_postcode),
|
|
126
|
+
devices_total: devices.length,
|
|
127
|
+
devices_active: devices.filter((device) => device.disabled_at === null).length,
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
this.resolveAddress = (point) => {
|
|
131
|
+
if (point.md_address !== null) {
|
|
132
|
+
return point.md_address;
|
|
133
|
+
}
|
|
134
|
+
return (this.composeAddress(point.di_installations_address_street, point.di_installations_address_house_number, point.di_installations_address_house_org_number, point.di_installations_address_city, point.di_installations_address_post_code) ??
|
|
135
|
+
this.composeAddress(point.cii_address_street, point.cii_address_house_number, point.cii_address_house_org_number, point.cii_address_city, point.cii_address_post_code));
|
|
136
|
+
};
|
|
137
|
+
this.composeAddress = (street, houseNumber, houseOrgNumber, city, postCode) => {
|
|
138
|
+
const numberPart = [houseNumber, houseOrgNumber].filter((part) => part !== null && part !== "").join("/");
|
|
139
|
+
const streetPart = [street, numberPart].filter((part) => part !== null && part !== "").join(" ");
|
|
140
|
+
const parts = [streetPart, city, postCode].filter((part) => part !== null && part !== "");
|
|
141
|
+
return parts.length > 0 ? parts.join(", ") : null;
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
exports.EnoBuildingDetailTransformation = EnoBuildingDetailTransformation;
|
|
146
|
+
exports.EnoBuildingDetailTransformation = EnoBuildingDetailTransformation = __decorate([
|
|
147
|
+
(0, tsyringe_1.injectable)()
|
|
148
|
+
], EnoBuildingDetailTransformation);
|
|
149
|
+
//# 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`
|
|
@@ -811,12 +811,27 @@ Task stahuje data o měřidlech a spotřebách z Porsenna API (e-Manazer).
|
|
|
811
811
|
- zdrojový soubor: [openapi-output.yaml](./openapi-output.yaml)
|
|
812
812
|
- rabin: https://rabin.golemio.cz/v2/docs/openapi/
|
|
813
813
|
- golem: https://api.golemio.cz/v2/docs/openapi/
|
|
814
|
-
- přístup je řízen pomocí interního parametru `accessLimit`, který
|
|
814
|
+
- přístup je řízen pomocí interního parametru `accessLimit`, který nastavuje permission proxy (klient ho neposílá)
|
|
815
815
|
- 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
|
|
816
816
|
- pokud je `accessLimit` nastaven na `admin`, tak se vždy dotazuje na všechny organizace
|
|
817
|
+
- `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
|
|
817
818
|
|
|
818
819
|
### API
|
|
819
820
|
|
|
821
|
+
Přehled endpointů a parametru `accessLimit`:
|
|
822
|
+
|
|
823
|
+
| Endpoint | Datová doména (tabulky) | `accessLimit` |
|
|
824
|
+
| --------------------------------------------- | ---------------------------------------- | ---------------------------------------------- |
|
|
825
|
+
| `/v2/energetics/buildings` | OICT Energetika (`consumption_energy_*`) | povinný |
|
|
826
|
+
| `/v2/energetics/buildings/:id` | OICT Energetika (`consumption_energy_*`) | povinný |
|
|
827
|
+
| `/v2/energetics/organizations` | OICT Energetika (`organizations*`) | povinný |
|
|
828
|
+
| `/v2/energetics/organizations/:id` | OICT Energetika (`organizations*`) | povinný |
|
|
829
|
+
| `/v2/energetics/devices` | OICT Energetika (`consumption_energy_*`) | povinný |
|
|
830
|
+
| `/v2/energetics/devices/:id` | OICT Energetika (`consumption_energy_*`) | povinný |
|
|
831
|
+
| `/v2/energetics/measurements` | OICT Energetika (`consumption_energy_*`) | povinný |
|
|
832
|
+
| `/v2/energetics/measurements/monthly-reading` | OICT Energetika (`consumption_energy_*`) | povinný |
|
|
833
|
+
| `/v2/energetics/ded/buildings/:gid` | DeD / ENAPO (`enapo_*`, `eno_*`) | nepoužívá se — parametr je odmítnut s HTTP 400 |
|
|
834
|
+
|
|
820
835
|
#### _/v2/energetics/buildings_
|
|
821
836
|
|
|
822
837
|
#### _/v2/energetics/buildings/:id_
|
|
@@ -848,3 +863,27 @@ Task stahuje data o měřidlech a spotřebách z Porsenna API (e-Manazer).
|
|
|
848
863
|
|
|
849
864
|
- zdrojové tabulky
|
|
850
865
|
- consumption_energy_measurements
|
|
866
|
+
|
|
867
|
+
#### _/v2/energetics/ded/buildings/:gid_
|
|
868
|
+
|
|
869
|
+
- detail budovy (ENO) s odběrnými místy (OM) a technickými parametry pro DeD
|
|
870
|
+
- 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
|
|
871
|
+
- zdrojové tabulky a pohledy
|
|
872
|
+
- `v_enapo_building_detail` — pohled nad `eno_budova` (dedup přes `zdroj` pomocí `DISTINCT ON (gid)`)
|
|
873
|
+
- `eno_adresa` — všechny adresy budovy (deduplikované podle `popis`)
|
|
874
|
+
- `v_enapo_building_consumption_points` — pohled nad `enapo_gid_mapping` obohacený o:
|
|
875
|
+
- `enapo_pre_metadata_history` — poslední měsíc metadat PRE (jen EAN / elektřina)
|
|
876
|
+
- `enapo_ppas_distribution_invoice` — poslední nestornovaná distribuční faktura (jen EIC / plyn, join přes `eic`)
|
|
877
|
+
- `enapo_ppas_commercial_invoice(_installations)` — poslední nestornovaná obchodní faktura (jen EIC / plyn, join přes `eic`)
|
|
878
|
+
- `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`
|
|
879
|
+
- `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
|
|
880
|
+
- `enapo_ppas_distribution_invoice_device` / `_price`, `enapo_ppas_commercial_invoice_device` / `_price` — dotahované podle id faktury
|
|
881
|
+
- mapovací tabulka `enapo_gid_mapping`
|
|
882
|
+
- vlastní kontrakt modulu; aktuálně plněná mock daty (`link_source = 'mock'`)
|
|
883
|
+
- 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'`)
|
|
884
|
+
- sloupec `is_active` v pohledu je odvozený z `valid_to` (NULL nebo v budoucnu = aktivní); expirovaná mapování se vracejí s příznakem
|
|
885
|
+
- struktura odpovědi
|
|
886
|
+
- 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
|
|
887
|
+
- 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
|
|
888
|
+
- 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í
|
|
889
|
+
- budoucí komodity (teplo, voda) se přidají jako nové klíče bez breaking change
|