@things-factory/kpi 10.1.247 → 10.1.248

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 (409) hide show
  1. package/package.json +3 -3
  2. package/dist-client/bootstrap.d.ts +0 -2
  3. package/dist-client/bootstrap.js +0 -7
  4. package/dist-client/bootstrap.js.map +0 -1
  5. package/dist-client/charts/kpi-boxplot-chart.d.ts +0 -24
  6. package/dist-client/charts/kpi-boxplot-chart.js +0 -324
  7. package/dist-client/charts/kpi-boxplot-chart.js.map +0 -1
  8. package/dist-client/charts/kpi-mini-trend-chart.d.ts +0 -14
  9. package/dist-client/charts/kpi-mini-trend-chart.js +0 -148
  10. package/dist-client/charts/kpi-mini-trend-chart.js.map +0 -1
  11. package/dist-client/charts/kpi-radar-chart.d.ts +0 -16
  12. package/dist-client/charts/kpi-radar-chart.js +0 -138
  13. package/dist-client/charts/kpi-radar-chart.js.map +0 -1
  14. package/dist-client/charts/kpi-trend-chart.d.ts +0 -25
  15. package/dist-client/charts/kpi-trend-chart.js +0 -186
  16. package/dist-client/charts/kpi-trend-chart.js.map +0 -1
  17. package/dist-client/google-map/common-google-map.d.ts +0 -34
  18. package/dist-client/google-map/common-google-map.js +0 -333
  19. package/dist-client/google-map/common-google-map.js.map +0 -1
  20. package/dist-client/google-map/google-map-loader.d.ts +0 -8
  21. package/dist-client/google-map/google-map-loader.js +0 -22
  22. package/dist-client/google-map/google-map-loader.js.map +0 -1
  23. package/dist-client/index.d.ts +0 -1
  24. package/dist-client/index.js +0 -2
  25. package/dist-client/index.js.map +0 -1
  26. package/dist-client/pages/kpi/kpi-grade-editor.d.ts +0 -35
  27. package/dist-client/pages/kpi/kpi-grade-editor.js +0 -165
  28. package/dist-client/pages/kpi/kpi-grade-editor.js.map +0 -1
  29. package/dist-client/pages/kpi/kpi-importer.d.ts +0 -23
  30. package/dist-client/pages/kpi/kpi-importer.js +0 -92
  31. package/dist-client/pages/kpi/kpi-importer.js.map +0 -1
  32. package/dist-client/pages/kpi/kpi-list-page.d.ts +0 -136
  33. package/dist-client/pages/kpi/kpi-list-page.js +0 -948
  34. package/dist-client/pages/kpi/kpi-list-page.js.map +0 -1
  35. package/dist-client/pages/kpi/kpi-overview-sample.d.ts +0 -36
  36. package/dist-client/pages/kpi/kpi-overview-sample.js +0 -264
  37. package/dist-client/pages/kpi/kpi-overview-sample.js.map +0 -1
  38. package/dist-client/pages/kpi/kpi-overview.d.ts +0 -14
  39. package/dist-client/pages/kpi/kpi-overview.js +0 -361
  40. package/dist-client/pages/kpi/kpi-overview.js.map +0 -1
  41. package/dist-client/pages/kpi/kpi-tree-page.d.ts +0 -51
  42. package/dist-client/pages/kpi/kpi-tree-page.js +0 -355
  43. package/dist-client/pages/kpi/kpi-tree-page.js.map +0 -1
  44. package/dist-client/pages/kpi/kpi-view.d.ts +0 -12
  45. package/dist-client/pages/kpi/kpi-view.js +0 -193
  46. package/dist-client/pages/kpi/kpi-view.js.map +0 -1
  47. package/dist-client/pages/kpi/kpi-viz-editor.d.ts +0 -19
  48. package/dist-client/pages/kpi/kpi-viz-editor.js +0 -562
  49. package/dist-client/pages/kpi/kpi-viz-editor.js.map +0 -1
  50. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.d.ts +0 -17
  51. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js +0 -279
  52. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js.map +0 -1
  53. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.d.ts +0 -19
  54. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js +0 -385
  55. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js.map +0 -1
  56. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.d.ts +0 -23
  57. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js +0 -465
  58. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js.map +0 -1
  59. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.d.ts +0 -8
  60. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js +0 -78
  61. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js.map +0 -1
  62. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.d.ts +0 -24
  63. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js +0 -440
  64. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js.map +0 -1
  65. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.d.ts +0 -33
  66. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js +0 -444
  67. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js.map +0 -1
  68. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.d.ts +0 -23
  69. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js +0 -369
  70. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js.map +0 -1
  71. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.d.ts +0 -18
  72. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js +0 -128
  73. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js.map +0 -1
  74. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.d.ts +0 -31
  75. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js +0 -493
  76. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js.map +0 -1
  77. package/dist-client/pages/kpi-dashboard/kpi-dashboard.d.ts +0 -50
  78. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +0 -884
  79. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +0 -1
  80. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.d.ts +0 -12
  81. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js +0 -82
  82. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js.map +0 -1
  83. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.d.ts +0 -11
  84. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js +0 -65
  85. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js.map +0 -1
  86. package/dist-client/pages/kpi-dashboard/kpi-list-summary.d.ts +0 -13
  87. package/dist-client/pages/kpi-dashboard/kpi-list-summary.js +0 -115
  88. package/dist-client/pages/kpi-dashboard/kpi-list-summary.js.map +0 -1
  89. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.d.ts +0 -15
  90. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js +0 -146
  91. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js.map +0 -1
  92. package/dist-client/pages/kpi-dashboard/kpi-value-entry.d.ts +0 -7
  93. package/dist-client/pages/kpi-dashboard/kpi-value-entry.js +0 -86
  94. package/dist-client/pages/kpi-dashboard/kpi-value-entry.js.map +0 -1
  95. package/dist-client/pages/kpi-history/kpi-history-list-page.d.ts +0 -21
  96. package/dist-client/pages/kpi-history/kpi-history-list-page.js +0 -160
  97. package/dist-client/pages/kpi-history/kpi-history-list-page.js.map +0 -1
  98. package/dist-client/pages/kpi-metric/kpi-metric-importer.d.ts +0 -23
  99. package/dist-client/pages/kpi-metric/kpi-metric-importer.js +0 -92
  100. package/dist-client/pages/kpi-metric/kpi-metric-importer.js.map +0 -1
  101. package/dist-client/pages/kpi-metric/kpi-metric-list-page.d.ts +0 -65
  102. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js +0 -415
  103. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js.map +0 -1
  104. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +0 -52
  105. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +0 -678
  106. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +0 -1
  107. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.d.ts +0 -23
  108. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js +0 -75
  109. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js.map +0 -1
  110. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +0 -64
  111. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +0 -311
  112. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +0 -1
  113. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.d.ts +0 -12
  114. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js +0 -175
  115. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js.map +0 -1
  116. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.d.ts +0 -35
  117. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js +0 -161
  118. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js.map +0 -1
  119. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.d.ts +0 -47
  120. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js +0 -655
  121. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js.map +0 -1
  122. package/dist-client/pages/kpi-statistic/kpi-statistic-importer.d.ts +0 -23
  123. package/dist-client/pages/kpi-statistic/kpi-statistic-importer.js +0 -92
  124. package/dist-client/pages/kpi-statistic/kpi-statistic-importer.js.map +0 -1
  125. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.d.ts +0 -65
  126. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js +0 -416
  127. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js.map +0 -1
  128. package/dist-client/pages/kpi-value/kpi-value-editor-page.d.ts +0 -50
  129. package/dist-client/pages/kpi-value/kpi-value-editor-page.js +0 -700
  130. package/dist-client/pages/kpi-value/kpi-value-editor-page.js.map +0 -1
  131. package/dist-client/pages/kpi-value/kpi-value-importer.d.ts +0 -23
  132. package/dist-client/pages/kpi-value/kpi-value-importer.js +0 -92
  133. package/dist-client/pages/kpi-value/kpi-value-importer.js.map +0 -1
  134. package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +0 -73
  135. package/dist-client/pages/kpi-value/kpi-value-list-page.js +0 -403
  136. package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +0 -1
  137. package/dist-client/route.d.ts +0 -1
  138. package/dist-client/route.js +0 -47
  139. package/dist-client/route.js.map +0 -1
  140. package/dist-client/tsconfig.tsbuildinfo +0 -1
  141. package/dist-client/viewparts/kpi-metric-input.d.ts +0 -23
  142. package/dist-client/viewparts/kpi-metric-input.js +0 -140
  143. package/dist-client/viewparts/kpi-metric-input.js.map +0 -1
  144. package/dist-client/viewparts/kpi-metric-meta-editor.d.ts +0 -36
  145. package/dist-client/viewparts/kpi-metric-meta-editor.js +0 -321
  146. package/dist-client/viewparts/kpi-metric-meta-editor.js.map +0 -1
  147. package/dist-client/viewparts/metric-input-hint.d.ts +0 -26
  148. package/dist-client/viewparts/metric-input-hint.js +0 -19
  149. package/dist-client/viewparts/metric-input-hint.js.map +0 -1
  150. package/dist-client/viewparts/metric-input.test.d.ts +0 -1
  151. package/dist-client/viewparts/metric-input.test.js +0 -43
  152. package/dist-client/viewparts/metric-input.test.js.map +0 -1
  153. package/dist-client/viewparts/metric-renderer-registry.d.ts +0 -18
  154. package/dist-client/viewparts/metric-renderer-registry.js +0 -29
  155. package/dist-client/viewparts/metric-renderer-registry.js.map +0 -1
  156. package/dist-client/viewparts/ox-grist-editor-metric-input-hint.d.ts +0 -19
  157. package/dist-client/viewparts/ox-grist-editor-metric-input-hint.js +0 -76
  158. package/dist-client/viewparts/ox-grist-editor-metric-input-hint.js.map +0 -1
  159. package/dist-server/calculator/calculator.test.d.ts +0 -1
  160. package/dist-server/calculator/calculator.test.js +0 -126
  161. package/dist-server/calculator/calculator.test.js.map +0 -1
  162. package/dist-server/calculator/evaluator.d.ts +0 -8
  163. package/dist-server/calculator/evaluator.js +0 -42
  164. package/dist-server/calculator/evaluator.js.map +0 -1
  165. package/dist-server/calculator/functions.d.ts +0 -3
  166. package/dist-server/calculator/functions.js +0 -62
  167. package/dist-server/calculator/functions.js.map +0 -1
  168. package/dist-server/calculator/index.d.ts +0 -6
  169. package/dist-server/calculator/index.js +0 -10
  170. package/dist-server/calculator/index.js.map +0 -1
  171. package/dist-server/calculator/parser.d.ts +0 -34
  172. package/dist-server/calculator/parser.js +0 -185
  173. package/dist-server/calculator/parser.js.map +0 -1
  174. package/dist-server/calculator/provider.d.ts +0 -8
  175. package/dist-server/calculator/provider.js +0 -13
  176. package/dist-server/calculator/provider.js.map +0 -1
  177. package/dist-server/calculator/score.d.ts +0 -21
  178. package/dist-server/calculator/score.js +0 -36
  179. package/dist-server/calculator/score.js.map +0 -1
  180. package/dist-server/calculator/score.test.d.ts +0 -1
  181. package/dist-server/calculator/score.test.js +0 -47
  182. package/dist-server/calculator/score.test.js.map +0 -1
  183. package/dist-server/calculator/validate.d.ts +0 -15
  184. package/dist-server/calculator/validate.js +0 -30
  185. package/dist-server/calculator/validate.js.map +0 -1
  186. package/dist-server/calculator/validate.test.d.ts +0 -1
  187. package/dist-server/calculator/validate.test.js +0 -45
  188. package/dist-server/calculator/validate.test.js.map +0 -1
  189. package/dist-server/controllers/index.d.ts +0 -2
  190. package/dist-server/controllers/index.js +0 -6
  191. package/dist-server/controllers/index.js.map +0 -1
  192. package/dist-server/controllers/kpi-metric-value-provider.d.ts +0 -11
  193. package/dist-server/controllers/kpi-metric-value-provider.js +0 -97
  194. package/dist-server/controllers/kpi-metric-value-provider.js.map +0 -1
  195. package/dist-server/controllers/kpi-value-provider.d.ts +0 -11
  196. package/dist-server/controllers/kpi-value-provider.js +0 -50
  197. package/dist-server/controllers/kpi-value-provider.js.map +0 -1
  198. package/dist-server/index.d.ts +0 -5
  199. package/dist-server/index.js +0 -9
  200. package/dist-server/index.js.map +0 -1
  201. package/dist-server/migrations/1752190849680-seed-kpi-metrics.d.ts +0 -6
  202. package/dist-server/migrations/1752190849680-seed-kpi-metrics.js +0 -102
  203. package/dist-server/migrations/1752190849680-seed-kpi-metrics.js.map +0 -1
  204. package/dist-server/migrations/1752190849681-seed-kpi.d.ts +0 -5
  205. package/dist-server/migrations/1752190849681-seed-kpi.js +0 -315
  206. package/dist-server/migrations/1752190849681-seed-kpi.js.map +0 -1
  207. package/dist-server/migrations/1752192090123-add-grades-to-kpi.d.ts +0 -7
  208. package/dist-server/migrations/1752192090123-add-grades-to-kpi.js +0 -51
  209. package/dist-server/migrations/1752192090123-add-grades-to-kpi.js.map +0 -1
  210. package/dist-server/migrations/1752192090124-add-kpi-statistics.d.ts +0 -5
  211. package/dist-server/migrations/1752192090124-add-kpi-statistics.js +0 -710
  212. package/dist-server/migrations/1752192090124-add-kpi-statistics.js.map +0 -1
  213. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.d.ts +0 -6
  214. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.js +0 -111
  215. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.js.map +0 -1
  216. package/dist-server/migrations/1752192090129-seed-kpi-values.d.ts +0 -6
  217. package/dist-server/migrations/1752192090129-seed-kpi-values.js +0 -187
  218. package/dist-server/migrations/1752192090129-seed-kpi-values.js.map +0 -1
  219. package/dist-server/migrations/1752192090200-add-meta-to-kpi-metric.d.ts +0 -10
  220. package/dist-server/migrations/1752192090200-add-meta-to-kpi-metric.js +0 -26
  221. package/dist-server/migrations/1752192090200-add-meta-to-kpi-metric.js.map +0 -1
  222. package/dist-server/migrations/1752192090201-backfill-kpi-metric-meta.d.ts +0 -11
  223. package/dist-server/migrations/1752192090201-backfill-kpi-metric-meta.js +0 -54
  224. package/dist-server/migrations/1752192090201-backfill-kpi-metric-meta.js.map +0 -1
  225. package/dist-server/migrations/grade-data/x11-performance-table.json +0 -962
  226. package/dist-server/migrations/grade-data/x12-performance-table.json +0 -611
  227. package/dist-server/migrations/grade-data/x14-performance-table.json +0 -42
  228. package/dist-server/migrations/grade-data/x21-performance-table.json +0 -889
  229. package/dist-server/migrations/grade-data/x22-performance-table.json +0 -1064
  230. package/dist-server/migrations/grade-data/x23-performance-table.json +0 -42
  231. package/dist-server/migrations/grade-data/x31-performance-table.json +0 -644
  232. package/dist-server/migrations/grade-data/x32-performance-table.json +0 -993
  233. package/dist-server/migrations/grade-data/x33-performance-table.json +0 -195
  234. package/dist-server/migrations/grade-data/x34-performance-table.json +0 -12
  235. package/dist-server/migrations/grade-data/x35-performance-table.json +0 -42
  236. package/dist-server/migrations/grade-data/x41-performance-table.json +0 -825
  237. package/dist-server/migrations/grade-data/x42-performance-table.json +0 -786
  238. package/dist-server/migrations/grade-data/x43-performance-table.json +0 -12
  239. package/dist-server/migrations/grade-data/x44-performance-table.json +0 -42
  240. package/dist-server/migrations/grade-data/x51-performance-table.json +0 -924
  241. package/dist-server/migrations/grade-data/x52-performance-table.json +0 -42
  242. package/dist-server/migrations/grade-data/x61-performance-table.json +0 -261
  243. package/dist-server/migrations/grade-data/x62-performance-table.json +0 -42
  244. package/dist-server/migrations/index.d.ts +0 -1
  245. package/dist-server/migrations/index.js +0 -12
  246. package/dist-server/migrations/index.js.map +0 -1
  247. package/dist-server/migrations/seed-data/kpi-metrics-seed.json +0 -517
  248. package/dist-server/migrations/seed-data/kpi-org-scope-seed.json +0 -1676
  249. package/dist-server/migrations/seed-data/kpi-scopes-seed.json +0 -121
  250. package/dist-server/migrations/seed-data/kpi-values-seed.json +0 -402
  251. package/dist-server/migrations/seed-data/kpis-seed.json +0 -488
  252. package/dist-server/migrations/seed-data/scope-definitions-seed.json +0 -90
  253. package/dist-server/routes.d.ts +0 -1
  254. package/dist-server/routes.js +0 -72
  255. package/dist-server/routes.js.map +0 -1
  256. package/dist-server/service/index.d.ts +0 -15
  257. package/dist-server/service/index.js +0 -49
  258. package/dist-server/service/index.js.map +0 -1
  259. package/dist-server/service/kpi/aggregate-kpi.d.ts +0 -8
  260. package/dist-server/service/kpi/aggregate-kpi.js +0 -123
  261. package/dist-server/service/kpi/aggregate-kpi.js.map +0 -1
  262. package/dist-server/service/kpi/event-subscriber.d.ts +0 -9
  263. package/dist-server/service/kpi/event-subscriber.js +0 -31
  264. package/dist-server/service/kpi/event-subscriber.js.map +0 -1
  265. package/dist-server/service/kpi/index.d.ts +0 -8
  266. package/dist-server/service/kpi/index.js +0 -12
  267. package/dist-server/service/kpi/index.js.map +0 -1
  268. package/dist-server/service/kpi/kpi-formula.service.d.ts +0 -49
  269. package/dist-server/service/kpi/kpi-formula.service.js +0 -165
  270. package/dist-server/service/kpi/kpi-formula.service.js.map +0 -1
  271. package/dist-server/service/kpi/kpi-grade.types.d.ts +0 -22
  272. package/dist-server/service/kpi/kpi-grade.types.js +0 -3
  273. package/dist-server/service/kpi/kpi-grade.types.js.map +0 -1
  274. package/dist-server/service/kpi/kpi-history.d.ts +0 -29
  275. package/dist-server/service/kpi/kpi-history.js +0 -148
  276. package/dist-server/service/kpi/kpi-history.js.map +0 -1
  277. package/dist-server/service/kpi/kpi-mutation.d.ts +0 -14
  278. package/dist-server/service/kpi/kpi-mutation.js +0 -553
  279. package/dist-server/service/kpi/kpi-mutation.js.map +0 -1
  280. package/dist-server/service/kpi/kpi-query.d.ts +0 -24
  281. package/dist-server/service/kpi/kpi-query.js +0 -309
  282. package/dist-server/service/kpi/kpi-query.js.map +0 -1
  283. package/dist-server/service/kpi/kpi-type.d.ts +0 -48
  284. package/dist-server/service/kpi/kpi-type.js +0 -221
  285. package/dist-server/service/kpi/kpi-type.js.map +0 -1
  286. package/dist-server/service/kpi/kpi.d.ts +0 -130
  287. package/dist-server/service/kpi/kpi.js +0 -356
  288. package/dist-server/service/kpi/kpi.js.map +0 -1
  289. package/dist-server/service/kpi-alert/index.d.ts +0 -2
  290. package/dist-server/service/kpi-alert/index.js +0 -6
  291. package/dist-server/service/kpi-alert/index.js.map +0 -1
  292. package/dist-server/service/kpi-alert/kpi-alert-query.d.ts +0 -4
  293. package/dist-server/service/kpi-alert/kpi-alert-query.js +0 -72
  294. package/dist-server/service/kpi-alert/kpi-alert-query.js.map +0 -1
  295. package/dist-server/service/kpi-alert/kpi-alert-type.d.ts +0 -8
  296. package/dist-server/service/kpi-alert/kpi-alert-type.js +0 -33
  297. package/dist-server/service/kpi-alert/kpi-alert-type.js.map +0 -1
  298. package/dist-server/service/kpi-metric/aggregate-kpi-metric.d.ts +0 -8
  299. package/dist-server/service/kpi-metric/aggregate-kpi-metric.js +0 -126
  300. package/dist-server/service/kpi-metric/aggregate-kpi-metric.js.map +0 -1
  301. package/dist-server/service/kpi-metric/index.d.ts +0 -6
  302. package/dist-server/service/kpi-metric/index.js +0 -10
  303. package/dist-server/service/kpi-metric/index.js.map +0 -1
  304. package/dist-server/service/kpi-metric/kpi-metric-meta.d.ts +0 -46
  305. package/dist-server/service/kpi-metric/kpi-metric-meta.js +0 -27
  306. package/dist-server/service/kpi-metric/kpi-metric-meta.js.map +0 -1
  307. package/dist-server/service/kpi-metric/kpi-metric-meta.test.d.ts +0 -1
  308. package/dist-server/service/kpi-metric/kpi-metric-meta.test.js +0 -43
  309. package/dist-server/service/kpi-metric/kpi-metric-meta.test.js.map +0 -1
  310. package/dist-server/service/kpi-metric/kpi-metric-mutation.d.ts +0 -10
  311. package/dist-server/service/kpi-metric/kpi-metric-mutation.js +0 -296
  312. package/dist-server/service/kpi-metric/kpi-metric-mutation.js.map +0 -1
  313. package/dist-server/service/kpi-metric/kpi-metric-query.d.ts +0 -14
  314. package/dist-server/service/kpi-metric/kpi-metric-query.js +0 -126
  315. package/dist-server/service/kpi-metric/kpi-metric-query.js.map +0 -1
  316. package/dist-server/service/kpi-metric/kpi-metric-type.d.ts +0 -45
  317. package/dist-server/service/kpi-metric/kpi-metric-type.js +0 -177
  318. package/dist-server/service/kpi-metric/kpi-metric-type.js.map +0 -1
  319. package/dist-server/service/kpi-metric/kpi-metric.d.ts +0 -39
  320. package/dist-server/service/kpi-metric/kpi-metric.js +0 -174
  321. package/dist-server/service/kpi-metric/kpi-metric.js.map +0 -1
  322. package/dist-server/service/kpi-metric-value/index.d.ts +0 -6
  323. package/dist-server/service/kpi-metric-value/index.js +0 -10
  324. package/dist-server/service/kpi-metric-value/index.js.map +0 -1
  325. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +0 -11
  326. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +0 -283
  327. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +0 -1
  328. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.d.ts +0 -13
  329. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js +0 -106
  330. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js.map +0 -1
  331. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.d.ts +0 -26
  332. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.js +0 -112
  333. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.js.map +0 -1
  334. package/dist-server/service/kpi-metric-value/kpi-metric-value.d.ts +0 -23
  335. package/dist-server/service/kpi-metric-value/kpi-metric-value.js +0 -107
  336. package/dist-server/service/kpi-metric-value/kpi-metric-value.js.map +0 -1
  337. package/dist-server/service/kpi-org-scope/index.d.ts +0 -5
  338. package/dist-server/service/kpi-org-scope/index.js +0 -9
  339. package/dist-server/service/kpi-org-scope/index.js.map +0 -1
  340. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.d.ts +0 -8
  341. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.js +0 -170
  342. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.js.map +0 -1
  343. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.d.ts +0 -14
  344. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.js +0 -152
  345. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.js.map +0 -1
  346. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.d.ts +0 -26
  347. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.js +0 -101
  348. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.js.map +0 -1
  349. package/dist-server/service/kpi-org-scope/kpi-org-scope.d.ts +0 -26
  350. package/dist-server/service/kpi-org-scope/kpi-org-scope.js +0 -135
  351. package/dist-server/service/kpi-org-scope/kpi-org-scope.js.map +0 -1
  352. package/dist-server/service/kpi-scope/index.d.ts +0 -9
  353. package/dist-server/service/kpi-scope/index.js +0 -14
  354. package/dist-server/service/kpi-scope/index.js.map +0 -1
  355. package/dist-server/service/kpi-scope/kpi-scope-mutation.d.ts +0 -9
  356. package/dist-server/service/kpi-scope/kpi-scope-mutation.js +0 -140
  357. package/dist-server/service/kpi-scope/kpi-scope-mutation.js.map +0 -1
  358. package/dist-server/service/kpi-scope/kpi-scope-query.d.ts +0 -11
  359. package/dist-server/service/kpi-scope/kpi-scope-query.js +0 -89
  360. package/dist-server/service/kpi-scope/kpi-scope-query.js.map +0 -1
  361. package/dist-server/service/kpi-scope/kpi-scope-type.d.ts +0 -35
  362. package/dist-server/service/kpi-scope/kpi-scope-type.js +0 -138
  363. package/dist-server/service/kpi-scope/kpi-scope-type.js.map +0 -1
  364. package/dist-server/service/kpi-scope/kpi-scope.d.ts +0 -38
  365. package/dist-server/service/kpi-scope/kpi-scope.js +0 -144
  366. package/dist-server/service/kpi-scope/kpi-scope.js.map +0 -1
  367. package/dist-server/service/kpi-statistic/index.d.ts +0 -6
  368. package/dist-server/service/kpi-statistic/index.js +0 -10
  369. package/dist-server/service/kpi-statistic/index.js.map +0 -1
  370. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.d.ts +0 -43
  371. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.js +0 -181
  372. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.js.map +0 -1
  373. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.d.ts +0 -50
  374. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.js +0 -324
  375. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.js.map +0 -1
  376. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.d.ts +0 -14
  377. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.js +0 -279
  378. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.js.map +0 -1
  379. package/dist-server/service/kpi-statistic/kpi-statistic-query.d.ts +0 -17
  380. package/dist-server/service/kpi-statistic/kpi-statistic-query.js +0 -183
  381. package/dist-server/service/kpi-statistic/kpi-statistic-query.js.map +0 -1
  382. package/dist-server/service/kpi-statistic/kpi-statistic-type.d.ts +0 -59
  383. package/dist-server/service/kpi-statistic/kpi-statistic-type.js +0 -200
  384. package/dist-server/service/kpi-statistic/kpi-statistic-type.js.map +0 -1
  385. package/dist-server/service/kpi-statistic/kpi-statistic.d.ts +0 -42
  386. package/dist-server/service/kpi-statistic/kpi-statistic.js +0 -210
  387. package/dist-server/service/kpi-statistic/kpi-statistic.js.map +0 -1
  388. package/dist-server/service/kpi-value/index.d.ts +0 -6
  389. package/dist-server/service/kpi-value/index.js +0 -10
  390. package/dist-server/service/kpi-value/index.js.map +0 -1
  391. package/dist-server/service/kpi-value/kpi-value-mutation.d.ts +0 -13
  392. package/dist-server/service/kpi-value/kpi-value-mutation.js +0 -447
  393. package/dist-server/service/kpi-value/kpi-value-mutation.js.map +0 -1
  394. package/dist-server/service/kpi-value/kpi-value-query.d.ts +0 -22
  395. package/dist-server/service/kpi-value/kpi-value-query.js +0 -149
  396. package/dist-server/service/kpi-value/kpi-value-query.js.map +0 -1
  397. package/dist-server/service/kpi-value/kpi-value-score.service.d.ts +0 -24
  398. package/dist-server/service/kpi-value/kpi-value-score.service.js +0 -61
  399. package/dist-server/service/kpi-value/kpi-value-score.service.js.map +0 -1
  400. package/dist-server/service/kpi-value/kpi-value-type.d.ts +0 -33
  401. package/dist-server/service/kpi-value/kpi-value-type.js +0 -156
  402. package/dist-server/service/kpi-value/kpi-value-type.js.map +0 -1
  403. package/dist-server/service/kpi-value/kpi-value.d.ts +0 -32
  404. package/dist-server/service/kpi-value/kpi-value.js +0 -175
  405. package/dist-server/service/kpi-value/kpi-value.js.map +0 -1
  406. package/dist-server/service/utils/value-date-util.d.ts +0 -4
  407. package/dist-server/service/utils/value-date-util.js +0 -117
  408. package/dist-server/service/utils/value-date-util.js.map +0 -1
  409. package/dist-server/tsconfig.tsbuildinfo +0 -1
