@things-factory/dataset 8.0.39 → 9.0.0-9.0.0-beta.59.0

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 (324) hide show
  1. package/dist-client/bootstrap.d.ts +8 -8
  2. package/dist-client/bootstrap.js +8 -8
  3. package/dist-client/bootstrap.js.map +1 -1
  4. package/dist-client/components/data-entry-form.js.map +1 -1
  5. package/dist-client/pages/data-archive/data-archive-list-page.d.ts +1 -1
  6. package/dist-client/pages/data-archive/data-archive-list-page.js +1 -1
  7. package/dist-client/pages/data-archive/data-archive-list-page.js.map +1 -1
  8. package/dist-client/pages/data-entry/data-entry-list-page.js +2 -2
  9. package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
  10. package/dist-client/pages/data-key-set/data-key-set-list-page.d.ts +1 -1
  11. package/dist-client/pages/data-key-set/data-key-set-list-page.js +1 -1
  12. package/dist-client/pages/data-key-set/data-key-set-list-page.js.map +1 -1
  13. package/dist-client/pages/data-report/data-report-list-page.js +1 -1
  14. package/dist-client/pages/data-report/data-report-list-page.js.map +1 -1
  15. package/dist-client/pages/data-set/data-set-list-page.js +2 -5
  16. package/dist-client/pages/data-set/data-set-list-page.js.map +1 -1
  17. package/dist-client/pages/data-summary/data-summary-period-page.js +53 -37
  18. package/dist-client/pages/data-summary/data-summary-period-page.js.map +1 -1
  19. package/dist-client/tsconfig.tsbuildinfo +1 -1
  20. package/dist-server/activities/activity-data-review.js +9 -9
  21. package/dist-server/activities/activity-data-review.js.map +1 -1
  22. package/dist-server/activities/activity-ooc-resolve.js +3 -3
  23. package/dist-server/activities/activity-ooc-resolve.js.map +1 -1
  24. package/dist-server/activities/activity-ooc-review.js +5 -5
  25. package/dist-server/activities/activity-ooc-review.js.map +1 -1
  26. package/dist-server/activities/index.js +5 -5
  27. package/dist-server/activities/index.js.map +1 -1
  28. package/dist-server/controllers/create-data-ooc.d.ts +3 -3
  29. package/dist-server/controllers/create-data-ooc.js +4 -6
  30. package/dist-server/controllers/create-data-ooc.js.map +1 -1
  31. package/dist-server/controllers/create-data-sample.d.ts +2 -2
  32. package/dist-server/controllers/create-data-sample.js +13 -13
  33. package/dist-server/controllers/create-data-sample.js.map +1 -1
  34. package/dist-server/controllers/data-use-case.d.ts +2 -2
  35. package/dist-server/controllers/data-use-case.js.map +1 -1
  36. package/dist-server/controllers/finalize-data-collection.d.ts +1 -1
  37. package/dist-server/controllers/finalize-data-collection.js +21 -21
  38. package/dist-server/controllers/finalize-data-collection.js.map +1 -1
  39. package/dist-server/controllers/index.d.ts +6 -6
  40. package/dist-server/controllers/index.js +6 -6
  41. package/dist-server/controllers/index.js.map +1 -1
  42. package/dist-server/controllers/issue-data-collection-task.js +3 -3
  43. package/dist-server/controllers/issue-data-collection-task.js.map +1 -1
  44. package/dist-server/controllers/issue-ooc-review.d.ts +2 -2
  45. package/dist-server/controllers/issue-ooc-review.js +2 -2
  46. package/dist-server/controllers/issue-ooc-review.js.map +1 -1
  47. package/dist-server/controllers/jasper-report.js +2 -2
  48. package/dist-server/controllers/jasper-report.js.map +1 -1
  49. package/dist-server/controllers/query-data-summary-by-period.d.ts +2 -2
  50. package/dist-server/controllers/query-data-summary-by-period.js +23 -17
  51. package/dist-server/controllers/query-data-summary-by-period.js.map +1 -1
  52. package/dist-server/controllers/shiny-report.js +2 -2
  53. package/dist-server/controllers/shiny-report.js.map +1 -1
  54. package/dist-server/engine/index.d.ts +1 -1
  55. package/dist-server/engine/index.js +1 -1
  56. package/dist-server/engine/index.js.map +1 -1
  57. package/dist-server/engine/task/create-data-sample.js +4 -4
  58. package/dist-server/engine/task/create-data-sample.js.map +1 -1
  59. package/dist-server/engine/task/index.d.ts +2 -2
  60. package/dist-server/engine/task/index.js +2 -2
  61. package/dist-server/engine/task/index.js.map +1 -1
  62. package/dist-server/engine/task/issue-collect-data.js +2 -2
  63. package/dist-server/engine/task/issue-collect-data.js.map +1 -1
  64. package/dist-server/index.d.ts +6 -6
  65. package/dist-server/index.js +6 -6
  66. package/dist-server/index.js.map +1 -1
  67. package/dist-server/routes.js +12 -12
  68. package/dist-server/routes.js.map +1 -1
  69. package/dist-server/service/data-archive/data-archive-mutation.d.ts +2 -2
  70. package/dist-server/service/data-archive/data-archive-mutation.js +22 -22
  71. package/dist-server/service/data-archive/data-archive-mutation.js.map +1 -1
  72. package/dist-server/service/data-archive/data-archive-query.d.ts +2 -2
  73. package/dist-server/service/data-archive/data-archive-query.js +10 -10
  74. package/dist-server/service/data-archive/data-archive-query.js.map +1 -1
  75. package/dist-server/service/data-archive/data-archive-type.d.ts +1 -1
  76. package/dist-server/service/data-archive/data-archive-type.js +2 -2
  77. package/dist-server/service/data-archive/data-archive-type.js.map +1 -1
  78. package/dist-server/service/data-archive/index.d.ts +3 -3
  79. package/dist-server/service/data-archive/index.js +5 -5
  80. package/dist-server/service/data-archive/index.js.map +1 -1
  81. package/dist-server/service/data-key-set/data-key-set-mutation.d.ts +2 -2
  82. package/dist-server/service/data-key-set/data-key-set-mutation.js +20 -20
  83. package/dist-server/service/data-key-set/data-key-set-mutation.js.map +1 -1
  84. package/dist-server/service/data-key-set/data-key-set-query.d.ts +2 -2
  85. package/dist-server/service/data-key-set/data-key-set-query.js +12 -12
  86. package/dist-server/service/data-key-set/data-key-set-query.js.map +1 -1
  87. package/dist-server/service/data-key-set/data-key-set-type.d.ts +3 -3
  88. package/dist-server/service/data-key-set/data-key-set-type.js +6 -6
  89. package/dist-server/service/data-key-set/data-key-set-type.js.map +1 -1
  90. package/dist-server/service/data-key-set/data-key-set.d.ts +2 -2
  91. package/dist-server/service/data-key-set/data-key-set.js +3 -3
  92. package/dist-server/service/data-key-set/data-key-set.js.map +1 -1
  93. package/dist-server/service/data-key-set/index.d.ts +3 -3
  94. package/dist-server/service/data-key-set/index.js +5 -5
  95. package/dist-server/service/data-key-set/index.js.map +1 -1
  96. package/dist-server/service/data-ooc/data-ooc-mutation.d.ts +2 -2
  97. package/dist-server/service/data-ooc/data-ooc-mutation.js +11 -11
  98. package/dist-server/service/data-ooc/data-ooc-mutation.js.map +1 -1
  99. package/dist-server/service/data-ooc/data-ooc-query.d.ts +5 -5
  100. package/dist-server/service/data-ooc/data-ooc-query.js +27 -27
  101. package/dist-server/service/data-ooc/data-ooc-query.js.map +1 -1
  102. package/dist-server/service/data-ooc/data-ooc-subscription.d.ts +1 -1
  103. package/dist-server/service/data-ooc/data-ooc-subscription.js +3 -3
  104. package/dist-server/service/data-ooc/data-ooc-subscription.js.map +1 -1
  105. package/dist-server/service/data-ooc/data-ooc-type.d.ts +1 -1
  106. package/dist-server/service/data-ooc/data-ooc-type.js +4 -4
  107. package/dist-server/service/data-ooc/data-ooc-type.js.map +1 -1
  108. package/dist-server/service/data-ooc/data-ooc.d.ts +3 -3
  109. package/dist-server/service/data-ooc/data-ooc.js +10 -10
  110. package/dist-server/service/data-ooc/data-ooc.js.map +1 -1
  111. package/dist-server/service/data-ooc/index.d.ts +4 -4
  112. package/dist-server/service/data-ooc/index.js +6 -6
  113. package/dist-server/service/data-ooc/index.js.map +1 -1
  114. package/dist-server/service/data-sample/data-sample-mutation.d.ts +2 -2
  115. package/dist-server/service/data-sample/data-sample-mutation.js +7 -7
  116. package/dist-server/service/data-sample/data-sample-mutation.js.map +1 -1
  117. package/dist-server/service/data-sample/data-sample-query.d.ts +6 -6
  118. package/dist-server/service/data-sample/data-sample-query.js +44 -37
  119. package/dist-server/service/data-sample/data-sample-query.js.map +1 -1
  120. package/dist-server/service/data-sample/data-sample-type.d.ts +1 -1
  121. package/dist-server/service/data-sample/data-sample-type.js +2 -2
  122. package/dist-server/service/data-sample/data-sample-type.js.map +1 -1
  123. package/dist-server/service/data-sample/data-sample.d.ts +3 -3
  124. package/dist-server/service/data-sample/data-sample.js +10 -10
  125. package/dist-server/service/data-sample/data-sample.js.map +1 -1
  126. package/dist-server/service/data-sample/index.d.ts +3 -3
  127. package/dist-server/service/data-sample/index.js +5 -5
  128. package/dist-server/service/data-sample/index.js.map +1 -1
  129. package/dist-server/service/data-sensor/data-sensor-mutation.d.ts +2 -2
  130. package/dist-server/service/data-sensor/data-sensor-mutation.js +14 -14
  131. package/dist-server/service/data-sensor/data-sensor-mutation.js.map +1 -1
  132. package/dist-server/service/data-sensor/data-sensor-query.d.ts +3 -3
  133. package/dist-server/service/data-sensor/data-sensor-query.js +16 -16
  134. package/dist-server/service/data-sensor/data-sensor-query.js.map +1 -1
  135. package/dist-server/service/data-sensor/data-sensor-type.d.ts +1 -1
  136. package/dist-server/service/data-sensor/data-sensor-type.js +2 -2
  137. package/dist-server/service/data-sensor/data-sensor-type.js.map +1 -1
  138. package/dist-server/service/data-sensor/data-sensor.d.ts +1 -1
  139. package/dist-server/service/data-sensor/data-sensor.js +3 -3
  140. package/dist-server/service/data-sensor/data-sensor.js.map +1 -1
  141. package/dist-server/service/data-sensor/index.d.ts +3 -3
  142. package/dist-server/service/data-sensor/index.js +5 -5
  143. package/dist-server/service/data-sensor/index.js.map +1 -1
  144. package/dist-server/service/data-set/data-set-mutation.d.ts +2 -2
  145. package/dist-server/service/data-set/data-set-mutation.js +32 -32
  146. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  147. package/dist-server/service/data-set/data-set-query.d.ts +4 -4
  148. package/dist-server/service/data-set/data-set-query.js +44 -44
  149. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  150. package/dist-server/service/data-set/data-set-type.d.ts +2 -2
  151. package/dist-server/service/data-set/data-set-type.js +5 -5
  152. package/dist-server/service/data-set/data-set-type.js.map +1 -1
  153. package/dist-server/service/data-set/data-set.d.ts +2 -2
  154. package/dist-server/service/data-set/data-set.js +6 -6
  155. package/dist-server/service/data-set/data-set.js.map +1 -1
  156. package/dist-server/service/data-set/index.d.ts +3 -3
  157. package/dist-server/service/data-set/index.js +5 -5
  158. package/dist-server/service/data-set/index.js.map +1 -1
  159. package/dist-server/service/data-set-history/data-set-history-query.d.ts +4 -4
  160. package/dist-server/service/data-set-history/data-set-history-query.js +22 -22
  161. package/dist-server/service/data-set-history/data-set-history-query.js.map +1 -1
  162. package/dist-server/service/data-set-history/data-set-history-type.d.ts +1 -1
  163. package/dist-server/service/data-set-history/data-set-history-type.js +2 -2
  164. package/dist-server/service/data-set-history/data-set-history-type.js.map +1 -1
  165. package/dist-server/service/data-set-history/data-set-history.d.ts +2 -2
  166. package/dist-server/service/data-set-history/data-set-history.js +3 -3
  167. package/dist-server/service/data-set-history/data-set-history.js.map +1 -1
  168. package/dist-server/service/data-set-history/event-subscriber.d.ts +2 -2
  169. package/dist-server/service/data-set-history/event-subscriber.js +4 -4
  170. package/dist-server/service/data-set-history/event-subscriber.js.map +1 -1
  171. package/dist-server/service/data-set-history/index.d.ts +3 -3
  172. package/dist-server/service/data-set-history/index.js +6 -6
  173. package/dist-server/service/data-set-history/index.js.map +1 -1
  174. package/dist-server/service/data-spec/data-spec-manager.d.ts +1 -1
  175. package/dist-server/service/data-spec/data-spec-manager.js.map +1 -1
  176. package/dist-server/service/data-spec/data-spec-query.d.ts +1 -1
  177. package/dist-server/service/data-spec/data-spec-query.js +9 -9
  178. package/dist-server/service/data-spec/data-spec-query.js.map +1 -1
  179. package/dist-server/service/data-spec/index.d.ts +2 -2
  180. package/dist-server/service/data-spec/index.js +4 -4
  181. package/dist-server/service/data-spec/index.js.map +1 -1
  182. package/dist-server/service/data-summary/data-summary-mutation.js +11 -8
  183. package/dist-server/service/data-summary/data-summary-mutation.js.map +1 -1
  184. package/dist-server/service/data-summary/data-summary-query.d.ts +5 -5
  185. package/dist-server/service/data-summary/data-summary-query.js +31 -31
  186. package/dist-server/service/data-summary/data-summary-query.js.map +1 -1
  187. package/dist-server/service/data-summary/data-summary-type.d.ts +1 -1
  188. package/dist-server/service/data-summary/data-summary-type.js +2 -2
  189. package/dist-server/service/data-summary/data-summary-type.js.map +1 -1
  190. package/dist-server/service/data-summary/data-summary.d.ts +2 -2
  191. package/dist-server/service/data-summary/data-summary.js +6 -6
  192. package/dist-server/service/data-summary/data-summary.js.map +1 -1
  193. package/dist-server/service/data-summary/index.d.ts +3 -3
  194. package/dist-server/service/data-summary/index.js +5 -5
  195. package/dist-server/service/data-summary/index.js.map +1 -1
  196. package/dist-server/service/index.d.ts +12 -12
  197. package/dist-server/service/index.js +37 -37
  198. package/dist-server/service/index.js.map +1 -1
  199. package/dist-server/tsconfig.tsbuildinfo +1 -1
  200. package/dist-server/utils/index.d.ts +1 -1
  201. package/dist-server/utils/index.js +1 -1
  202. package/dist-server/utils/index.js.map +1 -1
  203. package/package.json +26 -26
  204. package/translations/en.json +2 -0
  205. package/translations/ja.json +2 -0
  206. package/translations/ko.json +2 -0
  207. package/translations/ms.json +2 -0
  208. package/translations/zh.json +2 -0
  209. package/client/activities/activity-data-collect-edit.ts +0 -158
  210. package/client/activities/activity-data-collect-view.ts +0 -91
  211. package/client/activities/activity-data-review-edit.ts +0 -299
  212. package/client/activities/activity-data-review-view.ts +0 -249
  213. package/client/activities/activity-ooc-resolve-edit.ts +0 -202
  214. package/client/activities/activity-ooc-resolve-view.ts +0 -150
  215. package/client/activities/activity-ooc-review-edit.ts +0 -197
  216. package/client/activities/activity-ooc-review-view.ts +0 -136
  217. package/client/bootstrap.ts +0 -35
  218. package/client/components/checklist-entry-form.ts +0 -109
  219. package/client/components/data-entry-form.ts +0 -109
  220. package/client/index.ts +0 -1
  221. package/client/pages/data-archive/data-archive-list-page.ts +0 -277
  222. package/client/pages/data-archive/data-archive-request-popup.ts +0 -177
  223. package/client/pages/data-entry/data-entry-list-page.ts +0 -477
  224. package/client/pages/data-key-set/data-key-item-list.ts +0 -183
  225. package/client/pages/data-key-set/data-key-set-importer.ts +0 -89
  226. package/client/pages/data-key-set/data-key-set-list-page.ts +0 -413
  227. package/client/pages/data-ooc/data-ooc-list-page.ts +0 -549
  228. package/client/pages/data-ooc/data-ooc-page.ts +0 -167
  229. package/client/pages/data-ooc/data-ooc-view.ts +0 -239
  230. package/client/pages/data-ooc/data-oocs-page.ts +0 -200
  231. package/client/pages/data-report/data-report-embed-page.ts +0 -108
  232. package/client/pages/data-report/data-report-list-page.ts +0 -454
  233. package/client/pages/data-report/data-report-samples-page.ts +0 -174
  234. package/client/pages/data-report/jasper-report-oocs-page.ts +0 -110
  235. package/client/pages/data-report/jasper-report-samples-crosstab-page.ts +0 -110
  236. package/client/pages/data-report/jasper-report-samples-page.ts +0 -110
  237. package/client/pages/data-sample/data-sample-list-page.ts +0 -442
  238. package/client/pages/data-sample/data-sample-page.ts +0 -55
  239. package/client/pages/data-sample/data-sample-search-page.ts +0 -424
  240. package/client/pages/data-sample/data-sample-view.ts +0 -319
  241. package/client/pages/data-sample/data-samples-page.ts +0 -249
  242. package/client/pages/data-sensor/data-sensor-list-page.ts +0 -480
  243. package/client/pages/data-set/data-item-list.ts +0 -313
  244. package/client/pages/data-set/data-set-importer.ts +0 -89
  245. package/client/pages/data-set/data-set-list-page.ts +0 -1135
  246. package/client/pages/data-summary/data-summary-list-page.ts +0 -363
  247. package/client/pages/data-summary/data-summary-period-page.ts +0 -439
  248. package/client/pages/data-summary/data-summary-search-page.ts +0 -426
  249. package/client/pages/data-summary/data-summary-view.ts +0 -133
  250. package/client/route.ts +0 -91
  251. package/client/tsconfig.json +0 -13
  252. package/server/activities/activity-data-collect.ts +0 -100
  253. package/server/activities/activity-data-review.ts +0 -109
  254. package/server/activities/activity-ooc-resolve.ts +0 -123
  255. package/server/activities/activity-ooc-review.ts +0 -95
  256. package/server/activities/index.ts +0 -11
  257. package/server/controllers/create-data-ooc.ts +0 -80
  258. package/server/controllers/create-data-sample.ts +0 -323
  259. package/server/controllers/data-use-case.ts +0 -98
  260. package/server/controllers/finalize-data-collection.ts +0 -420
  261. package/server/controllers/index.ts +0 -6
  262. package/server/controllers/issue-data-collection-task.ts +0 -70
  263. package/server/controllers/issue-ooc-resolve.ts +0 -58
  264. package/server/controllers/issue-ooc-review.ts +0 -52
  265. package/server/controllers/jasper-report.ts +0 -186
  266. package/server/controllers/query-data-summary-by-period.ts +0 -178
  267. package/server/controllers/shiny-report.ts +0 -54
  268. package/server/engine/index.ts +0 -1
  269. package/server/engine/task/create-data-sample.ts +0 -100
  270. package/server/engine/task/index.ts +0 -2
  271. package/server/engine/task/issue-collect-data.ts +0 -45
  272. package/server/index.ts +0 -8
  273. package/server/routes.ts +0 -188
  274. package/server/service/data-archive/data-archive-mutation.ts +0 -273
  275. package/server/service/data-archive/data-archive-query.ts +0 -58
  276. package/server/service/data-archive/data-archive-type.ts +0 -48
  277. package/server/service/data-archive/data-archive.ts +0 -69
  278. package/server/service/data-archive/index.ts +0 -6
  279. package/server/service/data-key-set/data-key-item-type.ts +0 -31
  280. package/server/service/data-key-set/data-key-set-mutation.ts +0 -201
  281. package/server/service/data-key-set/data-key-set-query.ts +0 -68
  282. package/server/service/data-key-set/data-key-set-type.ts +0 -70
  283. package/server/service/data-key-set/data-key-set.ts +0 -86
  284. package/server/service/data-key-set/index.ts +0 -6
  285. package/server/service/data-ooc/data-ooc-mutation.ts +0 -154
  286. package/server/service/data-ooc/data-ooc-query.ts +0 -106
  287. package/server/service/data-ooc/data-ooc-subscription.ts +0 -48
  288. package/server/service/data-ooc/data-ooc-type.ts +0 -71
  289. package/server/service/data-ooc/data-ooc.ts +0 -259
  290. package/server/service/data-ooc/index.ts +0 -7
  291. package/server/service/data-sample/data-sample-mutation.ts +0 -18
  292. package/server/service/data-sample/data-sample-query.ts +0 -215
  293. package/server/service/data-sample/data-sample-type.ts +0 -47
  294. package/server/service/data-sample/data-sample.ts +0 -193
  295. package/server/service/data-sample/index.ts +0 -6
  296. package/server/service/data-sensor/data-sensor-mutation.ts +0 -116
  297. package/server/service/data-sensor/data-sensor-query.ts +0 -76
  298. package/server/service/data-sensor/data-sensor-type.ts +0 -116
  299. package/server/service/data-sensor/data-sensor.ts +0 -134
  300. package/server/service/data-sensor/index.ts +0 -6
  301. package/server/service/data-set/data-item-type.ts +0 -169
  302. package/server/service/data-set/data-set-mutation.ts +0 -552
  303. package/server/service/data-set/data-set-query.ts +0 -461
  304. package/server/service/data-set/data-set-type.ts +0 -204
  305. package/server/service/data-set/data-set.ts +0 -331
  306. package/server/service/data-set/index.ts +0 -6
  307. package/server/service/data-set-history/data-set-history-query.ts +0 -126
  308. package/server/service/data-set-history/data-set-history-type.ts +0 -12
  309. package/server/service/data-set-history/data-set-history.ts +0 -217
  310. package/server/service/data-set-history/event-subscriber.ts +0 -17
  311. package/server/service/data-set-history/index.ts +0 -7
  312. package/server/service/data-spec/data-spec-manager.ts +0 -21
  313. package/server/service/data-spec/data-spec-query.ts +0 -21
  314. package/server/service/data-spec/data-spec.ts +0 -45
  315. package/server/service/data-spec/index.ts +0 -5
  316. package/server/service/data-summary/data-summary-mutation.ts +0 -45
  317. package/server/service/data-summary/data-summary-query.ts +0 -179
  318. package/server/service/data-summary/data-summary-type.ts +0 -86
  319. package/server/service/data-summary/data-summary.ts +0 -170
  320. package/server/service/data-summary/index.ts +0 -7
  321. package/server/service/index.ts +0 -57
  322. package/server/tsconfig.json +0 -10
  323. package/server/utils/config-resolver.ts +0 -29
  324. package/server/utils/index.ts +0 -1
