@things-factory/ops-master 10.1.246 → 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 (429) hide show
  1. package/package.json +5 -5
  2. package/dist-client/bootstrap.d.ts +0 -19
  3. package/dist-client/bootstrap.js +0 -66
  4. package/dist-client/bootstrap.js.map +0 -1
  5. package/dist-client/index.d.ts +0 -17
  6. package/dist-client/index.js +0 -21
  7. package/dist-client/index.js.map +0 -1
  8. package/dist-client/master-change-approval.d.ts +0 -14
  9. package/dist-client/master-change-approval.js +0 -36
  10. package/dist-client/master-change-approval.js.map +0 -1
  11. package/dist-client/master-change-policy-axes.d.ts +0 -37
  12. package/dist-client/master-change-policy-axes.js +0 -29
  13. package/dist-client/master-change-policy-axes.js.map +0 -1
  14. package/dist-client/master-change-policy-panel.d.ts +0 -59
  15. package/dist-client/master-change-policy-panel.js +0 -454
  16. package/dist-client/master-change-policy-panel.js.map +0 -1
  17. package/dist-client/master-change-providers.d.ts +0 -4
  18. package/dist-client/master-change-providers.js +0 -91
  19. package/dist-client/master-change-providers.js.map +0 -1
  20. package/dist-client/pages/master/applied-when-dialog.d.ts +0 -48
  21. package/dist-client/pages/master/applied-when-dialog.js +0 -137
  22. package/dist-client/pages/master/applied-when-dialog.js.map +0 -1
  23. package/dist-client/pages/master/assignment-fields.d.ts +0 -27
  24. package/dist-client/pages/master/assignment-fields.js +0 -62
  25. package/dist-client/pages/master/assignment-fields.js.map +0 -1
  26. package/dist-client/pages/master/equipment-class.d.ts +0 -12
  27. package/dist-client/pages/master/equipment-class.js +0 -42
  28. package/dist-client/pages/master/equipment-class.js.map +0 -1
  29. package/dist-client/pages/master/equipment.d.ts +0 -12
  30. package/dist-client/pages/master/equipment.js +0 -58
  31. package/dist-client/pages/master/equipment.js.map +0 -1
  32. package/dist-client/pages/master/grist-iso-duration.d.ts +0 -20
  33. package/dist-client/pages/master/grist-iso-duration.js +0 -70
  34. package/dist-client/pages/master/grist-iso-duration.js.map +0 -1
  35. package/dist-client/pages/master/grist-reference.d.ts +0 -91
  36. package/dist-client/pages/master/grist-reference.js +0 -419
  37. package/dist-client/pages/master/grist-reference.js.map +0 -1
  38. package/dist-client/pages/master/import-rows.d.ts +0 -35
  39. package/dist-client/pages/master/import-rows.js +0 -66
  40. package/dist-client/pages/master/import-rows.js.map +0 -1
  41. package/dist-client/pages/master/iso-duration.d.ts +0 -34
  42. package/dist-client/pages/master/iso-duration.js +0 -76
  43. package/dist-client/pages/master/iso-duration.js.map +0 -1
  44. package/dist-client/pages/master/master-options.d.ts +0 -40
  45. package/dist-client/pages/master/master-options.js +0 -54
  46. package/dist-client/pages/master/master-options.js.map +0 -1
  47. package/dist-client/pages/master/master-page-base.d.ts +0 -369
  48. package/dist-client/pages/master/master-page-base.js +0 -657
  49. package/dist-client/pages/master/master-page-base.js.map +0 -1
  50. package/dist-client/pages/master/material-class.d.ts +0 -12
  51. package/dist-client/pages/master/material-class.js +0 -42
  52. package/dist-client/pages/master/material-class.js.map +0 -1
  53. package/dist-client/pages/master/material-definition.d.ts +0 -5
  54. package/dist-client/pages/master/material-definition.js +0 -14
  55. package/dist-client/pages/master/material-definition.js.map +0 -1
  56. package/dist-client/pages/master/material-revision-fields.d.ts +0 -2
  57. package/dist-client/pages/master/material-revision-fields.js +0 -43
  58. package/dist-client/pages/master/material-revision-fields.js.map +0 -1
  59. package/dist-client/pages/master/operation-definition.d.ts +0 -12
  60. package/dist-client/pages/master/operation-definition.js +0 -49
  61. package/dist-client/pages/master/operation-definition.js.map +0 -1
  62. package/dist-client/pages/master/operational-location.d.ts +0 -84
  63. package/dist-client/pages/master/operational-location.js +0 -432
  64. package/dist-client/pages/master/operational-location.js.map +0 -1
  65. package/dist-client/pages/master/person.d.ts +0 -12
  66. package/dist-client/pages/master/person.js +0 -41
  67. package/dist-client/pages/master/person.js.map +0 -1
  68. package/dist-client/pages/master/personnel-class.d.ts +0 -12
  69. package/dist-client/pages/master/personnel-class.js +0 -43
  70. package/dist-client/pages/master/personnel-class.js.map +0 -1
  71. package/dist-client/pages/master/physical-asset-class.d.ts +0 -12
  72. package/dist-client/pages/master/physical-asset-class.js +0 -40
  73. package/dist-client/pages/master/physical-asset-class.js.map +0 -1
  74. package/dist-client/pages/master/physical-asset.d.ts +0 -12
  75. package/dist-client/pages/master/physical-asset.js +0 -41
  76. package/dist-client/pages/master/physical-asset.js.map +0 -1
  77. package/dist-client/pages/master/recipe-definition.d.ts +0 -5
  78. package/dist-client/pages/master/recipe-definition.js +0 -14
  79. package/dist-client/pages/master/recipe-definition.js.map +0 -1
  80. package/dist-client/pages/master/reference-targets.d.ts +0 -42
  81. package/dist-client/pages/master/reference-targets.js +0 -82
  82. package/dist-client/pages/master/reference-targets.js.map +0 -1
  83. package/dist-client/pages/master/revision-comparison.d.ts +0 -49
  84. package/dist-client/pages/master/revision-comparison.js +0 -560
  85. package/dist-client/pages/master/revision-comparison.js.map +0 -1
  86. package/dist-client/pages/master/revision-view.d.ts +0 -34
  87. package/dist-client/pages/master/revision-view.js +0 -145
  88. package/dist-client/pages/master/revision-view.js.map +0 -1
  89. package/dist-client/pages/master/revision-workspace.d.ts +0 -50
  90. package/dist-client/pages/master/revision-workspace.js +0 -763
  91. package/dist-client/pages/master/revision-workspace.js.map +0 -1
  92. package/dist-client/pages/master/route-definition.d.ts +0 -19
  93. package/dist-client/pages/master/route-definition.js +0 -40
  94. package/dist-client/pages/master/route-definition.js.map +0 -1
  95. package/dist-client/pages/master/stop-reason.d.ts +0 -12
  96. package/dist-client/pages/master/stop-reason.js +0 -48
  97. package/dist-client/pages/master/stop-reason.js.map +0 -1
  98. package/dist-client/pages/master/test-specification.d.ts +0 -5
  99. package/dist-client/pages/master/test-specification.js +0 -14
  100. package/dist-client/pages/master/test-specification.js.map +0 -1
  101. package/dist-client/pages/master-axes.d.ts +0 -24
  102. package/dist-client/pages/master-axes.js +0 -39
  103. package/dist-client/pages/master-axes.js.map +0 -1
  104. package/dist-client/route.d.ts +0 -1
  105. package/dist-client/route.js +0 -81
  106. package/dist-client/route.js.map +0 -1
  107. package/dist-client/tsconfig.tsbuildinfo +0 -1
  108. package/dist-server/index.d.ts +0 -1
  109. package/dist-server/index.js +0 -19
  110. package/dist-server/index.js.map +0 -1
  111. package/dist-server/service/ai-entry/master-entry-rules.d.ts +0 -175
  112. package/dist-server/service/ai-entry/master-entry-rules.js +0 -302
  113. package/dist-server/service/ai-entry/master-entry-rules.js.map +0 -1
  114. package/dist-server/service/ai-entry/master-entry-targets.d.ts +0 -23
  115. package/dist-server/service/ai-entry/master-entry-targets.js +0 -293
  116. package/dist-server/service/ai-entry/master-entry-targets.js.map +0 -1
  117. package/dist-server/service/approval-route.d.ts +0 -37
  118. package/dist-server/service/approval-route.js +0 -34
  119. package/dist-server/service/approval-route.js.map +0 -1
  120. package/dist-server/service/asset/asset-lifecycle.d.ts +0 -106
  121. package/dist-server/service/asset/asset-lifecycle.js +0 -126
  122. package/dist-server/service/asset/asset-lifecycle.js.map +0 -1
  123. package/dist-server/service/asset/asset-master-resolver.d.ts +0 -53
  124. package/dist-server/service/asset/asset-master-resolver.js +0 -185
  125. package/dist-server/service/asset/asset-master-resolver.js.map +0 -1
  126. package/dist-server/service/asset/asset-master.d.ts +0 -21
  127. package/dist-server/service/asset/asset-master.js +0 -25
  128. package/dist-server/service/asset/asset-master.js.map +0 -1
  129. package/dist-server/service/asset/asset-query.d.ts +0 -16
  130. package/dist-server/service/asset/asset-query.js +0 -72
  131. package/dist-server/service/asset/asset-query.js.map +0 -1
  132. package/dist-server/service/asset/index.d.ts +0 -6
  133. package/dist-server/service/asset/index.js +0 -10
  134. package/dist-server/service/asset/index.js.map +0 -1
  135. package/dist-server/service/asset/physical-asset-class.d.ts +0 -34
  136. package/dist-server/service/asset/physical-asset-class.js +0 -104
  137. package/dist-server/service/asset/physical-asset-class.js.map +0 -1
  138. package/dist-server/service/asset/physical-asset.d.ts +0 -66
  139. package/dist-server/service/asset/physical-asset.js +0 -123
  140. package/dist-server/service/asset/physical-asset.js.map +0 -1
  141. package/dist-server/service/assignment/applied-when.d.ts +0 -24
  142. package/dist-server/service/assignment/applied-when.js +0 -16
  143. package/dist-server/service/assignment/applied-when.js.map +0 -1
  144. package/dist-server/service/assignment/assignment-history.d.ts +0 -92
  145. package/dist-server/service/assignment/assignment-history.js +0 -289
  146. package/dist-server/service/assignment/assignment-history.js.map +0 -1
  147. package/dist-server/service/assignment/assignment-write.d.ts +0 -42
  148. package/dist-server/service/assignment/assignment-write.js +0 -101
  149. package/dist-server/service/assignment/assignment-write.js.map +0 -1
  150. package/dist-server/service/assignment/master-value-claim.d.ts +0 -135
  151. package/dist-server/service/assignment/master-value-claim.js +0 -174
  152. package/dist-server/service/assignment/master-value-claim.js.map +0 -1
  153. package/dist-server/service/equipment/equipment-class.d.ts +0 -34
  154. package/dist-server/service/equipment/equipment-class.js +0 -104
  155. package/dist-server/service/equipment/equipment-class.js.map +0 -1
  156. package/dist-server/service/equipment/equipment-master-resolver.d.ts +0 -77
  157. package/dist-server/service/equipment/equipment-master-resolver.js +0 -266
  158. package/dist-server/service/equipment/equipment-master-resolver.js.map +0 -1
  159. package/dist-server/service/equipment/equipment-master.d.ts +0 -30
  160. package/dist-server/service/equipment/equipment-master.js +0 -53
  161. package/dist-server/service/equipment/equipment-master.js.map +0 -1
  162. package/dist-server/service/equipment/equipment-query.d.ts +0 -16
  163. package/dist-server/service/equipment/equipment-query.js +0 -72
  164. package/dist-server/service/equipment/equipment-query.js.map +0 -1
  165. package/dist-server/service/equipment/equipment.d.ts +0 -71
  166. package/dist-server/service/equipment/equipment.js +0 -138
  167. package/dist-server/service/equipment/equipment.js.map +0 -1
  168. package/dist-server/service/equipment/index.d.ts +0 -8
  169. package/dist-server/service/equipment/index.js +0 -12
  170. package/dist-server/service/equipment/index.js.map +0 -1
  171. package/dist-server/service/equipment/state-period-rules.d.ts +0 -95
  172. package/dist-server/service/equipment/state-period-rules.js +0 -122
  173. package/dist-server/service/equipment/state-period-rules.js.map +0 -1
  174. package/dist-server/service/equipment/stop-reason-query.d.ts +0 -11
  175. package/dist-server/service/equipment/stop-reason-query.js +0 -39
  176. package/dist-server/service/equipment/stop-reason-query.js.map +0 -1
  177. package/dist-server/service/equipment/stop-reason.d.ts +0 -58
  178. package/dist-server/service/equipment/stop-reason.js +0 -114
  179. package/dist-server/service/equipment/stop-reason.js.map +0 -1
  180. package/dist-server/service/index.d.ts +0 -82
  181. package/dist-server/service/index.js +0 -145
  182. package/dist-server/service/index.js.map +0 -1
  183. package/dist-server/service/location/index.d.ts +0 -5
  184. package/dist-server/service/location/index.js +0 -9
  185. package/dist-server/service/location/index.js.map +0 -1
  186. package/dist-server/service/location/location-master-resolver.d.ts +0 -60
  187. package/dist-server/service/location/location-master-resolver.js +0 -313
  188. package/dist-server/service/location/location-master-resolver.js.map +0 -1
  189. package/dist-server/service/location/location-master.d.ts +0 -26
  190. package/dist-server/service/location/location-master.js +0 -28
  191. package/dist-server/service/location/location-master.js.map +0 -1
  192. package/dist-server/service/location/location-query.d.ts +0 -15
  193. package/dist-server/service/location/location-query.js +0 -56
  194. package/dist-server/service/location/location-query.js.map +0 -1
  195. package/dist-server/service/location/operational-location.d.ts +0 -116
  196. package/dist-server/service/location/operational-location.js +0 -157
  197. package/dist-server/service/location/operational-location.js.map +0 -1
  198. package/dist-server/service/master-axis.d.ts +0 -40
  199. package/dist-server/service/master-axis.js +0 -57
  200. package/dist-server/service/master-axis.js.map +0 -1
  201. package/dist-server/service/master-change-approval/approval-input.d.ts +0 -17
  202. package/dist-server/service/master-change-approval/approval-input.js +0 -35
  203. package/dist-server/service/master-change-approval/approval-input.js.map +0 -1
  204. package/dist-server/service/master-change-approval/builtin-axes.d.ts +0 -4
  205. package/dist-server/service/master-change-approval/builtin-axes.js +0 -96
  206. package/dist-server/service/master-change-approval/builtin-axes.js.map +0 -1
  207. package/dist-server/service/master-change-approval/index.d.ts +0 -14
  208. package/dist-server/service/master-change-approval/index.js +0 -37
  209. package/dist-server/service/master-change-approval/index.js.map +0 -1
  210. package/dist-server/service/master-change-approval/master-change-axis.d.ts +0 -54
  211. package/dist-server/service/master-change-approval/master-change-axis.js +0 -17
  212. package/dist-server/service/master-change-approval/master-change-axis.js.map +0 -1
  213. package/dist-server/service/master-change-approval/master-change-flow.d.ts +0 -65
  214. package/dist-server/service/master-change-approval/master-change-flow.js +0 -125
  215. package/dist-server/service/master-change-approval/master-change-flow.js.map +0 -1
  216. package/dist-server/service/master-change-approval/master-change-resolver.d.ts +0 -18
  217. package/dist-server/service/master-change-approval/master-change-resolver.js +0 -58
  218. package/dist-server/service/master-change-approval/master-change-resolver.js.map +0 -1
  219. package/dist-server/service/master-change-policy.d.ts +0 -122
  220. package/dist-server/service/master-change-policy.js +0 -304
  221. package/dist-server/service/master-change-policy.js.map +0 -1
  222. package/dist-server/service/master-conformance-resolver.d.ts +0 -34
  223. package/dist-server/service/master-conformance-resolver.js +0 -153
  224. package/dist-server/service/master-conformance-resolver.js.map +0 -1
  225. package/dist-server/service/master-conformance.d.ts +0 -80
  226. package/dist-server/service/master-conformance.js +0 -266
  227. package/dist-server/service/master-conformance.js.map +0 -1
  228. package/dist-server/service/master-crud.d.ts +0 -55
  229. package/dist-server/service/master-crud.js +0 -93
  230. package/dist-server/service/master-crud.js.map +0 -1
  231. package/dist-server/service/master-list.d.ts +0 -12
  232. package/dist-server/service/master-list.js +0 -30
  233. package/dist-server/service/master-list.js.map +0 -1
  234. package/dist-server/service/master-page-query.d.ts +0 -33
  235. package/dist-server/service/master-page-query.js +0 -55
  236. package/dist-server/service/master-page-query.js.map +0 -1
  237. package/dist-server/service/master-page.d.ts +0 -85
  238. package/dist-server/service/master-page.js +0 -104
  239. package/dist-server/service/master-page.js.map +0 -1
  240. package/dist-server/service/material/index.d.ts +0 -7
  241. package/dist-server/service/material/index.js +0 -12
  242. package/dist-server/service/material/index.js.map +0 -1
  243. package/dist-server/service/material/material-axis-status.d.ts +0 -8
  244. package/dist-server/service/material/material-axis-status.js +0 -19
  245. package/dist-server/service/material/material-axis-status.js.map +0 -1
  246. package/dist-server/service/material/material-class.d.ts +0 -34
  247. package/dist-server/service/material/material-class.js +0 -104
  248. package/dist-server/service/material/material-class.js.map +0 -1
  249. package/dist-server/service/material/material-definition.d.ts +0 -45
  250. package/dist-server/service/material/material-definition.js +0 -125
  251. package/dist-server/service/material/material-definition.js.map +0 -1
  252. package/dist-server/service/material/material-effective-list.d.ts +0 -39
  253. package/dist-server/service/material/material-effective-list.js +0 -54
  254. package/dist-server/service/material/material-effective-list.js.map +0 -1
  255. package/dist-server/service/material/material-master-resolver.d.ts +0 -106
  256. package/dist-server/service/material/material-master-resolver.js +0 -351
  257. package/dist-server/service/material/material-master-resolver.js.map +0 -1
  258. package/dist-server/service/material/material-master.d.ts +0 -9
  259. package/dist-server/service/material/material-master.js +0 -24
  260. package/dist-server/service/material/material-master.js.map +0 -1
  261. package/dist-server/service/material/material-query.d.ts +0 -16
  262. package/dist-server/service/material/material-query.js +0 -79
  263. package/dist-server/service/material/material-query.js.map +0 -1
  264. package/dist-server/service/material/material-revision-content.d.ts +0 -10
  265. package/dist-server/service/material/material-revision-content.js +0 -92
  266. package/dist-server/service/material/material-revision-content.js.map +0 -1
  267. package/dist-server/service/material/material-revision-resolver.d.ts +0 -60
  268. package/dist-server/service/material/material-revision-resolver.js +0 -96
  269. package/dist-server/service/material/material-revision-resolver.js.map +0 -1
  270. package/dist-server/service/material/material-revision-service.d.ts +0 -179
  271. package/dist-server/service/material/material-revision-service.js +0 -687
  272. package/dist-server/service/material/material-revision-service.js.map +0 -1
  273. package/dist-server/service/material/material-revision.d.ts +0 -86
  274. package/dist-server/service/material/material-revision.js +0 -339
  275. package/dist-server/service/material/material-revision.js.map +0 -1
  276. package/dist-server/service/material/recipe-index.d.ts +0 -23
  277. package/dist-server/service/material/recipe-index.js +0 -44
  278. package/dist-server/service/material/recipe-index.js.map +0 -1
  279. package/dist-server/service/operation/index.d.ts +0 -6
  280. package/dist-server/service/operation/index.js +0 -10
  281. package/dist-server/service/operation/index.js.map +0 -1
  282. package/dist-server/service/operation/operation-definition.d.ts +0 -52
  283. package/dist-server/service/operation/operation-definition.js +0 -143
  284. package/dist-server/service/operation/operation-definition.js.map +0 -1
  285. package/dist-server/service/operation/operation-master-resolver.d.ts +0 -52
  286. package/dist-server/service/operation/operation-master-resolver.js +0 -187
  287. package/dist-server/service/operation/operation-master-resolver.js.map +0 -1
  288. package/dist-server/service/operation/operation-master.d.ts +0 -21
  289. package/dist-server/service/operation/operation-master.js +0 -28
  290. package/dist-server/service/operation/operation-master.js.map +0 -1
  291. package/dist-server/service/operation/operation-query.d.ts +0 -15
  292. package/dist-server/service/operation/operation-query.js +0 -56
  293. package/dist-server/service/operation/operation-query.js.map +0 -1
  294. package/dist-server/service/operation/operation-readiness-resolver.d.ts +0 -39
  295. package/dist-server/service/operation/operation-readiness-resolver.js +0 -111
  296. package/dist-server/service/operation/operation-readiness-resolver.js.map +0 -1
  297. package/dist-server/service/operation/operation-readiness.d.ts +0 -34
  298. package/dist-server/service/operation/operation-readiness.js +0 -133
  299. package/dist-server/service/operation/operation-readiness.js.map +0 -1
  300. package/dist-server/service/personnel/index.d.ts +0 -6
  301. package/dist-server/service/personnel/index.js +0 -10
  302. package/dist-server/service/personnel/index.js.map +0 -1
  303. package/dist-server/service/personnel/person.d.ts +0 -51
  304. package/dist-server/service/personnel/person.js +0 -119
  305. package/dist-server/service/personnel/person.js.map +0 -1
  306. package/dist-server/service/personnel/personnel-class-readiness.d.ts +0 -22
  307. package/dist-server/service/personnel/personnel-class-readiness.js +0 -98
  308. package/dist-server/service/personnel/personnel-class-readiness.js.map +0 -1
  309. package/dist-server/service/personnel/personnel-class.d.ts +0 -54
  310. package/dist-server/service/personnel/personnel-class.js +0 -114
  311. package/dist-server/service/personnel/personnel-class.js.map +0 -1
  312. package/dist-server/service/personnel/personnel-master-resolver.d.ts +0 -53
  313. package/dist-server/service/personnel/personnel-master-resolver.js +0 -187
  314. package/dist-server/service/personnel/personnel-master-resolver.js.map +0 -1
  315. package/dist-server/service/personnel/personnel-master.d.ts +0 -39
  316. package/dist-server/service/personnel/personnel-master.js +0 -34
  317. package/dist-server/service/personnel/personnel-master.js.map +0 -1
  318. package/dist-server/service/personnel/personnel-query.d.ts +0 -29
  319. package/dist-server/service/personnel/personnel-query.js +0 -79
  320. package/dist-server/service/personnel/personnel-query.js.map +0 -1
  321. package/dist-server/service/personnel/qualification.d.ts +0 -104
  322. package/dist-server/service/personnel/qualification.js +0 -147
  323. package/dist-server/service/personnel/qualification.js.map +0 -1
  324. package/dist-server/service/quality/index.d.ts +0 -4
  325. package/dist-server/service/quality/index.js +0 -8
  326. package/dist-server/service/quality/index.js.map +0 -1
  327. package/dist-server/service/quality/nonconformance-cause-resolver.d.ts +0 -12
  328. package/dist-server/service/quality/nonconformance-cause-resolver.js +0 -60
  329. package/dist-server/service/quality/nonconformance-cause-resolver.js.map +0 -1
  330. package/dist-server/service/quality/nonconformance-cause.d.ts +0 -20
  331. package/dist-server/service/quality/nonconformance-cause.js +0 -90
  332. package/dist-server/service/quality/nonconformance-cause.js.map +0 -1
  333. package/dist-server/service/recipe/index.d.ts +0 -10
  334. package/dist-server/service/recipe/index.js +0 -16
  335. package/dist-server/service/recipe/index.js.map +0 -1
  336. package/dist-server/service/recipe/recipe-definition.d.ts +0 -75
  337. package/dist-server/service/recipe/recipe-definition.js +0 -143
  338. package/dist-server/service/recipe/recipe-definition.js.map +0 -1
  339. package/dist-server/service/recipe/recipe-effective-list.d.ts +0 -49
  340. package/dist-server/service/recipe/recipe-effective-list.js +0 -96
  341. package/dist-server/service/recipe/recipe-effective-list.js.map +0 -1
  342. package/dist-server/service/recipe/recipe-master-resolver.d.ts +0 -28
  343. package/dist-server/service/recipe/recipe-master-resolver.js +0 -128
  344. package/dist-server/service/recipe/recipe-master-resolver.js.map +0 -1
  345. package/dist-server/service/recipe/recipe-master.d.ts +0 -37
  346. package/dist-server/service/recipe/recipe-master.js +0 -47
  347. package/dist-server/service/recipe/recipe-master.js.map +0 -1
  348. package/dist-server/service/recipe/recipe-query.d.ts +0 -21
  349. package/dist-server/service/recipe/recipe-query.js +0 -82
  350. package/dist-server/service/recipe/recipe-query.js.map +0 -1
  351. package/dist-server/service/recipe/recipe-revision-content.d.ts +0 -32
  352. package/dist-server/service/recipe/recipe-revision-content.js +0 -70
  353. package/dist-server/service/recipe/recipe-revision-content.js.map +0 -1
  354. package/dist-server/service/recipe/recipe-revision-line.d.ts +0 -30
  355. package/dist-server/service/recipe/recipe-revision-line.js +0 -95
  356. package/dist-server/service/recipe/recipe-revision-line.js.map +0 -1
  357. package/dist-server/service/recipe/recipe-revision-resolver.d.ts +0 -65
  358. package/dist-server/service/recipe/recipe-revision-resolver.js +0 -96
  359. package/dist-server/service/recipe/recipe-revision-resolver.js.map +0 -1
  360. package/dist-server/service/recipe/recipe-revision-service.d.ts +0 -183
  361. package/dist-server/service/recipe/recipe-revision-service.js +0 -754
  362. package/dist-server/service/recipe/recipe-revision-service.js.map +0 -1
  363. package/dist-server/service/recipe/recipe-revision.d.ts +0 -102
  364. package/dist-server/service/recipe/recipe-revision.js +0 -373
  365. package/dist-server/service/recipe/recipe-revision.js.map +0 -1
  366. package/dist-server/service/recipe/route-definition.d.ts +0 -51
  367. package/dist-server/service/recipe/route-definition.js +0 -114
  368. package/dist-server/service/recipe/route-definition.js.map +0 -1
  369. package/dist-server/service/resource/class-lineage.d.ts +0 -46
  370. package/dist-server/service/resource/class-lineage.js +0 -80
  371. package/dist-server/service/resource/class-lineage.js.map +0 -1
  372. package/dist-server/service/resource/class-members.d.ts +0 -36
  373. package/dist-server/service/resource/class-members.js +0 -59
  374. package/dist-server/service/resource/class-members.js.map +0 -1
  375. package/dist-server/service/resource/referrers.d.ts +0 -54
  376. package/dist-server/service/resource/referrers.js +0 -99
  377. package/dist-server/service/resource/referrers.js.map +0 -1
  378. package/dist-server/service/resource/resource-class.d.ts +0 -25
  379. package/dist-server/service/resource/resource-class.js +0 -29
  380. package/dist-server/service/resource/resource-class.js.map +0 -1
  381. package/dist-server/service/revision-baseline.d.ts +0 -71
  382. package/dist-server/service/revision-baseline.js +0 -87
  383. package/dist-server/service/revision-baseline.js.map +0 -1
  384. package/dist-server/service/row-lock.d.ts +0 -22
  385. package/dist-server/service/row-lock.js +0 -31
  386. package/dist-server/service/row-lock.js.map +0 -1
  387. package/dist-server/service/status/axis-stamp.d.ts +0 -16
  388. package/dist-server/service/status/axis-stamp.js +0 -22
  389. package/dist-server/service/status/axis-stamp.js.map +0 -1
  390. package/dist-server/service/status/index.d.ts +0 -3
  391. package/dist-server/service/status/index.js +0 -7
  392. package/dist-server/service/status/index.js.map +0 -1
  393. package/dist-server/service/status/master-status.d.ts +0 -38
  394. package/dist-server/service/status/master-status.js +0 -129
  395. package/dist-server/service/status/master-status.js.map +0 -1
  396. package/dist-server/service/test-spec/criteria-check.d.ts +0 -53
  397. package/dist-server/service/test-spec/criteria-check.js +0 -142
  398. package/dist-server/service/test-spec/criteria-check.js.map +0 -1
  399. package/dist-server/service/test-spec/criteria-rows.d.ts +0 -89
  400. package/dist-server/service/test-spec/criteria-rows.js +0 -139
  401. package/dist-server/service/test-spec/criteria-rows.js.map +0 -1
  402. package/dist-server/service/test-spec/index.d.ts +0 -6
  403. package/dist-server/service/test-spec/index.js +0 -11
  404. package/dist-server/service/test-spec/index.js.map +0 -1
  405. package/dist-server/service/test-spec/test-spec-effective-list.d.ts +0 -34
  406. package/dist-server/service/test-spec/test-spec-effective-list.js +0 -42
  407. package/dist-server/service/test-spec/test-spec-effective-list.js.map +0 -1
  408. package/dist-server/service/test-spec/test-spec-master-resolver.d.ts +0 -44
  409. package/dist-server/service/test-spec/test-spec-master-resolver.js +0 -144
  410. package/dist-server/service/test-spec/test-spec-master-resolver.js.map +0 -1
  411. package/dist-server/service/test-spec/test-spec-master.d.ts +0 -6
  412. package/dist-server/service/test-spec/test-spec-master.js +0 -18
  413. package/dist-server/service/test-spec/test-spec-master.js.map +0 -1
  414. package/dist-server/service/test-spec/test-spec-query.d.ts +0 -15
  415. package/dist-server/service/test-spec/test-spec-query.js +0 -61
  416. package/dist-server/service/test-spec/test-spec-query.js.map +0 -1
  417. package/dist-server/service/test-spec/test-spec-revision-resolver.d.ts +0 -59
  418. package/dist-server/service/test-spec/test-spec-revision-resolver.js +0 -96
  419. package/dist-server/service/test-spec/test-spec-revision-resolver.js.map +0 -1
  420. package/dist-server/service/test-spec/test-spec-revision-service.d.ts +0 -178
  421. package/dist-server/service/test-spec/test-spec-revision-service.js +0 -685
  422. package/dist-server/service/test-spec/test-spec-revision-service.js.map +0 -1
  423. package/dist-server/service/test-spec/test-spec-revision.d.ts +0 -86
  424. package/dist-server/service/test-spec/test-spec-revision.js +0 -334
  425. package/dist-server/service/test-spec/test-spec-revision.js.map +0 -1
  426. package/dist-server/service/test-spec/test-specification.d.ts +0 -47
  427. package/dist-server/service/test-spec/test-specification.js +0 -119
  428. package/dist-server/service/test-spec/test-specification.js.map +0 -1
  429. package/dist-server/tsconfig.tsbuildinfo +0 -1
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toOperationEntry = toOperationEntry;
4
- exports.operationMaster = operationMaster;
5
- const resource_class_1 = require("../resource/resource-class");
6
- function toOperationEntry(operation) {
7
- /* `key` 와 `label` 과 `intent` 는 비울 수 없다 — 셋이 없으면 그 공정은 실행 단위가 되지 못한다. */
8
- const out = {
9
- key: operation.name,
10
- label: operation.description ?? operation.name,
11
- intent: operation.intent
12
- };
13
- (0, resource_class_1.put)(out, 'locationType', operation.locationType);
14
- (0, resource_class_1.put)(out, 'resourceType', operation.resourceType);
15
- (0, resource_class_1.put)(out, 'bizStep', operation.bizStep);
16
- (0, resource_class_1.put)(out, 'duration', operation.duration);
17
- (0, resource_class_1.put)(out, 'variability', operation.variability);
18
- (0, resource_class_1.put)(out, 'parameters', operation.parameters);
19
- (0, resource_class_1.put)(out, 'personnelSpecification', operation.personnelSpecification);
20
- (0, resource_class_1.put)(out, 'physicalAssetSpecification', operation.physicalAssetSpecification);
21
- (0, resource_class_1.put)(out, 'effectiveStart', (0, resource_class_1.iso)(operation.effectiveStart));
22
- (0, resource_class_1.put)(out, 'effectiveEnd', (0, resource_class_1.iso)(operation.effectiveEnd));
23
- return out;
24
- }
25
- function operationMaster(operations) {
26
- return { operations: operations.map(toOperationEntry) };
27
- }
28
- //# sourceMappingURL=operation-master.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"operation-master.js","sourceRoot":"","sources":["../../../server/service/operation/operation-master.ts"],"names":[],"mappings":";;AAoBA,4CAoBC;AAED,0CAEC;AA5CD,+DAAqD;AAoBrD,SAAgB,gBAAgB,CAAC,SAA8B;IAC7D,wEAAwE;IACxE,MAAM,GAAG,GAA4B;QACnC,GAAG,EAAE,SAAS,CAAC,IAAI;QACnB,KAAK,EAAE,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI;QAC9C,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAA;IAED,IAAA,oBAAG,EAAC,GAAG,EAAE,cAAc,EAAE,SAAS,CAAC,YAAY,CAAC,CAAA;IAChD,IAAA,oBAAG,EAAC,GAAG,EAAE,cAAc,EAAE,SAAS,CAAC,YAAY,CAAC,CAAA;IAChD,IAAA,oBAAG,EAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IACtC,IAAA,oBAAG,EAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IACxC,IAAA,oBAAG,EAAC,GAAG,EAAE,aAAa,EAAE,SAAS,CAAC,WAAW,CAAC,CAAA;IAC9C,IAAA,oBAAG,EAAC,GAAG,EAAE,YAAY,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;IAC5C,IAAA,oBAAG,EAAC,GAAG,EAAE,wBAAwB,EAAE,SAAS,CAAC,sBAAsB,CAAC,CAAA;IACpE,IAAA,oBAAG,EAAC,GAAG,EAAE,4BAA4B,EAAE,SAAS,CAAC,0BAA0B,CAAC,CAAA;IAC5E,IAAA,oBAAG,EAAC,GAAG,EAAE,gBAAgB,EAAE,IAAA,oBAAG,EAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAA;IACzD,IAAA,oBAAG,EAAC,GAAG,EAAE,cAAc,EAAE,IAAA,oBAAG,EAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAA;IAErD,OAAO,GAAgC,CAAA;AACzC,CAAC;AAED,SAAgB,eAAe,CAAC,UAAiC;IAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAA;AACzD,CAAC","sourcesContent":["import { iso, put } from '../resource/resource-class'\nimport type { OperationDefinition } from './operation-definition'\n\n/** 트윈 선언의 `operations` 한 항목 — 계약의 `OperationDef` 모양이다. */\nexport interface OperationEntry {\n key: string\n label: string\n intent: string\n locationType?: string\n resourceType?: string\n bizStep?: string\n duration?: string\n variability?: unknown\n parameters?: unknown[]\n personnelSpecification?: unknown[]\n physicalAssetSpecification?: unknown[]\n effectiveStart?: string\n effectiveEnd?: string\n}\n\nexport function toOperationEntry(operation: OperationDefinition): OperationEntry {\n /* `key` 와 `label` 과 `intent` 는 비울 수 없다 — 셋이 없으면 그 공정은 실행 단위가 되지 못한다. */\n const out: Record<string, unknown> = {\n key: operation.name,\n label: operation.description ?? operation.name,\n intent: operation.intent\n }\n\n put(out, 'locationType', operation.locationType)\n put(out, 'resourceType', operation.resourceType)\n put(out, 'bizStep', operation.bizStep)\n put(out, 'duration', operation.duration)\n put(out, 'variability', operation.variability)\n put(out, 'parameters', operation.parameters)\n put(out, 'personnelSpecification', operation.personnelSpecification)\n put(out, 'physicalAssetSpecification', operation.physicalAssetSpecification)\n put(out, 'effectiveStart', iso(operation.effectiveStart))\n put(out, 'effectiveEnd', iso(operation.effectiveEnd))\n\n return out as unknown as OperationEntry\n}\n\nexport function operationMaster(operations: OperationDefinition[]): { operations: OperationEntry[] } {\n return { operations: operations.map(toOperationEntry) }\n}\n"]}
@@ -1,15 +0,0 @@
1
- export declare class OperationMaster {
2
- operations: string;
3
- /**
4
- * 더 있나 — **이 값을 안 보고 쓰면 조용히 잘린 마스터로 트윈을 세우게 된다.**
5
- *
6
- * 거짓이 될 때까지 `next` 를 `after` 로 넘겨 이어 받는다.
7
- */
8
- hasMore: boolean;
9
- /** 이어 받을 자리. 더 없으면 없다. */
10
- next?: string;
11
- }
12
- export declare class OperationQuery {
13
- /** 공정 정의 전체 — 라우팅의 단계가 이 키를 가리킨다. */
14
- operationMaster(after: string | undefined, limit: number | undefined, context: ResolverContext): Promise<OperationMaster>;
15
- }
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OperationQuery = exports.OperationMaster = void 0;
4
- const tslib_1 = require("tslib");
5
- const type_graphql_1 = require("type-graphql");
6
- const master_page_query_1 = require("../master-page-query");
7
- const operation_definition_1 = require("./operation-definition");
8
- const operation_master_1 = require("./operation-master");
9
- let OperationMaster = class OperationMaster {
10
- };
11
- exports.OperationMaster = OperationMaster;
12
- tslib_1.__decorate([
13
- (0, type_graphql_1.Field)(type => String, { description: 'OperationDef[] as JSON text' }),
14
- tslib_1.__metadata("design:type", String)
15
- ], OperationMaster.prototype, "operations", void 0);
16
- tslib_1.__decorate([
17
- (0, type_graphql_1.Field)({ description: 'true when more rows remain — keep pulling with next as after' }),
18
- tslib_1.__metadata("design:type", Boolean)
19
- ], OperationMaster.prototype, "hasMore", void 0);
20
- tslib_1.__decorate([
21
- (0, type_graphql_1.Field)(type => String, { nullable: true, description: 'cursor for the next page — the last name in this page' }),
22
- tslib_1.__metadata("design:type", String)
23
- ], OperationMaster.prototype, "next", void 0);
24
- exports.OperationMaster = OperationMaster = tslib_1.__decorate([
25
- (0, type_graphql_1.ObjectType)({ description: 'Operation definitions as the twin receives them' })
26
- ], OperationMaster);
27
- let OperationQuery = class OperationQuery {
28
- /** 공정 정의 전체 — 라우팅의 단계가 이 키를 가리킨다. */
29
- async operationMaster(after, limit, context) {
30
- const { domain } = context.state;
31
- const request = { after, limit };
32
- const page = await (0, master_page_query_1.pullPage)(operation_definition_1.OperationDefinition, domain, request);
33
- /* 통째로 달라고 했는데 한도를 넘으면 **자르지 않고 거절한다**(§`master-page`). */
34
- (0, master_page_query_1.refuseIfTooLarge)('공정', request, page);
35
- const operations = page.rows;
36
- return {
37
- operations: JSON.stringify((0, operation_master_1.operationMaster)(operations).operations),
38
- hasMore: page.hasMore,
39
- ...(page.next ? { next: page.next } : {})
40
- };
41
- }
42
- };
43
- exports.OperationQuery = OperationQuery;
44
- tslib_1.__decorate([
45
- (0, type_graphql_1.Query)(returns => OperationMaster, { description: 'Operation definitions for the twin to pull' }),
46
- tslib_1.__param(0, (0, type_graphql_1.Arg)('after', { nullable: true, description: 'resume after this name — the previous page\'s next' })),
47
- tslib_1.__param(1, (0, type_graphql_1.Arg)('limit', type => type_graphql_1.Int, { nullable: true, description: 'rows per page — omit only when the axis is small enough to pull whole' })),
48
- tslib_1.__param(2, (0, type_graphql_1.Ctx)()),
49
- tslib_1.__metadata("design:type", Function),
50
- tslib_1.__metadata("design:paramtypes", [String, Number, Object]),
51
- tslib_1.__metadata("design:returntype", Promise)
52
- ], OperationQuery.prototype, "operationMaster", null);
53
- exports.OperationQuery = OperationQuery = tslib_1.__decorate([
54
- (0, type_graphql_1.Resolver)(operation_definition_1.OperationDefinition)
55
- ], OperationQuery);
56
- //# sourceMappingURL=operation-query.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"operation-query.js","sourceRoot":"","sources":["../../../server/service/operation/operation-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAgF;AAIhF,4DAAiE;AAEjE,iEAA4D;AAC5D,yDAA4E;AAGrE,IAAM,eAAe,GAArB,MAAM,eAAe;CAgB3B,CAAA;AAhBY,0CAAe;AAE1B;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;;mDACpD;AAQlB;IADC,IAAA,oBAAK,EAAC,EAAE,WAAW,EAAE,8DAA8D,EAAE,CAAC;;gDACvE;AAIhB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,uDAAuD,EAAE,CAAC;;6CACnG;0BAdF,eAAe;IAD3B,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,iDAAiD,EAAE,CAAC;GAClE,eAAe,CAgB3B;AAGM,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,qCAAqC;IAE/B,AAAN,KAAK,CAAC,eAAe,CACkF,KAAyB,EACO,KAAyB,EACvJ,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;QAChC,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAQ,EAAsB,0CAAmB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QAEtF,0DAA0D;QAC1D,IAAA,oCAAgB,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAErC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAA;QAE5B,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAA,kCAAoB,EAAC,UAAU,CAAC,CAAC,UAAU,CAAC;YACvE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,CAAA;IACH,CAAC;CACF,CAAA;AAxBY,wCAAc;AAGnB;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,eAAe,EAAE,EAAE,WAAW,EAAE,4CAA4C,EAAE,CAAC;IAE9F,mBAAA,IAAA,kBAAG,EAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oDAAoD,EAAE,CAAC,CAAA;IACnG,mBAAA,IAAA,kBAAG,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,kBAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,uEAAuE,EAAE,CAAC,CAAA;IACnI,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;qDAiBP;yBAvBU,cAAc;IAD1B,IAAA,uBAAQ,EAAC,0CAAmB,CAAC;GACjB,cAAc,CAwB1B","sourcesContent":["import { Arg, Ctx, Field, Int, ObjectType, Query, Resolver } from 'type-graphql'\n\nimport { getRepository } from '@things-factory/shell'\n\nimport { pullPage, refuseIfTooLarge } from '../master-page-query'\n\nimport { OperationDefinition } from './operation-definition'\nimport { operationMaster as buildOperationMaster } from './operation-master'\n\n@ObjectType({ description: 'Operation definitions as the twin receives them' })\nexport class OperationMaster {\n @Field(type => String, { description: 'OperationDef[] as JSON text' })\n operations: string\n\n /**\n * 더 있나 — **이 값을 안 보고 쓰면 조용히 잘린 마스터로 트윈을 세우게 된다.**\n *\n * 거짓이 될 때까지 `next` 를 `after` 로 넘겨 이어 받는다.\n */\n @Field({ description: 'true when more rows remain — keep pulling with next as after' })\n hasMore: boolean\n\n /** 이어 받을 자리. 더 없으면 없다. */\n @Field(type => String, { nullable: true, description: 'cursor for the next page — the last name in this page' })\n next?: string\n\n}\n\n@Resolver(OperationDefinition)\nexport class OperationQuery {\n /** 공정 정의 전체 — 라우팅의 단계가 이 키를 가리킨다. */\n @Query(returns => OperationMaster, { description: 'Operation definitions for the twin to pull' })\n async operationMaster(\n @Arg('after', { nullable: true, description: 'resume after this name — the previous page\\'s next' }) after: string | undefined,\n @Arg('limit', type => Int, { nullable: true, description: 'rows per page — omit only when the axis is small enough to pull whole' }) limit: number | undefined,\n @Ctx() context: ResolverContext\n ): Promise<OperationMaster> {\n const { domain } = context.state\n\n const request = { after, limit }\n const page = await pullPage<OperationDefinition>(OperationDefinition, domain, request)\n\n /* 통째로 달라고 했는데 한도를 넘으면 **자르지 않고 거절한다**(§`master-page`). */\n refuseIfTooLarge('공정', request, page)\n\n const operations = page.rows\n\n return {\n operations: JSON.stringify(buildOperationMaster(operations).operations),\n hasMore: page.hasMore,\n ...(page.next ? { next: page.next } : {})\n }\n }\n}\n"]}
@@ -1,39 +0,0 @@
1
- import { OperationDefinition } from './operation-definition';
2
- export declare class PersonnelReadinessType {
3
- classId: string;
4
- required: number;
5
- qualified: number;
6
- /** 곧 끊기는 것을 따로 센다 — 합쳐 세면 만료가 닥쳐서야 알게 된다. */
7
- expiringSoon: number;
8
- sample: string[];
9
- }
10
- export declare class AssetReadinessType {
11
- classId: string;
12
- required: number;
13
- /** 수명과 교정은 세지 않는다 — 이 화면이 답하는 물음은 「채울 자산이 있나」다. */
14
- registered: number;
15
- }
16
- export declare class OperationReadinessType {
17
- operation: OperationDefinition;
18
- personnel: PersonnelReadinessType[];
19
- assets: AssetReadinessType[];
20
- /** 품목당 표준 시간(분). 선언되지 않았으면 없다 — 0 으로 두면 「즉시 끝난다」가 된다. */
21
- standardMinutes?: number;
22
- peopleTotal: number;
23
- /**
24
- * 그중 자격을 실제로 확인한 수.
25
- *
26
- * `peopleTotal` 보다 작으면 잘린 것이다. 화면이 그 사실을 말해야 한다 — 자른 것을 말하지 않으면
27
- * 「자격자 3명」이 실제로는 더 많을 수 있다.
28
- */
29
- peopleScanned: number;
30
- }
31
- /**
32
- * 선언 옆에 현실을 놓는다.
33
- *
34
- * 「용접 자격자 2명이 필요하다」는 선언이고, 그 선언이 지금 채워지는지는 다른 곳에 있었다. 두 화면을
35
- * 오가며 사람이 머릿속으로 맞춰야 했고, 맞춰 보지 않으면 아무도 몰랐다.
36
- */
37
- export declare class OperationReadinessResolver {
38
- operationReadiness(name: string, context: ResolverContext): Promise<OperationReadinessType | undefined>;
39
- }
@@ -1,111 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OperationReadinessResolver = exports.OperationReadinessType = exports.AssetReadinessType = exports.PersonnelReadinessType = 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 operation_definition_1 = require("./operation-definition");
8
- const operation_readiness_1 = require("./operation-readiness");
9
- let PersonnelReadinessType = class PersonnelReadinessType {
10
- };
11
- exports.PersonnelReadinessType = PersonnelReadinessType;
12
- tslib_1.__decorate([
13
- (0, type_graphql_1.Field)(),
14
- tslib_1.__metadata("design:type", String)
15
- ], PersonnelReadinessType.prototype, "classId", void 0);
16
- tslib_1.__decorate([
17
- (0, type_graphql_1.Field)(type => type_graphql_1.Int, { description: 'how many the operation declares it needs' }),
18
- tslib_1.__metadata("design:type", Number)
19
- ], PersonnelReadinessType.prototype, "required", void 0);
20
- tslib_1.__decorate([
21
- (0, type_graphql_1.Field)(type => type_graphql_1.Int, { description: 'how many people hold that qualification right now' }),
22
- tslib_1.__metadata("design:type", Number)
23
- ], PersonnelReadinessType.prototype, "qualified", void 0);
24
- tslib_1.__decorate([
25
- (0, type_graphql_1.Field)(type => type_graphql_1.Int, { description: 'of those, how many lose it within 30 days' }),
26
- tslib_1.__metadata("design:type", Number)
27
- ], PersonnelReadinessType.prototype, "expiringSoon", void 0);
28
- tslib_1.__decorate([
29
- (0, type_graphql_1.Field)(type => [String], { description: 'a few names — not the whole list' }),
30
- tslib_1.__metadata("design:type", Array)
31
- ], PersonnelReadinessType.prototype, "sample", void 0);
32
- exports.PersonnelReadinessType = PersonnelReadinessType = tslib_1.__decorate([
33
- (0, type_graphql_1.ObjectType)({ description: 'A required personnel class, and how well it is covered right now' })
34
- ], PersonnelReadinessType);
35
- let AssetReadinessType = class AssetReadinessType {
36
- };
37
- exports.AssetReadinessType = AssetReadinessType;
38
- tslib_1.__decorate([
39
- (0, type_graphql_1.Field)(),
40
- tslib_1.__metadata("design:type", String)
41
- ], AssetReadinessType.prototype, "classId", void 0);
42
- tslib_1.__decorate([
43
- (0, type_graphql_1.Field)(type => type_graphql_1.Int),
44
- tslib_1.__metadata("design:type", Number)
45
- ], AssetReadinessType.prototype, "required", void 0);
46
- tslib_1.__decorate([
47
- (0, type_graphql_1.Field)(type => type_graphql_1.Int, { description: 'how many are registered and still in service — lifecycle is not counted here' }),
48
- tslib_1.__metadata("design:type", Number)
49
- ], AssetReadinessType.prototype, "registered", void 0);
50
- exports.AssetReadinessType = AssetReadinessType = tslib_1.__decorate([
51
- (0, type_graphql_1.ObjectType)({ description: 'A required asset class, and how many are registered' })
52
- ], AssetReadinessType);
53
- let OperationReadinessType = class OperationReadinessType {
54
- };
55
- exports.OperationReadinessType = OperationReadinessType;
56
- tslib_1.__decorate([
57
- (0, type_graphql_1.Field)(type => operation_definition_1.OperationDefinition),
58
- tslib_1.__metadata("design:type", operation_definition_1.OperationDefinition)
59
- ], OperationReadinessType.prototype, "operation", void 0);
60
- tslib_1.__decorate([
61
- (0, type_graphql_1.Field)(type => [PersonnelReadinessType]),
62
- tslib_1.__metadata("design:type", Array)
63
- ], OperationReadinessType.prototype, "personnel", void 0);
64
- tslib_1.__decorate([
65
- (0, type_graphql_1.Field)(type => [AssetReadinessType]),
66
- tslib_1.__metadata("design:type", Array)
67
- ], OperationReadinessType.prototype, "assets", void 0);
68
- tslib_1.__decorate([
69
- (0, type_graphql_1.Field)(type => type_graphql_1.Float, { nullable: true, description: 'standard time per item in minutes — absent when not declared' }),
70
- tslib_1.__metadata("design:type", Number)
71
- ], OperationReadinessType.prototype, "standardMinutes", void 0);
72
- tslib_1.__decorate([
73
- (0, type_graphql_1.Field)(type => type_graphql_1.Int, { description: 'people registered in this domain' }),
74
- tslib_1.__metadata("design:type", Number)
75
- ], OperationReadinessType.prototype, "peopleTotal", void 0);
76
- tslib_1.__decorate([
77
- (0, type_graphql_1.Field)(type => type_graphql_1.Int, { description: 'how many of them were actually checked' }),
78
- tslib_1.__metadata("design:type", Number)
79
- ], OperationReadinessType.prototype, "peopleScanned", void 0);
80
- exports.OperationReadinessType = OperationReadinessType = tslib_1.__decorate([
81
- (0, type_graphql_1.ObjectType)({ description: 'What one operation declares it needs, and whether that is met today' })
82
- ], OperationReadinessType);
83
- /**
84
- * 선언 옆에 현실을 놓는다.
85
- *
86
- * 「용접 자격자 2명이 필요하다」는 선언이고, 그 선언이 지금 채워지는지는 다른 곳에 있었다. 두 화면을
87
- * 오가며 사람이 머릿속으로 맞춰야 했고, 맞춰 보지 않으면 아무도 몰랐다.
88
- */
89
- let OperationReadinessResolver = class OperationReadinessResolver {
90
- async operationReadiness(name, context) {
91
- const { domain } = context.state;
92
- return (0, operation_readiness_1.operationReadiness)((0, shell_1.getRepository)(operation_definition_1.OperationDefinition).manager, domain, name);
93
- }
94
- };
95
- exports.OperationReadinessResolver = OperationReadinessResolver;
96
- tslib_1.__decorate([
97
- (0, type_graphql_1.Directive)('@privilege(category: "ops-master", privilege: "query", domainOwnerGranted: true)'),
98
- (0, type_graphql_1.Query)(returns => OperationReadinessType, {
99
- nullable: true,
100
- description: 'To read what an operation requires and whether that is met today'
101
- }),
102
- tslib_1.__param(0, (0, type_graphql_1.Arg)('name')),
103
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
104
- tslib_1.__metadata("design:type", Function),
105
- tslib_1.__metadata("design:paramtypes", [String, Object]),
106
- tslib_1.__metadata("design:returntype", Promise)
107
- ], OperationReadinessResolver.prototype, "operationReadiness", null);
108
- exports.OperationReadinessResolver = OperationReadinessResolver = tslib_1.__decorate([
109
- (0, type_graphql_1.Resolver)()
110
- ], OperationReadinessResolver);
111
- //# sourceMappingURL=operation-readiness-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"operation-readiness-resolver.js","sourceRoot":"","sources":["../../../server/service/operation/operation-readiness-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Directive, Field, Float, Int, ObjectType, Query, Resolver } from 'type-graphql'\n\nimport { getRepository } from '@things-factory/shell'\n\nimport { OperationDefinition } from './operation-definition'\nimport { operationReadiness } from './operation-readiness'\n\n@ObjectType({ description: 'A required personnel class, and how well it is covered right now' })\nexport class PersonnelReadinessType {\n @Field()\n classId: string\n\n @Field(type => Int, { description: 'how many the operation declares it needs' })\n required: number\n\n @Field(type => Int, { description: 'how many people hold that qualification right now' })\n qualified: number\n\n /** 곧 끊기는 것을 따로 센다 — 합쳐 세면 만료가 닥쳐서야 알게 된다. */\n @Field(type => Int, { description: 'of those, how many lose it within 30 days' })\n expiringSoon: number\n\n @Field(type => [String], { description: 'a few names — not the whole list' })\n sample: string[]\n}\n\n@ObjectType({ description: 'A required asset class, and how many are registered' })\nexport class AssetReadinessType {\n @Field()\n classId: string\n\n @Field(type => Int)\n required: number\n\n /** 수명과 교정은 세지 않는다 — 이 화면이 답하는 물음은 「채울 자산이 있나」다. */\n @Field(type => Int, { description: 'how many are registered and still in service — lifecycle is not counted here' })\n registered: number\n}\n\n@ObjectType({ description: 'What one operation declares it needs, and whether that is met today' })\nexport class OperationReadinessType {\n @Field(type => OperationDefinition)\n operation: OperationDefinition\n\n @Field(type => [PersonnelReadinessType])\n personnel: PersonnelReadinessType[]\n\n @Field(type => [AssetReadinessType])\n assets: AssetReadinessType[]\n\n /** 품목당 표준 시간(분). 선언되지 않았으면 없다 — 0 으로 두면 「즉시 끝난다」가 된다. */\n @Field(type => Float, { nullable: true, description: 'standard time per item in minutes — absent when not declared' })\n standardMinutes?: number\n\n @Field(type => Int, { description: 'people registered in this domain' })\n peopleTotal: number\n\n /**\n * 그중 자격을 실제로 확인한 수.\n *\n * `peopleTotal` 보다 작으면 잘린 것이다. 화면이 그 사실을 말해야 한다 — 자른 것을 말하지 않으면\n * 「자격자 3명」이 실제로는 더 많을 수 있다.\n */\n @Field(type => Int, { description: 'how many of them were actually checked' })\n peopleScanned: number\n}\n\n/**\n * 선언 옆에 현실을 놓는다.\n *\n * 「용접 자격자 2명이 필요하다」는 선언이고, 그 선언이 지금 채워지는지는 다른 곳에 있었다. 두 화면을\n * 오가며 사람이 머릿속으로 맞춰야 했고, 맞춰 보지 않으면 아무도 몰랐다.\n */\n@Resolver()\nexport class OperationReadinessResolver {\n @Directive('@privilege(category: \"ops-master\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => OperationReadinessType, {\n nullable: true,\n description: 'To read what an operation requires and whether that is met today'\n })\n async operationReadiness(\n @Arg('name') name: string,\n @Ctx() context: ResolverContext\n ): Promise<OperationReadinessType | undefined> {\n const { domain } = context.state\n\n return operationReadiness(getRepository(OperationDefinition).manager, domain, name)\n }\n}\n"]}
@@ -1,34 +0,0 @@
1
- import { EntityManager } from 'typeorm';
2
- import { Domain } from '@things-factory/shell';
3
- import { OperationDefinition } from './operation-definition';
4
- export interface PersonnelReadiness {
5
- classId: string;
6
- required: number;
7
- /** 지금 이 등급의 자격을 갖춘 인원 수. */
8
- qualified: number;
9
- /** 그중 곧 자격이 끊기는 인원 수. */
10
- expiringSoon: number;
11
- /** 보여 줄 이름 몇 개. 전부 내려보내지 않는다. */
12
- sample: string[];
13
- }
14
- export interface AssetReadiness {
15
- classId: string;
16
- required: number;
17
- /**
18
- * 이 등급으로 등록된 자산 수.
19
- *
20
- * **수명과 교정은 세지 않는다.** 그것을 세려면 자산마다 사용 횟수를 물어야 하고, 이 화면이 답하는
21
- * 물음은 「선언을 채울 자산이 있나」이지 「지금 쓸 수 있나」가 아니다. 화면이 그 차이를 밝힌다.
22
- */
23
- registered: number;
24
- }
25
- export interface OperationReadiness {
26
- operation: OperationDefinition;
27
- personnel: PersonnelReadiness[];
28
- assets: AssetReadiness[];
29
- /** 품목당 표준 시간(분). 선언되지 않았으면 없다. */
30
- standardMinutes?: number;
31
- peopleTotal: number;
32
- peopleScanned: number;
33
- }
34
- export declare function operationReadiness(manager: EntityManager, domain: Domain, operationName: string, now?: Date): Promise<OperationReadiness | undefined>;
@@ -1,133 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.operationReadiness = operationReadiness;
4
- const ops_contract_1 = require("@operato/ops-contract");
5
- const physical_asset_1 = require("../asset/physical-asset");
6
- const physical_asset_class_1 = require("../asset/physical-asset-class");
7
- const person_1 = require("../personnel/person");
8
- const personnel_class_1 = require("../personnel/personnel-class");
9
- const qualification_1 = require("../personnel/qualification");
10
- const resource_class_1 = require("../resource/resource-class");
11
- const operation_definition_1 = require("./operation-definition");
12
- /**
13
- * 공정 하나의 **선언과 현재 채움 상태**.
14
- *
15
- * ── 왜 둘을 한 화면에서 보나 ───────────────────────────────────────────────
16
- * 「용접 자격자 2명이 필요하다」는 선언이다. 그 선언이 지금 채워지는지는 다른 화면에 있다. 표로 나눠
17
- * 두면 사람이 두 화면을 오가며 머릿속으로 맞춰야 하고, 맞춰 보지 않으면 아무도 모른다.
18
- *
19
- * 선언을 적는 자리에서 **그 선언이 지금 성립하는지** 함께 보인다.
20
- *
21
- * ── 곧 끊기는 것을 따로 센다 ───────────────────────────────────────────────
22
- * 「자격자 3명」과 「자격자 3명인데 그중 1명이 다음 주 만료」는 다른 상황이다. 합쳐 세면 만료가
23
- * 닥쳐서야 알게 된다.
24
- *
25
- * ── 조용히 자르지 않는다 ───────────────────────────────────────────────────
26
- * 자격은 사람마다 계산해야 한다(등급 상속과 검사 만료를 봐야 하므로). 인원이 아주 많으면 상한까지만
27
- * 보고, **몇 명 중 몇 명을 봤는지 함께 낸다.**
28
- */
29
- /** 한 번에 자격을 확인하는 인원 수의 상한. */
30
- const MAX_PEOPLE_SCANNED = 2000;
31
- /** 이 기간 안에 끊기는 자격을 「곧 만료」로 센다. */
32
- const EXPIRING_SOON_DAYS = 30;
33
- async function operationReadiness(manager, domain, operationName, now = new Date()) {
34
- const operation = await manager.findOne(operation_definition_1.OperationDefinition, {
35
- where: { domain: { id: domain.id }, name: operationName }
36
- });
37
- if (!operation) {
38
- return undefined;
39
- }
40
- const at = now.toISOString();
41
- const spec = (0, qualification_1.personnelSpecificationOf)(operation.personnelSpecification);
42
- const [personnelClasses, people] = await Promise.all([
43
- manager.find(personnel_class_1.PersonnelClass, { where: { domain: { id: domain.id } } }),
44
- spec.length
45
- ? manager.find(person_1.Person, { where: { domain: { id: domain.id } }, take: MAX_PEOPLE_SCANNED })
46
- : Promise.resolve([])
47
- ]);
48
- const peopleTotal = spec.length ? await manager.count(person_1.Person, { where: { domain: { id: domain.id } } }) : 0;
49
- const classDefs = personnelClasses.map(resource_class_1.toResourceClassDef);
50
- const soonMs = now.getTime() + EXPIRING_SOON_DAYS * 24 * 3_600_000;
51
- const personnel = spec.map(({ personnelClassId, quantity }) => {
52
- const qualified = [];
53
- let expiringSoon = 0;
54
- for (const person of people) {
55
- const judgeable = {
56
- name: person.name,
57
- personnelClassIds: person.personnelClassIds,
58
- testResults: person.testResults,
59
- effectiveStart: person.effectiveStart,
60
- effectiveEnd: person.effectiveEnd
61
- };
62
- if ((0, qualification_1.qualificationGapsFor)(judgeable, personnelClassId, classDefs, at).length) {
63
- continue;
64
- }
65
- qualified.push(person.name);
66
- const expiry = (0, qualification_1.nearestQualificationExpiry)(judgeable, personnelClassId, classDefs, at);
67
- if (expiry && Date.parse(expiry) <= soonMs) {
68
- expiringSoon += 1;
69
- }
70
- }
71
- return {
72
- classId: personnelClassId,
73
- required: quantity ?? 1,
74
- qualified: qualified.length,
75
- expiringSoon,
76
- sample: qualified.slice(0, 5)
77
- };
78
- });
79
- return {
80
- operation,
81
- personnel,
82
- assets: await assetReadiness(manager, domain, operation, at),
83
- standardMinutes: minutesOf(operation.duration),
84
- peopleTotal,
85
- peopleScanned: people.length
86
- };
87
- }
88
- /** 선언된 요구 자산을 읽는다. 등급 이름이 없는 줄은 걸러 낸다 — 아무도 못 채우는 요구가 된다. */
89
- function assetSpecificationOf(raw) {
90
- const entries = [];
91
- for (const row of raw ?? []) {
92
- const classId = row?.physicalAssetClassId ?? row?.assetClassId ?? row?.classId;
93
- if (typeof classId !== 'string' || !classId) {
94
- continue;
95
- }
96
- const quantity = Number(row?.quantity);
97
- entries.push({ classId, quantity: Number.isFinite(quantity) && quantity > 0 ? quantity : 1 });
98
- }
99
- return entries;
100
- }
101
- async function assetReadiness(manager, domain, operation, at) {
102
- const spec = assetSpecificationOf(operation.physicalAssetSpecification);
103
- if (!spec.length) {
104
- return [];
105
- }
106
- const [classes, assets] = await Promise.all([
107
- manager.find(physical_asset_class_1.PhysicalAssetClass, { where: { domain: { id: domain.id } } }),
108
- manager.find(physical_asset_1.PhysicalAsset, { where: { domain: { id: domain.id } } })
109
- ]);
110
- const classDefs = classes.map(resource_class_1.toResourceClassDef);
111
- return spec.map(({ classId, quantity }) => {
112
- let registered = 0;
113
- for (const asset of assets) {
114
- const period = { effectiveStart: iso(asset.effectiveStart), effectiveEnd: iso(asset.effectiveEnd) };
115
- if ((0, ops_contract_1.effectivityAt)(period, at) !== undefined) {
116
- continue;
117
- }
118
- if ((0, ops_contract_1.classClosure)(asset.assetClassIds, classDefs, at).has(classId)) {
119
- registered += 1;
120
- }
121
- }
122
- return { classId, required: quantity, registered };
123
- });
124
- }
125
- /** ISO 8601 기간을 분으로. 해석할 수 없으면 없다 — 0 분으로 두면 「즉시 끝난다」가 된다. */
126
- function minutesOf(duration) {
127
- const ms = (0, ops_contract_1.parseIsoDuration)(duration);
128
- return ms == null ? undefined : Math.round((ms / 60_000) * 10) / 10;
129
- }
130
- function iso(at) {
131
- return at ? new Date(at).toISOString() : undefined;
132
- }
133
- //# sourceMappingURL=operation-readiness.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"operation-readiness.js","sourceRoot":"","sources":["../../../server/service/operation/operation-readiness.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { Domain } from '@things-factory/shell'\nimport { classClosure, effectivityAt, parseIsoDuration } from '@operato/ops-contract'\nimport type { ResourceClassDef, TestResult } from '@operato/ops-contract'\n\nimport { PhysicalAsset } from '../asset/physical-asset'\nimport { PhysicalAssetClass } from '../asset/physical-asset-class'\nimport { Person } from '../personnel/person'\nimport { PersonnelClass } from '../personnel/personnel-class'\nimport { nearestQualificationExpiry, personnelSpecificationOf, qualificationGapsFor } from '../personnel/qualification'\nimport { toResourceClassDef } from '../resource/resource-class'\nimport { OperationDefinition } from './operation-definition'\n\n/**\n * 공정 하나의 **선언과 현재 채움 상태**.\n *\n * ── 왜 둘을 한 화면에서 보나 ───────────────────────────────────────────────\n * 「용접 자격자 2명이 필요하다」는 선언이다. 그 선언이 지금 채워지는지는 다른 화면에 있다. 표로 나눠\n * 두면 사람이 두 화면을 오가며 머릿속으로 맞춰야 하고, 맞춰 보지 않으면 아무도 모른다.\n *\n * 선언을 적는 자리에서 **그 선언이 지금 성립하는지** 함께 보인다.\n *\n * ── 곧 끊기는 것을 따로 센다 ───────────────────────────────────────────────\n * 「자격자 3명」과 「자격자 3명인데 그중 1명이 다음 주 만료」는 다른 상황이다. 합쳐 세면 만료가\n * 닥쳐서야 알게 된다.\n *\n * ── 조용히 자르지 않는다 ───────────────────────────────────────────────────\n * 자격은 사람마다 계산해야 한다(등급 상속과 검사 만료를 봐야 하므로). 인원이 아주 많으면 상한까지만\n * 보고, **몇 명 중 몇 명을 봤는지 함께 낸다.**\n */\n\n/** 한 번에 자격을 확인하는 인원 수의 상한. */\nconst MAX_PEOPLE_SCANNED = 2000\n\n/** 이 기간 안에 끊기는 자격을 「곧 만료」로 센다. */\nconst EXPIRING_SOON_DAYS = 30\n\nexport interface PersonnelReadiness {\n classId: string\n required: number\n /** 지금 이 등급의 자격을 갖춘 인원 수. */\n qualified: number\n /** 그중 곧 자격이 끊기는 인원 수. */\n expiringSoon: number\n /** 보여 줄 이름 몇 개. 전부 내려보내지 않는다. */\n sample: string[]\n}\n\nexport interface AssetReadiness {\n classId: string\n required: number\n /**\n * 이 등급으로 등록된 자산 수.\n *\n * **수명과 교정은 세지 않는다.** 그것을 세려면 자산마다 사용 횟수를 물어야 하고, 이 화면이 답하는\n * 물음은 「선언을 채울 자산이 있나」이지 「지금 쓸 수 있나」가 아니다. 화면이 그 차이를 밝힌다.\n */\n registered: number\n}\n\nexport interface OperationReadiness {\n operation: OperationDefinition\n personnel: PersonnelReadiness[]\n assets: AssetReadiness[]\n /** 품목당 표준 시간(분). 선언되지 않았으면 없다. */\n standardMinutes?: number\n peopleTotal: number\n peopleScanned: number\n}\n\nexport async function operationReadiness(\n manager: EntityManager,\n domain: Domain,\n operationName: string,\n now = new Date()\n): Promise<OperationReadiness | undefined> {\n const operation = await manager.findOne(OperationDefinition, {\n where: { domain: { id: domain.id }, name: operationName }\n })\n\n if (!operation) {\n return undefined\n }\n\n const at = now.toISOString()\n const spec = personnelSpecificationOf(operation.personnelSpecification)\n\n const [personnelClasses, people] = await Promise.all([\n manager.find(PersonnelClass, { where: { domain: { id: domain.id } } }),\n spec.length\n ? manager.find(Person, { where: { domain: { id: domain.id } }, take: MAX_PEOPLE_SCANNED })\n : Promise.resolve([] as Person[])\n ])\n\n const peopleTotal = spec.length ? await manager.count(Person, { where: { domain: { id: domain.id } } }) : 0\n const classDefs = personnelClasses.map(toResourceClassDef)\n const soonMs = now.getTime() + EXPIRING_SOON_DAYS * 24 * 3_600_000\n\n const personnel = spec.map(({ personnelClassId, quantity }) => {\n const qualified: string[] = []\n let expiringSoon = 0\n\n for (const person of people) {\n const judgeable = {\n name: person.name,\n personnelClassIds: person.personnelClassIds,\n testResults: person.testResults as unknown as TestResult[] | undefined,\n effectiveStart: person.effectiveStart,\n effectiveEnd: person.effectiveEnd\n }\n\n if (qualificationGapsFor(judgeable, personnelClassId, classDefs, at).length) {\n continue\n }\n\n qualified.push(person.name)\n\n const expiry = nearestQualificationExpiry(judgeable, personnelClassId, classDefs, at)\n if (expiry && Date.parse(expiry) <= soonMs) {\n expiringSoon += 1\n }\n }\n\n return {\n classId: personnelClassId,\n required: quantity ?? 1,\n qualified: qualified.length,\n expiringSoon,\n sample: qualified.slice(0, 5)\n }\n })\n\n return {\n operation,\n personnel,\n assets: await assetReadiness(manager, domain, operation, at),\n standardMinutes: minutesOf(operation.duration),\n peopleTotal,\n peopleScanned: people.length\n }\n}\n\n/** 선언된 요구 자산을 읽는다. 등급 이름이 없는 줄은 걸러 낸다 — 아무도 못 채우는 요구가 된다. */\nfunction assetSpecificationOf(raw: readonly Record<string, unknown>[] | undefined) {\n const entries: { classId: string; quantity: number }[] = []\n\n for (const row of raw ?? []) {\n const classId = row?.physicalAssetClassId ?? row?.assetClassId ?? row?.classId\n if (typeof classId !== 'string' || !classId) {\n continue\n }\n const quantity = Number(row?.quantity)\n entries.push({ classId, quantity: Number.isFinite(quantity) && quantity > 0 ? quantity : 1 })\n }\n\n return entries\n}\n\nasync function assetReadiness(\n manager: EntityManager,\n domain: Domain,\n operation: OperationDefinition,\n at: string\n): Promise<AssetReadiness[]> {\n const spec = assetSpecificationOf(operation.physicalAssetSpecification)\n if (!spec.length) {\n return []\n }\n\n const [classes, assets] = await Promise.all([\n manager.find(PhysicalAssetClass, { where: { domain: { id: domain.id } } }),\n manager.find(PhysicalAsset, { where: { domain: { id: domain.id } } })\n ])\n\n const classDefs: ResourceClassDef[] = classes.map(toResourceClassDef)\n\n return spec.map(({ classId, quantity }) => {\n let registered = 0\n\n for (const asset of assets) {\n const period = { effectiveStart: iso(asset.effectiveStart), effectiveEnd: iso(asset.effectiveEnd) }\n if (effectivityAt(period, at) !== undefined) {\n continue\n }\n if (classClosure(asset.assetClassIds, classDefs, at).has(classId)) {\n registered += 1\n }\n }\n\n return { classId, required: quantity, registered }\n })\n}\n\n/** ISO 8601 기간을 분으로. 해석할 수 없으면 없다 — 0 분으로 두면 「즉시 끝난다」가 된다. */\nfunction minutesOf(duration: string | undefined): number | undefined {\n const ms = parseIsoDuration(duration)\n\n return ms == null ? undefined : Math.round((ms / 60_000) * 10) / 10\n}\n\nfunction iso(at: Date | undefined): string | undefined {\n return at ? new Date(at).toISOString() : undefined\n}\n"]}
@@ -1,6 +0,0 @@
1
- import { Person } from './person';
2
- import { PersonnelClass } from './personnel-class';
3
- import { PersonnelQuery } from './personnel-query';
4
- import { PersonnelClassResolver, PersonResolver } from './personnel-master-resolver';
5
- export declare const entities: (typeof PersonnelClass | typeof Person)[];
6
- export declare const resolvers: (typeof PersonnelClassResolver | typeof PersonResolver | typeof PersonnelQuery)[];
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolvers = exports.entities = void 0;
4
- const person_1 = require("./person");
5
- const personnel_class_1 = require("./personnel-class");
6
- const personnel_query_1 = require("./personnel-query");
7
- const personnel_master_resolver_1 = require("./personnel-master-resolver");
8
- exports.entities = [personnel_class_1.PersonnelClass, person_1.Person];
9
- exports.resolvers = [personnel_query_1.PersonnelQuery, personnel_master_resolver_1.PersonnelClassResolver, personnel_master_resolver_1.PersonResolver];
10
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/personnel/index.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AACjC,uDAAkD;AAClD,uDAAkD;AAClD,2EAAoF;AAEvE,QAAA,QAAQ,GAAG,CAAC,gCAAc,EAAE,eAAM,CAAC,CAAA;AACnC,QAAA,SAAS,GAAG,CAAC,gCAAc,EAAE,kDAAsB,EAAE,0CAAc,CAAC,CAAA","sourcesContent":["import { Person } from './person'\nimport { PersonnelClass } from './personnel-class'\nimport { PersonnelQuery } from './personnel-query'\nimport { PersonnelClassResolver, PersonResolver } from './personnel-master-resolver'\n\nexport const entities = [PersonnelClass, Person]\nexport const resolvers = [PersonnelQuery, PersonnelClassResolver, PersonResolver]\n"]}
@@ -1,51 +0,0 @@
1
- import { Domain } from '@things-factory/shell';
2
- import { User } from '@things-factory/auth-base';
3
- /**
4
- * 작업자 — **ISA-95 `Person`**.
5
- *
6
- * 사람은 설비와 다르게 산다. 고장 나지 않고 교대로 일하며, 자격이 만료된다. 그래서 자원 넷을 한 그릇에
7
- * 담지 않는다 — 한쪽의 어휘가 다른 쪽에 붙으면 둘 다 거짓이 된다.
8
- *
9
- * 필드 이름은 커널 계약의 `persons` 항목과 같다(`@operato/ops-contract`). 옮길 때 번역이 없다.
10
- */
11
- export declare class Person {
12
- readonly id: string;
13
- domain?: Domain;
14
- domainId?: string;
15
- /** 표준 `PersonID` — 트윈으로 나갈 때 `persons[].id` 가 된다. */
16
- name: string;
17
- /** 사람이 읽는 이름. 표준 `PersonName`. */
18
- description?: string;
19
- /**
20
- * 속한 등급들 — 표준 `PersonnelClassID`(복수).
21
- *
22
- * 복수인 것이 중요하다. 한 사람이 용접 자격과 지게차 자격을 함께 갖는 일이 흔하고, 하나만 담으면
23
- * 그 사람은 한쪽 공정에서 보이지 않는다.
24
- */
25
- personnelClassIds?: string[];
26
- /** 이 사람이 주로 있는 자리 — 표준 `OperationalLocation`. */
27
- homeLocation?: string;
28
- /** 근무 캘린더 — 표준 `WorkCalendar`. 교대 이름과 구간이 여기 있다. */
29
- workCalendar?: Record<string, unknown>[];
30
- /** 개체 속성 — 표준 `PersonProperty`. `classPropertyId` 로 등급 속성을 구체화한다. */
31
- properties?: Record<string, unknown>[];
32
- /** 이 사람에게 요구되는 `TestSpecification` 참조들 — 표준 `TestSpecificationID`. 참조만 갖는다. */
33
- testSpecificationIds?: string[];
34
- /**
35
- * `TestResult` — 표준 `TestResult`.
36
- *
37
- * 등급이 `TestSpecification` 을 요구하는데 그 사람에게 결과가 아예 없으면, 자격이 성립하는지 판단할 수 없다.
38
- * 만료되었거나 떨어졌으면 그 사람에게 작업이 가지 않는다.
39
- */
40
- testResults?: Record<string, unknown>[];
41
- /** 언제부터 이 사람이 현장에 있나 — 표준 `EffectiveStartDate`. 입사 예정자를 미리 등록할 수 있다. */
42
- effectiveStart?: Date;
43
- /** 언제까지 — 표준 `EffectiveEndDate`. 퇴사한 사람이 영원히 배정 대상으로 남지 않게 한다. */
44
- effectiveEnd?: Date;
45
- createdAt?: Date;
46
- updatedAt?: Date;
47
- creator?: User;
48
- creatorId?: string;
49
- updater?: User;
50
- updaterId?: string;
51
- }