@golemio/energetics 1.12.2-dev.2740928370 → 1.12.2-dev.2740931754

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/db/example/00_clear_test_data.sql +14 -0
  2. package/db/example/06_eno.sql +25 -0
  3. package/db/example/07_enapo_om_detail.sql +140 -0
  4. package/db/migrations/postgresql/20260807090000-enapo-gid-mapping-om-detail.js +53 -0
  5. package/db/migrations/postgresql/20260807091000-enapo-om-detail-porsenna.js +53 -0
  6. package/db/migrations/postgresql/sqls/20260807090000-enapo-gid-mapping-om-detail-down.sql +3 -0
  7. package/db/migrations/postgresql/sqls/20260807090000-enapo-gid-mapping-om-detail-up.sql +182 -0
  8. package/db/migrations/postgresql/sqls/20260807091000-enapo-om-detail-porsenna-down.sql +135 -0
  9. package/db/migrations/postgresql/sqls/20260807091000-enapo-om-detail-porsenna-up.sql +292 -0
  10. package/db/scripts/ded_gid_mapping_mock_import.sql +48 -0
  11. package/dist/output-gateway/constants/Links.d.ts +1 -0
  12. package/dist/output-gateway/constants/Links.js +2 -1
  13. package/dist/output-gateway/constants/Links.js.map +1 -1
  14. package/dist/output-gateway/controllers/v2/EnoBuildingsController.d.ts +11 -0
  15. package/dist/output-gateway/controllers/v2/EnoBuildingsController.js +53 -0
  16. package/dist/output-gateway/controllers/v2/EnoBuildingsController.js.map +1 -0
  17. package/dist/output-gateway/helpers/objectMappers.d.ts +10 -0
  18. package/dist/output-gateway/helpers/objectMappers.js +37 -0
  19. package/dist/output-gateway/helpers/objectMappers.js.map +1 -0
  20. package/dist/output-gateway/index.js +8 -1
  21. package/dist/output-gateway/index.js.map +1 -1
  22. package/dist/output-gateway/ioc/Di.js +9 -1
  23. package/dist/output-gateway/ioc/Di.js.map +1 -1
  24. package/dist/output-gateway/ioc/ModuleContainerToken.d.ts +4 -0
  25. package/dist/output-gateway/ioc/ModuleContainerToken.js +4 -0
  26. package/dist/output-gateway/ioc/ModuleContainerToken.js.map +1 -1
  27. package/dist/output-gateway/models/EnoBuildingDetailViewModel.d.ts +35 -0
  28. package/dist/output-gateway/models/EnoBuildingDetailViewModel.js +43 -0
  29. package/dist/output-gateway/models/EnoBuildingDetailViewModel.js.map +1 -0
  30. package/dist/output-gateway/models/EnoConsumptionPointViewModel.d.ts +106 -0
  31. package/dist/output-gateway/models/EnoConsumptionPointViewModel.js +119 -0
  32. package/dist/output-gateway/models/EnoConsumptionPointViewModel.js.map +1 -0
  33. package/dist/output-gateway/models/EnoPorsennaDeviceViewModel.d.ts +27 -0
  34. package/dist/output-gateway/models/EnoPorsennaDeviceViewModel.js +41 -0
  35. package/dist/output-gateway/models/EnoPorsennaDeviceViewModel.js.map +1 -0
  36. package/dist/output-gateway/models/interfaces/IEnoBuildingDetailView.d.ts +30 -0
  37. package/dist/output-gateway/models/interfaces/IEnoBuildingDetailView.js +3 -0
  38. package/dist/output-gateway/models/interfaces/IEnoBuildingDetailView.js.map +1 -0
  39. package/dist/output-gateway/models/interfaces/IEnoConsumptionPointView.d.ts +106 -0
  40. package/dist/output-gateway/models/interfaces/IEnoConsumptionPointView.js +3 -0
  41. package/dist/output-gateway/models/interfaces/IEnoConsumptionPointView.js.map +1 -0
  42. package/dist/output-gateway/models/interfaces/IEnoPorsennaDeviceView.d.ts +22 -0
  43. package/dist/output-gateway/models/interfaces/IEnoPorsennaDeviceView.js +3 -0
  44. package/dist/output-gateway/models/interfaces/IEnoPorsennaDeviceView.js.map +1 -0
  45. package/dist/output-gateway/repositories/AbstractNumericParsingRepository.d.ts +12 -0
  46. package/dist/output-gateway/repositories/AbstractNumericParsingRepository.js +41 -0
  47. package/dist/output-gateway/repositories/AbstractNumericParsingRepository.js.map +1 -0
  48. package/dist/output-gateway/repositories/EnoBuildingAddressesRepository.d.ts +8 -0
  49. package/dist/output-gateway/repositories/EnoBuildingAddressesRepository.js +62 -0
  50. package/dist/output-gateway/repositories/EnoBuildingAddressesRepository.js.map +1 -0
  51. package/dist/output-gateway/repositories/EnoBuildingDetailRepository.d.ts +18 -0
  52. package/dist/output-gateway/repositories/EnoBuildingDetailRepository.js +100 -0
  53. package/dist/output-gateway/repositories/EnoBuildingDetailRepository.js.map +1 -0
  54. package/dist/output-gateway/repositories/EnoConsumptionPointsRepository.d.ts +8 -0
  55. package/dist/output-gateway/repositories/EnoConsumptionPointsRepository.js +51 -0
  56. package/dist/output-gateway/repositories/EnoConsumptionPointsRepository.js.map +1 -0
  57. package/dist/output-gateway/repositories/EnoPorsennaDevicesRepository.d.ts +8 -0
  58. package/dist/output-gateway/repositories/EnoPorsennaDevicesRepository.js +51 -0
  59. package/dist/output-gateway/repositories/EnoPorsennaDevicesRepository.js.map +1 -0
  60. package/dist/output-gateway/repositories/PorsennaConsumptionsRepository.d.ts +8 -0
  61. package/dist/output-gateway/repositories/PorsennaConsumptionsRepository.js +52 -0
  62. package/dist/output-gateway/repositories/PorsennaConsumptionsRepository.js.map +1 -0
  63. package/dist/output-gateway/repositories/PpasInvoiceChildRepository.d.ts +13 -0
  64. package/dist/output-gateway/repositories/PpasInvoiceChildRepository.js +39 -0
  65. package/dist/output-gateway/repositories/PpasInvoiceChildRepository.js.map +1 -0
  66. package/dist/output-gateway/repositories/interfaces/IEnoBuildingDetailAggregate.d.ts +22 -0
  67. package/dist/output-gateway/repositories/interfaces/IEnoBuildingDetailAggregate.js +3 -0
  68. package/dist/output-gateway/repositories/interfaces/IEnoBuildingDetailAggregate.js.map +1 -0
  69. package/dist/output-gateway/routers/interfaces/IEnoBuildingDetailResponse.d.ts +108 -0
  70. package/dist/output-gateway/routers/interfaces/IEnoBuildingDetailResponse.js +3 -0
  71. package/dist/output-gateway/routers/interfaces/IEnoBuildingDetailResponse.js.map +1 -0
  72. package/dist/output-gateway/routers/v2/V2EnoBuildingsRouter.d.ts +9 -0
  73. package/dist/output-gateway/routers/v2/V2EnoBuildingsRouter.js +40 -0
  74. package/dist/output-gateway/routers/v2/V2EnoBuildingsRouter.js.map +1 -0
  75. package/dist/output-gateway/transformations/EnoBuildingDetailTransformation.d.ts +14 -0
  76. package/dist/output-gateway/transformations/EnoBuildingDetailTransformation.js +150 -0
  77. package/dist/output-gateway/transformations/EnoBuildingDetailTransformation.js.map +1 -0
  78. package/dist/schema-definitions/models/enapo/EnapoGidMappingModel.d.ts +17 -0
  79. package/dist/schema-definitions/models/enapo/EnapoGidMappingModel.js +63 -0
  80. package/dist/schema-definitions/models/enapo/EnapoGidMappingModel.js.map +1 -0
  81. package/dist/schema-definitions/models/enapo/interfaces/IEnapoGidMapping.d.ts +11 -0
  82. package/dist/schema-definitions/models/enapo/interfaces/IEnapoGidMapping.js +3 -0
  83. package/dist/schema-definitions/models/enapo/interfaces/IEnapoGidMapping.js.map +1 -0
  84. package/dist/schema-definitions/models/eno/AddressModel.d.ts +1 -1
  85. package/dist/schema-definitions/models/eno/AddressModel.js +1 -1
  86. package/dist/schema-definitions/models/eno/AddressModel.js.map +1 -1
  87. package/dist/schema-definitions/models/eno/interfaces/IAddress.d.ts +1 -1
  88. package/docs/implementation_documentation.md +41 -2
  89. package/docs/openapi-output.yaml +263 -1
  90. 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,150 @@
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
+ installation: (0, objectMappers_1.omitKeys)((0, objectMappers_1.stripPrefix)(point, "dinst_"), ["place_id"]),
61
+ devices: aggregate.distributionDevices
62
+ .filter((device) => device.invoice_id === point.di_id && device.place_id === point.dinst_place_id)
63
+ .map((device) => (0, objectMappers_1.omitKeys)(device, ["invoice_id", "place_id"])),
64
+ prices: aggregate.distributionPrices
65
+ .filter((price) => price.invoice_id === point.di_id && price.place_id === point.dinst_place_id)
66
+ .map((price) => (0, objectMappers_1.omitKeys)(price, ["invoice_id", "customer_id", "place_id"])),
67
+ },
68
+ commercial: point.ci_id === null
69
+ ? null
70
+ : {
71
+ invoice: (0, objectMappers_1.stripPrefix)(point, "ci_"),
72
+ installation: (0, objectMappers_1.omitKeys)((0, objectMappers_1.stripPrefix)(point, "cinst_"), ["place_id"]),
73
+ devices: aggregate.commercialDevices
74
+ .filter((device) => device.invoice_id === point.ci_id && device.place_id === point.cinst_place_id)
75
+ .map((device) => (0, objectMappers_1.omitKeys)(device, ["invoice_id", "place_id"])),
76
+ prices: aggregate.commercialPrices
77
+ .filter((price) => price.invoice_id === point.ci_id && price.place_id === point.cinst_place_id)
78
+ .map((price) => (0, objectMappers_1.omitKeys)(price, ["invoice_id", "customer_id", "place_id"])),
79
+ },
80
+ ...(porsenna === null ? {} : { porsenna }),
81
+ };
82
+ };
83
+ this.buildPorsennaBlock = (point, aggregate) => {
84
+ const device = aggregate.porsennaDevices.find((candidate) => candidate.identifier === point.place_id && (candidate.level === null || candidate.level === "main"));
85
+ if (device === undefined) {
86
+ return null;
87
+ }
88
+ return {
89
+ device: {
90
+ name: device.name,
91
+ type: device.type,
92
+ level: device.level,
93
+ measurement_target: device.measurement_target,
94
+ meter_number: device.meter_number,
95
+ supply_point_number: device.supply_point_number,
96
+ disabled_at: device.disabled_at,
97
+ tenant: device.source,
98
+ },
99
+ sub_devices: aggregate.porsennaDevices
100
+ .filter((candidate) => candidate.parent_device_id === device.device_id)
101
+ .map((candidate) => ({
102
+ name: candidate.name,
103
+ type: candidate.type,
104
+ meter_number: candidate.meter_number,
105
+ disabled_at: candidate.disabled_at,
106
+ })),
107
+ yearly_consumption: aggregate.porsennaConsumption
108
+ .filter((row) => row.device_id === device.device_id && row.var === "yearly")
109
+ .map((row) => ({
110
+ period: row.period,
111
+ value: row.value,
112
+ unit: row.unit,
113
+ days_covered: row.count,
114
+ })),
115
+ };
116
+ };
117
+ this.transformEnergyManagement = (aggregate) => {
118
+ const devices = aggregate.porsennaDevices;
119
+ if (devices.length === 0) {
120
+ return null;
121
+ }
122
+ const primary = devices[0];
123
+ return {
124
+ source: primary.source,
125
+ building_name: primary.building_name,
126
+ address: this.composeAddress(primary.building_street, primary.building_house_number, primary.building_street_number, primary.building_city, primary.building_postcode),
127
+ devices_total: devices.length,
128
+ devices_active: devices.filter((device) => device.disabled_at === null).length,
129
+ };
130
+ };
131
+ this.resolveAddress = (point) => {
132
+ if (point.md_address !== null) {
133
+ return point.md_address;
134
+ }
135
+ 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) ??
136
+ 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));
137
+ };
138
+ this.composeAddress = (street, houseNumber, houseOrgNumber, city, postCode) => {
139
+ const numberPart = [houseNumber, houseOrgNumber].filter((part) => part !== null && part !== "").join("/");
140
+ const streetPart = [street, numberPart].filter((part) => part !== null && part !== "").join(" ");
141
+ const parts = [streetPart, city, postCode].filter((part) => part !== null && part !== "");
142
+ return parts.length > 0 ? parts.join(", ") : null;
143
+ };
144
+ }
145
+ };
146
+ exports.EnoBuildingDetailTransformation = EnoBuildingDetailTransformation;
147
+ exports.EnoBuildingDetailTransformation = EnoBuildingDetailTransformation = __decorate([
148
+ (0, tsyringe_1.injectable)()
149
+ ], EnoBuildingDetailTransformation);
150
+ //# 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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IEnapoGidMapping.js.map
@@ -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;YACzB,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC9B;QACD,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC;KAClD;CACJ,CAAC"}
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"}
@@ -4,6 +4,6 @@ export interface IAddress {
4
4
  poradi: number;
5
5
  zdroj: string;
6
6
  id: number;
7
- popis: string;
7
+ popis: string | null;
8
8
  hlavni: boolean;
9
9
  }
