@things-factory/kpi 10.1.248 → 10.1.250

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/dist-client/bootstrap.d.ts +2 -0
  2. package/dist-client/bootstrap.js +7 -0
  3. package/dist-client/bootstrap.js.map +1 -0
  4. package/dist-client/charts/kpi-boxplot-chart.d.ts +24 -0
  5. package/dist-client/charts/kpi-boxplot-chart.js +324 -0
  6. package/dist-client/charts/kpi-boxplot-chart.js.map +1 -0
  7. package/dist-client/charts/kpi-mini-trend-chart.d.ts +14 -0
  8. package/dist-client/charts/kpi-mini-trend-chart.js +148 -0
  9. package/dist-client/charts/kpi-mini-trend-chart.js.map +1 -0
  10. package/dist-client/charts/kpi-radar-chart.d.ts +16 -0
  11. package/dist-client/charts/kpi-radar-chart.js +138 -0
  12. package/dist-client/charts/kpi-radar-chart.js.map +1 -0
  13. package/dist-client/charts/kpi-trend-chart.d.ts +25 -0
  14. package/dist-client/charts/kpi-trend-chart.js +186 -0
  15. package/dist-client/charts/kpi-trend-chart.js.map +1 -0
  16. package/dist-client/google-map/common-google-map.d.ts +34 -0
  17. package/dist-client/google-map/common-google-map.js +333 -0
  18. package/dist-client/google-map/common-google-map.js.map +1 -0
  19. package/dist-client/google-map/google-map-loader.d.ts +8 -0
  20. package/dist-client/google-map/google-map-loader.js +22 -0
  21. package/dist-client/google-map/google-map-loader.js.map +1 -0
  22. package/dist-client/index.d.ts +1 -0
  23. package/dist-client/index.js +2 -0
  24. package/dist-client/index.js.map +1 -0
  25. package/dist-client/pages/kpi/kpi-grade-editor.d.ts +35 -0
  26. package/dist-client/pages/kpi/kpi-grade-editor.js +165 -0
  27. package/dist-client/pages/kpi/kpi-grade-editor.js.map +1 -0
  28. package/dist-client/pages/kpi/kpi-importer.d.ts +23 -0
  29. package/dist-client/pages/kpi/kpi-importer.js +92 -0
  30. package/dist-client/pages/kpi/kpi-importer.js.map +1 -0
  31. package/dist-client/pages/kpi/kpi-list-page.d.ts +136 -0
  32. package/dist-client/pages/kpi/kpi-list-page.js +948 -0
  33. package/dist-client/pages/kpi/kpi-list-page.js.map +1 -0
  34. package/dist-client/pages/kpi/kpi-overview-sample.d.ts +36 -0
  35. package/dist-client/pages/kpi/kpi-overview-sample.js +264 -0
  36. package/dist-client/pages/kpi/kpi-overview-sample.js.map +1 -0
  37. package/dist-client/pages/kpi/kpi-overview.d.ts +14 -0
  38. package/dist-client/pages/kpi/kpi-overview.js +361 -0
  39. package/dist-client/pages/kpi/kpi-overview.js.map +1 -0
  40. package/dist-client/pages/kpi/kpi-tree-page.d.ts +51 -0
  41. package/dist-client/pages/kpi/kpi-tree-page.js +355 -0
  42. package/dist-client/pages/kpi/kpi-tree-page.js.map +1 -0
  43. package/dist-client/pages/kpi/kpi-view.d.ts +12 -0
  44. package/dist-client/pages/kpi/kpi-view.js +193 -0
  45. package/dist-client/pages/kpi/kpi-view.js.map +1 -0
  46. package/dist-client/pages/kpi/kpi-viz-editor.d.ts +19 -0
  47. package/dist-client/pages/kpi/kpi-viz-editor.js +562 -0
  48. package/dist-client/pages/kpi/kpi-viz-editor.js.map +1 -0
  49. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.d.ts +17 -0
  50. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js +279 -0
  51. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js.map +1 -0
  52. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.d.ts +19 -0
  53. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js +385 -0
  54. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js.map +1 -0
  55. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.d.ts +23 -0
  56. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js +465 -0
  57. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js.map +1 -0
  58. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.d.ts +8 -0
  59. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js +78 -0
  60. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js.map +1 -0
  61. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.d.ts +24 -0
  62. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js +440 -0
  63. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js.map +1 -0
  64. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.d.ts +33 -0
  65. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js +444 -0
  66. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js.map +1 -0
  67. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.d.ts +23 -0
  68. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js +369 -0
  69. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js.map +1 -0
  70. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.d.ts +18 -0
  71. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js +128 -0
  72. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js.map +1 -0
  73. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.d.ts +31 -0
  74. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js +493 -0
  75. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js.map +1 -0
  76. package/dist-client/pages/kpi-dashboard/kpi-dashboard.d.ts +50 -0
  77. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +884 -0
  78. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -0
  79. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.d.ts +12 -0
  80. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js +82 -0
  81. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js.map +1 -0
  82. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.d.ts +11 -0
  83. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js +65 -0
  84. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js.map +1 -0
  85. package/dist-client/pages/kpi-dashboard/kpi-list-summary.d.ts +13 -0
  86. package/dist-client/pages/kpi-dashboard/kpi-list-summary.js +115 -0
  87. package/dist-client/pages/kpi-dashboard/kpi-list-summary.js.map +1 -0
  88. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.d.ts +15 -0
  89. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js +146 -0
  90. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js.map +1 -0
  91. package/dist-client/pages/kpi-dashboard/kpi-value-entry.d.ts +7 -0
  92. package/dist-client/pages/kpi-dashboard/kpi-value-entry.js +86 -0
  93. package/dist-client/pages/kpi-dashboard/kpi-value-entry.js.map +1 -0
  94. package/dist-client/pages/kpi-history/kpi-history-list-page.d.ts +21 -0
  95. package/dist-client/pages/kpi-history/kpi-history-list-page.js +160 -0
  96. package/dist-client/pages/kpi-history/kpi-history-list-page.js.map +1 -0
  97. package/dist-client/pages/kpi-metric/kpi-metric-importer.d.ts +23 -0
  98. package/dist-client/pages/kpi-metric/kpi-metric-importer.js +92 -0
  99. package/dist-client/pages/kpi-metric/kpi-metric-importer.js.map +1 -0
  100. package/dist-client/pages/kpi-metric/kpi-metric-list-page.d.ts +65 -0
  101. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js +415 -0
  102. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js.map +1 -0
  103. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +52 -0
  104. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +678 -0
  105. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +1 -0
  106. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.d.ts +23 -0
  107. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js +75 -0
  108. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js.map +1 -0
  109. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +64 -0
  110. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +311 -0
  111. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +1 -0
  112. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.d.ts +12 -0
  113. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js +175 -0
  114. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js.map +1 -0
  115. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.d.ts +35 -0
  116. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js +161 -0
  117. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js.map +1 -0
  118. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.d.ts +47 -0
  119. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js +655 -0
  120. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js.map +1 -0
  121. package/dist-client/pages/kpi-statistic/kpi-statistic-importer.d.ts +23 -0
  122. package/dist-client/pages/kpi-statistic/kpi-statistic-importer.js +92 -0
  123. package/dist-client/pages/kpi-statistic/kpi-statistic-importer.js.map +1 -0
  124. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.d.ts +65 -0
  125. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js +416 -0
  126. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js.map +1 -0
  127. package/dist-client/pages/kpi-value/kpi-value-editor-page.d.ts +50 -0
  128. package/dist-client/pages/kpi-value/kpi-value-editor-page.js +700 -0
  129. package/dist-client/pages/kpi-value/kpi-value-editor-page.js.map +1 -0
  130. package/dist-client/pages/kpi-value/kpi-value-importer.d.ts +23 -0
  131. package/dist-client/pages/kpi-value/kpi-value-importer.js +92 -0
  132. package/dist-client/pages/kpi-value/kpi-value-importer.js.map +1 -0
  133. package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +73 -0
  134. package/dist-client/pages/kpi-value/kpi-value-list-page.js +403 -0
  135. package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +1 -0
  136. package/dist-client/route.d.ts +1 -0
  137. package/dist-client/route.js +47 -0
  138. package/dist-client/route.js.map +1 -0
  139. package/dist-client/tsconfig.tsbuildinfo +1 -0
  140. package/dist-client/viewparts/kpi-metric-input.d.ts +23 -0
  141. package/dist-client/viewparts/kpi-metric-input.js +140 -0
  142. package/dist-client/viewparts/kpi-metric-input.js.map +1 -0
  143. package/dist-client/viewparts/kpi-metric-meta-editor.d.ts +36 -0
  144. package/dist-client/viewparts/kpi-metric-meta-editor.js +321 -0
  145. package/dist-client/viewparts/kpi-metric-meta-editor.js.map +1 -0
  146. package/dist-client/viewparts/metric-input-hint.d.ts +26 -0
  147. package/dist-client/viewparts/metric-input-hint.js +19 -0
  148. package/dist-client/viewparts/metric-input-hint.js.map +1 -0
  149. package/dist-client/viewparts/metric-input.test.d.ts +1 -0
  150. package/dist-client/viewparts/metric-input.test.js +43 -0
  151. package/dist-client/viewparts/metric-input.test.js.map +1 -0
  152. package/dist-client/viewparts/metric-renderer-registry.d.ts +18 -0
  153. package/dist-client/viewparts/metric-renderer-registry.js +29 -0
  154. package/dist-client/viewparts/metric-renderer-registry.js.map +1 -0
  155. package/dist-client/viewparts/ox-grist-editor-metric-input-hint.d.ts +19 -0
  156. package/dist-client/viewparts/ox-grist-editor-metric-input-hint.js +76 -0
  157. package/dist-client/viewparts/ox-grist-editor-metric-input-hint.js.map +1 -0
  158. package/dist-server/calculator/calculator.test.d.ts +1 -0
  159. package/dist-server/calculator/calculator.test.js +126 -0
  160. package/dist-server/calculator/calculator.test.js.map +1 -0
  161. package/dist-server/calculator/evaluator.d.ts +8 -0
  162. package/dist-server/calculator/evaluator.js +42 -0
  163. package/dist-server/calculator/evaluator.js.map +1 -0
  164. package/dist-server/calculator/functions.d.ts +3 -0
  165. package/dist-server/calculator/functions.js +62 -0
  166. package/dist-server/calculator/functions.js.map +1 -0
  167. package/dist-server/calculator/index.d.ts +6 -0
  168. package/dist-server/calculator/index.js +10 -0
  169. package/dist-server/calculator/index.js.map +1 -0
  170. package/dist-server/calculator/parser.d.ts +34 -0
  171. package/dist-server/calculator/parser.js +185 -0
  172. package/dist-server/calculator/parser.js.map +1 -0
  173. package/dist-server/calculator/provider.d.ts +8 -0
  174. package/dist-server/calculator/provider.js +13 -0
  175. package/dist-server/calculator/provider.js.map +1 -0
  176. package/dist-server/calculator/score.d.ts +21 -0
  177. package/dist-server/calculator/score.js +36 -0
  178. package/dist-server/calculator/score.js.map +1 -0
  179. package/dist-server/calculator/score.test.d.ts +1 -0
  180. package/dist-server/calculator/score.test.js +47 -0
  181. package/dist-server/calculator/score.test.js.map +1 -0
  182. package/dist-server/calculator/validate.d.ts +15 -0
  183. package/dist-server/calculator/validate.js +30 -0
  184. package/dist-server/calculator/validate.js.map +1 -0
  185. package/dist-server/calculator/validate.test.d.ts +1 -0
  186. package/dist-server/calculator/validate.test.js +45 -0
  187. package/dist-server/calculator/validate.test.js.map +1 -0
  188. package/dist-server/controllers/index.d.ts +2 -0
  189. package/dist-server/controllers/index.js +6 -0
  190. package/dist-server/controllers/index.js.map +1 -0
  191. package/dist-server/controllers/kpi-metric-value-provider.d.ts +11 -0
  192. package/dist-server/controllers/kpi-metric-value-provider.js +97 -0
  193. package/dist-server/controllers/kpi-metric-value-provider.js.map +1 -0
  194. package/dist-server/controllers/kpi-value-provider.d.ts +11 -0
  195. package/dist-server/controllers/kpi-value-provider.js +50 -0
  196. package/dist-server/controllers/kpi-value-provider.js.map +1 -0
  197. package/dist-server/index.d.ts +5 -0
  198. package/dist-server/index.js +9 -0
  199. package/dist-server/index.js.map +1 -0
  200. package/dist-server/migrations/1752190849680-seed-kpi-metrics.d.ts +6 -0
  201. package/dist-server/migrations/1752190849680-seed-kpi-metrics.js +102 -0
  202. package/dist-server/migrations/1752190849680-seed-kpi-metrics.js.map +1 -0
  203. package/dist-server/migrations/1752190849681-seed-kpi.d.ts +5 -0
  204. package/dist-server/migrations/1752190849681-seed-kpi.js +315 -0
  205. package/dist-server/migrations/1752190849681-seed-kpi.js.map +1 -0
  206. package/dist-server/migrations/1752192090123-add-grades-to-kpi.d.ts +7 -0
  207. package/dist-server/migrations/1752192090123-add-grades-to-kpi.js +51 -0
  208. package/dist-server/migrations/1752192090123-add-grades-to-kpi.js.map +1 -0
  209. package/dist-server/migrations/1752192090124-add-kpi-statistics.d.ts +5 -0
  210. package/dist-server/migrations/1752192090124-add-kpi-statistics.js +710 -0
  211. package/dist-server/migrations/1752192090124-add-kpi-statistics.js.map +1 -0
  212. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.d.ts +6 -0
  213. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.js +111 -0
  214. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.js.map +1 -0
  215. package/dist-server/migrations/1752192090129-seed-kpi-values.d.ts +6 -0
  216. package/dist-server/migrations/1752192090129-seed-kpi-values.js +187 -0
  217. package/dist-server/migrations/1752192090129-seed-kpi-values.js.map +1 -0
  218. package/dist-server/migrations/1752192090200-add-meta-to-kpi-metric.d.ts +10 -0
  219. package/dist-server/migrations/1752192090200-add-meta-to-kpi-metric.js +26 -0
  220. package/dist-server/migrations/1752192090200-add-meta-to-kpi-metric.js.map +1 -0
  221. package/dist-server/migrations/1752192090201-backfill-kpi-metric-meta.d.ts +11 -0
  222. package/dist-server/migrations/1752192090201-backfill-kpi-metric-meta.js +54 -0
  223. package/dist-server/migrations/1752192090201-backfill-kpi-metric-meta.js.map +1 -0
  224. package/dist-server/migrations/grade-data/x11-performance-table.json +962 -0
  225. package/dist-server/migrations/grade-data/x12-performance-table.json +611 -0
  226. package/dist-server/migrations/grade-data/x14-performance-table.json +42 -0
  227. package/dist-server/migrations/grade-data/x21-performance-table.json +889 -0
  228. package/dist-server/migrations/grade-data/x22-performance-table.json +1064 -0
  229. package/dist-server/migrations/grade-data/x23-performance-table.json +42 -0
  230. package/dist-server/migrations/grade-data/x31-performance-table.json +644 -0
  231. package/dist-server/migrations/grade-data/x32-performance-table.json +993 -0
  232. package/dist-server/migrations/grade-data/x33-performance-table.json +195 -0
  233. package/dist-server/migrations/grade-data/x34-performance-table.json +12 -0
  234. package/dist-server/migrations/grade-data/x35-performance-table.json +42 -0
  235. package/dist-server/migrations/grade-data/x41-performance-table.json +825 -0
  236. package/dist-server/migrations/grade-data/x42-performance-table.json +786 -0
  237. package/dist-server/migrations/grade-data/x43-performance-table.json +12 -0
  238. package/dist-server/migrations/grade-data/x44-performance-table.json +42 -0
  239. package/dist-server/migrations/grade-data/x51-performance-table.json +924 -0
  240. package/dist-server/migrations/grade-data/x52-performance-table.json +42 -0
  241. package/dist-server/migrations/grade-data/x61-performance-table.json +261 -0
  242. package/dist-server/migrations/grade-data/x62-performance-table.json +42 -0
  243. package/dist-server/migrations/index.d.ts +1 -0
  244. package/dist-server/migrations/index.js +12 -0
  245. package/dist-server/migrations/index.js.map +1 -0
  246. package/dist-server/migrations/seed-data/kpi-metrics-seed.json +517 -0
  247. package/dist-server/migrations/seed-data/kpi-org-scope-seed.json +1676 -0
  248. package/dist-server/migrations/seed-data/kpi-scopes-seed.json +121 -0
  249. package/dist-server/migrations/seed-data/kpi-values-seed.json +402 -0
  250. package/dist-server/migrations/seed-data/kpis-seed.json +488 -0
  251. package/dist-server/migrations/seed-data/scope-definitions-seed.json +90 -0
  252. package/dist-server/routes.d.ts +1 -0
  253. package/dist-server/routes.js +72 -0
  254. package/dist-server/routes.js.map +1 -0
  255. package/dist-server/service/index.d.ts +15 -0
  256. package/dist-server/service/index.js +49 -0
  257. package/dist-server/service/index.js.map +1 -0
  258. package/dist-server/service/kpi/aggregate-kpi.d.ts +8 -0
  259. package/dist-server/service/kpi/aggregate-kpi.js +123 -0
  260. package/dist-server/service/kpi/aggregate-kpi.js.map +1 -0
  261. package/dist-server/service/kpi/event-subscriber.d.ts +9 -0
  262. package/dist-server/service/kpi/event-subscriber.js +31 -0
  263. package/dist-server/service/kpi/event-subscriber.js.map +1 -0
  264. package/dist-server/service/kpi/index.d.ts +8 -0
  265. package/dist-server/service/kpi/index.js +12 -0
  266. package/dist-server/service/kpi/index.js.map +1 -0
  267. package/dist-server/service/kpi/kpi-formula.service.d.ts +49 -0
  268. package/dist-server/service/kpi/kpi-formula.service.js +165 -0
  269. package/dist-server/service/kpi/kpi-formula.service.js.map +1 -0
  270. package/dist-server/service/kpi/kpi-grade.types.d.ts +22 -0
  271. package/dist-server/service/kpi/kpi-grade.types.js +3 -0
  272. package/dist-server/service/kpi/kpi-grade.types.js.map +1 -0
  273. package/dist-server/service/kpi/kpi-history.d.ts +29 -0
  274. package/dist-server/service/kpi/kpi-history.js +148 -0
  275. package/dist-server/service/kpi/kpi-history.js.map +1 -0
  276. package/dist-server/service/kpi/kpi-mutation.d.ts +14 -0
  277. package/dist-server/service/kpi/kpi-mutation.js +553 -0
  278. package/dist-server/service/kpi/kpi-mutation.js.map +1 -0
  279. package/dist-server/service/kpi/kpi-query.d.ts +24 -0
  280. package/dist-server/service/kpi/kpi-query.js +309 -0
  281. package/dist-server/service/kpi/kpi-query.js.map +1 -0
  282. package/dist-server/service/kpi/kpi-type.d.ts +48 -0
  283. package/dist-server/service/kpi/kpi-type.js +221 -0
  284. package/dist-server/service/kpi/kpi-type.js.map +1 -0
  285. package/dist-server/service/kpi/kpi.d.ts +130 -0
  286. package/dist-server/service/kpi/kpi.js +356 -0
  287. package/dist-server/service/kpi/kpi.js.map +1 -0
  288. package/dist-server/service/kpi-alert/index.d.ts +2 -0
  289. package/dist-server/service/kpi-alert/index.js +6 -0
  290. package/dist-server/service/kpi-alert/index.js.map +1 -0
  291. package/dist-server/service/kpi-alert/kpi-alert-query.d.ts +4 -0
  292. package/dist-server/service/kpi-alert/kpi-alert-query.js +72 -0
  293. package/dist-server/service/kpi-alert/kpi-alert-query.js.map +1 -0
  294. package/dist-server/service/kpi-alert/kpi-alert-type.d.ts +8 -0
  295. package/dist-server/service/kpi-alert/kpi-alert-type.js +33 -0
  296. package/dist-server/service/kpi-alert/kpi-alert-type.js.map +1 -0
  297. package/dist-server/service/kpi-metric/aggregate-kpi-metric.d.ts +8 -0
  298. package/dist-server/service/kpi-metric/aggregate-kpi-metric.js +126 -0
  299. package/dist-server/service/kpi-metric/aggregate-kpi-metric.js.map +1 -0
  300. package/dist-server/service/kpi-metric/index.d.ts +6 -0
  301. package/dist-server/service/kpi-metric/index.js +10 -0
  302. package/dist-server/service/kpi-metric/index.js.map +1 -0
  303. package/dist-server/service/kpi-metric/kpi-metric-meta.d.ts +46 -0
  304. package/dist-server/service/kpi-metric/kpi-metric-meta.js +27 -0
  305. package/dist-server/service/kpi-metric/kpi-metric-meta.js.map +1 -0
  306. package/dist-server/service/kpi-metric/kpi-metric-meta.test.d.ts +1 -0
  307. package/dist-server/service/kpi-metric/kpi-metric-meta.test.js +43 -0
  308. package/dist-server/service/kpi-metric/kpi-metric-meta.test.js.map +1 -0
  309. package/dist-server/service/kpi-metric/kpi-metric-mutation.d.ts +10 -0
  310. package/dist-server/service/kpi-metric/kpi-metric-mutation.js +296 -0
  311. package/dist-server/service/kpi-metric/kpi-metric-mutation.js.map +1 -0
  312. package/dist-server/service/kpi-metric/kpi-metric-query.d.ts +14 -0
  313. package/dist-server/service/kpi-metric/kpi-metric-query.js +126 -0
  314. package/dist-server/service/kpi-metric/kpi-metric-query.js.map +1 -0
  315. package/dist-server/service/kpi-metric/kpi-metric-type.d.ts +45 -0
  316. package/dist-server/service/kpi-metric/kpi-metric-type.js +177 -0
  317. package/dist-server/service/kpi-metric/kpi-metric-type.js.map +1 -0
  318. package/dist-server/service/kpi-metric/kpi-metric.d.ts +39 -0
  319. package/dist-server/service/kpi-metric/kpi-metric.js +174 -0
  320. package/dist-server/service/kpi-metric/kpi-metric.js.map +1 -0
  321. package/dist-server/service/kpi-metric-value/index.d.ts +6 -0
  322. package/dist-server/service/kpi-metric-value/index.js +10 -0
  323. package/dist-server/service/kpi-metric-value/index.js.map +1 -0
  324. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +11 -0
  325. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +283 -0
  326. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +1 -0
  327. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.d.ts +13 -0
  328. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js +106 -0
  329. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js.map +1 -0
  330. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.d.ts +26 -0
  331. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.js +112 -0
  332. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.js.map +1 -0
  333. package/dist-server/service/kpi-metric-value/kpi-metric-value.d.ts +23 -0
  334. package/dist-server/service/kpi-metric-value/kpi-metric-value.js +107 -0
  335. package/dist-server/service/kpi-metric-value/kpi-metric-value.js.map +1 -0
  336. package/dist-server/service/kpi-org-scope/index.d.ts +5 -0
  337. package/dist-server/service/kpi-org-scope/index.js +9 -0
  338. package/dist-server/service/kpi-org-scope/index.js.map +1 -0
  339. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.d.ts +8 -0
  340. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.js +170 -0
  341. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.js.map +1 -0
  342. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.d.ts +14 -0
  343. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.js +152 -0
  344. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.js.map +1 -0
  345. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.d.ts +26 -0
  346. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.js +101 -0
  347. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.js.map +1 -0
  348. package/dist-server/service/kpi-org-scope/kpi-org-scope.d.ts +26 -0
  349. package/dist-server/service/kpi-org-scope/kpi-org-scope.js +135 -0
  350. package/dist-server/service/kpi-org-scope/kpi-org-scope.js.map +1 -0
  351. package/dist-server/service/kpi-scope/index.d.ts +9 -0
  352. package/dist-server/service/kpi-scope/index.js +14 -0
  353. package/dist-server/service/kpi-scope/index.js.map +1 -0
  354. package/dist-server/service/kpi-scope/kpi-scope-mutation.d.ts +9 -0
  355. package/dist-server/service/kpi-scope/kpi-scope-mutation.js +140 -0
  356. package/dist-server/service/kpi-scope/kpi-scope-mutation.js.map +1 -0
  357. package/dist-server/service/kpi-scope/kpi-scope-query.d.ts +11 -0
  358. package/dist-server/service/kpi-scope/kpi-scope-query.js +89 -0
  359. package/dist-server/service/kpi-scope/kpi-scope-query.js.map +1 -0
  360. package/dist-server/service/kpi-scope/kpi-scope-type.d.ts +35 -0
  361. package/dist-server/service/kpi-scope/kpi-scope-type.js +138 -0
  362. package/dist-server/service/kpi-scope/kpi-scope-type.js.map +1 -0
  363. package/dist-server/service/kpi-scope/kpi-scope.d.ts +38 -0
  364. package/dist-server/service/kpi-scope/kpi-scope.js +144 -0
  365. package/dist-server/service/kpi-scope/kpi-scope.js.map +1 -0
  366. package/dist-server/service/kpi-statistic/index.d.ts +6 -0
  367. package/dist-server/service/kpi-statistic/index.js +10 -0
  368. package/dist-server/service/kpi-statistic/index.js.map +1 -0
  369. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.d.ts +43 -0
  370. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.js +181 -0
  371. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.js.map +1 -0
  372. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.d.ts +50 -0
  373. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.js +324 -0
  374. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.js.map +1 -0
  375. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.d.ts +14 -0
  376. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.js +279 -0
  377. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.js.map +1 -0
  378. package/dist-server/service/kpi-statistic/kpi-statistic-query.d.ts +17 -0
  379. package/dist-server/service/kpi-statistic/kpi-statistic-query.js +183 -0
  380. package/dist-server/service/kpi-statistic/kpi-statistic-query.js.map +1 -0
  381. package/dist-server/service/kpi-statistic/kpi-statistic-type.d.ts +59 -0
  382. package/dist-server/service/kpi-statistic/kpi-statistic-type.js +200 -0
  383. package/dist-server/service/kpi-statistic/kpi-statistic-type.js.map +1 -0
  384. package/dist-server/service/kpi-statistic/kpi-statistic.d.ts +42 -0
  385. package/dist-server/service/kpi-statistic/kpi-statistic.js +210 -0
  386. package/dist-server/service/kpi-statistic/kpi-statistic.js.map +1 -0
  387. package/dist-server/service/kpi-value/index.d.ts +6 -0
  388. package/dist-server/service/kpi-value/index.js +10 -0
  389. package/dist-server/service/kpi-value/index.js.map +1 -0
  390. package/dist-server/service/kpi-value/kpi-value-mutation.d.ts +13 -0
  391. package/dist-server/service/kpi-value/kpi-value-mutation.js +447 -0
  392. package/dist-server/service/kpi-value/kpi-value-mutation.js.map +1 -0
  393. package/dist-server/service/kpi-value/kpi-value-query.d.ts +22 -0
  394. package/dist-server/service/kpi-value/kpi-value-query.js +149 -0
  395. package/dist-server/service/kpi-value/kpi-value-query.js.map +1 -0
  396. package/dist-server/service/kpi-value/kpi-value-score.service.d.ts +24 -0
  397. package/dist-server/service/kpi-value/kpi-value-score.service.js +61 -0
  398. package/dist-server/service/kpi-value/kpi-value-score.service.js.map +1 -0
  399. package/dist-server/service/kpi-value/kpi-value-type.d.ts +33 -0
  400. package/dist-server/service/kpi-value/kpi-value-type.js +156 -0
  401. package/dist-server/service/kpi-value/kpi-value-type.js.map +1 -0
  402. package/dist-server/service/kpi-value/kpi-value.d.ts +32 -0
  403. package/dist-server/service/kpi-value/kpi-value.js +175 -0
  404. package/dist-server/service/kpi-value/kpi-value.js.map +1 -0
  405. package/dist-server/service/utils/value-date-util.d.ts +4 -0
  406. package/dist-server/service/utils/value-date-util.js +117 -0
  407. package/dist-server/service/utils/value-date-util.js.map +1 -0
  408. package/dist-server/tsconfig.tsbuildinfo +1 -0
  409. package/package.json +5 -5
