@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 +0,0 @@
1
- {"version":3,"file":"kpi-type.js","sourceRoot":"","sources":["../../../server/service/kpi/kpi-type.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { ObjectType, Field, InputType, Int, ID, registerEnumType } from 'type-graphql'\n\nimport { ObjectRef, ScalarObject } from '@things-factory/shell'\n\nimport { Kpi, KpiStatus, KpiVizType, KpiScoreType, KpiValueType } from './kpi'\nimport { KpiScores } from './kpi-grade.types'\n\n@InputType({ description: 'Input type for creating a new KPI. Used in mutations to provide KPI details.' })\nexport class NewKpi {\n @Field({ description: 'Name of the KPI.' })\n name: string\n\n @Field({ nullable: true, description: 'Detailed description of the KPI.' })\n description?: string\n\n @Field(type => ObjectRef, { nullable: true, description: 'Reference to the parent KPI in hierarchical structure.' })\n parent?: ObjectRef\n\n @Field({ nullable: true, description: 'Indicates whether this KPI is a leaf node (has actual measured values).' })\n isLeaf?: boolean\n\n @Field({ nullable: true, description: 'Calculation formula for the KPI, using metric codes and operators.' })\n formula?: string\n\n @Field({ nullable: true, description: 'Indicates whether this KPI is active and usable.' })\n active?: boolean\n\n @Field(type => KpiStatus, { nullable: true, description: 'Current state of the KPI (DRAFT, RELEASED, ARCHIVED).' })\n state?: KpiStatus\n\n @Field(type => GraphQLUpload, { nullable: true, description: 'Thumbnail image or file for this KPI.' })\n thumbnail?: FileUpload\n\n @Field(type => KpiVizType, {\n nullable: true,\n description: 'Visualization type for this KPI (e.g., CARD, GAUGE, PROGRESS, BAR, LINE, etc.).'\n })\n vizType?: KpiVizType\n\n @Field(type => ScalarObject, {\n nullable: true,\n description:\n 'Visualization options and metadata for this KPI, such as color, icon, thresholds, unit, decimal places, etc.'\n })\n vizMeta?: any\n\n @Field({\n nullable: true,\n description: 'Cron schedule string for periodic KPI value aggregation (e.g., \"0 0 * * *\" for daily).'\n })\n schedule?: string\n\n @Field({ nullable: true, description: 'Timezone for the KPI schedule.' })\n timezone?: string\n\n @Field({ nullable: true, description: 'Weight for aggregation in parent category.' })\n weight?: number\n\n @Field(type => KpiScoreType, {\n nullable: true,\n description: 'value → score 변환 방식.'\n })\n scoreType?: KpiScoreType\n\n @Field(type => KpiValueType, {\n nullable: true,\n description: 'value 획득 방식.'\n })\n valueType?: KpiValueType\n\n @Field(type => ScalarObject, {\n nullable: true,\n description: 'Score lookup table for this KPI version'\n })\n grades?: KpiScores\n\n @Field({\n nullable: true,\n description: 'Score calculation formula for this KPI. Converts KPI value to performance score (0-1).'\n })\n scoreFormula?: string\n}\n\n@InputType({ description: 'Input type for updating an existing KPI. Used in mutations to patch KPI details.' })\nexport class KpiPatch {\n @Field(type => ID, { nullable: true, description: 'ID of the KPI to update.' })\n id?: string\n\n @Field({ nullable: true, description: 'Name of the KPI.' })\n name?: string\n\n @Field({ nullable: true, description: 'Detailed description of the KPI.' })\n description?: string\n\n @Field(type => ObjectRef, { nullable: true, description: 'Reference to the parent KPI in hierarchical structure.' })\n parent?: ObjectRef\n\n @Field({ nullable: true, description: 'Indicates whether this KPI is a leaf node (has actual measured values).' })\n isLeaf?: boolean\n\n @Field({ nullable: true, description: 'Calculation formula for the KPI, using metric codes and operators.' })\n formula?: string\n\n @Field({ nullable: true, description: 'Indicates whether this KPI is active and usable.' })\n active?: boolean\n\n @Field(type => KpiStatus, { nullable: true, description: 'Current state of the KPI (DRAFT, RELEASED, ARCHIVED).' })\n state?: KpiStatus\n\n @Field(type => GraphQLUpload, { nullable: true, description: 'Thumbnail image or file for this KPI.' })\n thumbnail?: FileUpload\n\n @Field(type => KpiVizType, {\n nullable: true,\n description: 'Visualization type for this KPI (e.g., CARD, GAUGE, PROGRESS, BAR, LINE, etc.).'\n })\n vizType?: KpiVizType\n\n @Field(type => ScalarObject, {\n nullable: true,\n description:\n 'Visualization options and metadata for this KPI, such as color, icon, thresholds, unit, decimal places, etc.'\n })\n vizMeta?: any\n\n @Field({ nullable: true, description: 'Custom flag for update operations (internal use).' })\n cuFlag?: string\n\n @Field({\n nullable: true,\n description: 'Cron schedule string for periodic KPI value aggregation (e.g., \"0 0 * * *\" for daily).'\n })\n schedule?: string\n\n @Field({ nullable: true, description: 'Timezone for the KPI schedule.' })\n timezone?: string\n\n @Field({ nullable: true, description: 'Weight for aggregation in parent category.' })\n weight?: number\n\n @Field(type => KpiScoreType, {\n nullable: true,\n description: 'value → score 변환 방식.'\n })\n scoreType?: KpiScoreType\n\n @Field(type => KpiValueType, {\n nullable: true,\n description: 'value 획득 방식.'\n })\n valueType?: KpiValueType\n\n @Field(type => ScalarObject, {\n nullable: true,\n description: 'Score lookup table for this KPI version'\n })\n grades?: KpiScores\n\n @Field({\n nullable: true,\n description: 'Score calculation formula for this KPI. Converts KPI value to performance score (0-1).'\n })\n scoreFormula?: string\n}\n\n@ObjectType()\nexport class KpiList {\n @Field(type => [Kpi])\n items: Kpi[]\n\n @Field(type => Int)\n total: number\n}\n"]}
@@ -1,130 +0,0 @@
1
- import { Domain } from '@things-factory/shell';
2
- import { User } from '@things-factory/auth-base';
3
- import { KpiScores } from './kpi-grade.types';
4
- export declare enum KpiStatus {
5
- DRAFT = "DRAFT",
6
- RELEASE = "RELEASE",
7
- ARCHIVED = "ARCHIVED"
8
- }
9
- export declare enum KpiVizType {
10
- CARD = "CARD",
11
- GAUGE = "GAUGE",
12
- PROGRESS = "PROGRESS",
13
- BAR = "BAR",
14
- LINE = "LINE",
15
- PIE = "PIE",
16
- DONUT = "DONUT",
17
- RADAR = "RADAR",
18
- BULLET = "BULLET",
19
- THERMOMETER = "THERMOMETER",
20
- SPEEDOMETER = "SPEEDOMETER",
21
- ICON = "ICON",
22
- BADGE = "BADGE",
23
- TEXT = "TEXT",
24
- TABLE = "TABLE"
25
- }
26
- export declare enum KpiPeriodType {
27
- DAY = "DAY",
28
- WEEK = "WEEK",
29
- MONTH = "MONTH",
30
- QUARTER = "QUARTER",
31
- YEAR = "YEAR",
32
- RANGE = "RANGE",
33
- ALLTIME = "ALLTIME"
34
- }
35
- /**
36
- * KPI scoreType — value → score 변환 방식
37
- *
38
- * 미설정(null)이면 score 변환이 정의되지 않은 상태.
39
- *
40
- * DIRECT — value = score, 별도 변환 없음.
41
- * value 자체가 최종 성과 점수로 사용됨.
42
- * 예: Y1~Y6(영역별 성과), Z(전체스코어) — formula로 계산된 value가 곧 score.
43
- * 예: X14(일정성과 수준 평가) — 감리자가 입력한 1~5점이 곧 score.
44
- *
45
- * FORMULA — scoreFormula 수식으로 value → score 변환.
46
- * KPI 엔티티의 scoreFormula 필드에 정의된 수식을 적용.
47
- * 예: "1 - value / 0.82", "if(value >= 90, 100, 70)"
48
- *
49
- * LOOKUP — grade table(1D 배열)로 raw value → 0~1 score 변환.
50
- * KPI 엔티티의 grades 필드에 {minValue, maxValue, score} 배열로 정의.
51
- * value가 속하는 구간의 score를 반환.
52
- * 예: X11(연면적 대비 공사기간), X33(검측 불합격률), X34(품질 SL-PA)
53
- *
54
- * CUSTOM — 2D 룩업 등 애플리케이션에서 정의하는 특수 변환.
55
- * grades에 다차원 lookup 구조가 저장됨.
56
- * 예: X13(일정 이탈 수준) — 공정률(%) × 편차율(%) → 1~5점
57
- */
58
- export declare enum KpiScoreType {
59
- DIRECT = "DIRECT",
60
- FORMULA = "FORMULA",
61
- LOOKUP = "LOOKUP",
62
- CUSTOM = "CUSTOM"
63
- }
64
- /**
65
- * KPI valueType — value 획득 방식
66
- *
67
- * KPI의 value(측정값/입력값)를 어떤 방식으로 얻는지를 정의한다.
68
- * scoreType(value→score 변환)과는 독립적인 개념.
69
- *
70
- * MEASURED — 외부 시스템(API, DB 연계)에서 자동 수집한 정량 측정값.
71
- * 연속 실수값이며, 단위와 범위가 KPI마다 다름.
72
- * 예: X11(연면적 대비 공사기간), X33(검측 불합격률), X41(재해율), X61(투입인력 생산성)
73
- * 보통 scoreType=LOOKUP과 함께 사용하여 grade table로 score 변환.
74
- *
75
- * ASSESSED — 감리자/평가자가 직접 입력한 정성 평가.
76
- * 배점 기준(1~5점 척도)에 따라 수동 입력됨.
77
- * 예: X14(일정성과 수준 평가), X23(비용성과), X35(품질성과), X44(안전성과)
78
- * 보통 scoreType=DIRECT와 함께 사용 (value가 곧 score).
79
- *
80
- * CALCULATED — 산식(formula 필드)으로 하위 KPI들의 가중합 등을 자동 계산.
81
- * KPI 엔티티의 formula 필드에 정의된 수식을 기반으로 서버에서 연산.
82
- * 예: Y1(일정성과) = X11*0.3 + X12*0.4 + X13/5*0.15 + X14/5*0.15
83
- * 예: Z(전체스코어) = Y1~Y6의 가중 평균
84
- * 보통 scoreType=DIRECT와 함께 사용 (계산 결과가 곧 score).
85
- *
86
- * COMPOSITE — 다차원 입력의 복합 결과.
87
- * 단일 raw value가 아닌 복수의 입력(공정률, 편차율 등)을 조합하여 산출.
88
- * 예: X13(일정 이탈 수준) — 공정률(%) × 공기편차(%) 2D 룩업 → 1~5점
89
- * 보통 scoreType=CUSTOM과 함께 사용.
90
- */
91
- export declare enum KpiValueType {
92
- MEASURED = "MEASURED",
93
- ASSESSED = "ASSESSED",
94
- CALCULATED = "CALCULATED",
95
- COMPOSITE = "COMPOSITE"
96
- }
97
- export declare class Kpi {
98
- readonly id: string;
99
- version?: number;
100
- domain?: Domain;
101
- domainId?: string;
102
- name?: string;
103
- description?: string;
104
- parent?: Kpi;
105
- parentId?: string;
106
- children?: Kpi[];
107
- isLeaf?: boolean;
108
- formula?: string;
109
- active?: boolean;
110
- state?: KpiStatus;
111
- vizType?: KpiVizType;
112
- vizMeta?: any;
113
- schedule?: string;
114
- scheduleId?: string;
115
- timezone?: string;
116
- periodType: KpiPeriodType;
117
- weight?: number;
118
- scoreType?: KpiScoreType;
119
- valueType?: KpiValueType;
120
- grades?: KpiScores;
121
- scoreFormula?: string;
122
- createdAt?: Date;
123
- updatedAt?: Date;
124
- deletedAt?: Date;
125
- creator?: User;
126
- creatorId?: string;
127
- updater?: User;
128
- updaterId?: string;
129
- thumbnail?: string;
130
- }
@@ -1,356 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Kpi = exports.KpiValueType = exports.KpiScoreType = exports.KpiPeriodType = exports.KpiVizType = exports.KpiStatus = void 0;
4
- const tslib_1 = require("tslib");
5
- const typeorm_1 = require("typeorm");
6
- const type_graphql_1 = require("type-graphql");
7
- const shell_1 = require("@things-factory/shell");
8
- const auth_base_1 = require("@things-factory/auth-base");
9
- const env_1 = require("@things-factory/env");
10
- const shell_2 = require("@things-factory/shell");
11
- const ORMCONFIG = env_1.config.get('ormconfig', {});
12
- const DATABASE_TYPE = ORMCONFIG.type;
13
- var KpiStatus;
14
- (function (KpiStatus) {
15
- KpiStatus["DRAFT"] = "DRAFT";
16
- KpiStatus["RELEASE"] = "RELEASE";
17
- KpiStatus["ARCHIVED"] = "ARCHIVED";
18
- })(KpiStatus || (exports.KpiStatus = KpiStatus = {}));
19
- var KpiVizType;
20
- (function (KpiVizType) {
21
- KpiVizType["CARD"] = "CARD";
22
- KpiVizType["GAUGE"] = "GAUGE";
23
- KpiVizType["PROGRESS"] = "PROGRESS";
24
- KpiVizType["BAR"] = "BAR";
25
- KpiVizType["LINE"] = "LINE";
26
- KpiVizType["PIE"] = "PIE";
27
- KpiVizType["DONUT"] = "DONUT";
28
- KpiVizType["RADAR"] = "RADAR";
29
- KpiVizType["BULLET"] = "BULLET";
30
- KpiVizType["THERMOMETER"] = "THERMOMETER";
31
- KpiVizType["SPEEDOMETER"] = "SPEEDOMETER";
32
- KpiVizType["ICON"] = "ICON";
33
- KpiVizType["BADGE"] = "BADGE";
34
- KpiVizType["TEXT"] = "TEXT";
35
- KpiVizType["TABLE"] = "TABLE";
36
- })(KpiVizType || (exports.KpiVizType = KpiVizType = {}));
37
- var KpiPeriodType;
38
- (function (KpiPeriodType) {
39
- KpiPeriodType["DAY"] = "DAY";
40
- KpiPeriodType["WEEK"] = "WEEK";
41
- KpiPeriodType["MONTH"] = "MONTH";
42
- KpiPeriodType["QUARTER"] = "QUARTER";
43
- KpiPeriodType["YEAR"] = "YEAR";
44
- KpiPeriodType["RANGE"] = "RANGE";
45
- KpiPeriodType["ALLTIME"] = "ALLTIME";
46
- })(KpiPeriodType || (exports.KpiPeriodType = KpiPeriodType = {}));
47
- /**
48
- * KPI scoreType — value → score 변환 방식
49
- *
50
- * 미설정(null)이면 score 변환이 정의되지 않은 상태.
51
- *
52
- * DIRECT — value = score, 별도 변환 없음.
53
- * value 자체가 최종 성과 점수로 사용됨.
54
- * 예: Y1~Y6(영역별 성과), Z(전체스코어) — formula로 계산된 value가 곧 score.
55
- * 예: X14(일정성과 수준 평가) — 감리자가 입력한 1~5점이 곧 score.
56
- *
57
- * FORMULA — scoreFormula 수식으로 value → score 변환.
58
- * KPI 엔티티의 scoreFormula 필드에 정의된 수식을 적용.
59
- * 예: "1 - value / 0.82", "if(value >= 90, 100, 70)"
60
- *
61
- * LOOKUP — grade table(1D 배열)로 raw value → 0~1 score 변환.
62
- * KPI 엔티티의 grades 필드에 {minValue, maxValue, score} 배열로 정의.
63
- * value가 속하는 구간의 score를 반환.
64
- * 예: X11(연면적 대비 공사기간), X33(검측 불합격률), X34(품질 SL-PA)
65
- *
66
- * CUSTOM — 2D 룩업 등 애플리케이션에서 정의하는 특수 변환.
67
- * grades에 다차원 lookup 구조가 저장됨.
68
- * 예: X13(일정 이탈 수준) — 공정률(%) × 편차율(%) → 1~5점
69
- */
70
- var KpiScoreType;
71
- (function (KpiScoreType) {
72
- KpiScoreType["DIRECT"] = "DIRECT";
73
- KpiScoreType["FORMULA"] = "FORMULA";
74
- KpiScoreType["LOOKUP"] = "LOOKUP";
75
- KpiScoreType["CUSTOM"] = "CUSTOM";
76
- })(KpiScoreType || (exports.KpiScoreType = KpiScoreType = {}));
77
- /**
78
- * KPI valueType — value 획득 방식
79
- *
80
- * KPI의 value(측정값/입력값)를 어떤 방식으로 얻는지를 정의한다.
81
- * scoreType(value→score 변환)과는 독립적인 개념.
82
- *
83
- * MEASURED — 외부 시스템(API, DB 연계)에서 자동 수집한 정량 측정값.
84
- * 연속 실수값이며, 단위와 범위가 KPI마다 다름.
85
- * 예: X11(연면적 대비 공사기간), X33(검측 불합격률), X41(재해율), X61(투입인력 생산성)
86
- * 보통 scoreType=LOOKUP과 함께 사용하여 grade table로 score 변환.
87
- *
88
- * ASSESSED — 감리자/평가자가 직접 입력한 정성 평가.
89
- * 배점 기준(1~5점 척도)에 따라 수동 입력됨.
90
- * 예: X14(일정성과 수준 평가), X23(비용성과), X35(품질성과), X44(안전성과)
91
- * 보통 scoreType=DIRECT와 함께 사용 (value가 곧 score).
92
- *
93
- * CALCULATED — 산식(formula 필드)으로 하위 KPI들의 가중합 등을 자동 계산.
94
- * KPI 엔티티의 formula 필드에 정의된 수식을 기반으로 서버에서 연산.
95
- * 예: Y1(일정성과) = X11*0.3 + X12*0.4 + X13/5*0.15 + X14/5*0.15
96
- * 예: Z(전체스코어) = Y1~Y6의 가중 평균
97
- * 보통 scoreType=DIRECT와 함께 사용 (계산 결과가 곧 score).
98
- *
99
- * COMPOSITE — 다차원 입력의 복합 결과.
100
- * 단일 raw value가 아닌 복수의 입력(공정률, 편차율 등)을 조합하여 산출.
101
- * 예: X13(일정 이탈 수준) — 공정률(%) × 공기편차(%) 2D 룩업 → 1~5점
102
- * 보통 scoreType=CUSTOM과 함께 사용.
103
- */
104
- var KpiValueType;
105
- (function (KpiValueType) {
106
- KpiValueType["MEASURED"] = "MEASURED";
107
- KpiValueType["ASSESSED"] = "ASSESSED";
108
- KpiValueType["CALCULATED"] = "CALCULATED";
109
- KpiValueType["COMPOSITE"] = "COMPOSITE";
110
- })(KpiValueType || (exports.KpiValueType = KpiValueType = {}));
111
- (0, type_graphql_1.registerEnumType)(KpiStatus, {
112
- name: 'KpiStatus',
113
- description: 'State enumeration of a KPI (DRAFT, RELEASED, ARCHIVED)'
114
- });
115
- (0, type_graphql_1.registerEnumType)(KpiVizType, {
116
- name: 'KpiVizType',
117
- description: 'Visualization type for KPI display (CARD, GAUGE, PROGRESS, etc.)'
118
- });
119
- (0, type_graphql_1.registerEnumType)(KpiPeriodType, {
120
- name: 'KpiPeriodType',
121
- description: 'Aggregation period type for KPI (DAY, WEEK, MONTH, QUARTER, RANGE, ALLTIME)'
122
- });
123
- (0, type_graphql_1.registerEnumType)(KpiScoreType, {
124
- name: 'KpiScoreType',
125
- description: 'value → score 변환 방식. DIRECT: value=score(변환 없음), FORMULA: scoreFormula 수식 적용, LOOKUP: grade table(1D) 매핑, CUSTOM: 2D 룩업 등 특수 변환.'
126
- });
127
- (0, type_graphql_1.registerEnumType)(KpiValueType, {
128
- name: 'KpiValueType',
129
- description: 'value 획득 방식. MEASURED: 외부 시스템 수집 측정값, ASSESSED: 감리자 직접 평가(1~5), CALCULATED: formula 자동 계산, COMPOSITE: 다차원 복합 입력 결과.'
130
- });
131
- let Kpi = class Kpi {
132
- constructor() {
133
- this.version = 1;
134
- }
135
- };
136
- exports.Kpi = Kpi;
137
- tslib_1.__decorate([
138
- (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
139
- (0, type_graphql_1.Field)(type => type_graphql_1.ID, { description: 'Unique identifier for this KPI.' }),
140
- tslib_1.__metadata("design:type", String)
141
- ], Kpi.prototype, "id", void 0);
142
- tslib_1.__decorate([
143
- (0, typeorm_1.VersionColumn)(),
144
- (0, type_graphql_1.Field)({
145
- nullable: true,
146
- description: 'Version number of the KPI. Increments on each modification. When the KPI is released, a snapshot is saved in kpi-history and the status becomes RELEASED. Editing after release increases the version and sets status to DRAFT.'
147
- }),
148
- tslib_1.__metadata("design:type", Number)
149
- ], Kpi.prototype, "version", void 0);
150
- tslib_1.__decorate([
151
- (0, typeorm_1.ManyToOne)(type => shell_1.Domain),
152
- (0, type_graphql_1.Field)({ nullable: true, description: 'Domain (tenant) to which this KPI belongs.' }),
153
- tslib_1.__metadata("design:type", shell_1.Domain)
154
- ], Kpi.prototype, "domain", void 0);
155
- tslib_1.__decorate([
156
- (0, typeorm_1.RelationId)((kpi) => kpi.domain),
157
- (0, type_graphql_1.Field)({ nullable: true, description: 'ID of the domain (tenant) for this KPI.' }),
158
- tslib_1.__metadata("design:type", String)
159
- ], Kpi.prototype, "domainId", void 0);
160
- tslib_1.__decorate([
161
- (0, typeorm_1.Column)(),
162
- (0, type_graphql_1.Field)({ nullable: true, description: 'Name of the KPI.' }),
163
- tslib_1.__metadata("design:type", String)
164
- ], Kpi.prototype, "name", void 0);
165
- tslib_1.__decorate([
166
- (0, typeorm_1.Column)({ nullable: true }),
167
- (0, type_graphql_1.Field)({ nullable: true, description: 'Detailed description of the KPI.' }),
168
- tslib_1.__metadata("design:type", String)
169
- ], Kpi.prototype, "description", void 0);
170
- tslib_1.__decorate([
171
- (0, typeorm_1.ManyToOne)(() => Kpi, { nullable: true }),
172
- (0, type_graphql_1.Field)(type => Kpi, { nullable: true, description: 'Parent KPI in hierarchical structure.' }),
173
- tslib_1.__metadata("design:type", Kpi)
174
- ], Kpi.prototype, "parent", void 0);
175
- tslib_1.__decorate([
176
- (0, typeorm_1.RelationId)((kpi) => kpi.parent),
177
- (0, type_graphql_1.Field)({ nullable: true, description: 'ID of the parent KPI.' }),
178
- tslib_1.__metadata("design:type", String)
179
- ], Kpi.prototype, "parentId", void 0);
180
- tslib_1.__decorate([
181
- (0, typeorm_1.OneToMany)(() => Kpi, kpi => kpi.parent),
182
- (0, type_graphql_1.Field)(type => [Kpi], { nullable: true, description: 'Child KPIs in hierarchical structure.' }),
183
- tslib_1.__metadata("design:type", Array)
184
- ], Kpi.prototype, "children", void 0);
185
- tslib_1.__decorate([
186
- (0, typeorm_1.Column)({ nullable: false, default: true }),
187
- (0, type_graphql_1.Field)({ nullable: true, description: 'Indicates whether this KPI is a leaf node (has actual measured values).' }),
188
- tslib_1.__metadata("design:type", Boolean)
189
- ], Kpi.prototype, "isLeaf", void 0);
190
- tslib_1.__decorate([
191
- (0, typeorm_1.Column)({
192
- nullable: true,
193
- type: DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
194
- ? 'longtext'
195
- : DATABASE_TYPE == 'oracle'
196
- ? 'clob'
197
- : DATABASE_TYPE == 'mssql'
198
- ? 'nvarchar'
199
- : 'varchar',
200
- length: DATABASE_TYPE == 'mssql' ? 'MAX' : undefined
201
- }),
202
- (0, type_graphql_1.Field)({
203
- nullable: true,
204
- description: 'Calculation formula for the KPI. Expressed as a string using metric codes and operators, e.g., "defect_count / total_count * 100".'
205
- }),
206
- tslib_1.__metadata("design:type", String)
207
- ], Kpi.prototype, "formula", void 0);
208
- tslib_1.__decorate([
209
- (0, typeorm_1.Column)({ nullable: false, default: false }),
210
- (0, type_graphql_1.Field)({ nullable: true, description: 'Indicates whether this KPI is active and usable.' }),
211
- tslib_1.__metadata("design:type", Boolean)
212
- ], Kpi.prototype, "active", void 0);
213
- tslib_1.__decorate([
214
- (0, typeorm_1.Column)({ nullable: true }),
215
- (0, type_graphql_1.Field)({ nullable: true, description: 'Current state of the KPI (DRAFT, RELEASED, ARCHIVED).' }),
216
- tslib_1.__metadata("design:type", String)
217
- ], Kpi.prototype, "state", void 0);
218
- tslib_1.__decorate([
219
- (0, typeorm_1.Column)({ nullable: true }),
220
- (0, type_graphql_1.Field)(type => KpiVizType, {
221
- nullable: true,
222
- description: 'Visualization type for this KPI (e.g., CARD, GAUGE, PROGRESS, BAR, LINE, etc.).'
223
- }),
224
- tslib_1.__metadata("design:type", String)
225
- ], Kpi.prototype, "vizType", void 0);
226
- tslib_1.__decorate([
227
- (0, typeorm_1.Column)({ type: 'json', nullable: true }),
228
- (0, type_graphql_1.Field)(type => shell_2.ScalarObject, {
229
- nullable: true,
230
- description: 'Visualization options and metadata for this KPI, such as color, icon, thresholds, unit, decimal places, min/max values, etc.'
231
- }),
232
- tslib_1.__metadata("design:type", Object)
233
- ], Kpi.prototype, "vizMeta", void 0);
234
- tslib_1.__decorate([
235
- (0, typeorm_1.Column)({ nullable: true }),
236
- (0, type_graphql_1.Field)({
237
- nullable: true,
238
- description: 'Cron schedule string for periodic KPI value aggregation (e.g., "0 0 * * *" for daily).'
239
- }),
240
- tslib_1.__metadata("design:type", String)
241
- ], Kpi.prototype, "schedule", void 0);
242
- tslib_1.__decorate([
243
- (0, typeorm_1.Column)({ nullable: true }),
244
- (0, type_graphql_1.Field)({ nullable: true, description: 'Schedule ID for the KPI (used for scheduler registration).' }),
245
- tslib_1.__metadata("design:type", String)
246
- ], Kpi.prototype, "scheduleId", void 0);
247
- tslib_1.__decorate([
248
- (0, typeorm_1.Column)({ nullable: true }),
249
- (0, type_graphql_1.Field)({ nullable: true, description: 'Timezone for the KPI schedule.' }),
250
- tslib_1.__metadata("design:type", String)
251
- ], Kpi.prototype, "timezone", void 0);
252
- tslib_1.__decorate([
253
- (0, typeorm_1.Column)({ default: 'DAY' }),
254
- (0, type_graphql_1.Field)(type => KpiPeriodType, { description: 'Aggregation period type for this KPI.' }),
255
- tslib_1.__metadata("design:type", String)
256
- ], Kpi.prototype, "periodType", void 0);
257
- tslib_1.__decorate([
258
- (0, typeorm_1.Column)({ type: 'float', nullable: true, default: 1 }),
259
- (0, type_graphql_1.Field)({ nullable: true, description: 'Weight for aggregation in parent category.' }),
260
- tslib_1.__metadata("design:type", Number)
261
- ], Kpi.prototype, "weight", void 0);
262
- tslib_1.__decorate([
263
- (0, typeorm_1.Column)({ nullable: true }),
264
- (0, type_graphql_1.Field)(type => KpiScoreType, {
265
- nullable: true,
266
- description: 'value → score 변환 방식. NONE: 미설정, DIRECT: value=score(변환 없음), FORMULA: scoreFormula 수식, LOOKUP: grade table(1D), CUSTOM: 2D 룩업 등 특수 변환.'
267
- }),
268
- tslib_1.__metadata("design:type", String)
269
- ], Kpi.prototype, "scoreType", void 0);
270
- tslib_1.__decorate([
271
- (0, typeorm_1.Column)({ nullable: true }),
272
- (0, type_graphql_1.Field)(type => KpiValueType, {
273
- nullable: true,
274
- description: 'value 획득 방식. MEASURED: 외부 시스템 수집 측정값, ASSESSED: 감리자 직접 평가(1~5), CALCULATED: formula 자동 계산, COMPOSITE: 다차원 룩업 결과.'
275
- }),
276
- tslib_1.__metadata("design:type", String)
277
- ], Kpi.prototype, "valueType", void 0);
278
- tslib_1.__decorate([
279
- (0, typeorm_1.Column)({ type: 'simple-json', nullable: true }),
280
- (0, type_graphql_1.Field)(type => shell_2.ScalarObject, {
281
- nullable: true,
282
- description: 'Performance index lookup table for complex transformations. @deprecated 향후 제거 예정. performanceFormula 사용 권장.'
283
- }),
284
- tslib_1.__metadata("design:type", Array)
285
- ], Kpi.prototype, "grades", void 0);
286
- tslib_1.__decorate([
287
- (0, typeorm_1.Column)({
288
- nullable: true,
289
- type: DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
290
- ? 'longtext'
291
- : DATABASE_TYPE == 'oracle'
292
- ? 'clob'
293
- : DATABASE_TYPE == 'mssql'
294
- ? 'nvarchar'
295
- : 'varchar',
296
- length: DATABASE_TYPE == 'mssql' ? 'MAX' : undefined
297
- }),
298
- (0, type_graphql_1.Field)({
299
- nullable: true,
300
- description: 'Score calculation formula for this KPI. Converts KPI value to performance score (0-100). For complex mappings, use grades lookup table instead. Example: "if(value >= 90, 100, if(value >= 80, 85, 70))" or "value * 0.8 + 20"'
301
- }),
302
- tslib_1.__metadata("design:type", String)
303
- ], Kpi.prototype, "scoreFormula", void 0);
304
- tslib_1.__decorate([
305
- (0, typeorm_1.CreateDateColumn)(),
306
- (0, type_graphql_1.Field)({ nullable: true, description: 'Timestamp when this KPI was created.' }),
307
- tslib_1.__metadata("design:type", Date)
308
- ], Kpi.prototype, "createdAt", void 0);
309
- tslib_1.__decorate([
310
- (0, typeorm_1.UpdateDateColumn)(),
311
- (0, type_graphql_1.Field)({ nullable: true, description: 'Timestamp when this KPI was last updated.' }),
312
- tslib_1.__metadata("design:type", Date)
313
- ], Kpi.prototype, "updatedAt", void 0);
314
- tslib_1.__decorate([
315
- (0, typeorm_1.DeleteDateColumn)(),
316
- (0, type_graphql_1.Field)({ nullable: true, description: 'Timestamp when this KPI was deleted (soft delete).' }),
317
- tslib_1.__metadata("design:type", Date)
318
- ], Kpi.prototype, "deletedAt", void 0);
319
- tslib_1.__decorate([
320
- (0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
321
- (0, type_graphql_1.Field)(type => auth_base_1.User, { nullable: true, description: 'User who created this KPI.' }),
322
- tslib_1.__metadata("design:type", auth_base_1.User)
323
- ], Kpi.prototype, "creator", void 0);
324
- tslib_1.__decorate([
325
- (0, typeorm_1.RelationId)((kpi) => kpi.creator),
326
- (0, type_graphql_1.Field)({ nullable: true, description: 'ID of the user who created this KPI.' }),
327
- tslib_1.__metadata("design:type", String)
328
- ], Kpi.prototype, "creatorId", void 0);
329
- tslib_1.__decorate([
330
- (0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
331
- (0, type_graphql_1.Field)(type => auth_base_1.User, { nullable: true, description: 'User who last updated this KPI.' }),
332
- tslib_1.__metadata("design:type", auth_base_1.User)
333
- ], Kpi.prototype, "updater", void 0);
334
- tslib_1.__decorate([
335
- (0, typeorm_1.RelationId)((kpi) => kpi.updater),
336
- (0, type_graphql_1.Field)({ nullable: true, description: 'ID of the user who last updated this KPI.' }),
337
- tslib_1.__metadata("design:type", String)
338
- ], Kpi.prototype, "updaterId", void 0);
339
- tslib_1.__decorate([
340
- (0, type_graphql_1.Field)(type => String, { nullable: true, description: 'Thumbnail image or file path for this KPI.' }),
341
- tslib_1.__metadata("design:type", String)
342
- ], Kpi.prototype, "thumbnail", void 0);
343
- exports.Kpi = Kpi = tslib_1.__decorate([
344
- (0, typeorm_1.Entity)(),
345
- (0, typeorm_1.Index)('ix_kpi_0', (kpi) => [kpi.domain, kpi.name], {
346
- where: '"deleted_at" IS NULL',
347
- unique: true
348
- }),
349
- (0, typeorm_1.Index)('ix_kpi_hierarchy', (kpi) => [kpi.domain, kpi.parent], {
350
- where: '"deleted_at" IS NULL'
351
- }),
352
- (0, type_graphql_1.ObjectType)({
353
- description: 'KPI entity. Represents a key performance indicator with calculation formula, target, category, and other attributes.'
354
- })
355
- ], Kpi);
356
- //# sourceMappingURL=kpi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kpi.js","sourceRoot":"","sources":["../../../server/service/kpi/kpi.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CreateDateColumn,\n UpdateDateColumn,\n DeleteDateColumn,\n Entity,\n Index,\n Column,\n RelationId,\n ManyToOne,\n OneToMany,\n VersionColumn,\n PrimaryGeneratedColumn\n} from 'typeorm'\nimport { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'\n\nimport { Domain } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { config } from '@things-factory/env'\nimport { ScalarObject } from '@things-factory/shell'\n\nimport { KpiScores } from './kpi-grade.types'\n\nconst ORMCONFIG = config.get('ormconfig', {})\nconst DATABASE_TYPE = ORMCONFIG.type\n\nexport enum KpiStatus {\n DRAFT = 'DRAFT',\n RELEASE = 'RELEASE',\n ARCHIVED = 'ARCHIVED'\n}\n\nexport enum KpiVizType {\n CARD = 'CARD',\n GAUGE = 'GAUGE',\n PROGRESS = 'PROGRESS',\n BAR = 'BAR',\n LINE = 'LINE',\n PIE = 'PIE',\n DONUT = 'DONUT',\n RADAR = 'RADAR',\n BULLET = 'BULLET',\n THERMOMETER = 'THERMOMETER',\n SPEEDOMETER = 'SPEEDOMETER',\n ICON = 'ICON',\n BADGE = 'BADGE',\n TEXT = 'TEXT',\n TABLE = 'TABLE'\n}\n\nexport enum KpiPeriodType {\n DAY = 'DAY',\n WEEK = 'WEEK',\n MONTH = 'MONTH',\n QUARTER = 'QUARTER',\n YEAR = 'YEAR',\n RANGE = 'RANGE',\n ALLTIME = 'ALLTIME'\n}\n\n/**\n * KPI scoreType — value → score 변환 방식\n *\n * 미설정(null)이면 score 변환이 정의되지 않은 상태.\n *\n * DIRECT — value = score, 별도 변환 없음.\n * value 자체가 최종 성과 점수로 사용됨.\n * 예: Y1~Y6(영역별 성과), Z(전체스코어) — formula로 계산된 value가 곧 score.\n * 예: X14(일정성과 수준 평가) — 감리자가 입력한 1~5점이 곧 score.\n *\n * FORMULA — scoreFormula 수식으로 value → score 변환.\n * KPI 엔티티의 scoreFormula 필드에 정의된 수식을 적용.\n * 예: \"1 - value / 0.82\", \"if(value >= 90, 100, 70)\"\n *\n * LOOKUP — grade table(1D 배열)로 raw value → 0~1 score 변환.\n * KPI 엔티티의 grades 필드에 {minValue, maxValue, score} 배열로 정의.\n * value가 속하는 구간의 score를 반환.\n * 예: X11(연면적 대비 공사기간), X33(검측 불합격률), X34(품질 SL-PA)\n *\n * CUSTOM — 2D 룩업 등 애플리케이션에서 정의하는 특수 변환.\n * grades에 다차원 lookup 구조가 저장됨.\n * 예: X13(일정 이탈 수준) — 공정률(%) × 편차율(%) → 1~5점\n */\nexport enum KpiScoreType {\n DIRECT = 'DIRECT',\n FORMULA = 'FORMULA',\n LOOKUP = 'LOOKUP',\n CUSTOM = 'CUSTOM'\n}\n\n/**\n * KPI valueType — value 획득 방식\n *\n * KPI의 value(측정값/입력값)를 어떤 방식으로 얻는지를 정의한다.\n * scoreType(value→score 변환)과는 독립적인 개념.\n *\n * MEASURED — 외부 시스템(API, DB 연계)에서 자동 수집한 정량 측정값.\n * 연속 실수값이며, 단위와 범위가 KPI마다 다름.\n * 예: X11(연면적 대비 공사기간), X33(검측 불합격률), X41(재해율), X61(투입인력 생산성)\n * 보통 scoreType=LOOKUP과 함께 사용하여 grade table로 score 변환.\n *\n * ASSESSED — 감리자/평가자가 직접 입력한 정성 평가.\n * 배점 기준(1~5점 척도)에 따라 수동 입력됨.\n * 예: X14(일정성과 수준 평가), X23(비용성과), X35(품질성과), X44(안전성과)\n * 보통 scoreType=DIRECT와 함께 사용 (value가 곧 score).\n *\n * CALCULATED — 산식(formula 필드)으로 하위 KPI들의 가중합 등을 자동 계산.\n * KPI 엔티티의 formula 필드에 정의된 수식을 기반으로 서버에서 연산.\n * 예: Y1(일정성과) = X11*0.3 + X12*0.4 + X13/5*0.15 + X14/5*0.15\n * 예: Z(전체스코어) = Y1~Y6의 가중 평균\n * 보통 scoreType=DIRECT와 함께 사용 (계산 결과가 곧 score).\n *\n * COMPOSITE — 다차원 입력의 복합 결과.\n * 단일 raw value가 아닌 복수의 입력(공정률, 편차율 등)을 조합하여 산출.\n * 예: X13(일정 이탈 수준) — 공정률(%) × 공기편차(%) 2D 룩업 → 1~5점\n * 보통 scoreType=CUSTOM과 함께 사용.\n */\nexport enum KpiValueType {\n MEASURED = 'MEASURED',\n ASSESSED = 'ASSESSED',\n CALCULATED = 'CALCULATED',\n COMPOSITE = 'COMPOSITE'\n}\n\nregisterEnumType(KpiStatus, {\n name: 'KpiStatus',\n description: 'State enumeration of a KPI (DRAFT, RELEASED, ARCHIVED)'\n})\n\nregisterEnumType(KpiVizType, {\n name: 'KpiVizType',\n description: 'Visualization type for KPI display (CARD, GAUGE, PROGRESS, etc.)'\n})\n\nregisterEnumType(KpiPeriodType, {\n name: 'KpiPeriodType',\n description: 'Aggregation period type for KPI (DAY, WEEK, MONTH, QUARTER, RANGE, ALLTIME)'\n})\n\nregisterEnumType(KpiScoreType, {\n name: 'KpiScoreType',\n description:\n 'value → score 변환 방식. DIRECT: value=score(변환 없음), FORMULA: scoreFormula 수식 적용, LOOKUP: grade table(1D) 매핑, CUSTOM: 2D 룩업 등 특수 변환.'\n})\n\nregisterEnumType(KpiValueType, {\n name: 'KpiValueType',\n description:\n 'value 획득 방식. MEASURED: 외부 시스템 수집 측정값, ASSESSED: 감리자 직접 평가(1~5), CALCULATED: formula 자동 계산, COMPOSITE: 다차원 복합 입력 결과.'\n})\n\n@Entity()\n@Index('ix_kpi_0', (kpi: Kpi) => [kpi.domain, kpi.name], {\n where: '\"deleted_at\" IS NULL',\n unique: true\n})\n@Index('ix_kpi_hierarchy', (kpi: Kpi) => [kpi.domain, kpi.parent], {\n where: '\"deleted_at\" IS NULL'\n})\n@ObjectType({\n description:\n 'KPI entity. Represents a key performance indicator with calculation formula, target, category, and other attributes.'\n})\nexport class Kpi {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID, { description: 'Unique identifier for this KPI.' })\n readonly id: string\n\n @VersionColumn()\n @Field({\n nullable: true,\n description:\n 'Version number of the KPI. Increments on each modification. When the KPI is released, a snapshot is saved in kpi-history and the status becomes RELEASED. Editing after release increases the version and sets status to DRAFT.'\n })\n version?: number = 1\n\n @ManyToOne(type => Domain)\n @Field({ nullable: true, description: 'Domain (tenant) to which this KPI belongs.' })\n domain?: Domain\n\n @RelationId((kpi: Kpi) => kpi.domain)\n @Field({ nullable: true, description: 'ID of the domain (tenant) for this KPI.' })\n domainId?: string\n\n @Column()\n @Field({ nullable: true, description: 'Name of the KPI.' })\n name?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'Detailed description of the KPI.' })\n description?: string\n\n @ManyToOne(() => Kpi, { nullable: true })\n @Field(type => Kpi, { nullable: true, description: 'Parent KPI in hierarchical structure.' })\n parent?: Kpi\n\n @RelationId((kpi: Kpi) => kpi.parent)\n @Field({ nullable: true, description: 'ID of the parent KPI.' })\n parentId?: string\n\n @OneToMany(() => Kpi, kpi => kpi.parent)\n @Field(type => [Kpi], { nullable: true, description: 'Child KPIs in hierarchical structure.' })\n children?: Kpi[]\n\n @Column({ nullable: false, default: true })\n @Field({ nullable: true, description: 'Indicates whether this KPI is a leaf node (has actual measured values).' })\n isLeaf?: boolean\n\n @Column({\n nullable: true,\n type:\n DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'\n ? 'longtext'\n : DATABASE_TYPE == 'oracle'\n ? 'clob'\n : DATABASE_TYPE == 'mssql'\n ? 'nvarchar'\n : 'varchar',\n length: DATABASE_TYPE == 'mssql' ? 'MAX' : undefined\n })\n @Field({\n nullable: true,\n description:\n 'Calculation formula for the KPI. Expressed as a string using metric codes and operators, e.g., \"defect_count / total_count * 100\".'\n })\n formula?: string\n\n @Column({ nullable: false, default: false })\n @Field({ nullable: true, description: 'Indicates whether this KPI is active and usable.' })\n active?: boolean\n\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'Current state of the KPI (DRAFT, RELEASED, ARCHIVED).' })\n state?: KpiStatus\n\n @Column({ nullable: true })\n @Field(type => KpiVizType, {\n nullable: true,\n description: 'Visualization type for this KPI (e.g., CARD, GAUGE, PROGRESS, BAR, LINE, etc.).'\n })\n vizType?: KpiVizType\n\n @Column({ type: 'json', nullable: true })\n @Field(type => ScalarObject, {\n nullable: true,\n description:\n 'Visualization options and metadata for this KPI, such as color, icon, thresholds, unit, decimal places, min/max values, etc.'\n })\n vizMeta?: any\n\n @Column({ nullable: true })\n @Field({\n nullable: true,\n description: 'Cron schedule string for periodic KPI value aggregation (e.g., \"0 0 * * *\" for daily).'\n })\n schedule?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'Schedule ID for the KPI (used for scheduler registration).' })\n scheduleId?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'Timezone for the KPI schedule.' })\n timezone?: string\n\n @Column({ default: 'DAY' })\n @Field(type => KpiPeriodType, { description: 'Aggregation period type for this KPI.' })\n periodType: KpiPeriodType\n\n @Column({ type: 'float', nullable: true, default: 1 })\n @Field({ nullable: true, description: 'Weight for aggregation in parent category.' })\n weight?: number\n\n @Column({ nullable: true })\n @Field(type => KpiScoreType, {\n nullable: true,\n description:\n 'value → score 변환 방식. NONE: 미설정, DIRECT: value=score(변환 없음), FORMULA: scoreFormula 수식, LOOKUP: grade table(1D), CUSTOM: 2D 룩업 등 특수 변환.'\n })\n scoreType?: KpiScoreType\n\n @Column({ nullable: true })\n @Field(type => KpiValueType, {\n nullable: true,\n description:\n 'value 획득 방식. MEASURED: 외부 시스템 수집 측정값, ASSESSED: 감리자 직접 평가(1~5), CALCULATED: formula 자동 계산, COMPOSITE: 다차원 룩업 결과.'\n })\n valueType?: KpiValueType\n\n @Column({ type: 'simple-json', nullable: true })\n @Field(type => ScalarObject, {\n nullable: true,\n description:\n 'Performance index lookup table for complex transformations. @deprecated 향후 제거 예정. performanceFormula 사용 권장.'\n })\n grades?: KpiScores\n\n @Column({\n nullable: true,\n type:\n DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'\n ? 'longtext'\n : DATABASE_TYPE == 'oracle'\n ? 'clob'\n : DATABASE_TYPE == 'mssql'\n ? 'nvarchar'\n : 'varchar',\n length: DATABASE_TYPE == 'mssql' ? 'MAX' : undefined\n })\n @Field({\n nullable: true,\n description:\n 'Score calculation formula for this KPI. Converts KPI value to performance score (0-100). For complex mappings, use grades lookup table instead. Example: \"if(value >= 90, 100, if(value >= 80, 85, 70))\" or \"value * 0.8 + 20\"'\n })\n scoreFormula?: string\n\n @CreateDateColumn()\n @Field({ nullable: true, description: 'Timestamp when this KPI was created.' })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true, description: 'Timestamp when this KPI was last updated.' })\n updatedAt?: Date\n\n @DeleteDateColumn()\n @Field({ nullable: true, description: 'Timestamp when this KPI was deleted (soft delete).' })\n deletedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true, description: 'User who created this KPI.' })\n creator?: User\n\n @RelationId((kpi: Kpi) => kpi.creator)\n @Field({ nullable: true, description: 'ID of the user who created this KPI.' })\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true, description: 'User who last updated this KPI.' })\n updater?: User\n\n @RelationId((kpi: Kpi) => kpi.updater)\n @Field({ nullable: true, description: 'ID of the user who last updated this KPI.' })\n updaterId?: string\n\n @Field(type => String, { nullable: true, description: 'Thumbnail image or file path for this KPI.' })\n thumbnail?: string\n}\n"]}
@@ -1,2 +0,0 @@
1
- import { KpiAlertQuery } from './kpi-alert-query';
2
- export declare const resolvers: (typeof KpiAlertQuery)[];
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolvers = void 0;
4
- const kpi_alert_query_1 = require("./kpi-alert-query");
5
- exports.resolvers = [kpi_alert_query_1.KpiAlertQuery];
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/kpi-alert/index.ts"],"names":[],"mappings":";;;AAAA,uDAAiD;AAEpC,QAAA,SAAS,GAAG,CAAC,+BAAa,CAAC,CAAA","sourcesContent":["import { KpiAlertQuery } from './kpi-alert-query'\n\nexport const resolvers = [KpiAlertQuery]\n"]}
@@ -1,4 +0,0 @@
1
- import { KpiAlert } from './kpi-alert-type';
2
- export declare class KpiAlertQuery {
3
- kpiAlerts(context: any): Promise<KpiAlert[]>;
4
- }
@@ -1,72 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KpiAlertQuery = void 0;
4
- const tslib_1 = require("tslib");
5
- const type_graphql_1 = require("type-graphql");
6
- const shell_1 = require("@things-factory/shell");
7
- const kpi_1 = require("../kpi/kpi");
8
- const kpi_value_1 = require("../kpi-value/kpi-value");
9
- const kpi_alert_type_1 = require("./kpi-alert-type");
10
- let KpiAlertQuery = class KpiAlertQuery {
11
- async kpiAlerts(context) {
12
- const { domain } = context.state;
13
- // 1. KPI 전체 조회
14
- const kpis = await (0, shell_1.getRepository)(kpi_1.Kpi).find({ where: { domain: { id: domain.id } } });
15
- // 2. KPI별 최신 실적값 조회
16
- const alerts = [];
17
- for (const kpi of kpis) {
18
- const value = await (0, shell_1.getRepository)(kpi_value_1.KpiValue).findOne({
19
- where: { domain: { id: domain.id }, kpi: { id: kpi.id } },
20
- order: { valueDate: 'DESC' }
21
- });
22
- if (!value) {
23
- alerts.push({
24
- id: `${kpi.id}-no-value`,
25
- kpi,
26
- message: `${kpi.name} 실적값 미입력`,
27
- level: 'info',
28
- createdAt: new Date()
29
- });
30
- continue;
31
- }
32
- // 목표값(예: kpi.vizMeta?.targetValue) 기준 경고
33
- const target = kpi.vizMeta?.targetValue;
34
- if (target !== undefined && value.value < target) {
35
- alerts.push({
36
- id: `${kpi.id}-target-miss`,
37
- kpi,
38
- message: `${kpi.name} 실적(${value.value})이 목표(${target}) 미달`,
39
- level: 'warning',
40
- createdAt: new Date()
41
- });
42
- }
43
- // 등급 기준 경고(예: 최하위 등급)
44
- // if (kpi.grades?.length) {
45
- // const grade = kpi.grades.find(g => value.value >= g.minValue && value.value <= g.maxValue)
46
- // if (grade && grade.score !== undefined && grade.score <= 2) {
47
- // alerts.push({
48
- // id: `${kpi.id}-grade-low`,
49
- // kpi,
50
- // message: `${kpi.name} 등급(${grade.name})(${grade.score}점)`,
51
- // level: 'critical',
52
- // createdAt: new Date()
53
- // })
54
- // }
55
- // }
56
- }
57
- return alerts;
58
- }
59
- };
60
- exports.KpiAlertQuery = KpiAlertQuery;
61
- tslib_1.__decorate([
62
- (0, type_graphql_1.Directive)('@privilege(category: "kpi", privilege: "query", domainOwnerGranted: true, superUserGranted: true)'),
63
- (0, type_graphql_1.Query)(returns => [kpi_alert_type_1.KpiAlert], { description: 'KPI 실적/등급/목표 미달 등 경고/알림 리스트 반환' }),
64
- tslib_1.__param(0, (0, type_graphql_1.Ctx)()),
65
- tslib_1.__metadata("design:type", Function),
66
- tslib_1.__metadata("design:paramtypes", [Object]),
67
- tslib_1.__metadata("design:returntype", Promise)
68
- ], KpiAlertQuery.prototype, "kpiAlerts", null);
69
- exports.KpiAlertQuery = KpiAlertQuery = tslib_1.__decorate([
70
- (0, type_graphql_1.Resolver)()
71
- ], KpiAlertQuery);
72
- //# sourceMappingURL=kpi-alert-query.js.map