@@ -1,420 +0,0 @@
1
- const statistics = require('simple-statistics')
2
- const deepClone = require('lodash/cloneDeep')
3
-
4
- import moment from 'moment-timezone'
5
- import { In } from 'typeorm'
6
-
7
- import { Sorting, getQueryBuilderFromListParams } from '@things-factory/shell'
8
- import { logger } from '@things-factory/env'
9
- import {
10
- getDateRangeForWorkDate,
11
- getDateRangeForWorkShift,
12
- getLatestWorkDateAndShift,
13
- getSummaryScheduleForWorkDate,
14
- getSummaryScheduleForWorkShift
15
- } from '@things-factory/work-shift'
16
-
17
- import { DataSample } from '../service/data-sample/data-sample'
18
- import { DataSet, DataSetSummaryPeriodType } from '../service/data-set/data-set'
19
-
20
- import { DataSummary } from '../service/data-summary/data-summary'
21
- import { DataKeyItem } from '../service/data-key-set/data-key-item-type'
22
-
23
- import { DataItem } from '../service/data-set/data-item-type.js'
24
-
25
- const STAT_FUNCTION_MAP = {
26
- sum: 'sum',
27
- mean: 'mean',
28
- stddev: 'standardDeviation',
29
- variance: 'variance',
30
- min: 'min',
31
- max: 'max',
32
- range: 'range',
33
- median: 'median',
34
- mode: 'mode'
35
- }
36
-
37
- const compareKeys = (dataKeyItems: DataKeyItem[], summary: Partial<DataSummary>, sample: DataSample): boolean => {
38
- return dataKeyItems.every((item, index) => {
39
- const prop = `key0${index + 1}`
40
- return sample[prop] === summary[prop]
41
- })
42
- }
43
-
44
- const buildKeysFromSample = (dataKeyItems: DataKeyItem[], sample: DataSample): Partial<DataSummary> => {
45
- return dataKeyItems.reduce((sum, item, index) => {
46
- const prop = `key0${index + 1}`
47
- sum[prop] = sample[prop]
48
-
49
- return sum
50
- }, {} as Partial<DataSummary>)
51
- }
52
-
53
- const buildKeySortingList = (dataKeyItems: DataKeyItem[]): Sorting[] => {
54
- return dataKeyItems.reduce((sum, item, index) => {
55
- const name = `key0${index + 1}`
56
- sum.push({ name, desc: true })
57
- return sum
58
- }, [])
59
- }
60
-
61
- const calculateSummary = (dataItems: DataItem[], base: { [tag: string]: any[] }) => {
62
- return dataItems.reduce((summary, item) => {
63
- const tag = item.tag
64
-
65
- const data = base[tag]
66
- .flat(Infinity)
67
- .map(Number)
68
- .filter(item => !isNaN(item))
69
-
70
- if (data.length > 0) {
71
- try {
72
- switch (item.stat) {
73
- case 'range':
74
- summary[tag] = statistics.max(data) - statistics.min(data)
75
- break
76
-
77
- default:
78
- const functionName = STAT_FUNCTION_MAP[item.stat]
79
- summary[tag] = (functionName && statistics[functionName](data)) || ''
80
- }
81
- } catch (err) {
82
- summary[tag] = null
83
- console.error(err)
84
- }
85
- } else {
86
- summary[tag] = null
87
- }
88
-
89
- return summary
90
- }, {})
91
- }
92
-
93
- const fillSummaryResult = (
94
- dataSummary: Partial<DataSummary>,
95
- dataItems: DataItem[],
96
- base: { [tag: string]: any[] }
97
- ): void => {
98
- const summary = calculateSummary(dataItems, base)
99
-
100
- dataSummary.summary = summary
101
- dataItems.slice(0, 4).forEach((dataItem, idx) => {
102
- const value = Number(summary[dataItem.tag])
103
- dataSummary[`data0${idx + 1}`] = isNaN(value) ? null : value
104
- })
105
- }
106
-
107
- async function getLatestTimesForPeriod(
108
- periodType: DataSetSummaryPeriodType,
109
- context: ResolverContext
110
- ): Promise<{ date?: string; period?: string; range: Date[] }> {
111
- const { domain } = context.state
112
- const now = moment()
113
-
114
- if (periodType == DataSetSummaryPeriodType.Hour) {
115
- const begin = now.clone().subtract(1, 'hour').startOf('hour')
116
- const end = now.clone().startOf('hour')
117
- const date = begin.clone().tz(domain.timezone)
118
-
119
- return {
120
- date: date.format('YYYY-MM-DD'),
121
- period: date.format('HH'),
122
- range: [begin.toDate(), end.toDate()]
123
- }
124
- } else if (periodType == DataSetSummaryPeriodType.WorkShift) {
125
- const { workDate, workShift, shiftRange } = await getLatestWorkDateAndShift(domain, new Date())
126
-
127
- return { date: workDate, period: workShift, range: shiftRange }
128
- } else if (periodType == DataSetSummaryPeriodType.WorkDate) {
129
- const { workDate, dateRange } = await getLatestWorkDateAndShift(domain, new Date())
130
-
131
- return { date: workDate, range: dateRange }
132
- } else if (periodType == DataSetSummaryPeriodType.Day) {
133
- const begin = now.clone().subtract(1, 'day').startOf('day')
134
- const end = now.clone().startOf('day')
135
- const date = begin.clone().tz(domain.timezone)
136
-
137
- return {
138
- date: date.format('YYYY-MM-DD'),
139
- range: [begin.toDate(), end.toDate()]
140
- }
141
- }
142
- }
143
-
144
- async function getTimesForPeriod(
145
- periodType: DataSetSummaryPeriodType,
146
- date: string,
147
- period: string,
148
- context: ResolverContext
149
- ): Promise<{ date?: string; period?: string; range: Date[] }> {
150
- const { domain } = context.state
151
-
152
- if (periodType == DataSetSummaryPeriodType.Hour) {
153
- const theDate = moment.tz(`${date} ${period}:00:00`, 'YYYY-MM-DD HH:mm:ss', domain.timezone)
154
-
155
- const begin = theDate.clone().startOf('hour').toDate()
156
- const end = theDate.clone().add(+1, 'hour').startOf('hour').toDate()
157
-
158
- return {
159
- date,
160
- period,
161
- range: [begin, end]
162
- }
163
- } else if (periodType == DataSetSummaryPeriodType.WorkShift) {
164
- const range = await getDateRangeForWorkShift(domain, date, period)
165
-
166
- return { date, period, range }
167
- } else if (periodType == DataSetSummaryPeriodType.WorkDate) {
168
- const range = await getDateRangeForWorkDate(domain, date)
169
-
170
- return { date, range }
171
- } else if (periodType == DataSetSummaryPeriodType.Day) {
172
- const theDate = moment.tz(`${date} 00:00:00`, 'YYYY-MM-DD HH:mm:ss', domain.timezone)
173
-
174
- const begin = theDate.clone().startOf('day').toDate()
175
- const end = theDate.clone().add(1, 'day').startOf('day').toDate()
176
-
177
- return {
178
- date: moment(begin).tz(domain.timezone).format('YYYY-MM-DD'),
179
- range: [begin, end]
180
- }
181
- }
182
- }
183
-
184
- export async function getDataFinalizeCrontabSchedule(dataSet: DataSet, context: ResolverContext): Promise<string> {
185
- const { domain, user, tx } = context.state
186
-
187
- try {
188
- const { summaryPeriod } = dataSet
189
-
190
- if (summaryPeriod == DataSetSummaryPeriodType.Hour) {
191
- return '0 5 * * * *'
192
- } else if (summaryPeriod == DataSetSummaryPeriodType.WorkShift) {
193
- return await getSummaryScheduleForWorkShift(domain)
194
- } else if (summaryPeriod == DataSetSummaryPeriodType.WorkDate) {
195
- return await getSummaryScheduleForWorkDate(domain)
196
- } else if (summaryPeriod == DataSetSummaryPeriodType.Day) {
197
- return '0 10 0 * * *'
198
- }
199
- } catch (err) {
200
- console.error(err)
201
- }
202
- }
203
-
204
- export async function finalizeLatestDataCollection(dataSetId: string, context: ResolverContext): Promise<boolean> {
205
- const { domain, user, tx } = context.state
206
-
207
- try {
208
- const dataSet = await tx.getRepository(DataSet).findOne({
209
- where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id: dataSetId },
210
- relations: ['dataKeySet']
211
- })
212
-
213
- const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []
214
- const dataItems = dataSet.dataItems.filter(item => item.stat)
215
- const initialSummary = dataItems.reduce((sum, item) => {
216
- sum[item.tag] = []
217
- return sum
218
- }, {})
219
-
220
- const { date, period, range } = await getLatestTimesForPeriod(dataSet.summaryPeriod, context)
221
- const limit = 100
222
- var page = 1
223
-
224
- var summaries: Partial<DataSummary>[] = []
225
- var summary: Partial<DataSummary>
226
-
227
- do {
228
- const samples = await getQueryBuilderFromListParams({
229
- repository: tx.getRepository(DataSample),
230
- domain,
231
- params: {
232
- filters: [{ name: 'dataSetId', operator: 'eq', value: dataSetId }],
233
- pagination: { page, limit },
234
- sortings: [...buildKeySortingList(dataKeyItems), { name: 'collectedAt', desc: true }]
235
- },
236
- alias: 'datasample'
237
- })
238
- // The 'Between' operator includes the 'to' time in the filtering, making it unsuitable for the desired use case.
239
- // .andWhere({ collectedAt: Between.apply(null, range) })
240
- .andWhere('datasample.collectedAt >= :from', { from: range[0] })
241
- .andWhere('datasample.collectedAt < :to', { to: range[1] })
242
- .getMany()
243
-
244
- for (const sample of samples) {
245
- if (!summary || !compareKeys(dataKeyItems, summary, sample)) {
246
- if (summary) {
247
- fillSummaryResult(summary, dataItems, summary.summary)
248
- summaries.push(summary)
249
- }
250
-
251
- summary = {
252
- domain,
253
- name: dataSet.name,
254
- description: dataSet.description,
255
- date,
256
- period,
257
- dataSet,
258
- ...buildKeysFromSample(dataKeyItems, sample),
259
- count: 0,
260
- countOoc: 0,
261
- countOos: 0,
262
- summary: deepClone(initialSummary),
263
- updater: user,
264
- creator: user
265
- }
266
- }
267
-
268
- summary.count++
269
- sample.ooc && summary.countOoc++
270
- sample.oos && summary.countOos++
271
-
272
- dataItems.forEach(item => {
273
- summary.summary[item.tag].push(sample.data[item.tag])
274
- })
275
- }
276
-
277
- if (samples.length < limit) {
278
- if (summary) {
279
- fillSummaryResult(summary, dataItems, summary.summary)
280
- summaries.push(summary)
281
- }
282
- break
283
- }
284
-
285
- page++
286
- } while (true)
287
-
288
- tx.getRepository(DataSummary).upsert(summaries, [
289
- 'domain',
290
- 'dataSet',
291
- 'key01',
292
- 'key02',
293
- 'key03',
294
- 'key04',
295
- 'key05',
296
- 'date',
297
- 'period'
298
- ])
299
-
300
- return true
301
- } catch (e) {
302
- logger.error(e)
303
- }
304
-
305
- return false
306
- }
307
-
308
- export async function finalizeDataCollection(
309
- dataSetId: string,
310
- date: string,
311
- period: string,
312
- context: ResolverContext
313
- ): Promise<boolean> {
314
- const { domain, user, tx } = context.state
315
-
316
- try {
317
- const dataSet =
318
- dataSetId &&
319
- (await tx.getRepository(DataSet).findOne({
320
- where: { domain: In([domain.id, domain.parentId].filter(Boolean)), id: dataSetId },
321
- relations: ['dataKeySet']
322
- }))
323
-
324
- const dataKeyItems = dataSet.dataKeySet?.dataKeyItems || []
325
- const dataItems = dataSet.dataItems.filter(item => item.stat)
326
- const initialSummary = dataItems.reduce((sum, item) => {
327
- sum[item.tag] = []
328
- return sum
329
- }, {})
330
-
331
- const times = await getTimesForPeriod(dataSet.summaryPeriod, date, period, context)
332
- const range = times.range
333
- period = times.period
334
-
335
- const limit = 100
336
- var page = 1
337
-
338
- var summaries: Partial<DataSummary>[] = []
339
- var summary: Partial<DataSummary>
340
-
341
- do {
342
- const samples = await getQueryBuilderFromListParams({
343
- repository: tx.getRepository(DataSample),
344
- params: {
345
- filters: [{ name: 'dataSetId', operator: 'eq', value: dataSetId }],
346
- pagination: { page, limit },
347
- sortings: [...buildKeySortingList(dataKeyItems), { name: 'collectedAt', desc: true }]
348
- },
349
- domain,
350
- alias: 'datasample'
351
- })
352
- // The 'Between' operator includes the 'to' time in the filtering, making it unsuitable for the desired use case.
353
- // .andWhere({ collectedAt: Between.apply(null, range) })
354
- .andWhere('datasample.collectedAt >= :from', { from: range[0] })
355
- .andWhere('datasample.collectedAt < :to', { to: range[1] })
356
- .getMany()
357
-
358
- for (const sample of samples) {
359
- if (!summary || !compareKeys(dataKeyItems, summary, sample)) {
360
- if (summary) {
361
- fillSummaryResult(summary, dataItems, summary.summary)
362
- summaries.push(summary)
363
- }
364
-
365
- summary = {
366
- domain,
367
- name: dataSet.name,
368
- description: dataSet.description,
369
- date,
370
- period,
371
- dataSet,
372
- ...buildKeysFromSample(dataKeyItems, sample),
373
- count: 0,
374
- countOoc: 0,
375
- countOos: 0,
376
- summary: deepClone(initialSummary),
377
- updater: user,
378
- creator: user
379
- }
380
- }
381
-
382
- summary.count++
383
- sample.ooc && summary.countOoc++
384
- sample.oos && summary.countOos++
385
-
386
- dataItems.forEach(item => {
387
- summary.summary[item.tag].push(sample.data[item.tag])
388
- })
389
- }
390
-
391
- if (samples.length < limit) {
392
- if (summary) {
393
- fillSummaryResult(summary, dataItems, summary.summary)
394
- summaries.push(summary)
395
- }
396
- break
397
- }
398
-
399
- page++
400
- } while (true)
401
-
402
- tx.getRepository(DataSummary).upsert(summaries, [
403
- 'domain',
404
- 'dataSet',
405
- 'key01',
406
- 'key02',
407
- 'key03',
408
- 'key04',
409
- 'key05',
410
- 'date',
411
- 'period'
412
- ])
413
-
414
- return true
415
- } catch (e) {
416
- logger.error(e)
417
- }
418
-
419
- return false
420
- }
@@ -1,6 +0,0 @@
1
- export * from './create-data-sample'
2
- export * from './create-data-ooc'
3
- export * from './issue-ooc-review'
4
- export * from './issue-ooc-resolve'
5
- export * from './data-use-case'
6
- export * from './query-data-summary-by-period'
@@ -1,70 +0,0 @@
1
- import { In } from 'typeorm'
2
-
3
- import { Domain, getDataSource } from '@things-factory/shell'
4
- import { Activity, ActivityInstance, issue } from '@things-factory/worklist'
5
-
6
- import { DataSet } from '../service/data-set/data-set'
7
-
8
- export async function issueDataCollectionTask(
9
- domainId: string,
10
- dataSetId: string,
11
- context: ResolverContext
12
- ): Promise<ActivityInstance | void> {
13
- await getDataSource().transaction(async tx => {
14
- const domain = await tx.getRepository(Domain).findOneBy({ id: domainId })
15
-
16
- if (!domain) {
17
- throw new Error(`domain(${domainId}) not found`)
18
- }
19
-
20
- const dataSet = await tx.getRepository(DataSet).findOne({
21
- where: {
22
- domain: {
23
- id: In([domain.id, domain.parentId].filter(Boolean))
24
- },
25
- id: dataSetId
26
- },
27
- relations: ['entryRole']
28
- })
29
-
30
- const activity = (await tx.getRepository(Activity).findOneBy({
31
- domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },
32
- name: 'Collect Data'
33
- })) as Activity
34
-
35
- if (activity) {
36
- const { entryRole, timeLimit } = dataSet
37
-
38
- /* 해당 dataset에 대한 데이타 수집 태스크를 dataset entryRole에게 할당한다. */
39
- if (entryRole) {
40
- const activityInstance = {
41
- name: `[Data 수집] ${dataSet.name}`,
42
- description: dataSet.description,
43
- activityId: activity.id,
44
- dueAt: new Date(Date.now() + (timeLimit || activity.standardTime || 24 * 60 * 60) * 1000),
45
- input: {
46
- dataSetId: dataSet.id,
47
- dataSetName: dataSet.name
48
- },
49
- assigneeRole: entryRole,
50
- threadsMin: 1,
51
- threadsMax: 1
52
- }
53
-
54
- context.state = {
55
- ...context.state,
56
- domain,
57
- tx
58
- }
59
-
60
- return await issue(activityInstance, context)
61
- } else {
62
- throw new Error(
63
- `Data Entry Role not set. So Data Collect Activity for ${dataSet.name}($dataSet.id) could not be issued.`
64
- )
65
- }
66
- } else {
67
- throw new Error(`Data Collect Activity is not installed.`)
68
- }
69
- })
70
- }
@@ -1,58 +0,0 @@
1
- import { In } from 'typeorm'
2
- import { Activity } from '@things-factory/worklist'
3
- import { issue } from '@things-factory/worklist/dist-server/controllers/activity-instance/issue'
4
- import { Role } from '@things-factory/auth-base'
5
-
6
- import { DataOoc } from '../service/data-ooc/data-ooc.js'
7
- import { DataSet } from '../service/data-set/data-set.js'
8
-
9
- export async function issueOocResolve(
10
- dataOoc: DataOoc,
11
- dataSet: DataSet,
12
- correctiveInstruction: string,
13
- context: ResolverContext
14
- ): Promise<void> {
15
- const { domain, user, tx } = context.state
16
- const { resolverRoleId, outlierApprovalLine } = dataSet
17
-
18
- const activity = (await tx.getRepository(Activity).findOneBy({
19
- domain: domain.parentId ? In([domain.id, domain.parentId]) : { id: domain.id },
20
- name: 'OOC Resolve'
21
- })) as Activity
22
-
23
- if (activity) {
24
- const assigneeRole =
25
- resolverRoleId &&
26
- (await tx.getRepository(Role).findOneBy({
27
- domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },
28
- id: resolverRoleId
29
- }))
30
-
31
- /* 해당 dataset의 작업 담당자(resolverRole)에게 OOC 해결을 위한 태스크를 지시한다. */
32
- if (assigneeRole) {
33
- const activityInstance = {
34
- name: `[OOC 조치] ${dataSet.name}`,
35
- description: dataSet.description,
36
- activityId: activity.id,
37
- dueAt: new Date(Date.now() + (activity.standardTime || 24 * 60 * 60) * 1000),
38
- input: {
39
- dataOocId: dataOoc.id,
40
- instruction: correctiveInstruction
41
- },
42
- assigneeRole,
43
- threadsMin: 1,
44
- threadsMax: 1,
45
- approvalLine: outlierApprovalLine
46
- }
47
-
48
- dataOoc.resolveActivityInstance = await issue(activityInstance, context)
49
- await tx.getRepository(DataOoc).save(dataOoc)
50
- } else {
51
- console.error(
52
- `Assignees are not set. So, Data OOC Resolve task for ${dataOoc.name}(${dataOoc.id}) could not be issued.`
53
- )
54
- }
55
- } else {
56
- console.error('OOC Resolve Activity not installed.')
57
- }
58
- }
@@ -1,52 +0,0 @@
1
- import { In } from 'typeorm'
2
-
3
- import { Role } from '@things-factory/auth-base'
4
- import { Activity } from '@things-factory/worklist'
5
- import { issue } from '@things-factory/worklist/dist-server/controllers/activity-instance/issue'
6
-
7
- import { DataSet } from '../service/data-set/data-set'
8
- import { DataOoc } from '../service/data-ooc/data-ooc'
9
-
10
- export async function issueOocReview(dataOoc: DataOoc, dataSet: DataSet, context: ResolverContext): Promise<void> {
11
- const { domain, tx } = context.state
12
- const { collectedAt } = dataOoc
13
-
14
- const activity = (await tx.getRepository(Activity).findOneBy({
15
- domain: domain.parentId ? { id: In([domain.id, domain.parentId]) } : { id: domain.id },
16
- name: 'OOC Review'
17
- })) as Activity
18
-
19
- if (activity) {
20
- const assigneeRole =
21
- dataSet.supervisoryRoleId &&
22
- (await tx.getRepository(Role).findOneBy({
23
- domain: { id: In([domain.id, domain.parentId].filter(Boolean)) },
24
- id: dataSet.supervisoryRoleId
25
- }))
26
-
27
- if (assigneeRole) {
28
- const activityInstance = {
29
- name: `[OOC 검토] ${dataSet.name}`,
30
- description: dataSet.description,
31
- activityId: activity.id,
32
- dueAt: new Date(collectedAt.getTime() + (activity.standardTime || 24 * 60 * 60) * 1000),
33
- input: {
34
- dataOocId: dataOoc.id
35
- },
36
- assigneeRole,
37
- threadsMin: 1,
38
- threadsMax: 1,
39
- approvalLine: []
40
- }
41
-
42
- dataOoc.reviewActivityInstance = await issue(activityInstance as any, context)
43
- await tx.getRepository(DataOoc).save(dataOoc)
44
- } else {
45
- console.error(
46
- `Assignees are not set. So Data OOC Review task for ${dataOoc.name}(${dataOoc.id}) could not be issued.`
47
- )
48
- }
49
- } else {
50
- console.warn('OOC Review Activity not installed.')
51
- }
52
- }