@things-factory/kpi 9.0.31 → 9.0.33

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 (365) hide show
  1. package/README.md +1 -2
  2. package/client/charts/kpi-boxplot-chart.ts +182 -42
  3. package/client/charts/kpi-radar-chart.ts +9 -9
  4. package/client/pages/kpi/kpi-list-page.ts +196 -32
  5. package/client/pages/kpi/kpi-overview.ts +9 -11
  6. package/client/pages/kpi/kpi-tree-page.ts +409 -0
  7. package/client/pages/kpi/kpi-view.ts +187 -0
  8. package/client/pages/kpi-dashboard/cards/kpi-level1-card.ts +1 -1
  9. package/client/pages/kpi-dashboard/cards/kpi-level2-comparison.ts +1 -1
  10. package/client/pages/kpi-dashboard/cards/kpi-level3-comparison.ts +1 -1
  11. package/client/pages/kpi-dashboard/components/kpi-left-panel.ts +198 -160
  12. package/client/pages/kpi-dashboard/components/kpi-map-panel.ts +133 -0
  13. package/client/pages/kpi-dashboard/components/kpi-region-popup.ts +3 -2
  14. package/client/pages/kpi-dashboard/kpi-dashboard-map.ts +291 -48
  15. package/client/pages/kpi-dashboard/kpi-dashboard.ts +28 -30
  16. package/client/pages/kpi-history/kpi-history-list-page.ts +11 -11
  17. package/client/pages/kpi-metric/kpi-metric-list-page.ts +10 -2
  18. package/client/pages/kpi-metric-value/kpi-metric-value-editor-page.ts +7 -7
  19. package/client/pages/kpi-metric-value/kpi-metric-value-importer.ts +2 -2
  20. package/client/pages/kpi-metric-value/kpi-metric-value-list-page.ts +16 -8
  21. package/client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.ts +5 -5
  22. package/client/pages/kpi-statistic/kpi-statistic-editor-page.ts +1 -2
  23. package/client/pages/kpi-statistic/kpi-statistic-list-page.ts +10 -2
  24. package/client/pages/kpi-value/kpi-value-editor-page.ts +11 -7
  25. package/client/pages/kpi-value/kpi-value-list-page.ts +31 -7
  26. package/client/route.ts +2 -9
  27. package/design-entities.md +8 -12
  28. package/dist-client/charts/kpi-boxplot-chart.d.ts +2 -0
  29. package/dist-client/charts/kpi-boxplot-chart.js +168 -42
  30. package/dist-client/charts/kpi-boxplot-chart.js.map +1 -1
  31. package/dist-client/charts/kpi-radar-chart.js +9 -9
  32. package/dist-client/charts/kpi-radar-chart.js.map +1 -1
  33. package/dist-client/pages/kpi/kpi-list-page.d.ts +19 -3
  34. package/dist-client/pages/kpi/kpi-list-page.js +188 -32
  35. package/dist-client/pages/kpi/kpi-list-page.js.map +1 -1
  36. package/dist-client/pages/kpi/kpi-overview.js +9 -11
  37. package/dist-client/pages/kpi/kpi-overview.js.map +1 -1
  38. package/dist-client/pages/kpi/kpi-tree-page.d.ts +59 -0
  39. package/dist-client/pages/kpi/kpi-tree-page.js +403 -0
  40. package/dist-client/pages/kpi/kpi-tree-page.js.map +1 -0
  41. package/dist-client/pages/kpi/kpi-view.d.ts +12 -0
  42. package/dist-client/pages/kpi/kpi-view.js +191 -0
  43. package/dist-client/pages/kpi/kpi-view.js.map +1 -0
  44. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js +1 -1
  45. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js.map +1 -1
  46. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js +1 -1
  47. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js.map +1 -1
  48. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js +1 -1
  49. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js.map +1 -1
  50. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.d.ts +3 -1
  51. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js +197 -161
  52. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js.map +1 -1
  53. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.d.ts +5 -0
  54. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js +146 -0
  55. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js.map +1 -1
  56. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js +3 -2
  57. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js.map +1 -1
  58. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.d.ts +3 -1
  59. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js +268 -46
  60. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js.map +1 -1
  61. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +28 -30
  62. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -1
  63. package/dist-client/pages/kpi-history/kpi-history-list-page.d.ts +6 -1
  64. package/dist-client/pages/kpi-history/kpi-history-list-page.js +11 -11
  65. package/dist-client/pages/kpi-history/kpi-history-list-page.js.map +1 -1
  66. package/dist-client/pages/kpi-metric/kpi-metric-list-page.d.ts +5 -0
  67. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js +10 -2
  68. package/dist-client/pages/kpi-metric/kpi-metric-list-page.js.map +1 -1
  69. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +1 -1
  70. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +8 -8
  71. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +1 -1
  72. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js +2 -2
  73. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js.map +1 -1
  74. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +5 -0
  75. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +16 -8
  76. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +1 -1
  77. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.d.ts +1 -1
  78. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js +6 -6
  79. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js.map +1 -1
  80. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js +1 -2
  81. package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js.map +1 -1
  82. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.d.ts +5 -0
  83. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js +10 -2
  84. package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js.map +1 -1
  85. package/dist-client/pages/kpi-value/kpi-value-editor-page.d.ts +2 -1
  86. package/dist-client/pages/kpi-value/kpi-value-editor-page.js +16 -8
  87. package/dist-client/pages/kpi-value/kpi-value-editor-page.js.map +1 -1
  88. package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +5 -0
  89. package/dist-client/pages/kpi-value/kpi-value-list-page.js +31 -7
  90. package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +1 -1
  91. package/dist-client/route.d.ts +1 -1
  92. package/dist-client/route.js +2 -8
  93. package/dist-client/route.js.map +1 -1
  94. package/dist-client/tsconfig.tsbuildinfo +1 -1
  95. package/dist-server/controllers/kpi-metric-value-provider.d.ts +1 -1
  96. package/dist-server/controllers/kpi-metric-value-provider.js +4 -4
  97. package/dist-server/controllers/kpi-metric-value-provider.js.map +1 -1
  98. package/dist-server/controllers/kpi-value-provider.d.ts +1 -1
  99. package/dist-server/controllers/kpi-value-provider.js +3 -3
  100. package/dist-server/controllers/kpi-value-provider.js.map +1 -1
  101. package/dist-server/migrations/1752190849680-seed-kpi-metrics.d.ts +6 -0
  102. package/dist-server/migrations/1752190849680-seed-kpi-metrics.js +101 -0
  103. package/dist-server/migrations/1752190849680-seed-kpi-metrics.js.map +1 -0
  104. package/dist-server/migrations/1752190849681-seed-kpi.d.ts +5 -0
  105. package/dist-server/migrations/1752190849681-seed-kpi.js +315 -0
  106. package/dist-server/migrations/1752190849681-seed-kpi.js.map +1 -0
  107. package/dist-server/migrations/1752192090123-add-grades-to-kpi.d.ts +7 -0
  108. package/dist-server/migrations/1752192090123-add-grades-to-kpi.js +51 -0
  109. package/dist-server/migrations/1752192090123-add-grades-to-kpi.js.map +1 -0
  110. package/dist-server/migrations/1752192090124-add-kpi-statistics.d.ts +5 -0
  111. package/dist-server/migrations/1752192090124-add-kpi-statistics.js +710 -0
  112. package/dist-server/migrations/1752192090124-add-kpi-statistics.js.map +1 -0
  113. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.d.ts +6 -0
  114. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.js +111 -0
  115. package/dist-server/migrations/1752192090128-seed-kpi-org-scope.js.map +1 -0
  116. package/dist-server/migrations/1752192090129-seed-kpi-values.d.ts +6 -0
  117. package/dist-server/migrations/1752192090129-seed-kpi-values.js +187 -0
  118. package/dist-server/migrations/1752192090129-seed-kpi-values.js.map +1 -0
  119. package/dist-server/migrations/grade-data/x11-performance-table.json +962 -0
  120. package/dist-server/migrations/grade-data/x12-performance-table.json +611 -0
  121. package/dist-server/migrations/grade-data/x14-performance-table.json +42 -0
  122. package/dist-server/migrations/grade-data/x21-performance-table.json +889 -0
  123. package/dist-server/migrations/grade-data/x22-performance-table.json +1064 -0
  124. package/dist-server/migrations/grade-data/x23-performance-table.json +42 -0
  125. package/dist-server/migrations/grade-data/x31-performance-table.json +644 -0
  126. package/dist-server/migrations/grade-data/x32-performance-table.json +993 -0
  127. package/dist-server/migrations/grade-data/x33-performance-table.json +195 -0
  128. package/dist-server/migrations/grade-data/x34-performance-table.json +12 -0
  129. package/dist-server/migrations/grade-data/x35-performance-table.json +42 -0
  130. package/dist-server/migrations/grade-data/x41-performance-table.json +825 -0
  131. package/dist-server/migrations/grade-data/x42-performance-table.json +786 -0
  132. package/dist-server/migrations/grade-data/x43-performance-table.json +12 -0
  133. package/dist-server/migrations/grade-data/x44-performance-table.json +42 -0
  134. package/dist-server/migrations/grade-data/x51-performance-table.json +924 -0
  135. package/dist-server/migrations/grade-data/x52-performance-table.json +42 -0
  136. package/dist-server/migrations/grade-data/x61-performance-table.json +261 -0
  137. package/dist-server/migrations/grade-data/x62-performance-table.json +42 -0
  138. package/dist-server/migrations/seed-data/kpi-metrics-seed.json +454 -0
  139. package/dist-server/migrations/seed-data/kpi-org-scope-seed.json +1676 -0
  140. package/dist-server/migrations/seed-data/kpi-scopes-seed.json +121 -0
  141. package/dist-server/migrations/seed-data/kpi-values-seed.json +402 -0
  142. package/dist-server/migrations/seed-data/kpis-seed.json +488 -0
  143. package/dist-server/migrations/seed-data/scope-definitions-seed.json +90 -0
  144. package/dist-server/service/index.d.ts +4 -7
  145. package/dist-server/service/index.js +10 -13
  146. package/dist-server/service/index.js.map +1 -1
  147. package/dist-server/service/kpi/aggregate-kpi.js +30 -13
  148. package/dist-server/service/kpi/aggregate-kpi.js.map +1 -1
  149. package/dist-server/service/kpi/kpi-formula.service.d.ts +15 -0
  150. package/dist-server/service/kpi/kpi-formula.service.js +90 -0
  151. package/dist-server/service/kpi/kpi-formula.service.js.map +1 -1
  152. package/dist-server/service/kpi/kpi-history.d.ts +0 -3
  153. package/dist-server/service/kpi/kpi-history.js +0 -10
  154. package/dist-server/service/kpi/kpi-history.js.map +1 -1
  155. package/dist-server/service/kpi/kpi-mutation.d.ts +1 -1
  156. package/dist-server/service/kpi/kpi-mutation.js +57 -20
  157. package/dist-server/service/kpi/kpi-mutation.js.map +1 -1
  158. package/dist-server/service/kpi/kpi-query.d.ts +7 -3
  159. package/dist-server/service/kpi/kpi-query.js +126 -10
  160. package/dist-server/service/kpi/kpi-query.js.map +1 -1
  161. package/dist-server/service/kpi/kpi-type.d.ts +4 -2
  162. package/dist-server/service/kpi/kpi-type.js +12 -4
  163. package/dist-server/service/kpi/kpi-type.js.map +1 -1
  164. package/dist-server/service/kpi/kpi.d.ts +4 -3
  165. package/dist-server/service/kpi/kpi.js +20 -8
  166. package/dist-server/service/kpi/kpi.js.map +1 -1
  167. package/dist-server/service/kpi-metric/aggregate-kpi-metric.js +46 -11
  168. package/dist-server/service/kpi-metric/aggregate-kpi-metric.js.map +1 -1
  169. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +1 -1
  170. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +6 -6
  171. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +1 -1
  172. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.d.ts +2 -2
  173. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.js +4 -4
  174. package/dist-server/service/kpi-metric-value/kpi-metric-value-type.js.map +1 -1
  175. package/dist-server/service/kpi-metric-value/kpi-metric-value.d.ts +1 -1
  176. package/dist-server/service/kpi-metric-value/kpi-metric-value.js +3 -3
  177. package/dist-server/service/kpi-metric-value/kpi-metric-value.js.map +1 -1
  178. package/dist-server/service/kpi-org-scope/index.d.ts +5 -0
  179. package/dist-server/service/kpi-org-scope/index.js +9 -0
  180. package/dist-server/service/kpi-org-scope/index.js.map +1 -0
  181. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.d.ts +8 -0
  182. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.js +170 -0
  183. package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.js.map +1 -0
  184. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.d.ts +14 -0
  185. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.js +152 -0
  186. package/dist-server/service/kpi-org-scope/kpi-org-scope-query.js.map +1 -0
  187. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.d.ts +26 -0
  188. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.js +101 -0
  189. package/dist-server/service/kpi-org-scope/kpi-org-scope-type.js.map +1 -0
  190. package/dist-server/service/kpi-org-scope/kpi-org-scope.d.ts +26 -0
  191. package/dist-server/service/kpi-org-scope/kpi-org-scope.js +135 -0
  192. package/dist-server/service/kpi-org-scope/kpi-org-scope.js.map +1 -0
  193. package/dist-server/service/kpi-scope/index.d.ts +9 -0
  194. package/dist-server/service/kpi-scope/index.js +14 -0
  195. package/dist-server/service/kpi-scope/index.js.map +1 -0
  196. package/dist-server/service/kpi-scope/kpi-scope-mutation.d.ts +9 -0
  197. package/dist-server/service/kpi-scope/kpi-scope-mutation.js +135 -0
  198. package/dist-server/service/kpi-scope/kpi-scope-mutation.js.map +1 -0
  199. package/dist-server/service/kpi-scope/kpi-scope-query.d.ts +11 -0
  200. package/dist-server/service/kpi-scope/kpi-scope-query.js +89 -0
  201. package/dist-server/service/kpi-scope/kpi-scope-query.js.map +1 -0
  202. package/dist-server/service/kpi-scope/kpi-scope-type.d.ts +35 -0
  203. package/dist-server/service/kpi-scope/kpi-scope-type.js +138 -0
  204. package/dist-server/service/kpi-scope/kpi-scope-type.js.map +1 -0
  205. package/dist-server/service/kpi-scope/kpi-scope.d.ts +38 -0
  206. package/dist-server/service/kpi-scope/kpi-scope.js +144 -0
  207. package/dist-server/service/kpi-scope/kpi-scope.js.map +1 -0
  208. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.d.ts +43 -0
  209. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.js +181 -0
  210. package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.js.map +1 -0
  211. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.d.ts +50 -0
  212. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.js +324 -0
  213. package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.js.map +1 -0
  214. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.d.ts +4 -0
  215. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.js +76 -0
  216. package/dist-server/service/kpi-statistic/kpi-statistic-mutation.js.map +1 -1
  217. package/dist-server/service/kpi-statistic/kpi-statistic-query.d.ts +5 -1
  218. package/dist-server/service/kpi-statistic/kpi-statistic-query.js +92 -1
  219. package/dist-server/service/kpi-statistic/kpi-statistic-query.js.map +1 -1
  220. package/dist-server/service/kpi-statistic/kpi-statistic.d.ts +4 -0
  221. package/dist-server/service/kpi-statistic/kpi-statistic.js +33 -0
  222. package/dist-server/service/kpi-statistic/kpi-statistic.js.map +1 -1
  223. package/dist-server/service/kpi-value/kpi-value-mutation.js +71 -7
  224. package/dist-server/service/kpi-value/kpi-value-mutation.js.map +1 -1
  225. package/dist-server/service/kpi-value/kpi-value-type.d.ts +4 -2
  226. package/dist-server/service/kpi-value/kpi-value-type.js +12 -4
  227. package/dist-server/service/kpi-value/kpi-value-type.js.map +1 -1
  228. package/dist-server/service/kpi-value/kpi-value.d.ts +3 -1
  229. package/dist-server/service/kpi-value/kpi-value.js +11 -5
  230. package/dist-server/service/kpi-value/kpi-value.js.map +1 -1
  231. package/dist-server/service/utils/value-date-util.d.ts +1 -0
  232. package/dist-server/service/utils/value-date-util.js +41 -0
  233. package/dist-server/service/utils/value-date-util.js.map +1 -1
  234. package/dist-server/tsconfig.json +10 -0
  235. package/dist-server/tsconfig.tsbuildinfo +1 -1
  236. package/package.json +7 -6
  237. package/server/@types/index.d.ts +11 -0
  238. package/server/controllers/kpi-metric-value-provider.ts +5 -5
  239. package/server/controllers/kpi-value-provider.ts +4 -4
  240. package/server/migrations/1752190849680-seed-kpi-metrics.ts +124 -0
  241. package/server/migrations/1752190849681-seed-kpi.ts +356 -0
  242. package/server/migrations/1752192090123-add-grades-to-kpi.ts +67 -0
  243. package/server/migrations/1752192090124-add-kpi-statistics.ts +719 -0
  244. package/server/migrations/1752192090128-seed-kpi-org-scope.ts +132 -0
  245. package/server/migrations/1752192090129-seed-kpi-values.ts +207 -0
  246. package/server/migrations/grade-data/x11-performance-table.json +962 -0
  247. package/server/migrations/grade-data/x12-performance-table.json +611 -0
  248. package/server/migrations/grade-data/x14-performance-table.json +42 -0
  249. package/server/migrations/grade-data/x21-performance-table.json +889 -0
  250. package/server/migrations/grade-data/x22-performance-table.json +1064 -0
  251. package/server/migrations/grade-data/x23-performance-table.json +42 -0
  252. package/server/migrations/grade-data/x31-performance-table.json +644 -0
  253. package/server/migrations/grade-data/x32-performance-table.json +993 -0
  254. package/server/migrations/grade-data/x33-performance-table.json +195 -0
  255. package/server/migrations/grade-data/x34-performance-table.json +12 -0
  256. package/server/migrations/grade-data/x35-performance-table.json +42 -0
  257. package/server/migrations/grade-data/x41-performance-table.json +825 -0
  258. package/server/migrations/grade-data/x42-performance-table.json +786 -0
  259. package/server/migrations/grade-data/x43-performance-table.json +12 -0
  260. package/server/migrations/grade-data/x44-performance-table.json +42 -0
  261. package/server/migrations/grade-data/x51-performance-table.json +924 -0
  262. package/server/migrations/grade-data/x52-performance-table.json +42 -0
  263. package/server/migrations/grade-data/x61-performance-table.json +261 -0
  264. package/server/migrations/grade-data/x62-performance-table.json +42 -0
  265. package/server/migrations/seed-data/kpi-metrics-seed.json +454 -0
  266. package/server/migrations/seed-data/kpi-org-scope-seed.json +1676 -0
  267. package/server/migrations/seed-data/kpi-scopes-seed.json +121 -0
  268. package/server/migrations/seed-data/kpi-values-seed.json +402 -0
  269. package/server/migrations/seed-data/kpis-seed.json +488 -0
  270. package/server/migrations/seed-data/scope-definitions-seed.json +90 -0
  271. package/server/service/index.ts +10 -13
  272. package/server/service/kpi/aggregate-kpi.ts +31 -13
  273. package/server/service/kpi/kpi-formula.service.ts +101 -0
  274. package/server/service/kpi/kpi-history.ts +0 -8
  275. package/server/service/kpi/kpi-mutation.ts +59 -19
  276. package/server/service/kpi/kpi-query.ts +119 -8
  277. package/server/service/kpi/kpi-type.ts +10 -4
  278. package/server/service/kpi/kpi.ts +17 -7
  279. package/server/service/kpi-metric/aggregate-kpi-metric.ts +55 -11
  280. package/server/service/kpi-metric-value/kpi-metric-value-mutation.ts +6 -6
  281. package/server/service/kpi-metric-value/kpi-metric-value-type.ts +4 -4
  282. package/server/service/kpi-metric-value/kpi-metric-value.ts +3 -3
  283. package/server/service/kpi-org-scope/index.ts +6 -0
  284. package/server/service/kpi-org-scope/kpi-org-scope-mutation.ts +173 -0
  285. package/server/service/kpi-org-scope/kpi-org-scope-query.ts +127 -0
  286. package/server/service/kpi-org-scope/kpi-org-scope-type.ts +68 -0
  287. package/server/service/kpi-org-scope/kpi-org-scope.ts +123 -0
  288. package/server/service/kpi-scope/index.ts +11 -0
  289. package/server/service/kpi-scope/kpi-scope-mutation.ts +129 -0
  290. package/server/service/kpi-scope/kpi-scope-query.ts +63 -0
  291. package/server/service/kpi-scope/kpi-scope-type.ts +96 -0
  292. package/server/service/kpi-scope/kpi-scope.ts +143 -0
  293. package/server/service/kpi-statistic/kpi-statistic-batch.service.ts +231 -0
  294. package/server/service/kpi-statistic/kpi-statistic-calculation.service.ts +410 -0
  295. package/server/service/kpi-statistic/kpi-statistic-mutation.ts +97 -0
  296. package/server/service/kpi-statistic/kpi-statistic-query.ts +89 -2
  297. package/server/service/kpi-statistic/kpi-statistic.ts +32 -0
  298. package/server/service/kpi-value/kpi-value-mutation.ts +73 -7
  299. package/server/service/kpi-value/kpi-value-type.ts +10 -4
  300. package/server/service/kpi-value/kpi-value.ts +10 -5
  301. package/server/service/utils/value-date-util.ts +47 -0
  302. package/server/types/global.d.ts +8 -0
  303. package/things-factory.config.js +1 -0
  304. package/translations/en.json +15 -3
  305. package/translations/ja.json +13 -3
  306. package/translations/ko.json +15 -3
  307. package/translations/ms.json +13 -3
  308. package/translations/zh.json +13 -3
  309. package/client/pages/kpi-category/kpi-category-importer.ts +0 -90
  310. package/client/pages/kpi-category/kpi-category-list-page.ts +0 -537
  311. package/client/pages/kpi-category/kpi-category-value-calculator.ts +0 -233
  312. package/client/pages/kpi-category-value/kpi-category-value-list-page.ts +0 -404
  313. package/dist-client/pages/kpi-category/kpi-category-importer.d.ts +0 -23
  314. package/dist-client/pages/kpi-category/kpi-category-importer.js +0 -92
  315. package/dist-client/pages/kpi-category/kpi-category-importer.js.map +0 -1
  316. package/dist-client/pages/kpi-category/kpi-category-list-page.d.ts +0 -74
  317. package/dist-client/pages/kpi-category/kpi-category-list-page.js +0 -517
  318. package/dist-client/pages/kpi-category/kpi-category-list-page.js.map +0 -1
  319. package/dist-client/pages/kpi-category/kpi-category-value-calculator.d.ts +0 -13
  320. package/dist-client/pages/kpi-category/kpi-category-value-calculator.js +0 -256
  321. package/dist-client/pages/kpi-category/kpi-category-value-calculator.js.map +0 -1
  322. package/dist-client/pages/kpi-category-value/kpi-category-value-list-page.d.ts +0 -63
  323. package/dist-client/pages/kpi-category-value/kpi-category-value-list-page.js +0 -393
  324. package/dist-client/pages/kpi-category-value/kpi-category-value-list-page.js.map +0 -1
  325. package/dist-server/service/kpi-category/index.d.ts +0 -6
  326. package/dist-server/service/kpi-category/index.js +0 -10
  327. package/dist-server/service/kpi-category/index.js.map +0 -1
  328. package/dist-server/service/kpi-category/kpi-category-mutation.d.ts +0 -9
  329. package/dist-server/service/kpi-category/kpi-category-mutation.js +0 -221
  330. package/dist-server/service/kpi-category/kpi-category-mutation.js.map +0 -1
  331. package/dist-server/service/kpi-category/kpi-category-query.d.ts +0 -18
  332. package/dist-server/service/kpi-category/kpi-category-query.js +0 -115
  333. package/dist-server/service/kpi-category/kpi-category-query.js.map +0 -1
  334. package/dist-server/service/kpi-category/kpi-category-type.d.ts +0 -24
  335. package/dist-server/service/kpi-category/kpi-category-type.js +0 -100
  336. package/dist-server/service/kpi-category/kpi-category-type.js.map +0 -1
  337. package/dist-server/service/kpi-category/kpi-category.d.ts +0 -22
  338. package/dist-server/service/kpi-category/kpi-category.js +0 -106
  339. package/dist-server/service/kpi-category/kpi-category.js.map +0 -1
  340. package/dist-server/service/kpi-category-value/index.d.ts +0 -6
  341. package/dist-server/service/kpi-category-value/index.js +0 -10
  342. package/dist-server/service/kpi-category-value/index.js.map +0 -1
  343. package/dist-server/service/kpi-category-value/kpi-category-value-mutation.d.ts +0 -8
  344. package/dist-server/service/kpi-category-value/kpi-category-value-mutation.js +0 -102
  345. package/dist-server/service/kpi-category-value/kpi-category-value-mutation.js.map +0 -1
  346. package/dist-server/service/kpi-category-value/kpi-category-value-query.d.ts +0 -13
  347. package/dist-server/service/kpi-category-value/kpi-category-value-query.js +0 -91
  348. package/dist-server/service/kpi-category-value/kpi-category-value-query.js.map +0 -1
  349. package/dist-server/service/kpi-category-value/kpi-category-value-type.d.ts +0 -19
  350. package/dist-server/service/kpi-category-value/kpi-category-value-type.js +0 -73
  351. package/dist-server/service/kpi-category-value/kpi-category-value-type.js.map +0 -1
  352. package/dist-server/service/kpi-category-value/kpi-category-value.d.ts +0 -19
  353. package/dist-server/service/kpi-category-value/kpi-category-value.js +0 -91
  354. package/dist-server/service/kpi-category-value/kpi-category-value.js.map +0 -1
  355. package/helps/kpi/kpi-category.md +0 -160
  356. package/server/service/kpi-category/index.ts +0 -7
  357. package/server/service/kpi-category/kpi-category-mutation.ts +0 -217
  358. package/server/service/kpi-category/kpi-category-query.ts +0 -87
  359. package/server/service/kpi-category/kpi-category-type.ts +0 -73
  360. package/server/service/kpi-category/kpi-category.ts +0 -95
  361. package/server/service/kpi-category-value/index.ts +0 -7
  362. package/server/service/kpi-category-value/kpi-category-value-mutation.ts +0 -88
  363. package/server/service/kpi-category-value/kpi-category-value-query.ts +0 -62
  364. package/server/service/kpi-category-value/kpi-category-value-type.ts +0 -48
  365. package/server/service/kpi-category-value/kpi-category-value.ts +0 -79