@@ -0,0 +1,655 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/icon/icon.js';
3
+ import '@material/web/button/elevated-button.js';
4
+ import '@material/web/textfield/outlined-text-field.js';
5
+ import { CommonButtonStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
6
+ import { PageView } from '@operato/shell';
7
+ import { css, html } from 'lit';
8
+ import { customElement, property, state } from 'lit/decorators.js';
9
+ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
10
+ import { client } from '@operato/graphql';
11
+ import { i18next, localize } from '@operato/i18n';
12
+ import { notify } from '@operato/layout';
13
+ import gql from 'graphql-tag';
14
+ let KpiStatisticEditorPage = class KpiStatisticEditorPage extends localize(i18next)(ScopedElementsMixin(PageView)) {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.periodType = 'MONTH';
18
+ this.valueDate = '';
19
+ this.targetDate = ''; // 기준 날짜 (예: 2025-08-03)
20
+ this.kpis = [];
21
+ this.loading = false;
22
+ this.error = '';
23
+ this.editingCell = null;
24
+ this._existingStatistics = [];
25
+ // 통계 필드 정의
26
+ this.statisticFields = [
27
+ { name: 'count', label: 'Count', group: 'basic' },
28
+ { name: 'sum', label: 'Sum', group: 'basic' },
29
+ { name: 'range', label: 'Range', group: 'basic' },
30
+ { name: 'mean', label: 'Mean', group: 'central' },
31
+ { name: 'median', label: 'Median', group: 'central' },
32
+ { name: 'minimum', label: 'Min', group: 'range' },
33
+ { name: 'maximum', label: 'Max', group: 'range' },
34
+ { name: 'standardDeviation', label: 'Std Dev', group: 'dispersion' },
35
+ { name: 'variance', label: 'Variance', group: 'dispersion' },
36
+ { name: 'percentile25', label: 'P25', group: 'percentile' },
37
+ { name: 'percentile75', label: 'P75', group: 'percentile' },
38
+ { name: 'iqr', label: 'IQR', group: 'percentile' },
39
+ { name: 'lowerFence', label: 'Lower Fence', group: 'fence' },
40
+ { name: 'upperFence', label: 'Upper Fence', group: 'fence' }
41
+ ];
42
+ }
43
+ static { this.styles = [
44
+ CommonHeaderStyles,
45
+ ScrollbarStyles,
46
+ css `
47
+ :host { display: flex;
48
+ flex-direction: column;
49
+ padding: 20px;
50
+ overflow-x: auto;
51
+ }
52
+
53
+ .header { display: flex;
54
+ gap: 16px;
55
+ align-items: center;
56
+ margin-bottom: 20px;
57
+ padding: 16px;
58
+ background: var(--md-sys-color-surface-container);
59
+ border-radius: 8px;
60
+ }
61
+
62
+ .controls { display: flex;
63
+ gap: 12px;
64
+ align-items: center;
65
+ flex-wrap: wrap;
66
+ }
67
+
68
+ .table-container { flex: 1;
69
+ overflow: auto;
70
+ border: 1px solid var(--md-sys-color-outline);
71
+ border-radius: 8px;
72
+ }
73
+
74
+ table { width: 100%;
75
+ border-collapse: collapse;
76
+ min-width: max-content;
77
+ }
78
+
79
+ th { background: var(--md-sys-color-surface-container-low);
80
+ font-weight: 500;
81
+ padding: 8px 12px;
82
+ border: 1px solid var(--md-sys-color-outline-variant);
83
+ min-width: 120px;
84
+ height: 60px;
85
+ vertical-align: middle;
86
+ text-align: center;
87
+ }
88
+
89
+ td { padding: 8px 12px;
90
+ border: 1px solid var(--md-sys-color-outline-variant);
91
+ min-width: 120px;
92
+ height: 60px;
93
+ text-align: center;
94
+ vertical-align: middle;
95
+ }
96
+
97
+ .kpi-header { position: sticky;
98
+ left: 0;
99
+ top: 0;
100
+ z-index: 3;
101
+ min-width: 200px;
102
+ text-align: left;
103
+ }
104
+
105
+ .field-header { position: sticky;
106
+ left: 0;
107
+ top: 0;
108
+ z-index: 2;
109
+ min-width: 200px;
110
+ text-align: center;
111
+ }
112
+
113
+ .kpi-name { position: sticky;
114
+ left: 0;
115
+ background: var(--md-sys-color-surface);
116
+ font-weight: 500;
117
+ min-width: 200px;
118
+ text-align: left;
119
+ z-index: 2;
120
+ }
121
+
122
+ tr:hover { background: var(--md-sys-color-surface-container-high);
123
+ }
124
+
125
+ td.editable-cell { cursor: pointer;
126
+ background: var(--md-sys-color-primary-container);
127
+ color: var(--md-sys-color-on-primary-container);
128
+ }
129
+
130
+ td.editable-cell:hover { background: var(--md-sys-color-primary-container);
131
+ }
132
+
133
+ td.highlighted-cell { background: var(--md-sys-color-secondary-container);
134
+ color: var(--md-sys-color-on-secondary-container);
135
+ font-weight: 500;
136
+ }
137
+
138
+ td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container);
139
+ }
140
+
141
+ td.disabled-cell { background: var(--md-sys-color-surface-container);
142
+ color: var(--md-sys-color-on-surface-variant);
143
+ cursor: not-allowed;
144
+ }
145
+
146
+ .value-input { width: 100%;
147
+ text-align: center;
148
+ border: none;
149
+ background: transparent;
150
+ color: inherit;
151
+ font-size: 12px;
152
+ padding: 2px;
153
+ }
154
+
155
+ .value-input:focus { outline: 2px solid var(--md-sys-color-primary);
156
+ border-radius: 4px;
157
+ }
158
+
159
+ .period-badge { font-size: 10px;
160
+ padding: 2px 6px;
161
+ border-radius: 4px;
162
+ background: var(--md-sys-color-tertiary-container);
163
+ color: var(--md-sys-color-on-tertiary-container);
164
+ margin-left: 8px;
165
+ }
166
+
167
+ .loading { display: flex;
168
+ justify-content: center;
169
+ align-items: center;
170
+ height: 200px;
171
+ color: var(--md-sys-color-on-surface-variant);
172
+ }
173
+
174
+ .error { color: var(--md-sys-color-error);
175
+ padding: 16px;
176
+ text-align: center;
177
+ }
178
+
179
+ .legend { display: flex;
180
+ gap: 16px;
181
+ margin-top: 16px;
182
+ font-size: 12px;
183
+ }
184
+
185
+ .legend-item { display: flex;
186
+ align-items: center;
187
+ gap: 4px;
188
+ }
189
+
190
+ .legend-color { width: 16px;
191
+ height: 16px;
192
+ border-radius: 2px;
193
+ }
194
+
195
+ .field-group { display: flex;
196
+ flex-direction: column;
197
+ gap: 4px;
198
+ }
199
+
200
+ .field-name { font-size: 10px;
201
+ color: var(--md-sys-color-on-surface-variant);
202
+ font-weight: 500;
203
+ }
204
+
205
+ .field-value { font-size: 12px;
206
+ font-weight: 500;
207
+ }
208
+ `
209
+ ]; }
210
+ get context() {
211
+ return { title: i18next.t('title.kpi statistic editor'),
212
+ actions: [
213
+ { title: i18next.t('button.save'),
214
+ action: this._saveStatistics.bind(this),
215
+ ...CommonButtonStyles.save
216
+ },
217
+ { title: i18next.t('button.cancel'),
218
+ action: this._cancel.bind(this),
219
+ ...CommonButtonStyles.cancel
220
+ }
221
+ ]
222
+ };
223
+ }
224
+ render() {
225
+ if (this.loading) {
226
+ return html `
227
+ <div class="loading">
228
+ <md-icon>hourglass_empty</md-icon>
229
+ <span>데이터를 불러오는 중...</span>
230
+ </div>
231
+ `;
232
+ }
233
+ if (this.error) {
234
+ return html `
235
+ <div class="error">
236
+ <md-icon>error</md-icon>
237
+ <span>${this.error}</span>
238
+ </div>
239
+ `;
240
+ }
241
+ return html `
242
+ <div class="header">
243
+ <div class="controls">
244
+ <md-outlined-text-field
245
+ label="기간 유형"
246
+ .value=${this.periodType}
247
+ @input=${(e) => this._onPeriodChange(e.target.value)}
248
+ style="width: 120px;"
249
+ ></md-outlined-text-field>
250
+
251
+ <md-outlined-text-field
252
+ label="기준 날짜"
253
+ type="date"
254
+ .value=${this.targetDate}
255
+ @input=${(e) => this._onTargetDateChange(e.target.value)}
256
+ style="width: 150px;"
257
+ ></md-outlined-text-field>
258
+
259
+ <md-outlined-text-field
260
+ label="값 날짜"
261
+ .value=${this.valueDate}
262
+ @input=${(e) => (this.valueDate = e.target.value)}
263
+ style="width: 150px;"
264
+ readonly
265
+ ></md-outlined-text-field>
266
+
267
+ <md-elevated-button @click=${this._loadData}>
268
+ <md-icon slot="icon">refresh</md-icon>
269
+ 새로고침
270
+ </md-elevated-button>
271
+ </div>
272
+ </div>
273
+
274
+ <div class="table-container">
275
+ <table>
276
+ <thead>
277
+ <tr>
278
+ <th class="kpi-header">KPI명</th>
279
+ ${this.statisticFields.map(field => html `
280
+ <th class="field-header">
281
+ <div class="field-group">
282
+ <div class="field-name">${field.label}</div>
283
+ <div class="field-value">${field.name}</div>
284
+ </div>
285
+ </th>
286
+ `)}
287
+ </tr>
288
+ </thead>
289
+ <tbody>
290
+ ${this.kpis.map(kpi => html `
291
+ <tr>
292
+ <td class="kpi-name">
293
+ ${kpi.kpi.name}
294
+ <span class="period-badge">${kpi.periodType}</span>
295
+ </td>
296
+ ${this.statisticFields.map(field => html `
297
+ <td
298
+ class=${this._getCellClass(kpi, field.name)}
299
+ @click=${() => this._startEdit(kpi.kpi.id, field.name)}
300
+ >
301
+ ${this._renderCellContent(kpi, field.name)}
302
+ </td>
303
+ `)}
304
+ </tr>
305
+ `)}
306
+ </tbody>
307
+ </table>
308
+ </div>
309
+
310
+ <div class="legend">
311
+ <div class="legend-item">
312
+ <div class="legend-color" style="background: var(--md-sys-color-primary-container);"></div>
313
+ <span>편집 가능</span>
314
+ </div>
315
+ <div class="legend-item">
316
+ <div class="legend-color" style="background: var(--md-sys-color-secondary-container);"></div>
317
+ <span>하이라이트 (중요 필드)</span>
318
+ </div>
319
+ <div class="legend-item">
320
+ <div class="legend-color" style="background: var(--md-sys-color-surface-container);"></div>
321
+ <span>편집 불가</span>
322
+ </div>
323
+ </div>
324
+ `;
325
+ }
326
+ _getCellClass(kpi, fieldName) {
327
+ const isEditable = this._isFieldEditable(fieldName);
328
+ const isHighlighted = this._isFieldHighlighted(fieldName);
329
+ if (!isEditable) {
330
+ return 'disabled-cell';
331
+ }
332
+ if (isHighlighted) {
333
+ return 'highlighted-cell';
334
+ }
335
+ return 'editable-cell';
336
+ }
337
+ _isFieldEditable(fieldName) {
338
+ return true;
339
+ }
340
+ _isFieldHighlighted(fieldName) {
341
+ const importantFields = ['count', 'mean', 'median', 'minimum', 'maximum', 'standardDeviation'];
342
+ return importantFields.includes(fieldName);
343
+ }
344
+ _renderCellContent(kpi, fieldName) {
345
+ const isEditing = this.editingCell?.kpi?.id === kpi.kpi.id && this.editingCell?.field === fieldName;
346
+ const value = kpi.statistics[fieldName];
347
+ if (isEditing) {
348
+ return html `
349
+ <input
350
+ class="value-input"
351
+ type="number"
352
+ step="0.01"
353
+ .value=${(value || '').toString()}
354
+ @blur=${(e) => this._finishEdit(kpi.kpi.id, fieldName, parseFloat(e.target.value) || null)}
355
+ @keydown=${(e) => e.key === 'Enter' && e.target.blur()}
356
+ autofocus
357
+ />
358
+ `;
359
+ }
360
+ return html `
361
+ <span style="color: ${value !== null && value !== undefined ? 'inherit' : '#999'};">
362
+ ${value !== null && value !== undefined ? value.toLocaleString() : '클릭하여 입력'}
363
+ </span>
364
+ `;
365
+ }
366
+ _startEdit(kpiId, fieldName) {
367
+ this.editingCell = { kpi: { id: kpiId }, field: fieldName };
368
+ }
369
+ _finishEdit(kpiId, fieldName, value) {
370
+ const kpi = this.kpis.find(k => k.kpi.id === kpiId);
371
+ if (kpi) {
372
+ const originalValue = this._findExistingStatistic(kpiId)?.[fieldName];
373
+ const isChanged = originalValue !== value;
374
+ kpi.statistics[fieldName] = value;
375
+ kpi.statistics.isDirty = isChanged;
376
+ }
377
+ this.editingCell = null;
378
+ }
379
+ async _loadData() {
380
+ if (!this.valueDate) {
381
+ this.error = '값 날짜를 입력해주세요.';
382
+ return;
383
+ }
384
+ this.loading = true;
385
+ this.error = '';
386
+ try { // KPI 목록 조회
387
+ const kpisResponse = await client.query({ query: gql `
388
+ query ($filters: [Filter!]) { kpis(filters: $filters) { items { id
389
+ name
390
+ periodType
391
+ active
392
+ category: parent { id
393
+ name
394
+ }
395
+ }
396
+ total
397
+ }
398
+ }
399
+ `,
400
+ variables: { filters: [{ name: 'active', operator: 'eq', value: true }]
401
+ }
402
+ });
403
+ // 기존 KPI Statistic 데이터 조회
404
+ const statisticsResponse = await client.query({ query: gql `
405
+ query ($filters: [Filter!]) { kpiStatistics(filters: $filters) { items { id
406
+ kpi { id
407
+ name
408
+ }
409
+ valueDate
410
+ periodType
411
+ count
412
+ sum
413
+ range
414
+ mean
415
+ median
416
+ minimum
417
+ maximum
418
+ standardDeviation
419
+ variance
420
+ percentile25
421
+ percentile75
422
+ iqr
423
+ lowerFence
424
+ upperFence
425
+ additionalStatistics
426
+ metadata
427
+ }
428
+ total
429
+ }
430
+ }
431
+ `,
432
+ variables: { filters: [
433
+ { name: 'valueDate', operator: 'eq', value: this.valueDate },
434
+ { name: 'periodType', operator: 'eq', value: this.periodType }
435
+ ]
436
+ }
437
+ });
438
+ // KPI 목록을 기준으로 데이터 구성 (카테고리별로 필터링)
439
+ console.log('KPI 원본 데이터:', kpisResponse.data.kpis.items);
440
+ const filteredKpis = kpisResponse.data.kpis.items;
441
+ console.log('모든 KPI 포함:', filteredKpis);
442
+ console.log('필터링된 KPI:', filteredKpis);
443
+ this.kpis = filteredKpis.map((kpi) => ({ kpi: kpi,
444
+ valueDate: this.valueDate,
445
+ periodType: this.periodType,
446
+ statistics: { count: null,
447
+ sum: null,
448
+ range: null,
449
+ mean: null,
450
+ median: null,
451
+ minimum: null,
452
+ maximum: null,
453
+ standardDeviation: null,
454
+ variance: null,
455
+ percentile25: null,
456
+ percentile75: null,
457
+ iqr: null,
458
+ lowerFence: null,
459
+ upperFence: null,
460
+ isDirty: false
461
+ }
462
+ }));
463
+ // 기존 KPI Statistic 데이터 저장
464
+ this._existingStatistics = statisticsResponse.data.kpiStatistics.items;
465
+ console.log('기존 통계 데이터:', this._existingStatistics);
466
+ // 기존 통계 데이터를 해당 KPI에 매핑
467
+ statisticsResponse.data.kpiStatistics.items.forEach((statistic) => {
468
+ const kpi = this.kpis.find(k => k.kpi.id === statistic.kpi.id); // KPI ID로 매칭
469
+ console.log(`통계 데이터 매핑: statistic.kpi.id=${statistic.kpi.id}, 찾은 KPI:`, kpi?.kpi.name || '없음');
470
+ if (kpi) {
471
+ kpi.statistics = { count: statistic.count,
472
+ sum: statistic.sum,
473
+ range: statistic.range,
474
+ mean: statistic.mean,
475
+ median: statistic.median,
476
+ minimum: statistic.minimum,
477
+ maximum: statistic.maximum,
478
+ standardDeviation: statistic.standardDeviation,
479
+ variance: statistic.variance,
480
+ percentile25: statistic.percentile25,
481
+ percentile75: statistic.percentile75,
482
+ iqr: statistic.iqr,
483
+ lowerFence: statistic.lowerFence,
484
+ upperFence: statistic.upperFence,
485
+ isDirty: false
486
+ };
487
+ }
488
+ });
489
+ console.log('KPI 총 개수:', kpisResponse.data.kpis.total);
490
+ console.log('KPI 목록:', kpisResponse.data.kpis.items);
491
+ console.log('기존 통계 데이터:', this._existingStatistics);
492
+ console.log('구성된 KPI 통계 데이터:', this.kpis);
493
+ console.log('최종 KPI 배열 길이:', this.kpis.length);
494
+ this.requestUpdate();
495
+ }
496
+ catch (error) {
497
+ console.error('데이터 로드 중 오류:', error);
498
+ this.error = '데이터를 불러오는 중 오류가 발생했습니다.';
499
+ }
500
+ finally {
501
+ this.loading = false;
502
+ }
503
+ }
504
+ async _saveStatistics() {
505
+ try {
506
+ const patches = [];
507
+ this.kpis.forEach(kpi => {
508
+ if (kpi.statistics.isDirty) {
509
+ const existingStatistic = this._findExistingStatistic(kpi.kpi.id);
510
+ if (existingStatistic) { // 기존 데이터 업데이트
511
+ const { isDirty, ...statisticsWithoutDirty } = kpi.statistics;
512
+ patches.push({ id: existingStatistic.id,
513
+ ...statisticsWithoutDirty,
514
+ cuFlag: 'M'
515
+ });
516
+ }
517
+ else { // 새로운 데이터 생성
518
+ const { isDirty, ...statisticsWithoutDirty } = kpi.statistics;
519
+ patches.push({ kpi: { id: kpi.kpi.id
520
+ },
521
+ valueDate: kpi.valueDate,
522
+ periodType: kpi.periodType,
523
+ ...statisticsWithoutDirty,
524
+ additionalStatistics: {},
525
+ metadata: { calculationMethod: 'manual',
526
+ lastCalculated: new Date(),
527
+ dataCount: kpi.statistics.count || 0
528
+ },
529
+ cuFlag: '+'
530
+ });
531
+ }
532
+ }
533
+ });
534
+ if (patches.length === 0) {
535
+ notify({ message: '저장할 데이터가 없습니다.' });
536
+ return;
537
+ }
538
+ const response = await client.mutate({ mutation: gql `
539
+ mutation ($patches: [KpiStatisticPatch!]!) { updateMultipleKpiStatistic(patches: $patches) { id
540
+ kpi { id
541
+ name
542
+ }
543
+ valueDate
544
+ periodType
545
+ }
546
+ }
547
+ `,
548
+ variables: { patches }
549
+ });
550
+ if (!response.errors) { // 저장 후 dirty 상태 해제
551
+ this.kpis.forEach(kpi => {
552
+ kpi.statistics.isDirty = false;
553
+ });
554
+ notify({ message: 'KPI 통계값이 성공적으로 저장되었습니다.' });
555
+ this.requestUpdate();
556
+ }
557
+ }
558
+ catch (error) {
559
+ console.error('저장 중 오류:', error);
560
+ notify({ message: '저장 중 오류가 발생했습니다.' });
561
+ }
562
+ }
563
+ _findExistingStatistic(kpiId) {
564
+ return this._existingStatistics?.find((s) => s.kpi === kpiId);
565
+ }
566
+ _onTargetDateChange(targetDate) {
567
+ this.targetDate = targetDate;
568
+ this._calculateDateRange();
569
+ }
570
+ _onPeriodChange(periodType) {
571
+ this.periodType = periodType;
572
+ this._calculateDateRange();
573
+ }
574
+ _calculateDateRange() {
575
+ if (!this.targetDate || !this.periodType)
576
+ return;
577
+ const target = new Date(this.targetDate);
578
+ let valueDate;
579
+ switch (this.periodType) {
580
+ case 'DAY':
581
+ valueDate = target.toISOString().split('T')[0];
582
+ break;
583
+ case 'WEEK':
584
+ // 해당 주의 월요일
585
+ const dayOfWeek = target.getDay();
586
+ const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
587
+ const monday = new Date(target);
588
+ monday.setDate(target.getDate() - daysToMonday);
589
+ valueDate = monday.toISOString().split('T')[0];
590
+ break;
591
+ case 'MONTH':
592
+ valueDate = `${target.getFullYear()}-${String(target.getMonth() + 1).padStart(2, '0')}`;
593
+ break;
594
+ case 'QUARTER':
595
+ const quarter = Math.floor(target.getMonth() / 3) + 1;
596
+ valueDate = `${target.getFullYear()}-Q${quarter}`;
597
+ break;
598
+ case 'YEAR':
599
+ valueDate = target.getFullYear().toString();
600
+ break;
601
+ default:
602
+ valueDate = target.toISOString().split('T')[0];
603
+ }
604
+ this.valueDate = valueDate;
605
+ }
606
+ _cancel() {
607
+ this.editingCell = null;
608
+ this._loadData(); // 원본 데이터로 복원
609
+ }
610
+ async pageInitialized(lifecycle) {
611
+ if (!this.targetDate) {
612
+ this.targetDate = new Date().toLocaleDateString('sv-SE');
613
+ }
614
+ // 기간 유형에 따라 날짜 범위 계산
615
+ this._calculateDateRange();
616
+ await this._loadData();
617
+ }
618
+ };
619
+ __decorate([
620
+ property({ type: String }),
621
+ __metadata("design:type", String)
622
+ ], KpiStatisticEditorPage.prototype, "periodType", void 0);
623
+ __decorate([
624
+ property({ type: String }),
625
+ __metadata("design:type", String)
626
+ ], KpiStatisticEditorPage.prototype, "valueDate", void 0);
627
+ __decorate([
628
+ property({ type: String }),
629
+ __metadata("design:type", String)
630
+ ], KpiStatisticEditorPage.prototype, "targetDate", void 0);
631
+ __decorate([
632
+ state(),
633
+ __metadata("design:type", Array)
634
+ ], KpiStatisticEditorPage.prototype, "kpis", void 0);
635
+ __decorate([
636
+ state(),
637
+ __metadata("design:type", Boolean)
638
+ ], KpiStatisticEditorPage.prototype, "loading", void 0);
639
+ __decorate([
640
+ state(),
641
+ __metadata("design:type", String)
642
+ ], KpiStatisticEditorPage.prototype, "error", void 0);
643
+ __decorate([
644
+ state(),
645
+ __metadata("design:type", Object)
646
+ ], KpiStatisticEditorPage.prototype, "editingCell", void 0);
647
+ __decorate([
648
+ state(),
649
+ __metadata("design:type", Array)
650
+ ], KpiStatisticEditorPage.prototype, "_existingStatistics", void 0);
651
+ KpiStatisticEditorPage = __decorate([
652
+ customElement('kpi-statistic-editor-page')
653
+ ], KpiStatisticEditorPage);
654
+ export { KpiStatisticEditorPage };
655
+ //# sourceMappingURL=kpi-statistic-editor-page.js.map