@dssp/dkpi 1.0.26 → 1.0.29

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 (56) hide show
  1. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.d.ts +2 -0
  2. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js +19 -4
  3. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js.map +1 -1
  4. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.d.ts +2 -0
  5. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js +19 -4
  6. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js.map +1 -1
  7. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.d.ts +2 -0
  8. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js +19 -4
  9. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js.map +1 -1
  10. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.d.ts +2 -0
  11. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js +78 -4
  12. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js.map +1 -1
  13. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.d.ts +2 -0
  14. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js +35 -4
  15. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js.map +1 -1
  16. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.d.ts +2 -0
  17. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js +29 -1
  18. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js.map +1 -1
  19. package/dist-client/pages/kpi-dashboard/kpi-dashboard.d.ts +11 -0
  20. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +65 -12
  21. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -1
  22. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.d.ts +18 -0
  23. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js +138 -64
  24. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js.map +1 -1
  25. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js +80 -8
  26. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js.map +1 -1
  27. package/dist-client/pages/sv-project-detail.d.ts +33 -0
  28. package/dist-client/pages/sv-project-detail.js +130 -8
  29. package/dist-client/pages/sv-project-detail.js.map +1 -1
  30. package/dist-client/pages/sv-project-update.js +98 -31
  31. package/dist-client/pages/sv-project-update.js.map +1 -1
  32. package/dist-client/shared/complete-api.d.ts +7 -0
  33. package/dist-client/shared/complete-api.js +27 -0
  34. package/dist-client/shared/complete-api.js.map +1 -1
  35. package/dist-client/shared/project-axis.d.ts +23 -0
  36. package/dist-client/shared/project-axis.js +42 -0
  37. package/dist-client/shared/project-axis.js.map +1 -0
  38. package/dist-client/shared/sentiment-index.d.ts +47 -0
  39. package/dist-client/shared/sentiment-index.js +119 -0
  40. package/dist-client/shared/sentiment-index.js.map +1 -0
  41. package/dist-client/tsconfig.tsbuildinfo +1 -1
  42. package/dist-server/index.js +14 -0
  43. package/dist-server/index.js.map +1 -1
  44. package/dist-server/scripts/load-grade-data-migration.js +17 -3
  45. package/dist-server/scripts/load-grade-data-migration.js.map +1 -1
  46. package/dist-server/scripts/propagate-parent-kpi-values.js +13 -2
  47. package/dist-server/scripts/propagate-parent-kpi-values.js.map +1 -1
  48. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +22 -0
  49. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +93 -1
  50. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +1 -1
  51. package/dist-server/service/kpi-stat/kpi-stat-query.d.ts +9 -9
  52. package/dist-server/service/kpi-stat/kpi-stat-query.js +71 -84
  53. package/dist-server/service/kpi-stat/kpi-stat-query.js.map +1 -1
  54. package/dist-server/tsconfig.tsbuildinfo +1 -1
  55. package/package.json +3 -3
  56. package/schema.graphql +2011 -67
@@ -7,8 +7,22 @@ const shell_1 = require("@things-factory/shell");
7
7
  const kpi_1 = require("@things-factory/kpi");
8
8
  const domain_inheritance_js_1 = require("@things-factory/kpi/dist-server/service/utils/domain-inheritance.js");
9
9
  const kpi_stat_types_1 = require("./kpi-stat-types");