@@ -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` 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`
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`
@@ -813,12 +813,27 @@ Task stahuje data o měřidlech a spotřebách z Porsenna API (e-Manazer).
813
813
  - zdrojový soubor: [openapi-output.yaml](./openapi-output.yaml)
814
814
  - rabin: https://rabin.golemio.cz/v2/docs/openapi/
815
815
  - golem: https://api.golemio.cz/v2/docs/openapi/
816
- - přístup je řízen pomocí interního parametru `accessLimit`, který musí být vždy nastaven a omezen z permission proxy
816
+ - přístup je řízen pomocí interního parametru `accessLimit`, který nastavuje permission proxy (klient ho neposílá)
817
817
  - 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
818
  - pokud je `accessLimit` nastaven na `admin`, tak se vždy dotazuje na všechny organizace
819
+ - `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
820
 
820
821
  ### API
821
822
 
823
+ Přehled endpointů a parametru `accessLimit`:
824
+
825
+ | Endpoint | Datová doména (tabulky) | `accessLimit` |
826
+ | --------------------------------------------- | ---------------------------------------- | ---------------------------------------------- |
827
+ | `/v2/energetics/buildings` | OICT Energetika (`consumption_energy_*`) | povinný |
828
+ | `/v2/energetics/buildings/:id` | OICT Energetika (`consumption_energy_*`) | povinný |
829
+ | `/v2/energetics/organizations` | OICT Energetika (`organizations*`) | povinný |
830
+ | `/v2/energetics/organizations/:id` | OICT Energetika (`organizations*`) | povinný |
831
+ | `/v2/energetics/devices` | OICT Energetika (`consumption_energy_*`) | povinný |
832
+ | `/v2/energetics/devices/:id` | OICT Energetika (`consumption_energy_*`) | povinný |
833
+ | `/v2/energetics/measurements` | OICT Energetika (`consumption_energy_*`) | povinný |
834
+ | `/v2/energetics/measurements/monthly-reading` | OICT Energetika (`consumption_energy_*`) | povinný |
835
+ | `/v2/energetics/ded/buildings/:gid` | DeD / ENAPO (`enapo_*`, `eno_*`) | nepoužívá se — parametr je odmítnut s HTTP 400 |
836
+
822
837
  #### _/v2/energetics/buildings_