@@ -16,12 +16,13 @@ import { i18next, localize } from '@operato/i18n'
16
16
  import { notify, openPopup } from '@operato/layout'
17
17
  import { OxPopup, OxPrompt } from '@operato/popup'
18
18
  import { isMobileDevice } from '@operato/utils'
19
+ import { p13n } from '@operato/p13n'
19
20
 
20
21
  import { connect } from 'pwa-helpers/connect-mixin'
21
22
  import gql from 'graphql-tag'
22
23
 
23
24
  @customElement('kpi-metric-value-list-page')
24
- export class KpiMetricValueListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
25
+ export class KpiMetricValueListPage extends connect(store)(p13n(localize(i18next)(ScopedElementsMixin(PageView)))) {
25
26
  static styles = [
26
27
  ScrollbarStyles,
27
28
  CommonGristStyles,
@@ -90,7 +91,12 @@ export class KpiMetricValueListPage extends connect(store)(localize(i18next)(Sco
90
91
  render() {
91
92
  const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')
92
93
  return html`
93
- <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
94
+ <ox-grist
95
+ .mode=${mode}
96
+ .config=${this.gristConfig}
97
+ .fetchHandler=${this.fetchHandler.bind(this)}
98
+ .personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')!}
99
+ >
94
100
  <div slot="headroom" class="header">
95
101
  <div class="filters">
96
102
  <ox-filters-form autofocus without-search></ox-filters-form>
@@ -106,6 +112,8 @@ export class KpiMetricValueListPage extends connect(store)(localize(i18next)(Sco
106
112
  </ox-record-creator>
107
113
  </div>
108
114
  </div>
115
+
116
+ <ox-grist-personalizer slot="setting"></ox-grist-personalizer>
109
117
  </ox-grist>
110
118
  `
111
119
  }
@@ -113,8 +121,8 @@ export class KpiMetricValueListPage extends connect(store)(localize(i18next)(Sco
113
121
  async pageInitialized() {
114
122
  this.gristConfig = {
115
123
  list: {
116
- fields: ['metric', 'valueDate', 'value', 'group', 'meta', 'createdAt', 'updatedAt', 'creator', 'updater'],
117
- details: ['metric', 'valueDate', 'value', 'group', 'meta', 'createdAt', 'updatedAt', 'creator', 'updater']
124
+ fields: ['metric', 'valueDate', 'value', 'org', 'meta', 'createdAt', 'updatedAt', 'creator', 'updater'],
125
+ details: ['metric', 'valueDate', 'value', 'org', 'meta', 'createdAt', 'updatedAt', 'creator', 'updater']
118
126
  },
119
127
  columns: [
120
128
  { type: 'gutter', gutterName: 'sequence' },
@@ -140,7 +148,7 @@ export class KpiMetricValueListPage extends connect(store)(localize(i18next)(Sco
140
148
  },
141
149
  { type: 'string', name: 'valueDate', header: '날짜', record: { editable: true }, width: 120 },
142
150
  { type: 'number', name: 'value', header: '값', record: { editable: true }, width: 120 },
143
- { type: 'string', name: 'group', header: '그룹', record: { editable: false }, width: 120 },
151
+ { type: 'string', name: 'org', header: '조직', record: { editable: false }, width: 120 },
144
152
  { type: 'object', name: 'meta', header: '메타', record: { editable: false }, width: 120 },
145
153
  { type: 'datetime', name: 'createdAt', header: '생성일', record: { editable: false }, width: 180 },
146
154
  { type: 'datetime', name: 'updatedAt', header: '수정일', record: { editable: false }, width: 180 },
@@ -189,7 +197,7 @@ export class KpiMetricValueListPage extends connect(store)(localize(i18next)(Sco
189
197
  valueDate
190
198
  value
191
199
  meta
192
- group
200
+ org
193
201
  updater {
194
202
  id
195
203
  name
@@ -307,7 +315,7 @@ export class KpiMetricValueListPage extends connect(store)(localize(i18next)(Sco
307
315
 
308
316
  async exportHandler() {
309
317
  const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records
310
- const targetFieldSet = new Set(['id', 'metric', 'valueDate', 'value', 'group', 'meta'])
318
+ const targetFieldSet = new Set(['id', 'metric', 'valueDate', 'value', 'org', 'meta'])
311
319
  return exportTargets.map(metricValue => {
312
320
  let tempObj = {}
313
321
  for (const field of targetFieldSet) {
@@ -328,7 +336,7 @@ export class KpiMetricValueListPage extends connect(store)(localize(i18next)(Sco
328
336
  .metric=${metricValue.metric}
329
337
  .valueDate=${metricValue.valueDate}
330
338
  .value=${metricValue.value}
331
- .group=${metricValue.group}
339
+ .org=${metricValue.org}
332
340
  .meta=${metricValue.meta ? JSON.stringify(metricValue.meta) : ''}
333
341
  @saved=${() => {
334
342
  this.grist.fetch()
@@ -61,7 +61,7 @@ export class KpiMetricValueManualEntryForm extends LitElement {
61
61
  @property({ type: Object }) metric: any
62
62
  @state() valueDate = new Date().toISOString().slice(0, 10)
63
63
  @state() value = ''
64
- @state() group = ''
64
+ @state() org = ''
65
65
  @state() meta = ''
66
66
  @state() loading = false
67
67
 
@@ -80,7 +80,7 @@ export class KpiMetricValueManualEntryForm extends LitElement {
80
80
  </label>
81
81
  <label>
82
82
  그룹 (선택)
83
- <input type="text" .value=${this.group} @input=${e => (this.group = e.target.value)} />
83
+ <input type="text" .value=${this.org} @input=${e => (this.org = e.target.value)} />
84
84
  </label>
85
85
  <label>
86
86
  메타정보 (선택, JSON)
@@ -111,8 +111,8 @@ export class KpiMetricValueManualEntryForm extends LitElement {
111
111
  try {
112
112
  await client.mutate({
113
113
  mutation: gql`
114
- mutation ($metricName: String!, $value: Float!, $group: String, $meta: Object) {
115
- recordKpiMetricValue(metricName: $metricName, value: $value, meta: $meta, group: $group) {
114
+ mutation ($metricName: String!, $value: Float!, $org: String, $meta: Object) {
115
+ recordKpiMetricValue(metricName: $metricName, value: $value, meta: $meta, org: $org) {
116
116
  id
117
117
  }
118
118
  }
@@ -120,7 +120,7 @@ export class KpiMetricValueManualEntryForm extends LitElement {
120
120
  variables: {
121
121
  metricName: this.metric.name,
122
122
  value: parseFloat(this.value),
123
- group: this.group || undefined,
123
+ org: this.org || undefined,
124
124
  meta: parsedMeta
125
125
  }
126
126
  })
@@ -485,8 +485,7 @@ export class KpiStatisticEditorPage extends connect(store)(localize(i18next)(Sco
485
485
  name
486
486
  periodType
487
487
  active
488
- categoryId
489
- category {
488
+ category: parent {
490
489
  id
491
490
  name
492
491
  }
@@ -15,6 +15,7 @@ import { i18next, localize } from '@operato/i18n'
15
15
  import { notify, openPopup } from '@operato/layout'
16
16
  import { OxPopup, OxPrompt } from '@operato/popup'
17
17
  import { isMobileDevice } from '@operato/utils'
18
+ import { p13n } from '@operato/p13n'
18
19
 
19
20
  import { connect } from 'pwa-helpers/connect-mixin'
20
21
  import gql from 'graphql-tag'
@@ -22,7 +23,7 @@ import gql from 'graphql-tag'
22
23
  import { KpiStatisticImporter } from './kpi-statistic-importer.js'
23
24
 
24
25
  @customElement('kpi-statistic-list-page')
25
- export class KpiStatisticListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
26
+ export class KpiStatisticListPage extends connect(store)(p13n(localize(i18next)(ScopedElementsMixin(PageView)))) {
26
27
  static styles = [
27
28
  ScrollbarStyles,
28
29
  CommonGristStyles,
@@ -100,7 +101,12 @@ export class KpiStatisticListPage extends connect(store)(localize(i18next)(Scope
100
101
  const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')
101
102
 
102
103
  return html`
103
- <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
104
+ <ox-grist
105
+ .mode=${mode}
106
+ .config=${this.gristConfig}
107
+ .fetchHandler=${this.fetchHandler.bind(this)}
108
+ .personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')!}
109
+ >
104
110
  <div slot="headroom" class="header">
105
111
  <div class="filters">
106
112
  <ox-filters-form autofocus without-search></ox-filters-form>
@@ -118,6 +124,8 @@ export class KpiStatisticListPage extends connect(store)(localize(i18next)(Scope
118
124
  </ox-record-creator>
119
125
  </div>
120
126
  </div>
127
+
128
+ <ox-grist-personalizer slot="setting"></ox-grist-personalizer>
121
129
  </ox-grist>
122
130
  `
123
131
  }
@@ -210,7 +210,8 @@ export class KpiValueEditorPage extends connect(store)(localize(i18next)(ScopedE
210
210
  `
211
211
  ]
212
212
 
213
- @property({ type: String }) group: string = ''
213
+ @property({ type: String }) kpiOrgScopeId: string = ''
214
+ @property({ type: String }) org: string = '' // legacy support
214
215
  @property({ type: String }) startDate: string = ''
215
216
  @property({ type: String }) endDate: string = ''
216
217
 
@@ -263,8 +264,8 @@ export class KpiValueEditorPage extends connect(store)(localize(i18next)(ScopedE
263
264
  <div class="controls">
264
265
  <md-outlined-text-field
265
266
  label="그룹"
266
- .value=${this.group}
267
- @input=${(e: any) => (this.group = e.target.value)}
267
+ .value=${this.org}
268
+ @input=${(e: any) => (this.org = e.target.value)}
268
269
  style="width: 150px;"
269
270
  ></md-outlined-text-field>
270
271
 
@@ -591,7 +592,10 @@ export class KpiValueEditorPage extends connect(store)(localize(i18next)(ScopedE
591
592
  valueDate
592
593
  value
593
594
  score
594
- group
595
+ kpiOrgScope {
596
+ id
597
+ org
598
+ }
595
599
  }
596
600
  total
597
601
  }
@@ -599,7 +603,7 @@ export class KpiValueEditorPage extends connect(store)(localize(i18next)(ScopedE
599
603
  `,
600
604
  variables: {
601
605
  filters: [
602
- ...(this.group ? [{ name: 'group', operator: 'eq', value: this.group }] : []),
606
+ ...(this.org ? [{ name: 'org', operator: 'eq', value: this.org }] : []),
603
607
  { name: 'valueDate', operator: 'between', value: [this.startDate, this.endDate] }
604
608
  ]
605
609
  }
@@ -688,7 +692,7 @@ export class KpiValueEditorPage extends connect(store)(localize(i18next)(ScopedE
688
692
  patches.push({
689
693
  id: existingValue.id,
690
694
  value: data.value,
691
- group: this.group,
695
+ org: this.org,
692
696
  cuFlag: 'M'
693
697
  })
694
698
  } else {
@@ -697,7 +701,7 @@ export class KpiValueEditorPage extends connect(store)(localize(i18next)(ScopedE
697
701
  kpiId: kpi.kpiId,
698
702
  valueDate: date,
699
703
  value: data.value,
700
- group: this.group,
704
+ org: this.org,
701
705
  cuFlag: '+'
702
706
  })
703
707
  }
@@ -15,6 +15,7 @@ import { i18next, localize } from '@operato/i18n'
15
15
  import { notify, openPopup } from '@operato/layout'
16
16
  import { OxPopup, OxPrompt } from '@operato/popup'
17
17
  import { isMobileDevice } from '@operato/utils'
18
+ import { p13n } from '@operato/p13n'
18
19
 
19
20
  import { connect } from 'pwa-helpers/connect-mixin'
20
21
  import gql from 'graphql-tag'
@@ -22,7 +23,7 @@ import gql from 'graphql-tag'
22
23
  import { KpiValueImporter } from './kpi-value-importer'
23
24
 
24
25
  @customElement('kpi-value-list-page')
25
- export class KpiValueListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
26
+ export class KpiValueListPage extends connect(store)(p13n(localize(i18next)(ScopedElementsMixin(PageView)))) {
26
27
  static styles = [
27
28
  ScrollbarStyles,
28
29
  CommonGristStyles,
@@ -106,7 +107,12 @@ export class KpiValueListPage extends connect(store)(localize(i18next)(ScopedEle
106
107
  const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')
107
108
 
108
109
  return html`
109
- <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
110
+ <ox-grist
111
+ .mode=${mode}
112
+ .config=${this.gristConfig}
113
+ .fetchHandler=${this.fetchHandler.bind(this)}
114
+ .personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')!}
115
+ >
110
116
  <div slot="headroom" class="header">
111
117
  <div class="filters">
112
118
  <ox-filters-form autofocus without-search></ox-filters-form>
@@ -124,6 +130,8 @@ export class KpiValueListPage extends connect(store)(localize(i18next)(ScopedEle
124
130
  </ox-record-creator>
125
131
  </div>
126
132
  </div>
133
+
134
+ <ox-grist-personalizer slot="setting"></ox-grist-personalizer>
127
135
  </ox-grist>
128
136
  `
129
137
  }
@@ -137,7 +145,7 @@ export class KpiValueListPage extends connect(store)(localize(i18next)(ScopedEle
137
145
  'valueDate',
138
146
  'value',
139
147
  'score',
140
- 'group',
148
+ 'kpiOrgScope',
141
149
  'inputType',
142
150
  'source',
143
151
  'meta',
@@ -152,7 +160,7 @@ export class KpiValueListPage extends connect(store)(localize(i18next)(ScopedEle
152
160
  'valueDate',
153
161
  'value',
154
162
  'score',
155
- 'group',
163
+ 'kpiOrgScope',
156
164
  'inputType',
157
165
  'source',
158
166
  'meta',
@@ -188,7 +196,16 @@ export class KpiValueListPage extends connect(store)(localize(i18next)(ScopedEle
188
196
  { type: 'string', name: 'valueDate', header: '실적일', record: { editable: true }, width: 120 },
189
197
  { type: 'number', name: 'value', header: '실적값', record: { editable: true }, width: 120 },
190
198
  { type: 'number', name: 'score', header: '성과점수', record: { editable: false }, width: 120 },
191
- { type: 'string', name: 'group', header: '그룹', record: { editable: false }, width: 120 },
199
+ {
200
+ type: 'string',
201
+ name: 'kpiOrgScope',
202
+ header: '조직',
203
+ record: { editable: false },
204
+ width: 120,
205
+ renderer: (value, column, record, rowIndex, field) => {
206
+ return value?.entityName || value?.org || ''
207
+ }
208
+ },
192
209
  { type: 'string', name: 'inputType', header: '입력방식', record: { editable: false }, width: 100 },
193
210
  { type: 'string', name: 'source', header: '수집출처', record: { editable: false }, width: 120 },
194
211
  { type: 'object', name: 'meta', header: '메타', record: { editable: false }, width: 120 },
@@ -243,7 +260,10 @@ export class KpiValueListPage extends connect(store)(localize(i18next)(ScopedEle
243
260
  inputType
244
261
  source
245
262
  meta
246
- group
263
+ kpiOrgScope {
264
+ id
265
+ org
266
+ }
247
267
  updater {
248
268
  id
249
269
  name
@@ -362,7 +382,11 @@ export class KpiValueListPage extends connect(store)(localize(i18next)(ScopedEle
362
382
  value
363
383
  score
364
384
  valueDate
365
- group
385
+ kpiOrgScope {
386
+ id
387
+ entityName
388
+ org
389
+ }
366
390
  }
367
391
  }
368
392
  `,
package/client/route.ts CHANGED
@@ -12,17 +12,10 @@ export default function route(page: string) {
12
12
  import('./pages/kpi/kpi-list-page')
13
13
  return page
14
14
 
15
- case 'kpi-category-list':
16
- import('./pages/kpi-category/kpi-category-list-page')
15
+ case 'kpi-tree':
16
+ import('./pages/kpi/kpi-tree-page')
17
17
  return page
18
18
 
19
- case 'kpi-category-list':
20
- import('./pages/kpi-category/kpi-category-list-page')
21
- return page
22
-
23
- case 'kpi-category-value-list':
24
- import('./pages/kpi-category-value/kpi-category-value-list-page')
25
- return page
26
19
 
27
20
  case 'kpi-metric-list':
28
21
  import('./pages/kpi-metric/kpi-metric-list-page')
@@ -1,12 +1,11 @@
1
-
2
1
  # KPI 모듈 엔티티 설계
3
2
 
4
3
  ## 1. KPI (핵심성과지표)
4
+
5
5
  - **id**: string (PK)
6
6
  - **name**: string (지표명)
7
7
  - **code**: string (지표코드, unique)
8
8
  - **description**: string (설명)
9
- - **categoryId**: string (FK, KPI 카테고리)
10
9
  - **unit**: string (단위)
11
10
  - **formula**: string (산식)
12
11
  - **targetValue**: number (목표값)
@@ -16,13 +15,8 @@
16
15
  - **createdAt**: datetime
17
16
  - **updatedAt**: datetime
18
17
 
19
- ## 2. KPI_CATEGORY (지표 분류)
20
- - **id**: string (PK)
21
- - **name**: string (분류명)
22
- - **description**: string
23
- - **parentId**: string (FK, 상위 분류)
24
-
25
18
  ## 3. KPI_VALUE (지표 실적값)
19
+
26
20
  - **id**: string (PK)
27
21
  - **kpiId**: string (FK, KPI)
28
22
  - **date**: date (실적 기준일)
@@ -32,13 +26,14 @@
32
26
  - **createdAt**: datetime
33
27
 
34
28
  ## 4. KPI_OWNER (담당자/조직)
29
+
35
30
  - **id**: string (PK)
36
31
  - **name**: string (이름/조직명)
37
32
  - **type**: enum('USER', 'DEPT')
38
33
  - **email**: string
39
34
 
40
-
41
35
  ## 5. KPI_HISTORY (변경이력)
36
+
42
37
  - **id**: string (PK)
43
38
  - **kpiId**: string (FK, KPI)
44
39
  - **changedAt**: datetime
@@ -48,6 +43,7 @@
48
43
  - **newValue**: string
49
44
 
50
45
  ## 6. METRIC (측정지표)
46
+
51
47
  - **id**: string (PK)
52
48
  - **name**: string (지표명)
53
49
  - **code**: string (지표코드, unique)
@@ -57,14 +53,15 @@
57
53
  - **createdAt**: datetime
58
54
  - **updatedAt**: datetime
59
55
 
60
-
61
56
  ## 7. KPI_METRIC_MAP (KPI-메트릭 매핑)
57
+
62
58
  - **id**: string (PK)
63
59
  - **kpiId**: string (FK, KPI)
64
60
  - **metricId**: string (FK, METRIC)
65
61
  - **order**: number (산식 내 사용 순서/우선순위)
66
62
 
67
63
  ## 8. KPI_GRADE (KPI별 등급/구간)
64
+
68
65
  - **id**: string (PK)
69
66
  - **kpiId**: string (FK, KPI)
70
67
  - **grade**: string (등급명, 예: A, B, C, D)
@@ -79,10 +76,8 @@
79
76
  ## 엔티티 간 릴레이션
80
77
 
81
78
  - **KPI** 1 --- N **KPI_VALUE** (한 KPI에 여러 실적값)
82
- - **KPI** N --- 1 **KPI_CATEGORY** (여러 KPI가 한 분류에 속함)
83
79
  - **KPI** N --- 1 **KPI_OWNER** (여러 KPI가 한 담당자/조직에 속함)
84
80
  - **KPI** 1 --- N **KPI_HISTORY** (한 KPI에 여러 변경이력)
85
- - **KPI_CATEGORY** N --- 1 **KPI_CATEGORY** (상위-하위 분류 구조)
86
81
  - **KPI** N --- M **METRIC** (KPI와 Metric은 N:M, KPI_METRIC_MAP으로 연결)
87
82
 
88
83
  - **KPI** 1 --- N **KPI_GRADE** (한 KPI에 여러 등급/구간)
@@ -90,6 +85,7 @@
90
85
  ---
91
86
 
92
87
  ## 확장 고려사항
88
+
93
89
  - KPI별 첨부파일, 알림설정, 외부연계정보 등은 추후 별도 엔티티로 확장 가능
94
90
 
95
91
  ---
@@ -10,6 +10,7 @@ export declare class KpiBoxplotChart extends LitElement {
10
10
  q3Key: string;
11
11
  valueKey: string;
12
12
  currentGroup: string;
13
+ independentScale: boolean;
13
14
  static styles: import("lit").CSSResult;
14
15
  private chartWidth;
15
16
  private chartHeight;
@@ -18,5 +19,6 @@ export declare class KpiBoxplotChart extends LitElement {
18
19
  connectedCallback(): void;
19
20
  disconnectedCallback(): void;
20
21
  updated(): void;
22
+ private getOrgValue;
21
23
  drawBoxplot(): void;
22
24
  }