10
+ const PROJECT_AXIS_COLUMNS = {
11
+ sectorType: 'sector_type',
12
+ buildingUsage: 'building_usage',
13
+ projectScale: 'project_scale',
14
+ facilityType: 'facility_type'
15
+ };
16
+ function applyProjectAxisFilters(queryBuilder, alias, filters) {
17
+ for (const [key, column] of Object.entries(PROJECT_AXIS_COLUMNS)) {
18
+ const value = filters[key];
19
+ if (!(value === null || value === void 0 ? void 0 : value.trim()))
20
+ continue;
21
+ queryBuilder.andWhere(`${alias}.${column} = :${key}`, { [key]: value });
22
+ }
23
+ }
10
24
  let KpiStatQuery = class KpiStatQuery {
11
- async totalKpiZValueComprehensiveStats(startYearMonth, endYearMonth, sectorType, buildingUsage, context) {
25
+ async totalKpiZValueComprehensiveStats(startYearMonth, endYearMonth, sectorType, buildingUsage, projectScale, facilityType, context) {
12
26
  const { domain } = context.state;
13
27
  const queryBuilder = (0, shell_1.getRepository)('kpi_values')
14
28
  .createQueryBuilder('kv')
@@ -34,12 +48,7 @@ let KpiStatQuery = class KpiStatQuery {
34
48
  if (endYearMonth && endYearMonth.trim() !== '') {
35
49
  queryBuilder.andWhere(`LEFT(kv.value_date, 7) <= :endYearMonth`, { endYearMonth });
36
50
  }
37
- if (sectorType === null || sectorType === void 0 ? void 0 : sectorType.trim()) {
38
- queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType });
39
- }
40
- if (buildingUsage === null || buildingUsage === void 0 ? void 0 : buildingUsage.trim()) {
41
- queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage });
42
- }
51
+ applyProjectAxisFilters(queryBuilder, 'p', { sectorType, buildingUsage, projectScale, facilityType });
43
52
  queryBuilder.groupBy('k.name');
44
53
  const results = await queryBuilder.getRawMany();
45
54
  return results.map(result => {
@@ -63,7 +72,7 @@ let KpiStatQuery = class KpiStatQuery {
63
72
  };
64
73
  });
65
74
  }
66
- async totalKpiYValueComprehensiveStats(startYearMonth, endYearMonth, sectorType, buildingUsage, context) {
75
+ async totalKpiYValueComprehensiveStats(startYearMonth, endYearMonth, sectorType, buildingUsage, projectScale, facilityType, context) {
67
76
  const { domain } = context.state;
68
77
  const queryBuilder = (0, shell_1.getRepository)('kpi_values')
69
78
  .createQueryBuilder('kv')
@@ -89,12 +98,7 @@ let KpiStatQuery = class KpiStatQuery {
89
98
  if (endYearMonth && endYearMonth.trim() !== '') {
90
99
  queryBuilder.andWhere(`LEFT(kv.value_date, 7) <= :endYearMonth`, { endYearMonth });
91
100
  }
92
- if (sectorType === null || sectorType === void 0 ? void 0 : sectorType.trim()) {
93
- queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType });
94
- }
95
- if (buildingUsage === null || buildingUsage === void 0 ? void 0 : buildingUsage.trim()) {
96
- queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage });
97
- }
101
+ applyProjectAxisFilters(queryBuilder, 'p', { sectorType, buildingUsage, projectScale, facilityType });
98
102
  queryBuilder.groupBy('k.name').orderBy('k.name', 'ASC');
99
103
  const results = await queryBuilder.getRawMany();
100
104
  return results.map(result => {
@@ -118,7 +122,7 @@ let KpiStatQuery = class KpiStatQuery {
118
122
  };
119
123
  });
120
124
  }