823
838
 
824
839
  #### _/v2/energetics/buildings/:id_
@@ -850,3 +865,27 @@ Task stahuje data o měřidlech a spotřebách z Porsenna API (e-Manazer).
850
865
 
851
866
  - zdrojové tabulky
852
867
  - consumption_energy_measurements
868
+
869
+ #### _/v2/energetics/ded/buildings/:gid_
870
+
871
+ - detail budovy (ENO) s odběrnými místy (OM) a technickými parametry pro DeD
872
+ - 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
873
+ - zdrojové tabulky a pohledy
874
+ - `v_enapo_building_detail` — pohled nad `eno_budova` (dedup přes `zdroj` pomocí `DISTINCT ON (gid)`)
875
+ - `eno_adresa` — všechny adresy budovy (deduplikované podle `popis`)
876
+ - `v_enapo_building_consumption_points` — pohled nad `enapo_gid_mapping` obohacený o:
877
+ - `enapo_pre_metadata_history` — poslední měsíc metadat PRE (jen EAN / elektřina)
878
+ - `enapo_ppas_distribution_invoice(_installation)` — poslední nestornovaná distribuční faktura (jen EIC / plyn, join přes `eic` v tabulce instalací)
879
+ - `enapo_ppas_commercial_invoice(_installations)` — poslední nestornovaná obchodní faktura (jen EIC / plyn, join přes `eic`)
880
+ - `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`
881
+ - `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
882
+ - `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)
883
+ - mapovací tabulka `enapo_gid_mapping`
884
+ - vlastní kontrakt modulu; aktuálně plněná mock daty (`link_source = 'mock'`)
885
+ - 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'`)
886
+ - sloupec `is_active` v pohledu je odvozený z `valid_to` (NULL nebo v budoucnu = aktivní); expirovaná mapování se vracejí s příznakem
887
+ - struktura odpovědi
888
+ - 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
889
+ - 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
890
+ - 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í
891
+ - budoucí komodity (teplo, voda) se přidají jako nové klíče bez breaking change