@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.
Files changed (137) hide show
  1. package/db/example/00_clear_test_data.sql +19 -0
  2. package/db/example/06_eno.sql +36 -0
  3. package/db/example/07_enapo_om_detail.sql +140 -0
  4. package/db/example/08_ded_search.sql +25 -0
  5. package/db/migrations/postgresql/20260807090000-enapo-gid-mapping-om-detail.js +53 -0
  6. package/db/migrations/postgresql/20260807091000-enapo-om-detail-porsenna.js +53 -0
  7. package/db/migrations/postgresql/20260807092000-ded-building-search.js +53 -0
  8. package/db/migrations/postgresql/sqls/20260807090000-enapo-gid-mapping-om-detail-down.sql +3 -0
  9. package/db/migrations/postgresql/sqls/20260807090000-enapo-gid-mapping-om-detail-up.sql +182 -0
  10. package/db/migrations/postgresql/sqls/20260807091000-enapo-om-detail-porsenna-down.sql +135 -0
  11. package/db/migrations/postgresql/sqls/20260807091000-enapo-om-detail-porsenna-up.sql +292 -0
  12. package/db/migrations/postgresql/sqls/20260807092000-ded-building-search-down.sql +41 -0
  13. package/db/migrations/postgresql/sqls/20260807092000-ded-building-search-up.sql +262 -0
  14. package/db/scripts/ded_gid_mapping_mock_import.sql +107 -0
  15. package/dist/integration-engine/enapo/ioc/Di.js +5 -1
  16. package/dist/integration-engine/enapo/ioc/Di.js.map +1 -1
  17. package/dist/integration-engine/enapo/ioc/EnapoWorkerContainerToken.d.ts +2 -0
  18. package/dist/integration-engine/enapo/ioc/EnapoWorkerContainerToken.js +2 -0
  19. package/dist/integration-engine/enapo/ioc/EnapoWorkerContainerToken.js.map +1 -1
  20. package/dist/integration-engine/enapo/repositories/DedSearchIndexRepository.d.ts +7 -0
  21. package/dist/integration-engine/enapo/repositories/DedSearchIndexRepository.js +50 -0
  22. package/dist/integration-engine/enapo/repositories/DedSearchIndexRepository.js.map +1 -0
  23. package/dist/integration-engine/enapo/repositories/interfaces/IDedSearchIndexRepository.d.ts +7 -0
  24. package/dist/integration-engine/enapo/repositories/interfaces/IDedSearchIndexRepository.js +3 -0
  25. package/dist/integration-engine/enapo/repositories/interfaces/IDedSearchIndexRepository.js.map +1 -0
  26. package/dist/integration-engine/enapo/workers/EnapoWorker.js +1 -0
  27. package/dist/integration-engine/enapo/workers/EnapoWorker.js.map +1 -1
  28. package/dist/integration-engine/enapo/workers/task/DedSearchIndexRefreshTask.d.ts +21 -0
  29. package/dist/integration-engine/enapo/workers/task/DedSearchIndexRefreshTask.js +58 -0
  30. package/dist/integration-engine/enapo/workers/task/DedSearchIndexRefreshTask.js.map +1 -0
  31. package/dist/integration-engine/enapo/workers/task/EnoGeometryTask.d.ts +13 -1
  32. package/dist/integration-engine/enapo/workers/task/EnoGeometryTask.js +25 -2
  33. package/dist/integration-engine/enapo/workers/task/EnoGeometryTask.js.map +1 -1
  34. package/dist/output-gateway/constants/DedSearchWeights.d.ts +60 -0
  35. package/dist/output-gateway/constants/DedSearchWeights.js +42 -0
  36. package/dist/output-gateway/constants/DedSearchWeights.js.map +1 -0
  37. package/dist/output-gateway/constants/Links.d.ts +1 -0
  38. package/dist/output-gateway/constants/Links.js +2 -1
  39. package/dist/output-gateway/constants/Links.js.map +1 -1
  40. package/dist/output-gateway/controllers/v2/EnoBuildingsController.d.ts +16 -0
  41. package/dist/output-gateway/controllers/v2/EnoBuildingsController.js +80 -0
  42. package/dist/output-gateway/controllers/v2/EnoBuildingsController.js.map +1 -0
  43. package/dist/output-gateway/helpers/objectMappers.d.ts +10 -0
  44. package/dist/output-gateway/helpers/objectMappers.js +37 -0
  45. package/dist/output-gateway/helpers/objectMappers.js.map +1 -0
  46. package/dist/output-gateway/index.js +8 -1
  47. package/dist/output-gateway/index.js.map +1 -1
  48. package/dist/output-gateway/ioc/Di.js +13 -1
  49. package/dist/output-gateway/ioc/Di.js.map +1 -1
  50. package/dist/output-gateway/ioc/ModuleContainerToken.d.ts +6 -0
  51. package/dist/output-gateway/ioc/ModuleContainerToken.js +6 -0
  52. package/dist/output-gateway/ioc/ModuleContainerToken.js.map +1 -1
  53. package/dist/output-gateway/models/DedBuildingSearchViewModel.d.ts +30 -0
  54. package/dist/output-gateway/models/DedBuildingSearchViewModel.js +38 -0
  55. package/dist/output-gateway/models/DedBuildingSearchViewModel.js.map +1 -0
  56. package/dist/output-gateway/models/EnoBuildingDetailViewModel.d.ts +49 -0
  57. package/dist/output-gateway/models/EnoBuildingDetailViewModel.js +57 -0
  58. package/dist/output-gateway/models/EnoBuildingDetailViewModel.js.map +1 -0
  59. package/dist/output-gateway/models/EnoConsumptionPointViewModel.d.ts +106 -0
  60. package/dist/output-gateway/models/EnoConsumptionPointViewModel.js +119 -0
  61. package/dist/output-gateway/models/EnoConsumptionPointViewModel.js.map +1 -0
  62. package/dist/output-gateway/models/EnoPorsennaDeviceViewModel.d.ts +27 -0
  63. package/dist/output-gateway/models/EnoPorsennaDeviceViewModel.js +41 -0
  64. package/dist/output-gateway/models/EnoPorsennaDeviceViewModel.js.map +1 -0
  65. package/dist/output-gateway/models/interfaces/IDedBuildingSearchView.d.ts +24 -0
  66. package/dist/output-gateway/models/interfaces/IDedBuildingSearchView.js +3 -0
  67. package/dist/output-gateway/models/interfaces/IDedBuildingSearchView.js.map +1 -0
  68. package/dist/output-gateway/models/interfaces/IEnoBuildingDetailView.d.ts +44 -0
  69. package/dist/output-gateway/models/interfaces/IEnoBuildingDetailView.js +3 -0
  70. package/dist/output-gateway/models/interfaces/IEnoBuildingDetailView.js.map +1 -0
  71. package/dist/output-gateway/models/interfaces/IEnoConsumptionPointView.d.ts +106 -0
  72. package/dist/output-gateway/models/interfaces/IEnoConsumptionPointView.js +3 -0
  73. package/dist/output-gateway/models/interfaces/IEnoConsumptionPointView.js.map +1 -0
  74. package/dist/output-gateway/models/interfaces/IEnoPorsennaDeviceView.d.ts +22 -0
  75. package/dist/output-gateway/models/interfaces/IEnoPorsennaDeviceView.js +3 -0
  76. package/dist/output-gateway/models/interfaces/IEnoPorsennaDeviceView.js.map +1 -0
  77. package/dist/output-gateway/repositories/AbstractNumericParsingRepository.d.ts +12 -0
  78. package/dist/output-gateway/repositories/AbstractNumericParsingRepository.js +41 -0
  79. package/dist/output-gateway/repositories/AbstractNumericParsingRepository.js.map +1 -0
  80. package/dist/output-gateway/repositories/DedBuildingSearchRepository.d.ts +16 -0
  81. package/dist/output-gateway/repositories/DedBuildingSearchRepository.js +250 -0
  82. package/dist/output-gateway/repositories/DedBuildingSearchRepository.js.map +1 -0
  83. package/dist/output-gateway/repositories/EnoBuildingAddressesRepository.d.ts +8 -0
  84. package/dist/output-gateway/repositories/EnoBuildingAddressesRepository.js +62 -0
  85. package/dist/output-gateway/repositories/EnoBuildingAddressesRepository.js.map +1 -0
  86. package/dist/output-gateway/repositories/EnoBuildingDetailRepository.d.ts +18 -0
  87. package/dist/output-gateway/repositories/EnoBuildingDetailRepository.js +100 -0
  88. package/dist/output-gateway/repositories/EnoBuildingDetailRepository.js.map +1 -0
  89. package/dist/output-gateway/repositories/EnoConsumptionPointsRepository.d.ts +8 -0
  90. package/dist/output-gateway/repositories/EnoConsumptionPointsRepository.js +51 -0
  91. package/dist/output-gateway/repositories/EnoConsumptionPointsRepository.js.map +1 -0
  92. package/dist/output-gateway/repositories/EnoPorsennaDevicesRepository.d.ts +8 -0
  93. package/dist/output-gateway/repositories/EnoPorsennaDevicesRepository.js +51 -0
  94. package/dist/output-gateway/repositories/EnoPorsennaDevicesRepository.js.map +1 -0
  95. package/dist/output-gateway/repositories/PorsennaConsumptionsRepository.d.ts +8 -0
  96. package/dist/output-gateway/repositories/PorsennaConsumptionsRepository.js +52 -0
  97. package/dist/output-gateway/repositories/PorsennaConsumptionsRepository.js.map +1 -0
  98. package/dist/output-gateway/repositories/PpasInvoiceChildRepository.d.ts +13 -0
  99. package/dist/output-gateway/repositories/PpasInvoiceChildRepository.js +39 -0
  100. package/dist/output-gateway/repositories/PpasInvoiceChildRepository.js.map +1 -0
  101. package/dist/output-gateway/repositories/interfaces/IDedBuildingSearchRow.d.ts +14 -0
  102. package/dist/output-gateway/repositories/interfaces/IDedBuildingSearchRow.js +3 -0
  103. package/dist/output-gateway/repositories/interfaces/IDedBuildingSearchRow.js.map +1 -0
  104. package/dist/output-gateway/repositories/interfaces/IEnoBuildingDetailAggregate.d.ts +22 -0
  105. package/dist/output-gateway/repositories/interfaces/IEnoBuildingDetailAggregate.js +3 -0
  106. package/dist/output-gateway/repositories/interfaces/IEnoBuildingDetailAggregate.js.map +1 -0
  107. package/dist/output-gateway/routers/interfaces/IDedBuildingSearchResponse.d.ts +50 -0
  108. package/dist/output-gateway/routers/interfaces/IDedBuildingSearchResponse.js +3 -0
  109. package/dist/output-gateway/routers/interfaces/IDedBuildingSearchResponse.js.map +1 -0
  110. package/dist/output-gateway/routers/interfaces/IEnoBuildingDetailResponse.d.ts +130 -0
  111. package/dist/output-gateway/routers/interfaces/IEnoBuildingDetailResponse.js +3 -0
  112. package/dist/output-gateway/routers/interfaces/IEnoBuildingDetailResponse.js.map +1 -0
  113. package/dist/output-gateway/routers/interfaces/IEnoRegistrationUnit.d.ts +11 -0
  114. package/dist/output-gateway/routers/interfaces/IEnoRegistrationUnit.js +3 -0
  115. package/dist/output-gateway/routers/interfaces/IEnoRegistrationUnit.js.map +1 -0
  116. package/dist/output-gateway/routers/v2/V2EnoBuildingsRouter.d.ts +11 -0
  117. package/dist/output-gateway/routers/v2/V2EnoBuildingsRouter.js +45 -0
  118. package/dist/output-gateway/routers/v2/V2EnoBuildingsRouter.js.map +1 -0
  119. package/dist/output-gateway/transformations/DedBuildingSearchTransformation.d.ts +11 -0
  120. package/dist/output-gateway/transformations/DedBuildingSearchTransformation.js +57 -0
  121. package/dist/output-gateway/transformations/DedBuildingSearchTransformation.js.map +1 -0
  122. package/dist/output-gateway/transformations/EnoBuildingDetailTransformation.d.ts +18 -0
  123. package/dist/output-gateway/transformations/EnoBuildingDetailTransformation.js +193 -0
  124. package/dist/output-gateway/transformations/EnoBuildingDetailTransformation.js.map +1 -0
  125. package/dist/schema-definitions/models/enapo/EnapoGidMappingModel.d.ts +17 -0
  126. package/dist/schema-definitions/models/enapo/EnapoGidMappingModel.js +63 -0
  127. package/dist/schema-definitions/models/enapo/EnapoGidMappingModel.js.map +1 -0
  128. package/dist/schema-definitions/models/enapo/interfaces/IEnapoGidMapping.d.ts +11 -0
  129. package/dist/schema-definitions/models/enapo/interfaces/IEnapoGidMapping.js +3 -0
  130. package/dist/schema-definitions/models/enapo/interfaces/IEnapoGidMapping.js.map +1 -0
  131. package/dist/schema-definitions/models/eno/AddressModel.d.ts +1 -1
  132. package/dist/schema-definitions/models/eno/AddressModel.js +1 -1
  133. package/dist/schema-definitions/models/eno/AddressModel.js.map +1 -1
  134. package/dist/schema-definitions/models/eno/interfaces/IAddress.d.ts +1 -1
  135. package/docs/implementation_documentation.md +90 -2
  136. package/docs/openapi-output.yaml +554 -1
  137. 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,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`
@@ -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ý musí být vždy nastaven a omezen z permission proxy
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