121
- async kpiZValueComprehensiveStatsByGeoGroup(geoGroup, kpiName, startYearMonth, endYearMonth, sectorType, buildingUsage, context) {
125
+ async kpiZValueComprehensiveStatsByGeoGroup(geoGroup, kpiName, startYearMonth, endYearMonth, sectorType, buildingUsage, projectScale, facilityType, context) {
122
126
  var _a, _b;
123
127
  const { domain } = context.state;
124
128
  const queryBuilder = (0, shell_1.getRepository)('kpi_values')
@@ -163,12 +167,7 @@ let KpiStatQuery = class KpiStatQuery {
163
167
  if (endYearMonth && endYearMonth.trim() !== '') {
164
168
  queryBuilder.andWhere(`LEFT(kv.value_date, 7) <= :endYearMonth`, { endYearMonth });
165
169
  }
166
- if (sectorType === null || sectorType === void 0 ? void 0 : sectorType.trim()) {
167
- queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType });
168
- }
169
- if (buildingUsage === null || buildingUsage === void 0 ? void 0 : buildingUsage.trim()) {
170
- queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage });
171
- }
170
+ applyProjectAxisFilters(queryBuilder, 'p', { sectorType, buildingUsage, projectScale, facilityType });
172
171
  // KPI 필터: kpiName이 지정되면 해당 Y-level KPI만, 없으면 Z-level KPI 전체
173
172
  if (kpiName && kpiName.trim() !== '') {
174
173
  // kpiName 표기 불일치('일정성과(Y1)' vs 'Y1. 일정...') 방지 — Y1~Y6 코드로 LIKE 매칭
@@ -256,7 +255,7 @@ let KpiStatQuery = class KpiStatQuery {
256
255
  })
257
256
  .filter(result => result.geoGroup !== null);
258
257
  }
259
- async kpiZValueMonthlyTrendByGeoGroup(kpiName, startYearMonth, endYearMonth, sectorType, buildingUsage, context) {
258
+ async kpiZValueMonthlyTrendByGeoGroup(kpiName, startYearMonth, endYearMonth, sectorType, buildingUsage, projectScale, facilityType, context) {
260
259
  var _a, _b;
261
260
  const { domain } = context.state;
262
261
  const queryBuilder = (0, shell_1.getRepository)('kpi_values')
@@ -298,12 +297,7 @@ let KpiStatQuery = class KpiStatQuery {
298
297
  if (endYearMonth && endYearMonth.trim() !== '') {
299
298
  queryBuilder.andWhere(`LEFT(kv.value_date, 7) <= :endYearMonth`, { endYearMonth });
300
299
  }
301
- if (sectorType === null || sectorType === void 0 ? void 0 : sectorType.trim()) {
302
- queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType });
303
- }
304
- if (buildingUsage === null || buildingUsage === void 0 ? void 0 : buildingUsage.trim()) {
305
- queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage });
306
- }
300
+ applyProjectAxisFilters(queryBuilder, 'p', { sectorType, buildingUsage, projectScale, facilityType });
307
301
  // KPI 필터: kpiName이 지정되면 해당 Y-level KPI만, 없으면 Z-level KPI 전체
308
302
  if (kpiName && kpiName.trim() !== '') {
309
303
  // kpiName 표기 불일치('일정성과(Y1)' vs 'Y1. 일정...') 방지 — Y1~Y6 코드로 LIKE 매칭
@@ -327,7 +321,7 @@ let KpiStatQuery = class KpiStatQuery {
327
321
  })
328
322
  .filter(result => result.geoGroup !== null);
329
323
  }
330
- async kpiZValueMonthlyTrendBySigungu(geoGroup, kpiName, startYearMonth, endYearMonth, sectorType, buildingUsage, context) {
324
+ async kpiZValueMonthlyTrendBySigungu(geoGroup, kpiName, startYearMonth, endYearMonth, sectorType, buildingUsage, projectScale, facilityType, context) {
331
325
  var _a, _b;
332
326
  const { domain } = context.state;
333
327
  const queryBuilder = (0, shell_1.getRepository)('kpi_values')
@@ -350,12 +344,7 @@ let KpiStatQuery = class KpiStatQuery {
350
344
  if (endYearMonth && endYearMonth.trim() !== '') {
351
345
  queryBuilder.andWhere(`LEFT(kv.value_date, 7) <= :endYearMonth`, { endYearMonth });
352
346
  }
353
- if (sectorType === null || sectorType === void 0 ? void 0 : sectorType.trim()) {
354
- queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType });
355
- }
356
- if (buildingUsage === null || buildingUsage === void 0 ? void 0 : buildingUsage.trim()) {
357
- queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage });
358
- }
347
+ applyProjectAxisFilters(queryBuilder, 'p', { sectorType, buildingUsage, projectScale, facilityType });
359
348
  if (kpiName && kpiName.trim() !== '') {
360
349
  // kpiName 표기 불일치('일정성과(Y1)' vs 'Y1. 일정...') 방지 — Y1~Y6 코드로 LIKE 매칭
361
350
  queryBuilder.andWhere('k.name LIKE :kpiNameLike', { kpiNameLike: `%${(_b = (_a = kpiName.match(/Y[1-6]/)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : kpiName}%` });
@@ -376,7 +365,7 @@ let KpiStatQuery = class KpiStatQuery {
376
365
  };
377
366
  });