@@ -1,884 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { html, css, nothing } from 'lit';
3
- import { customElement } from 'lit/decorators.js';
4
- import { PageView } from '@operato/shell';
5
- import { ScrollbarStyles } from '@operato/styles';
6
- import { client } from '@operato/graphql';
7
- import gql from 'graphql-tag';
8
- import { state } from 'lit/decorators.js';
9
- import '@material/web/icon/icon.js';
10
- import './kpi-performance-summary';
11
- import './kpi-grade-visualization';
12
- import './kpi-history-viewer';
13
- import './kpi-list-summary';
14
- import './kpi-value-entry';
15
- import './kpi-alert-panel';
16
- import '../../charts/kpi-radar-chart';
17
- import '../../charts/kpi-boxplot-chart';
18
- // 3레벨 KPI 플로팅 컴포넌트들
19
- import './cards/kpi-level1-card';
20
- import './cards/kpi-level2-comparison';
21
- import './cards/kpi-level3-comparison';
22
- let KpiDashboardPage = class KpiDashboardPage extends PageView {
23
- constructor() {
24
- super(...arguments);
25
- this.categories = [];
26
- this.loading = true;
27
- this.error = '';
28
- this.alerts = [];
29
- this.showHistoryModal = false;
30
- this.modalHistories = [];
31
- this.modalKpiName = '';
32
- this.kpiStatistics = []; // 실제 KPI 통계 데이터
33
- this.statisticsLoading = true; // 통계 데이터 로딩 상태
34
- this.selectedPeriodType = 'MONTH'; // 선택된 기간 타입 (MONTH로 고정)
35
- this.selectedValueDate = ''; // 선택된 값 날짜
36
- }
37
- static { this.styles = [
38
- ScrollbarStyles,
39
- css `
40
- :host {
41
- display: flex;
42
- flex-direction: column;
43
- overflow-y: auto;
44
- }
45
- .dashboard-root {
46
- flex: 1;
47
- padding: 24px;
48
- }
49
- .charts-section {
50
- display: flex;
51
- flex-direction: column;
52
- gap: 40px;
53
- margin-bottom: 48px;
54
- align-items: flex-start;
55
- }
56
- .chart-card {
57
- background: #fff;
58
- border-radius: 12px;
59
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
60
- border: 1px solid #ececec;
61
- padding: 24px 32px;
62
- min-width: 340px;
63
- flex: 1;
64
- display: flex;
65
- flex-direction: column;
66
- align-items: stretch;
67
- min-height: 500px;
68
- }
69
- .chart-title {
70
- font-size: 1.1rem;
71
- font-weight: bold;
72
- margin-bottom: 12px;
73
- }
74
- .chart-container {
75
- width: 100%;
76
- height: 340px;
77
- min-height: 340px;
78
- }
79
- .category-section {
80
- margin-bottom: 40px;
81
- }
82
- .category-title {
83
- font-size: 1.3rem;
84
- font-weight: bold;
85
- margin-bottom: 16px;
86
- }
87
- .kpi-cards {
88
- display: flex;
89
- gap: 24px;
90
- flex-wrap: wrap;
91
- }
92
- .kpi-card {
93
- background: #fff;
94
- border-radius: 12px;
95
- padding: 24px 32px;
96
- min-width: 220px;
97
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
98
- display: flex;
99
- flex-direction: column;
100
- align-items: flex-start;
101
- margin-bottom: 8px;
102
- border: 1px solid #ececec;
103
- }
104
- .kpi-name {
105
- font-size: 1.1rem;
106
- font-weight: 500;
107
- margin-bottom: 8px;
108
- }
109
- .kpi-value {
110
- font-size: 2.2rem;
111
- font-weight: bold;
112
- color: #3a3ad6;
113
- margin-bottom: 4px;
114
- }
115
- .kpi-target {
116
- font-size: 1rem;
117
- color: #888;
118
- }
119
- `
120
- ]; }
121
- // 현재 월을 YYYY-MM 형식으로 반환
122
- get currentMonth() {
123
- const now = new Date();
124
- const year = now.getFullYear();
125
- const month = String(now.getMonth() + 1).padStart(2, '0');
126
- return `${year}-${month}`;
127
- }
128
- // 필터링된 KPI 통계 데이터
129
- get filteredKpiStatistics() {
130
- if (!this.kpiStatistics || this.kpiStatistics.length === 0)
131
- return [];
132
- return this.kpiStatistics.filter(stat => stat.periodType === 'MONTH' && stat.valueDate === this.selectedValueDate);
133
- }
134
- // 사용 가능한 기간 타입들 (MONTH로 고정)
135
- get availablePeriodTypes() {
136
- return ['MONTH'];
137
- }
138
- // MONTH 기간에 사용 가능한 날짜들
139
- get availableValueDates() {
140
- if (!this.kpiStatistics || this.kpiStatistics.length === 0)
141
- return [];
142
- const valueDates = new Set();
143
- this.kpiStatistics.forEach(stat => {
144
- if (stat.periodType === 'MONTH' && stat.valueDate) {
145
- valueDates.add(stat.valueDate);
146
- }
147
- });
148
- return Array.from(valueDates).sort().reverse(); // 최신 날짜부터 정렬
149
- }
150
- // 통계 요약 정보
151
- get statisticsSummary() {
152
- const filteredStats = this.filteredKpiStatistics;
153
- if (filteredStats.length === 0)
154
- return null;
155
- const totalKpis = filteredStats.length;
156
- const categories = new Set(filteredStats.map(s => s.kpi?.category?.name).filter(Boolean));
157
- const totalCategories = categories.size;
158
- const means = filteredStats.map(s => s.mean || 0).filter(v => v > 0);
159
- const medians = filteredStats.map(s => s.median || 0).filter(v => v > 0);
160
- const stdDevs = filteredStats.map(s => s.standardDeviation || 0).filter(v => v > 0);
161
- const avgMean = means.length > 0 ? means.reduce((a, b) => a + b, 0) / means.length : 0;
162
- const avgMedian = medians.length > 0 ? medians.reduce((a, b) => a + b, 0) / medians.length : 0;
163
- const avgStdDev = stdDevs.length > 0 ? stdDevs.reduce((a, b) => a + b, 0) / stdDevs.length : 0;
164
- return {
165
- totalKpis,
166
- totalCategories,
167
- avgMean: avgMean.toFixed(2),
168
- avgMedian: avgMedian.toFixed(2),
169
- avgStdDev: avgStdDev.toFixed(2),
170
- periodType: this.selectedPeriodType,
171
- valueDate: this.selectedValueDate
172
- };
173
- }
174
- // 기간 타입 변경 핸들러 (사용하지 않음 - MONTH로 고정)
175
- _onPeriodTypeChange(event) {
176
- // MONTH로 고정되어 있으므로 변경하지 않음
177
- }
178
- // 날짜 변경 핸들러
179
- _onValueDateChange(event) {
180
- const target = event.target;
181
- this.selectedValueDate = target.value;
182
- }
183
- // 실제 KPI 통계 데이터를 기반으로 한 레이더 차트 데이터
184
- get realKpiRadarData() {
185
- const filteredStats = this.filteredKpiStatistics;
186
- if (filteredStats.length === 0)
187
- return [];
188
- // 카테고리별로 통계 데이터 그룹화
189
- const categoryStats = new Map();
190
- filteredStats.forEach(stat => {
191
- if (stat.kpi?.category?.name) {
192
- const categoryName = stat.kpi.category.name;
193
- if (!categoryStats.has(categoryName)) {
194
- categoryStats.set(categoryName, []);
195
- }
196
- categoryStats.get(categoryName).push(stat);
197
- }
198
- });
199
- // 각 카테고리별로 평균, 중앙값, 표준편차 계산
200
- const result = [];
201
- const categories = Array.from(categoryStats.keys());
202
- categories.forEach(category => {
203
- const stats = categoryStats.get(category);
204
- const means = stats.map(s => s.mean || 0).filter(v => v > 0);
205
- const medians = stats.map(s => s.median || 0).filter(v => v > 0);
206
- const stdDevs = stats.map(s => s.standardDeviation || 0).filter(v => v > 0);
207
- if (means.length > 0) {
208
- result.push({ group: '평균', category, value: means.reduce((a, b) => a + b, 0) / means.length });
209
- }
210
- if (medians.length > 0) {
211
- result.push({ group: '중앙값', category, value: medians.reduce((a, b) => a + b, 0) / medians.length });
212
- }
213
- if (stdDevs.length > 0) {
214
- result.push({ group: '표준편차', category, value: stdDevs.reduce((a, b) => a + b, 0) / stdDevs.length });
215
- }
216
- });
217
- return result;
218
- }
219
- get realKpiRadarCategories() {
220
- const filteredStats = this.filteredKpiStatistics;
221
- if (filteredStats.length === 0)
222
- return [];
223
- const categories = new Set();
224
- filteredStats.forEach(stat => {
225
- if (stat.kpi?.category?.name) {
226
- categories.add(stat.kpi.category.name);
227
- }
228
- });
229
- return Array.from(categories);
230
- }
231
- get realKpiRadarGroups() {
232
- return ['평균', '중앙값', '표준편차'];
233
- }
234
- // 실제 KPI 통계 데이터를 기반으로 한 박스플롯 데이터
235
- get realKpiBoxplotData() {
236
- const filteredStats = this.filteredKpiStatistics;
237
- if (filteredStats.length === 0)
238
- return [];
239
- // 카테고리별로 통계 데이터 그룹화
240
- const categoryStats = new Map();
241
- filteredStats.forEach(stat => {
242
- if (stat.kpi?.category?.name) {
243
- const categoryName = stat.kpi.category.name;
244
- if (!categoryStats.has(categoryName)) {
245
- categoryStats.set(categoryName, []);
246
- }
247
- categoryStats.get(categoryName).push(stat);
248
- }
249
- });
250
- const result = [];
251
- const categories = Array.from(categoryStats.keys());
252
- categories.forEach(category => {
253
- const stats = categoryStats.get(category);
254
- // 각 KPI의 통계값들을 수집
255
- const allMeans = stats.map(s => s.mean || 0).filter(v => v > 0);
256
- const allMedians = stats.map(s => s.median || 0).filter(v => v > 0);
257
- const allMins = stats.map(s => s.minimum || 0).filter(v => v > 0);
258
- const allMaxs = stats.map(s => s.maximum || 0).filter(v => v > 0);
259
- const allQ1s = stats.map(s => s.percentile25 || 0).filter(v => v > 0);
260
- const allQ3s = stats.map(s => s.percentile75 || 0).filter(v => v > 0);
261
- if (allMeans.length > 0) {
262
- const sortedMeans = [...allMeans].sort((a, b) => a - b);
263
- const min = sortedMeans[0];
264
- const max = sortedMeans[sortedMeans.length - 1];
265
- const mean = allMeans.reduce((a, b) => a + b, 0) / allMeans.length;
266
- const median = allMedians.length > 0 ? allMedians.reduce((a, b) => a + b, 0) / allMedians.length : mean;
267
- const q1 = sortedMeans[Math.floor(sortedMeans.length / 4)];
268
- const q3 = sortedMeans[Math.floor((sortedMeans.length * 3) / 4)];
269
- result.push({
270
- group: category,
271
- min,
272
- q1,
273
- median,
274
- q3,
275
- max,
276
- mean,
277
- value: mean // 현재 값으로 평균 사용
278
- });
279
- }
280
- });
281
- return result;
282
- }
283
- get realKpiBoxplotGroups() {
284
- const filteredStats = this.filteredKpiStatistics;
285
- if (filteredStats.length === 0)
286
- return [];
287
- const categories = new Set();
288
- filteredStats.forEach(stat => {
289
- if (stat.kpi?.category?.name) {
290
- categories.add(stat.kpi.category.name);
291
- }
292
- });
293
- return Array.from(categories);
294
- }
295
- get realKpiCurrentGroup() {
296
- return '평균';
297
- }
298
- connectedCallback() {
299
- super.connectedCallback();
300
- this.fetchCategories();
301
- this.fetchKpiStatistics();
302
- }
303
- pageUpdated(changes, lifecycle) {
304
- if (this.active) {
305
- this.fetchCategories();
306
- this.fetchKpiStatistics();
307
- }
308
- }
309
- async fetchCategories() {
310
- this.loading = true;
311
- this.error = '';
312
- try {
313
- const response = await client.query({
314
- query: gql `
315
- query {
316
- kpiCategories: kpisLevel1 {
317
- id
318
- name
319
- kpis: children {
320
- id
321
- name
322
- value {
323
- value
324
- valueDate
325
- }
326
- targetValue
327
- unit
328
- grades
329
- vizType
330
- vizMeta
331
- histories(limit: 1) {
332
- version
333
- updatedAt
334
- updater {
335
- name
336
- }
337
- }
338
- }
339
- }
340
- kpiAlerts {
341
- id
342
- kpi {
343
- id
344
- }
345
- message
346
- level
347
- createdAt
348
- }
349
- }
350
- `
351
- });
352
- this.categories = response.data.kpiCategories || [];
353
- this.alerts = response.data.kpiAlerts || [];
354
- }
355
- catch (e) {
356
- this.error = 'KPI 카테고리 데이터를 불러오지 못했습니다.';
357
- }
358
- finally {
359
- this.loading = false;
360
- }
361
- }
362
- async fetchKpiStatistics() {
363
- this.statisticsLoading = true;
364
- try {
365
- const response = await client.query({
366
- query: gql `
367
- query {
368
- kpiStatistics {
369
- items {
370
- id
371
- valueDate
372
- periodType
373
- count
374
- sum
375
- range
376
- mean
377
- median
378
- minimum
379
- maximum
380
- standardDeviation
381
- variance
382
- percentile25
383
- percentile75
384
- iqr
385
- lowerFence
386
- upperFence
387
- additionalStatistics
388
- metadata
389
- kpi {
390
- id
391
- name
392
- unit
393
- category: parent {
394
- id
395
- name
396
- }
397
- }
398
- }
399
- }
400
- }
401
- `
402
- });
403
- this.kpiStatistics = response.data.kpiStatistics.items || [];
404
- // 현재 월을 기본값으로 설정
405
- const currentMonth = this.currentMonth;
406
- const availableDates = this.availableValueDates;
407
- if (availableDates.includes(currentMonth)) {
408
- // 현재 월 데이터가 있으면 현재 월로 설정
409
- this.selectedValueDate = currentMonth;
410
- }
411
- else if (availableDates.length > 0) {
412
- // 현재 월 데이터가 없으면 가장 최근 데이터로 설정
413
- this.selectedValueDate = availableDates[0];
414
- }
415
- else {
416
- // 데이터가 없으면 현재 월로 설정
417
- this.selectedValueDate = currentMonth;
418
- }
419
- }
420
- catch (e) {
421
- console.error('KPI 통계 데이터를 불러오지 못했습니다:', e);
422
- }
423
- finally {
424
- this.statisticsLoading = false;
425
- }
426
- }
427
- async openHistoryModal(kpi) {
428
- // 전체 이력 fetch (limit 없이)
429
- try {
430
- const response = await client.query({
431
- query: gql `
432
- query ($kpiId: String!) {
433
- kpi(id: $kpiId) {
434
- name
435
- histories {
436
- version
437
- updatedAt
438
- updater {
439
- name
440
- }
441
- }
442
- }
443
- }
444
- `,
445
- variables: { kpiId: kpi.id }
446
- });
447
- this.modalHistories = response.data.kpi.histories || [];
448
- this.modalKpiName = response.data.kpi.name || '';
449
- this.showHistoryModal = true;
450
- }
451
- catch (e) {
452
- alert('이력 데이터를 불러오지 못했습니다.');
453
- }
454
- }
455
- closeHistoryModal() {
456
- this.showHistoryModal = false;
457
- this.modalHistories = [];
458
- this.modalKpiName = '';
459
- }
460
- _renderKpiValue(kpi) {
461
- const kpiValue = kpi.value?.value ?? 0;
462
- const targetValue = kpi.targetValue ?? 100;
463
- const unit = kpi.unit ?? '';
464
- const vizType = kpi.vizType || 'CARD';
465
- const vizMeta = kpi.vizMeta || {};
466
- const color = vizMeta.color || '#3a3ad6';
467
- const icon = vizMeta.icon || 'trending_up';
468
- const minValue = vizMeta.minValue || 0;
469
- const maxValue = vizMeta.maxValue || 100;
470
- const decimalPlaces = vizMeta.decimalPlaces || 0;
471
- const formattedValue = typeof kpiValue === 'number' ? kpiValue.toFixed(decimalPlaces) : kpiValue;
472
- switch (vizType) {
473
- case 'GAUGE':
474
- const gaugePercentage = Math.min(((kpiValue - minValue) / (maxValue - minValue)) * 100, 100);
475
- return html `
476
- <div style="text-align:center;margin:16px 0;">
477
- <div
478
- style="width:120px;height:60px;border-radius:60px 60px 0 0;background:conic-gradient(${color} 0deg ${gaugePercentage *
479
- 3.6}deg, #e0e0e0 ${gaugePercentage * 3.6}deg 360deg);margin:0 auto;position:relative;"
480
- >
481
- <div
482
- style="position:absolute;bottom:0;left:50%;transform:translateX(-50%);font-size:1.2rem;font-weight:bold;color:${color};"
483
- >
484
- ${formattedValue}${unit}
485
- </div>
486
- </div>
487
- </div>
488
- `;
489
- case 'PROGRESS':
490
- const progressPercentage = Math.min(((kpiValue - minValue) / (maxValue - minValue)) * 100, 100);
491
- return html `
492
- <div style="margin:16px 0;">
493
- <div style="background:#e0e0e0;height:20px;border-radius:10px;overflow:hidden;">
494
- <div style="background:${color};height:100%;width:${progressPercentage}%;transition:width 0.3s;"></div>
495
- </div>
496
- <div style="text-align:center;margin-top:8px;font-weight:bold;color:${color};font-size:1.2rem;">
497
- ${formattedValue}${unit}
498
- </div>
499
- </div>
500
- `;
501
- case 'ICON':
502
- return html `
503
- <div style="text-align:center;margin:16px 0;">
504
- <md-icon style="color:${color};font-size:48px;">${icon}</md-icon>
505
- <div style="font-size:1.5rem;font-weight:bold;color:${color};margin-top:8px;">${formattedValue}${unit}</div>
506
- </div>
507
- `;
508
- case 'THERMOMETER':
509
- const thermoPercentage = Math.min(((kpiValue - minValue) / (maxValue - minValue)) * 100, 100);
510
- return html `
511
- <div style="text-align:center;margin:16px 0;">
512
- <div
513
- style="width:40px;height:120px;background:#e0e0e0;border-radius:20px;margin:0 auto;position:relative;overflow:hidden;"
514
- >
515
- <div
516
- style="position:absolute;bottom:0;width:100%;height:${thermoPercentage}%;background:${color};border-radius:20px;"
517
- ></div>
518
- </div>
519
- <div style="font-size:1.2rem;font-weight:bold;color:${color};margin-top:8px;">${formattedValue}${unit}</div>
520
- </div>
521
- `;
522
- case 'SPEEDOMETER':
523
- const speedPercentage = Math.min(((kpiValue - minValue) / (maxValue - minValue)) * 100, 100);
524
- const angle = (speedPercentage / 100) * 180 - 90; // -90도에서 90도까지
525
- return html `
526
- <div style="text-align:center;margin:16px 0;">
527
- <div
528
- style="width:120px;height:60px;border-radius:60px 60px 0 0;background:conic-gradient(${color} -90deg ${angle}deg, #e0e0e0 ${angle}deg 90deg);margin:0 auto;position:relative;"
529
- >
530
- <div
531
- style="position:absolute;bottom:0;left:50%;transform:translateX(-50%);font-size:1.2rem;font-weight:bold;color:${color};"
532
- >
533
- ${formattedValue}${unit}
534
- </div>
535
- </div>
536
- </div>
537
- `;
538
- case 'BULLET':
539
- const bulletPercentage = Math.min(((kpiValue - minValue) / (maxValue - minValue)) * 100, 100);
540
- const targetPercentage = Math.min(((targetValue - minValue) / (maxValue - minValue)) * 100, 100);
541
- return html `
542
- <div style="margin:16px 0;">
543
- <div style="background:#e0e0e0;height:30px;border-radius:15px;overflow:hidden;position:relative;">
544
- <div style="background:${color};height:100%;width:${bulletPercentage}%;transition:width 0.3s;"></div>
545
- <div
546
- style="position:absolute;top:0;left:${targetPercentage}%;width:2px;height:100%;background:#333;"
547
- ></div>
548
- </div>
549
- <div style="text-align:center;margin-top:8px;font-weight:bold;color:${color};font-size:1.2rem;">
550
- ${formattedValue}${unit}
551
- </div>
552
- </div>
553
- `;
554
- case 'TEXT':
555
- return html `
556
- <div style="text-align:center;margin:16px 0;">
557
- <div style="font-size:1.5rem;font-weight:bold;color:${color};">${formattedValue}${unit}</div>
558
- </div>
559
- `;
560
- case 'BADGE':
561
- return html `
562
- <div style="text-align:center;margin:16px 0;">
563
- <span
564
- style="display:inline-block;padding:8px 16px;background:${color};color:white;border-radius:20px;font-size:1.2rem;font-weight:bold;"
565
- >${formattedValue}${unit}</span
566
- >
567
- </div>
568
- `;
569
- default: // CARD, BAR, LINE, PIE, DONUT, RADAR, TABLE
570
- return html ` <div class="kpi-value">${formattedValue}${unit}</div> `;
571
- }
572
- }
573
- get context() {
574
- return {
575
- title: 'KPI 대시보드',
576
- description: '조직 KPI 실적, 등급, 이력, 시각화 등 KPI 전용 대시보드'
577
- };
578
- }
579
- render() {
580
- if (this.loading)
581
- return nothing;
582
- if (this.error)
583
- return html `<div>${this.error}</div>`;
584
- return html `
585
- <div class="dashboard-root">
586
- <!-- KPI 통계 차트 — kpiStatistics 를 그린다 -->
587
- <div class="charts-section">
588
- <!-- 통계 필터 및 요약 -->
589
- <div style="margin-bottom: 24px; background: #f8f9fa; padding: 16px; border-radius: 8px;">
590
- <div style="display: flex; gap: 16px; align-items: center; flex-wrap: wrap;">
591
- <div style="display: flex; align-items: center; gap: 8px;">
592
- <label style="font-weight: 500; color: #333;">기간:</label>
593
- <span style="padding: 6px 12px; background: #e9ecef; border-radius: 4px; color: #495057;">
594
- MONTH (월별)
595
- </span>
596
- </div>
597
- <div style="display: flex; align-items: center; gap: 8px;">
598
- <label style="font-weight: 500; color: #333;">날짜:</label>
599
- <select
600
- .value=${this.selectedValueDate}
601
- @change=${this._onValueDateChange}
602
- style="padding: 6px 12px; border: 1px solid #ddd; border-radius: 4px; background: white;"
603
- >
604
- ${this.availableValueDates.map(date => html `<option value="${date}">${date}${date === this.currentMonth ? ' (현재)' : ''}</option>`)}
605
- </select>
606
- </div>
607
- ${this.statisticsSummary
608
- ? html `
609
- <div style="display: flex; gap: 16px; margin-left: auto;">
610
- <span style="color: #666; font-size: 0.9em;">
611
- <b>KPI:</b> ${this.statisticsSummary.totalKpis}개
612
- </span>
613
- <span style="color: #666; font-size: 0.9em;">
614
- <b>카테고리:</b> ${this.statisticsSummary.totalCategories}개
615
- </span>
616
- <span style="color: #666; font-size: 0.9em;">
617
- <b>평균:</b> ${this.statisticsSummary.avgMean}
618
- </span>
619
- <span style="color: #666; font-size: 0.9em;">
620
- <b>중앙값:</b> ${this.statisticsSummary.avgMedian}
621
- </span>
622
- <span style="color: #666; font-size: 0.9em;">
623
- <b>표준편차:</b> ${this.statisticsSummary.avgStdDev}
624
- </span>
625
- </div>
626
- `
627
- : nothing}
628
- </div>
629
- </div>
630
-
631
- <div class="chart-card">
632
- <div class="chart-title">실제 KPI 통계 비교 (Radar)</div>
633
- <div class="chart-container">
634
- ${this.statisticsLoading
635
- ? html `<div style="display:flex;align-items:center;justify-content:center;height:100%;color:#666;">
636
- 통계 데이터 로딩 중...
637
- </div>`
638
- : this.realKpiRadarData.length > 0
639
- ? html `<kpi-radar-chart
640
- .data=${this.realKpiRadarData}
641
- .categories=${this.realKpiRadarCategories}
642
- .currentGroup=${'평균'}
643
- ></kpi-radar-chart>`
644
- : html `<div style="display:flex;align-items:center;justify-content:center;height:100%;color:#666;">
645
- 선택된 기간에 통계 데이터가 없습니다.
646
- </div>`}
647
- </div>
648
- <div style="margin-top:12px;color:#666;font-size:0.98em;">
649
- ※ <b>실제 KPI 통계 Radar 차트</b>는 실제 KPIStatistic 데이터를 기반으로 각 카테고리별 평균, 중앙값,
650
- 표준편차를 비교합니다.<br />
651
- <b>평균</b>은 산술평균, <b>중앙값</b>은 50분위수, <b>표준편차</b>는 데이터 분산 정도를 나타냅니다.
652
- </div>
653
- </div>
654
- <div class="chart-card">
655
- <div class="chart-title">실제 KPI 통계 분포 (Boxplot)</div>
656
- <div class="chart-container">
657
- ${this.statisticsLoading
658
- ? html `<div style="display:flex;align-items:center;justify-content:center;height:100%;color:#666;">
659
- 통계 데이터 로딩 중...
660
- </div>`
661
- : this.realKpiBoxplotData.length > 0
662
- ? html `<kpi-boxplot-chart
663
- .data=${this.realKpiBoxplotData}
664
- .groups=${this.realKpiBoxplotGroups}
665
- .currentGroup=${'평균'}
666
- ></kpi-boxplot-chart>`
667
- : html `<div style="display:flex;align-items:center;justify-content:center;height:100%;color:#666;">
668
- 선택된 기간에 통계 데이터가 없습니다.
669
- </div>`}
670
- </div>
671
- <div style="margin-top:12px;color:#666;font-size:0.98em;">
672
- ※ <b>실제 KPI 통계 Boxplot</b>은 실제 KPIStatistic 데이터를 기반으로 각 카테고리별 통계값의 분포를
673
- 보여줍니다.<br />
674
- 각 카테고리의 <b>평균값들</b>을 기준으로 분포를 계산하여, 카테고리 간 통계적 특성을 비교할 수 있습니다.
675
- </div>
676
- </div>
677
- </div>
678
-
679
- <!-- 3레벨 KPI 플로팅 섹션 -->
680
- <div class="charts-section">
681
- <div style="margin-bottom: 24px;">
682
- <h2 style="font-size: 1.5rem; font-weight: bold; color: #333; text-align: center; margin-bottom: 8px;">
683
- 3레벨 KPI 분석
684
- </h2>
685
- <p style="text-align: center; color: #666; font-size: 0.95rem;">
686
- 실제 KPIStatistic 데이터를 기반으로 한 다층적 분석
687
- </p>
688
- </div>
689
-
690
- <!-- 1레벨: 그룹 총 스코어 -->
691
- <div style="margin-bottom: 32px;">
692
- <h3 style="font-size: 1.2rem; font-weight: 600; color: #495057; margin-bottom: 16px;">
693
- 📊 1레벨: 그룹 총 스코어
694
- </h3>
695
- <kpi-level1-card></kpi-level1-card>
696
- </div>
697
-
698
- <!-- 2레벨: 카테고리 비교 -->
699
- <div style="margin-bottom: 32px;">
700
- <h3 style="font-size: 1.2rem; font-weight: 600; color: #495057; margin-bottom: 16px;">
701
- 📈 2레벨: 카테고리 비교 분석
702
- </h3>
703
- <kpi-level2-comparison></kpi-level2-comparison>
704
- </div>
705
-
706
- <!-- 3레벨: 개별 KPI 비교 -->
707
- <div style="margin-bottom: 32px;">
708
- <h3 style="font-size: 1.2rem; font-weight: 600; color: #495057; margin-bottom: 16px;">
709
- 🔍 3레벨: 개별 KPI 상세 분석
710
- </h3>
711
- <kpi-level3-comparison></kpi-level3-comparison>
712
- </div>
713
- </div>
714
- ${this.showHistoryModal
715
- ? html `
716
- <div
717
- style="position:fixed;top:0;left:0;width:100vw;height:100vh;background:rgba(0,0,0,0.25);z-index:1000;display:flex;align-items:center;justify-content:center;"
718
- >
719
- <div
720
- style="background:#fff;padding:32px 40px;border-radius:16px;min-width:340px;max-width:90vw;max-height:80vh;overflow:auto;box-shadow:0 4px 24px rgba(0,0,0,0.15);"
721
- >
722
- <div style="font-size:1.2rem;font-weight:bold;margin-bottom:16px;">
723
- ${this.modalKpiName} 변경 이력
724
- </div>
725
- <ul style="padding:0;list-style:none;">
726
- ${this.modalHistories.length === 0
727
- ? html `<li style="color:#bbb;">이력이 없습니다.</li>`
728
- : this.modalHistories.map(h => html `<li style="margin-bottom:8px;">
729
- v${h.version} (${h.updatedAt?.slice(0, 10) ?? ''} ${h.updater?.name ?? ''})
730
- </li>`)}
731
- </ul>
732
- <button style="margin-top:16px;padding:6px 18px;" @click=${() => this.closeHistoryModal()}>
733
- 닫기
734
- </button>
735
- </div>
736
- </div>
737
- `
738
- : nothing}
739
- ${this.categories.map(cat => html `
740
- <div class="category-section">
741
- <div class="category-title">${cat.name}</div>
742
- <div class="kpi-cards">
743
- ${(cat.kpis || []).map(kpi => html `
744
- <div class="kpi-card">
745
- <div class="kpi-name">${kpi.name}</div>
746
- ${this._renderKpiValue(kpi)}
747
- <div class="kpi-target">목표: ${kpi.targetValue ?? '-'}${kpi.unit ?? ''}</div>
748
- <!-- 등급 시각화 -->
749
- <div style="margin-top:8px;">
750
- <b>등급:</b>
751
- ${(() => {
752
- const grades = kpi.grades || [];
753
- const kpiValue = kpi.value?.value;
754
- if (grades.length > 5) {
755
- // 5개를 넘으면 현재 값에 해당하는 grade만 표시
756
- const currentGrade = grades.find(g => kpiValue >= g.minValue && kpiValue <= g.maxValue);
757
- if (currentGrade) {
758
- return html `<span
759
- style="display:inline-block;margin-right:8px;padding:4px 12px;border-radius:12px;background:${currentGrade.color ??
760
- '#3a3ad6'};color:white;font-size:1em;font-weight:bold;box-shadow:0 2px 8px rgba(58,58,214,0.3);border:2px solid ${currentGrade.color ??
761
- '#3a3ad6'};"
762
- >${currentGrade.name}(${currentGrade.minValue}~${currentGrade.maxValue}${kpi.unit ??
763
- ''},
764
- ${currentGrade.score ?? ''}점)</span
765
- >`;
766
- }
767
- else {
768
- return html `<span style="color:#bbb;font-size:0.95em;">등급 없음</span>`;
769
- }
770
- }
771
- else {
772
- // 5개 이하면 전체 리스트 표시하되 현재 등급은 강조
773
- return grades.map(g => {
774
- const isCurrentGrade = kpiValue >= g.minValue && kpiValue <= g.maxValue;
775
- return html `<span
776
- style="display:inline-block;margin-right:8px;padding:${isCurrentGrade
777
- ? '4px 12px'
778
- : '2px 8px'};border-radius:${isCurrentGrade
779
- ? '12px'
780
- : '8px'};background:${isCurrentGrade
781
- ? (g.color ?? '#3a3ad6')
782
- : (g.color ?? '#eee')};color:${isCurrentGrade
783
- ? 'white'
784
- : '#222'};font-size:${isCurrentGrade ? '1em' : '0.95em'};font-weight:${isCurrentGrade
785
- ? 'bold'
786
- : 'normal'};box-shadow:${isCurrentGrade
787
- ? '0 2px 8px rgba(58,58,214,0.3)'
788
- : 'none'};border:${isCurrentGrade ? `2px solid ${g.color ?? '#3a3ad6'}` : 'none'};"
789
- >${g.name}(${g.minValue}~${g.maxValue}${kpi.unit ?? ''}, ${g.score ?? ''}점)</span
790
- >`;
791
- });
792
- }
793
- })()}
794
- </div>
795
- <!-- 최근 변경 이력(1건만) -->
796
- <div style="margin-top:8px;font-size:0.95em;color:#888;">
797
- <b>최근 변경:</b>
798
- ${kpi.histories && kpi.histories.length > 0
799
- ? html `<span style="margin-right:8px;"
800
- >v${kpi.histories[0].version} (${kpi.histories[0].updatedAt?.slice(0, 10) ?? ''}
801
- ${kpi.histories[0].updater?.name ?? ''})</span
802
- >`
803
- : html `<span style="color:#bbb">없음</span>`}
804
- <button
805
- style="margin-left:8px;font-size:0.95em;padding:2px 8px;"
806
- @click=${() => this.openHistoryModal(kpi)}
807
- >
808
- 더보기
809
- </button>
810
- </div>
811
- <!-- 경고/알림 -->
812
- <div style="margin-top:8px;">
813
- ${this.alerts.filter(a => a.kpi?.id === kpi.id).length > 0
814
- ? this.alerts
815
- .filter(a => a.kpi?.id === kpi.id)
816
- .map(a => html `<span
817
- style="display:inline-block;margin-right:8px;padding:2px 8px;border-radius:8px;background:${a.level ===
818
- 'critical'
819
- ? '#ffb3b3'
820
- : a.level === 'warning'
821
- ? '#ffe082'
822
- : '#e0e0e0'};color:#b71c1c;font-size:0.95em;"
823
- >${a.message}</span
824
- >`)
825
- : html `<span style="color:#4caf50;font-size:0.95em;">이상/경고 없음</span>`}
826
- </div>
827
- </div>
828
- `)}
829
- </div>
830
- </div>
831
- `)}
832
- </div>
833
- `;
834
- }
835
- };
836
- __decorate([
837
- state(),
838
- __metadata("design:type", Array)
839
- ], KpiDashboardPage.prototype, "categories", void 0);
840
- __decorate([
841
- state(),
842
- __metadata("design:type", Object)
843
- ], KpiDashboardPage.prototype, "loading", void 0);
844
- __decorate([
845
- state(),
846
- __metadata("design:type", Object)
847
- ], KpiDashboardPage.prototype, "error", void 0);
848
- __decorate([
849
- state(),
850
- __metadata("design:type", Array)
851
- ], KpiDashboardPage.prototype, "alerts", void 0);
852
- __decorate([
853
- state(),
854
- __metadata("design:type", Boolean)
855
- ], KpiDashboardPage.prototype, "showHistoryModal", void 0);
856
- __decorate([
857
- state(),
858
- __metadata("design:type", Array)
859
- ], KpiDashboardPage.prototype, "modalHistories", void 0);
860
- __decorate([
861
- state(),
862
- __metadata("design:type", String)
863
- ], KpiDashboardPage.prototype, "modalKpiName", void 0);
864
- __decorate([
865
- state(),
866
- __metadata("design:type", Array)
867
- ], KpiDashboardPage.prototype, "kpiStatistics", void 0);
868
- __decorate([
869
- state(),
870
- __metadata("design:type", Object)
871
- ], KpiDashboardPage.prototype, "statisticsLoading", void 0);
872
- __decorate([
873
- state(),
874
- __metadata("design:type", String)
875
- ], KpiDashboardPage.prototype, "selectedPeriodType", void 0);
876
- __decorate([
877
- state(),
878
- __metadata("design:type", String)
879
- ], KpiDashboardPage.prototype, "selectedValueDate", void 0);
880
- KpiDashboardPage = __decorate([
881
- customElement('kpi-dashboard')
882
- ], KpiDashboardPage);
883
- export { KpiDashboardPage };
884
- //# sourceMappingURL=kpi-dashboard.js.map