378
367
  }
379
- async kpiProjectStats(sectorType, buildingUsage, kpiNamePattern, startYearMonth, endYearMonth, context) {
368
+ async kpiProjectStats(sectorType, buildingUsage, projectScale, facilityType, kpiNamePattern, startYearMonth, endYearMonth, context) {
380
369
  const { domain } = context.state;
381
370
  const qb = (0, shell_1.getRepository)('kpi_values')
382
371
  .createQueryBuilder('kv')
@@ -397,12 +386,7 @@ let KpiStatQuery = class KpiStatQuery {
397
386
  .innerJoin('projects', 'p', 'kv."group" = p.id::text')
398
387
  .where('p.end_date IS NOT NULL')
399
388
  .andWhere('kv.domain_id IN (:...domainIds)', { domainIds: await (0, domain_inheritance_js_1.getDomainIdsWithAncestors)(domain) });
400
- if (sectorType === null || sectorType === void 0 ? void 0 : sectorType.trim()) {
401
- qb.andWhere('p.sector_type = :sectorType', { sectorType });
402
- }
403
- if (buildingUsage === null || buildingUsage === void 0 ? void 0 : buildingUsage.trim()) {
404
- qb.andWhere('p.building_usage = :buildingUsage', { buildingUsage });
405
- }
389
+ applyProjectAxisFilters(qb, 'p', { sectorType, buildingUsage, projectScale, facilityType });
406
390
  if (kpiNamePattern === null || kpiNamePattern === void 0 ? void 0 : kpiNamePattern.trim()) {
407
391
  qb.andWhere('k.name LIKE :kpiNamePattern', { kpiNamePattern: `${kpiNamePattern}%` });
408
392
  }
@@ -428,7 +412,7 @@ let KpiStatQuery = class KpiStatQuery {
428
412
  projectCount: isNaN(Number(r.projectcount)) ? 0 : Number(r.projectcount)
429
413
  }));
430
414
  }
431
- async kpiZValueStatsBySigungu(kpiName, startYearMonth, endYearMonth, sectorType, buildingUsage, context) {
415
+ async kpiZValueStatsBySigungu(kpiName, startYearMonth, endYearMonth, sectorType, buildingUsage, projectScale, facilityType, context) {
432
416
  var _a, _b;
433
417
  const { domain } = context.state;
434
418
  const queryBuilder = (0, shell_1.getRepository)('kpi_values')
@@ -454,12 +438,7 @@ let KpiStatQuery = class KpiStatQuery {
454
438
  if (endYearMonth === null || endYearMonth === void 0 ? void 0 : endYearMonth.trim()) {
455
439
  queryBuilder.andWhere(`LEFT(kv.value_date, 7) <= :endYearMonth`, { endYearMonth });
456
440
  }
457
- if (sectorType === null || sectorType === void 0 ? void 0 : sectorType.trim()) {
458
- queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType });
459
- }
460
- if (buildingUsage === null || buildingUsage === void 0 ? void 0 : buildingUsage.trim()) {
461
- queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage });
462
- }
441
+ applyProjectAxisFilters(queryBuilder, 'p', { sectorType, buildingUsage, projectScale, facilityType });
463
442
  if (kpiName === null || kpiName === void 0 ? void 0 : kpiName.trim()) {
464
443
  // kpiName 표기 불일치('일정성과(Y1)' vs 'Y1. 일정...') 방지 — Y1~Y6 코드로 LIKE 매칭
465
444
  queryBuilder.andWhere('k.name LIKE :kpiNameLike', { kpiNameLike: `%${(_b = (_a = kpiName.match(/Y[1-6]/)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : kpiName}%` });
@@ -484,7 +463,7 @@ let KpiStatQuery = class KpiStatQuery {
484
463
  }))
485
464
  .filter(r => r.geoGroup !== null);
486
465
  }
487
- async kpiYValueStatsByGeoGroup(geoGroup, startYearMonth, endYearMonth, sectorType, buildingUsage, context) {
466
+ async kpiYValueStatsByGeoGroup(geoGroup, startYearMonth, endYearMonth, sectorType, buildingUsage, projectScale, facilityType, context) {
488
467
  const { domain } = context.state;
489
468
  const queryBuilder = (0, shell_1.getRepository)('kpi_values')
490
469
  .createQueryBuilder('kv')
@@ -510,12 +489,7 @@ let KpiStatQuery = class KpiStatQuery {
510
489
  if (endYearMonth === null || endYearMonth === void 0 ? void 0 : endYearMonth.trim()) {
511
490
  queryBuilder.andWhere(`LEFT(kv.value_date, 7) <= :endYearMonth`, { endYearMonth });
512
491
  }
513
- if (sectorType === null || sectorType === void 0 ? void 0 : sectorType.trim()) {
514
- queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType });
515
- }
516
- if (buildingUsage === null || buildingUsage === void 0 ? void 0 : buildingUsage.trim()) {
517
- queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage });
518
- }
492
+ applyProjectAxisFilters(queryBuilder, 'p', { sectorType, buildingUsage, projectScale, facilityType });
519
493
  queryBuilder.groupBy('k.name').orderBy('k.name', 'ASC');
520
494
  const results = await queryBuilder.getRawMany();
521
495
  const clamp = (v) => Math.min(Math.max(isNaN(v) ? 0 : v, 0), 1);
@@ -530,7 +504,7 @@ let KpiStatQuery = class KpiStatQuery {
530
504
  projectCount: isNaN(Number(r.projectcount)) ? 0 : Number(r.projectcount)
531
505
  }));
532
506
  }
533
- async kpiYValueStatsByMetroArea(metroArea, startYearMonth, endYearMonth, sectorType, buildingUsage, context) {
507
+ async kpiYValueStatsByMetroArea(metroArea, startYearMonth, endYearMonth, sectorType, buildingUsage, projectScale, facilityType, context) {
534
508
  if (!context || !context.state) {
535
509
  console.error('Context is undefined or missing state');
536
510
  return [];
@@ -561,12 +535,7 @@ let KpiStatQuery = class KpiStatQuery {
561
535
  if (endYearMonth && endYearMonth.trim() !== '') {
562
536
  queryBuilder.andWhere(`LEFT(kv.value_date, 7) <= :endYearMonth`, { endYearMonth });
563
537
  }
564
- if (sectorType === null || sectorType === void 0 ? void 0 : sectorType.trim()) {
565
- queryBuilder.andWhere('p.sector_type = :sectorType', { sectorType });
566
- }
567
- if (buildingUsage === null || buildingUsage === void 0 ? void 0 : buildingUsage.trim()) {
568
- queryBuilder.andWhere('p.building_usage = :buildingUsage', { buildingUsage });
569
- }
538
+ applyProjectAxisFilters(queryBuilder, 'p', { sectorType, buildingUsage, projectScale, facilityType });
570
539
  queryBuilder
571
540
  .andWhere(`CASE
572
541
  WHEN p.geo_group IN ('01','02','03','04','05','06','07','08') THEN '서울특별시'
@@ -620,9 +589,11 @@ tslib_1.__decorate([
620
589
  tslib_1.__param(1, (0, type_graphql_1.Arg)('endYearMonth', { nullable: true })),
621
590
  tslib_1.__param(2, (0, type_graphql_1.Arg)('sectorType', { nullable: true })),
622
591
  tslib_1.__param(3, (0, type_graphql_1.Arg)('buildingUsage', { nullable: true })),
623
- tslib_1.__param(4, (0, type_graphql_1.Ctx)()),
592
+ tslib_1.__param(4, (0, type_graphql_1.Arg)('projectScale', { nullable: true })),
593
+ tslib_1.__param(5, (0, type_graphql_1.Arg)('facilityType', { nullable: true })),
594
+ tslib_1.__param(6, (0, type_graphql_1.Ctx)()),
624
595
  tslib_1.__metadata("design:type", Function),
625
- tslib_1.__metadata("design:paramtypes", [String, String, String, String, Object]),
596
+ tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, String, Object]),
626
597
  tslib_1.__metadata("design:returntype", Promise)
627
598
  ], KpiStatQuery.prototype, "totalKpiZValueComprehensiveStats", null);
628
599
  tslib_1.__decorate([
@@ -632,9 +603,11 @@ tslib_1.__decorate([
632
603
  tslib_1.__param(1, (0, type_graphql_1.Arg)('endYearMonth', { nullable: true })),
633
604
  tslib_1.__param(2, (0, type_graphql_1.Arg)('sectorType', { nullable: true })),
634
605
  tslib_1.__param(3, (0, type_graphql_1.Arg)('buildingUsage', { nullable: true })),
635
- tslib_1.__param(4, (0, type_graphql_1.Ctx)()),
606
+ tslib_1.__param(4, (0, type_graphql_1.Arg)('projectScale', { nullable: true })),
607
+ tslib_1.__param(5, (0, type_graphql_1.Arg)('facilityType', { nullable: true })),
608
+ tslib_1.__param(6, (0, type_graphql_1.Ctx)()),
636
609
  tslib_1.__metadata("design:type", Function),
637
- tslib_1.__metadata("design:paramtypes", [String, String, String, String, Object]),
610
+ tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, String, Object]),
638
611
  tslib_1.__metadata("design:returntype", Promise)
639
612
  ], KpiStatQuery.prototype, "totalKpiYValueComprehensiveStats", null);
640
613
  tslib_1.__decorate([
@@ -648,9 +621,11 @@ tslib_1.__decorate([
648
621
  tslib_1.__param(3, (0, type_graphql_1.Arg)('endYearMonth', { nullable: true })),
649
622
  tslib_1.__param(4, (0, type_graphql_1.Arg)('sectorType', { nullable: true })),
650
623
  tslib_1.__param(5, (0, type_graphql_1.Arg)('buildingUsage', { nullable: true })),
651
- tslib_1.__param(6, (0, type_graphql_1.Ctx)()),
624
+ tslib_1.__param(6, (0, type_graphql_1.Arg)('projectScale', { nullable: true })),
625
+ tslib_1.__param(7, (0, type_graphql_1.Arg)('facilityType', { nullable: true })),
626
+ tslib_1.__param(8, (0, type_graphql_1.Ctx)()),
652
627
  tslib_1.__metadata("design:type", Function),
653
- tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, String, Object]),
628
+ tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, String, String, String, Object]),
654
629
  tslib_1.__metadata("design:returntype", Promise)
655
630
  ], KpiStatQuery.prototype, "kpiZValueComprehensiveStatsByGeoGroup", null);
656
631
  tslib_1.__decorate([
@@ -670,9 +645,11 @@ tslib_1.__decorate([
670
645
  tslib_1.__param(2, (0, type_graphql_1.Arg)('endYearMonth', { nullable: true })),
671
646
  tslib_1.__param(3, (0, type_graphql_1.Arg)('sectorType', { nullable: true })),
672
647
  tslib_1.__param(4, (0, type_graphql_1.Arg)('buildingUsage', { nullable: true })),
673
- tslib_1.__param(5, (0, type_graphql_1.Ctx)()),
648
+ tslib_1.__param(5, (0, type_graphql_1.Arg)('projectScale', { nullable: true })),
649
+ tslib_1.__param(6, (0, type_graphql_1.Arg)('facilityType', { nullable: true })),
650
+ tslib_1.__param(7, (0, type_graphql_1.Ctx)()),
674
651
  tslib_1.__metadata("design:type", Function),
675
- tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, Object]),
652
+ tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, String, String, Object]),
676
653
  tslib_1.__metadata("design:returntype", Promise)
677
654
  ], KpiStatQuery.prototype, "kpiZValueMonthlyTrendByGeoGroup", null);
678
655
  tslib_1.__decorate([
@@ -686,9 +663,11 @@ tslib_1.__decorate([
686
663
  tslib_1.__param(3, (0, type_graphql_1.Arg)('endYearMonth', { nullable: true })),
687
664
  tslib_1.__param(4, (0, type_graphql_1.Arg)('sectorType', { nullable: true })),
688
665
  tslib_1.__param(5, (0, type_graphql_1.Arg)('buildingUsage', { nullable: true })),
689
- tslib_1.__param(6, (0, type_graphql_1.Ctx)()),
666
+ tslib_1.__param(6, (0, type_graphql_1.Arg)('projectScale', { nullable: true })),
667
+ tslib_1.__param(7, (0, type_graphql_1.Arg)('facilityType', { nullable: true })),
668
+ tslib_1.__param(8, (0, type_graphql_1.Ctx)()),
690
669
  tslib_1.__metadata("design:type", Function),
691
- tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, String, Object]),
670
+ tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, String, String, String, Object]),
692
671
  tslib_1.__metadata("design:returntype", Promise)
693
672
  ], KpiStatQuery.prototype, "kpiZValueMonthlyTrendBySigungu", null);
694
673
  tslib_1.__decorate([
@@ -696,12 +675,14 @@ tslib_1.__decorate([
696
675
  (0, type_graphql_1.Query)(() => [kpi_stat_types_1.KpiProjectStat], { description: 'Get KPI stats aggregated from project data with optional sectorType/buildingUsage filters' }),
697
676
  tslib_1.__param(0, (0, type_graphql_1.Arg)('sectorType', { nullable: true })),
698
677
  tslib_1.__param(1, (0, type_graphql_1.Arg)('buildingUsage', { nullable: true })),
699
- tslib_1.__param(2, (0, type_graphql_1.Arg)('kpiNamePattern', { nullable: true })),
700
- tslib_1.__param(3, (0, type_graphql_1.Arg)('startYearMonth', { nullable: true })),
701
- tslib_1.__param(4, (0, type_graphql_1.Arg)('endYearMonth', { nullable: true })),
702
- tslib_1.__param(5, (0, type_graphql_1.Ctx)()),
678
+ tslib_1.__param(2, (0, type_graphql_1.Arg)('projectScale', { nullable: true })),
679
+ tslib_1.__param(3, (0, type_graphql_1.Arg)('facilityType', { nullable: true })),
680
+ tslib_1.__param(4, (0, type_graphql_1.Arg)('kpiNamePattern', { nullable: true })),
681
+ tslib_1.__param(5, (0, type_graphql_1.Arg)('startYearMonth', { nullable: true })),
682
+ tslib_1.__param(6, (0, type_graphql_1.Arg)('endYearMonth', { nullable: true })),
683
+ tslib_1.__param(7, (0, type_graphql_1.Ctx)()),
703
684
  tslib_1.__metadata("design:type", Function),
704
- tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, Object]),
685
+ tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, String, String, Object]),
705
686
  tslib_1.__metadata("design:returntype", Promise)
706
687
  ], KpiStatQuery.prototype, "kpiProjectStats", null);
707
688
  tslib_1.__decorate([
@@ -714,9 +695,11 @@ tslib_1.__decorate([
714
695
  tslib_1.__param(2, (0, type_graphql_1.Arg)('endYearMonth', { nullable: true })),
715
696
  tslib_1.__param(3, (0, type_graphql_1.Arg)('sectorType', { nullable: true })),
716
697
  tslib_1.__param(4, (0, type_graphql_1.Arg)('buildingUsage', { nullable: true })),
717
- tslib_1.__param(5, (0, type_graphql_1.Ctx)()),
698
+ tslib_1.__param(5, (0, type_graphql_1.Arg)('projectScale', { nullable: true })),
699
+ tslib_1.__param(6, (0, type_graphql_1.Arg)('facilityType', { nullable: true })),
700
+ tslib_1.__param(7, (0, type_graphql_1.Ctx)()),
718
701
  tslib_1.__metadata("design:type", Function),
719
- tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, Object]),
702
+ tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, String, String, Object]),
720
703
  tslib_1.__metadata("design:returntype", Promise)
721
704
  ], KpiStatQuery.prototype, "kpiZValueStatsBySigungu", null);
722
705
  tslib_1.__decorate([
@@ -727,9 +710,11 @@ tslib_1.__decorate([
727
710
  tslib_1.__param(2, (0, type_graphql_1.Arg)('endYearMonth', { nullable: true })),
728
711
  tslib_1.__param(3, (0, type_graphql_1.Arg)('sectorType', { nullable: true })),
729
712
  tslib_1.__param(4, (0, type_graphql_1.Arg)('buildingUsage', { nullable: true })),
730
- tslib_1.__param(5, (0, type_graphql_1.Ctx)()),
713
+ tslib_1.__param(5, (0, type_graphql_1.Arg)('projectScale', { nullable: true })),
714
+ tslib_1.__param(6, (0, type_graphql_1.Arg)('facilityType', { nullable: true })),
715
+ tslib_1.__param(7, (0, type_graphql_1.Ctx)()),
731
716
  tslib_1.__metadata("design:type", Function),
732
- tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, Object]),
717
+ tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, String, String, Object]),
733
718
  tslib_1.__metadata("design:returntype", Promise)
734
719
  ], KpiStatQuery.prototype, "kpiYValueStatsByGeoGroup", null);
735
720
  tslib_1.__decorate([
@@ -740,9 +725,11 @@ tslib_1.__decorate([
740
725
  tslib_1.__param(2, (0, type_graphql_1.Arg)('endYearMonth', { nullable: true })),
741
726
  tslib_1.__param(3, (0, type_graphql_1.Arg)('sectorType', { nullable: true })),
742
727
  tslib_1.__param(4, (0, type_graphql_1.Arg)('buildingUsage', { nullable: true })),
743
- tslib_1.__param(5, (0, type_graphql_1.Ctx)()),
728
+ tslib_1.__param(5, (0, type_graphql_1.Arg)('projectScale', { nullable: true })),
729
+ tslib_1.__param(6, (0, type_graphql_1.Arg)('facilityType', { nullable: true })),
730
+ tslib_1.__param(7, (0, type_graphql_1.Ctx)()),
744
731
  tslib_1.__metadata("design:type", Function),
745
- tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, Object]),
732
+ tslib_1.__metadata("design:paramtypes", [String, String, String, String, String, String, String, Object]),
746
733
  tslib_1.__metadata("design:returntype", Promise)
747
734
  ], KpiStatQuery.prototype, "kpiYValueStatsByMetroArea", null);
748
735
  exports.KpiStatQuery = KpiStatQuery = tslib_1.__decorate([