@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,147 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.personnelSpecificationOf = personnelSpecificationOf;
4
- exports.qualificationGapsFor = qualificationGapsFor;
5
- exports.judgePersonnel = judgePersonnel;
6
- exports.nearestQualificationExpiry = nearestQualificationExpiry;
7
- const ops_contract_1 = require("@operato/ops-contract");
8
- /**
9
- * 선언된 필요 인원을 읽는다.
10
- *
11
- * `OperationDefinition.personnelSpecification` 은 JSON 칸이라 모양이 보장되지 않는다. 등급 이름이 없는
12
- * 줄은 **버리지 않고 걸러 낸다** — 그런 줄로 요구를 만들면 아무도 만족시킬 수 없는 공정이 된다.
13
- * 수량이 없으면 1명으로 읽는다(ISA-95 `Quantity` 는 선택 항목이고, 요구했다는 것 자체가 최소 한 명이다).
14
- */
15
- function personnelSpecificationOf(raw) {
16
- if (!raw?.length) {
17
- return [];
18
- }
19
- const entries = [];
20
- for (const row of raw) {
21
- const classId = row?.personnelClassId ?? row?.personnelClassID ?? row?.classId;
22
- if (typeof classId !== 'string' || !classId) {
23
- continue;
24
- }
25
- const quantity = Number(row?.quantity);
26
- entries.push({ personnelClassId: classId, quantity: Number.isFinite(quantity) && quantity > 0 ? quantity : 1 });
27
- }
28
- return entries;
29
- }
30
- /**
31
- * 이 사람이 이 등급의 자격을 갖췄나. 모자라면 **무엇이** 모자란지 돌려준다.
32
- *
33
- * 상속을 탄다 — 「6축 용접 자격」을 가진 사람은 「용접 자격」을 요구하는 공정에 선다. 그 상속은
34
- * 계약의 `classClosure` 가 닫으므로 여기서 다시 만들지 않는다.
35
- */
36
- function qualificationGapsFor(person, classId, classDefs, at) {
37
- const period = {
38
- effectiveStart: isoOf(person.effectiveStart),
39
- effectiveEnd: isoOf(person.effectiveEnd)
40
- };
41
- /* 유효기간 밖이면 자격을 볼 것도 없다 — 퇴사자의 용접 자격은 유효해도 배정 대상이 아니다. */
42
- if ((0, ops_contract_1.effectivityAt)(period, at) !== undefined) {
43
- return [{ personName: person.name, classId, lack: 'not-effective' }];
44
- }
45
- const closure = (0, ops_contract_1.classClosure)(person.personnelClassIds, classDefs, at);
46
- if (!closure.has(classId)) {
47
- return [{ personName: person.name, classId, lack: 'not-in-class' }];
48
- }
49
- const required = (0, ops_contract_1.requiredTestsFor)([classId], classDefs, at);
50
- if (!required.length) {
51
- return [];
52
- }
53
- const bySpec = new Map((person.testResults ?? []).map(result => [result.specId, result]));
54
- const gaps = [];
55
- for (const specId of required) {
56
- const result = bySpec.get(specId);
57
- /*
58
- * 여기가 커널과 갈리는 한 줄이다. 계약은 없는 결과를 제약으로 보지 않고, 실행 시스템은 막는다.
59
- * 기록이 없다는 것은 「자격이 있다」가 아니라 「모른다」이고, 모르는 채로 작업을 보내지 않는다.
60
- */
61
- if (!result) {
62
- gaps.push({ personName: person.name, classId, lack: 'test-missing', specId });
63
- continue;
64
- }
65
- if (result.result === 'fail') {
66
- gaps.push({ personName: person.name, classId, lack: 'test-failed', specId });
67
- continue;
68
- }
69
- /* 판정이 비어 있는 것도 통과가 아니다 — 「재기만 하고 판정하지 않았다」는 합격이 아니다. */
70
- if (result.result !== 'pass') {
71
- gaps.push({ personName: person.name, classId, lack: 'test-missing', specId });
72
- continue;
73
- }
74
- if (!(0, ops_contract_1.testPassedAt)(result, at)) {
75
- gaps.push({ personName: person.name, classId, lack: 'test-expired', specId, expiredAt: result.expiresAt });
76
- }
77
- }
78
- return gaps;
79
- }
80
- /**
81
- * 이 사람들로 이 공정을 돌릴 수 있나.
82
- *
83
- * 등급마다 수량을 센다. 한 사람이 여러 등급을 만족시킬 수 있으므로 **등급별로 따로 센다** — 「용접
84
- * 1명 · 지게차 1명」을 두 자격을 가진 한 사람으로 채울 수 있는지는 현장이 정할 일이지 여기서 정할
85
- * 일이 아니다. 여기서는 각 요구가 채워졌는지만 본다.
86
- */
87
- function judgePersonnel(spec, persons, classDefs, at) {
88
- if (!spec.length) {
89
- return { qualified: true, gaps: [], shortfalls: [] };
90
- }
91
- const gaps = [];
92
- const shortfalls = [];
93
- for (const { personnelClassId, quantity } of spec) {
94
- const required = quantity ?? 1;
95
- let count = 0;
96
- for (const person of persons) {
97
- const found = qualificationGapsFor(person, personnelClassId, classDefs, at);
98
- if (!found.length) {
99
- count += 1;
100
- continue;
101
- }
102
- /*
103
- * 그 등급에 아예 속하지 않는 사람은 이유로 내지 않는다. 실적에 이름이 다섯이면 그 중 넷은
104
- * 다른 일을 하는 사람이고, 그들까지 「용접 자격 없음」으로 늘어놓으면 진짜 이유가 묻힌다.
105
- */
106
- if (found.some(gap => gap.lack === 'not-in-class')) {
107
- continue;
108
- }
109
- gaps.push(...found);
110
- }
111
- if (count < required) {
112
- shortfalls.push({ classId: personnelClassId, required, qualified: count });
113
- }
114
- }
115
- return { qualified: shortfalls.length === 0, gaps, shortfalls };
116
- }
117
- function isoOf(at) {
118
- if (!at) {
119
- return undefined;
120
- }
121
- return typeof at === 'string' ? at : at.toISOString();
122
- }
123
- /**
124
- * 이 사람의 이 등급 자격이 **언제 가장 먼저 끊기나.**
125
- *
126
- * 요구되는 검사가 여럿이면 가장 이른 만료가 그 등급의 만료다 — 하나라도 끊기면 자격이 성립하지 않는다.
127
- * 만료가 선언되지 않은 검사는 무기한이므로 세지 않는다(모르는 것과 지난 것은 다르다).
128
- */
129
- function nearestQualificationExpiry(person, classId, classDefs, at) {
130
- const required = new Set((0, ops_contract_1.requiredTestsFor)([classId], classDefs, at));
131
- if (!required.size) {
132
- return undefined;
133
- }
134
- const bySpec = new Map((person.testResults ?? []).map(result => [result.specId, result]));
135
- let nearest;
136
- for (const specId of required) {
137
- const result = bySpec.get(specId);
138
- if (!result?.expiresAt || result.result !== 'pass') {
139
- continue;
140
- }
141
- if (!nearest || Date.parse(result.expiresAt) < Date.parse(nearest)) {
142
- nearest = result.expiresAt;
143
- }
144
- }
145
- return nearest;
146
- }
147
- //# sourceMappingURL=qualification.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"qualification.js","sourceRoot":"","sources":["../../../server/service/personnel/qualification.ts"],"names":[],"mappings":"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","sourcesContent":["import { classClosure, effectivityAt, requiredTestsFor, testPassedAt } from '@operato/ops-contract'\nimport type { ResourceClassDef, TestResult } from '@operato/ops-contract'\n\n/**\n * 이 사람이 이 공정을 할 자격이 있나 — **ISA-95 `PersonnelSpecification` 을 실제로 거는 자리.**\n *\n * 공정은 등급으로 요구하고(`OperationDefinition.personnelSpecification`), 등급은 검사를 요구하고\n * (`PersonnelClass.testSpecificationIds`), 사람은 결과를 든다(`Person.testResults`). 세 자리가 다\n * 있었는데 그것을 잇는 판단이 없어서, 마스터에 적힌 자격이 아무 일도 하지 않고 있었다.\n *\n * ── 기록이 없을 때의 판단이 커널과 반대다 ──────────────────────────────────\n * 계약의 `meetsTests` 는 결과가 선언되지 않은 검사를 **제약으로 보지 않는다**(`contract.ts` §meetsTests).\n * 트윈에서는 그것이 맞다 — 모델 데이터가 성긴데 기록이 없다고 다 막으면 라인이 굶는다.\n *\n * 실행 시스템에서는 반대다. 「이 사람의 용접 자격 기록이 없다」는 통과 사유가 아니라 막을 사유다.\n * 그래서 등급 상속(`classClosure`) · 필수 검사 수집(`requiredTestsFor`) · 만료 판정(`testPassedAt`) 은\n * 계약 것을 그대로 쓰고, **없을 때의 판단만 여기서 뒤집는다.** 커널 함수는 고치지 않는다.\n *\n * ── 왜 이유를 종류별로 돌려주나 ────────────────────────────────────────────\n * 막기만 하고 무엇이 모자란지 말하지 않는 화면은 현장에서 우회 대상이 된다. 자격이 없는 것과 만료된\n * 것은 할 일이 다르다 — 앞은 사람을 바꾸고, 뒤는 갱신하면 된다.\n */\n\n/** 무엇이 모자란가. 종류마다 현장이 할 일이 다르다. */\nexport type QualificationLack =\n /** 그 등급에 속하지 않는다 — 다른 사람을 부르는 수밖에 없다. */\n | 'not-in-class'\n /** 등급이 요구하는 검사의 기록이 없다 — 받았는지 확인하고 기록한다. */\n | 'test-missing'\n /** 불합격 기록이다. */\n | 'test-failed'\n /** 합격했으나 유효기간이 지났다 — 갱신하면 된다. */\n | 'test-expired'\n /** 아직 현장에 없거나(입사 전) 이미 없다(퇴사). */\n | 'not-effective'\n /**\n * 그 이름이 인원 마스터에 없다 — 자격을 따질 수가 없다.\n *\n * 「자격 없음」으로 내면 안 된다. 자격이 없는 것과 그 사람이 누구인지 모르는 것은 할 일이 다르다\n * (앞은 사람을 바꾸고, 뒤는 등록하거나 이름을 고친다).\n */\n | 'not-registered'\n\nexport interface QualificationGap {\n /** 누가 — `Person.name`. */\n personName: string\n /** 어느 등급을 요구했나 — `PersonnelClass.name`. */\n classId: string\n lack: QualificationLack\n /** 검사 때문이면 어느 검사인가 — `TestSpecification.id`. */\n specId?: string\n /** 만료된 것이면 언제 만료됐나(ISO). */\n expiredAt?: string\n}\n\n/** 등급별로 몇 명이 필요한데 몇 명이 자격을 갖췄나. */\nexport interface QualificationShortfall {\n classId: string\n required: number\n qualified: number\n}\n\nexport interface QualificationVerdict {\n qualified: boolean\n gaps: QualificationGap[]\n shortfalls: QualificationShortfall[]\n}\n\n/** 판단에 필요한 사람의 사실만. 엔티티를 통째로 받지 않는다 — 그러면 테스트가 DB 를 끌고 온다. */\nexport interface QualifiablePerson {\n name: string\n personnelClassIds?: string[]\n testResults?: TestResult[]\n effectiveStart?: Date | string\n effectiveEnd?: Date | string\n}\n\n/** ISA-95 `PersonnelSpecification` — 등급 하나와 그 등급으로 몇 명이 필요한가. */\nexport interface PersonnelSpecificationEntry {\n personnelClassId: string\n quantity?: number\n}\n\n/**\n * 선언된 필요 인원을 읽는다.\n *\n * `OperationDefinition.personnelSpecification` 은 JSON 칸이라 모양이 보장되지 않는다. 등급 이름이 없는\n * 줄은 **버리지 않고 걸러 낸다** — 그런 줄로 요구를 만들면 아무도 만족시킬 수 없는 공정이 된다.\n * 수량이 없으면 1명으로 읽는다(ISA-95 `Quantity` 는 선택 항목이고, 요구했다는 것 자체가 최소 한 명이다).\n */\nexport function personnelSpecificationOf(raw: readonly Record<string, unknown>[] | undefined): PersonnelSpecificationEntry[] {\n if (!raw?.length) {\n return []\n }\n\n const entries: PersonnelSpecificationEntry[] = []\n\n for (const row of raw) {\n const classId = row?.personnelClassId ?? row?.personnelClassID ?? row?.classId\n if (typeof classId !== 'string' || !classId) {\n continue\n }\n\n const quantity = Number(row?.quantity)\n entries.push({ personnelClassId: classId, quantity: Number.isFinite(quantity) && quantity > 0 ? quantity : 1 })\n }\n\n return entries\n}\n\n/**\n * 이 사람이 이 등급의 자격을 갖췄나. 모자라면 **무엇이** 모자란지 돌려준다.\n *\n * 상속을 탄다 — 「6축 용접 자격」을 가진 사람은 「용접 자격」을 요구하는 공정에 선다. 그 상속은\n * 계약의 `classClosure` 가 닫으므로 여기서 다시 만들지 않는다.\n */\nexport function qualificationGapsFor(\n person: QualifiablePerson,\n classId: string,\n classDefs: readonly ResourceClassDef[],\n at: string\n): QualificationGap[] {\n const period = {\n effectiveStart: isoOf(person.effectiveStart),\n effectiveEnd: isoOf(person.effectiveEnd)\n }\n\n /* 유효기간 밖이면 자격을 볼 것도 없다 — 퇴사자의 용접 자격은 유효해도 배정 대상이 아니다. */\n if (effectivityAt(period, at) !== undefined) {\n return [{ personName: person.name, classId, lack: 'not-effective' }]\n }\n\n const closure = classClosure(person.personnelClassIds, classDefs, at)\n if (!closure.has(classId)) {\n return [{ personName: person.name, classId, lack: 'not-in-class' }]\n }\n\n const required = requiredTestsFor([classId], classDefs, at)\n if (!required.length) {\n return []\n }\n\n const bySpec = new Map((person.testResults ?? []).map(result => [result.specId, result]))\n const gaps: QualificationGap[] = []\n\n for (const specId of required) {\n const result = bySpec.get(specId)\n\n /*\n * 여기가 커널과 갈리는 한 줄이다. 계약은 없는 결과를 제약으로 보지 않고, 실행 시스템은 막는다.\n * 기록이 없다는 것은 「자격이 있다」가 아니라 「모른다」이고, 모르는 채로 작업을 보내지 않는다.\n */\n if (!result) {\n gaps.push({ personName: person.name, classId, lack: 'test-missing', specId })\n continue\n }\n\n if (result.result === 'fail') {\n gaps.push({ personName: person.name, classId, lack: 'test-failed', specId })\n continue\n }\n\n /* 판정이 비어 있는 것도 통과가 아니다 — 「재기만 하고 판정하지 않았다」는 합격이 아니다. */\n if (result.result !== 'pass') {\n gaps.push({ personName: person.name, classId, lack: 'test-missing', specId })\n continue\n }\n\n if (!testPassedAt(result, at)) {\n gaps.push({ personName: person.name, classId, lack: 'test-expired', specId, expiredAt: result.expiresAt })\n }\n }\n\n return gaps\n}\n\n/**\n * 이 사람들로 이 공정을 돌릴 수 있나.\n *\n * 등급마다 수량을 센다. 한 사람이 여러 등급을 만족시킬 수 있으므로 **등급별로 따로 센다** — 「용접\n * 1명 · 지게차 1명」을 두 자격을 가진 한 사람으로 채울 수 있는지는 현장이 정할 일이지 여기서 정할\n * 일이 아니다. 여기서는 각 요구가 채워졌는지만 본다.\n */\nexport function judgePersonnel(\n spec: readonly PersonnelSpecificationEntry[],\n persons: readonly QualifiablePerson[],\n classDefs: readonly ResourceClassDef[],\n at: string\n): QualificationVerdict {\n if (!spec.length) {\n return { qualified: true, gaps: [], shortfalls: [] }\n }\n\n const gaps: QualificationGap[] = []\n const shortfalls: QualificationShortfall[] = []\n\n for (const { personnelClassId, quantity } of spec) {\n const required = quantity ?? 1\n let count = 0\n\n for (const person of persons) {\n const found = qualificationGapsFor(person, personnelClassId, classDefs, at)\n\n if (!found.length) {\n count += 1\n continue\n }\n\n /*\n * 그 등급에 아예 속하지 않는 사람은 이유로 내지 않는다. 실적에 이름이 다섯이면 그 중 넷은\n * 다른 일을 하는 사람이고, 그들까지 「용접 자격 없음」으로 늘어놓으면 진짜 이유가 묻힌다.\n */\n if (found.some(gap => gap.lack === 'not-in-class')) {\n continue\n }\n\n gaps.push(...found)\n }\n\n if (count < required) {\n shortfalls.push({ classId: personnelClassId, required, qualified: count })\n }\n }\n\n return { qualified: shortfalls.length === 0, gaps, shortfalls }\n}\n\nfunction isoOf(at: Date | string | undefined): string | undefined {\n if (!at) {\n return undefined\n }\n\n return typeof at === 'string' ? at : at.toISOString()\n}\n\n/**\n * 이 사람의 이 등급 자격이 **언제 가장 먼저 끊기나.**\n *\n * 요구되는 검사가 여럿이면 가장 이른 만료가 그 등급의 만료다 — 하나라도 끊기면 자격이 성립하지 않는다.\n * 만료가 선언되지 않은 검사는 무기한이므로 세지 않는다(모르는 것과 지난 것은 다르다).\n */\nexport function nearestQualificationExpiry(\n person: QualifiablePerson,\n classId: string,\n classDefs: readonly ResourceClassDef[],\n at: string\n): string | undefined {\n const required = new Set(requiredTestsFor([classId], classDefs, at))\n if (!required.size) {\n return undefined\n }\n\n const bySpec = new Map((person.testResults ?? []).map(result => [result.specId, result]))\n let nearest: string | undefined\n\n for (const specId of required) {\n const result = bySpec.get(specId)\n if (!result?.expiresAt || result.result !== 'pass') {\n continue\n }\n if (!nearest || Date.parse(result.expiresAt) < Date.parse(nearest)) {\n nearest = result.expiresAt\n }\n }\n\n return nearest\n}\n"]}
@@ -1,4 +0,0 @@
1
- import { NonconformanceCause } from './nonconformance-cause';
2
- import { NonconformanceCauseResolver } from './nonconformance-cause-resolver';
3
- export declare const entities: (typeof NonconformanceCause)[];
4
- export declare const resolvers: (typeof NonconformanceCauseResolver)[];
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolvers = exports.entities = void 0;
4
- const nonconformance_cause_1 = require("./nonconformance-cause");
5
- const nonconformance_cause_resolver_1 = require("./nonconformance-cause-resolver");
6
- exports.entities = [nonconformance_cause_1.NonconformanceCause];
7
- exports.resolvers = [nonconformance_cause_resolver_1.NonconformanceCauseResolver];
8
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/quality/index.ts"],"names":[],"mappings":";;;AAAA,iEAA4D;AAC5D,mFAA6E;AAChE,QAAA,QAAQ,GAAG,CAAC,0CAAmB,CAAC,CAAA;AAChC,QAAA,SAAS,GAAG,CAAC,2DAA2B,CAAC,CAAA","sourcesContent":["import { NonconformanceCause } from './nonconformance-cause'\nimport { NonconformanceCauseResolver } from './nonconformance-cause-resolver'\nexport const entities = [NonconformanceCause]\nexport const resolvers = [NonconformanceCauseResolver]\n"]}
@@ -1,12 +0,0 @@
1
- import { ListParam } from '@things-factory/shell';
2
- import { MasterPatch } from '../master-crud';
3
- import { NonconformanceCause } from './nonconformance-cause';
4
- declare class NonconformanceCauseList {
5
- items: NonconformanceCause[];
6
- total: number;
7
- }
8
- export declare class NonconformanceCauseResolver {
9
- nonconformanceCauseList(params: ListParam, context: ResolverContext): Promise<NonconformanceCauseList>;
10
- updateMultipleNonconformanceCause(patches: MasterPatch[], context: ResolverContext): Promise<NonconformanceCause[]>;
11
- }
12
- export {};
@@ -1,60 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NonconformanceCauseResolver = 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 type_graphql_2 = require("type-graphql");
8
- const shell_2 = require("@things-factory/shell");
9
- const master_crud_1 = require("../master-crud");
10
- const master_axis_1 = require("../master-axis");
11
- const master_list_1 = require("../master-list");
12
- const nonconformance_cause_1 = require("./nonconformance-cause");
13
- let NonconformanceCauseList = class NonconformanceCauseList {
14
- };
15
- tslib_1.__decorate([
16
- (0, type_graphql_2.Field)(type => [nonconformance_cause_1.NonconformanceCause]),
17
- tslib_1.__metadata("design:type", Array)
18
- ], NonconformanceCauseList.prototype, "items", void 0);
19
- tslib_1.__decorate([
20
- (0, type_graphql_2.Field)(type => type_graphql_2.Int),
21
- tslib_1.__metadata("design:type", Number)
22
- ], NonconformanceCauseList.prototype, "total", void 0);
23
- NonconformanceCauseList = tslib_1.__decorate([
24
- (0, type_graphql_2.ObjectType)()
25
- ], NonconformanceCauseList);
26
- let NonconformanceCauseResolver = class NonconformanceCauseResolver {
27
- async nonconformanceCauseList(params, context) {
28
- const { items, total } = await (0, master_list_1.listMaster)('nonconformanceCause', params, context.state.domain);
29
- return { items: items, total };
30
- }
31
- async updateMultipleNonconformanceCause(patches, context) {
32
- const { domain, user, tx } = context.state;
33
- return await (0, master_crud_1.saveMasterPatches)(tx, domain, (0, master_axis_1.masterAxisOf)('nonconformanceCause').entity, patches, user, { hasEffectivePeriod: true });
34
- }
35
- };
36
- exports.NonconformanceCauseResolver = NonconformanceCauseResolver;
37
- tslib_1.__decorate([
38
- (0, type_graphql_2.Directive)('@privilege(category: "ops-master", privilege: "query", domainOwnerGranted: true)'),
39
- (0, type_graphql_2.Query)(returns => NonconformanceCauseList),
40
- tslib_1.__param(0, (0, type_graphql_2.Args)(type => shell_2.ListParam)),
41
- tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
42
- tslib_1.__metadata("design:type", Function),
43
- tslib_1.__metadata("design:paramtypes", [shell_2.ListParam, Object]),
44
- tslib_1.__metadata("design:returntype", Promise)
45
- ], NonconformanceCauseResolver.prototype, "nonconformanceCauseList", null);
46
- tslib_1.__decorate([
47
- (0, type_graphql_2.Directive)('@privilege(category: "ops-master", privilege: "mutation", domainOwnerGranted: true)'),
48
- (0, type_graphql_2.Directive)('@transaction'),
49
- (0, type_graphql_2.Mutation)(returns => [nonconformance_cause_1.NonconformanceCause]),
50
- tslib_1.__param(0, (0, type_graphql_2.Arg)('patches', type => [shell_2.ScalarObject])),
51
- tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
52
- tslib_1.__metadata("design:type", Function),
53
- tslib_1.__metadata("design:paramtypes", [Array, Object]),
54
- tslib_1.__metadata("design:returntype", Promise)
55
- ], NonconformanceCauseResolver.prototype, "updateMultipleNonconformanceCause", null);
56
- exports.NonconformanceCauseResolver = NonconformanceCauseResolver = tslib_1.__decorate([
57
- (0, type_graphql_2.Resolver)(nonconformance_cause_1.NonconformanceCause),
58
- (0, type_graphql_1.UseMiddleware)(shell_1.SpeakRefusals)
59
- ], NonconformanceCauseResolver);
60
- //# sourceMappingURL=nonconformance-cause-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nonconformance-cause-resolver.js","sourceRoot":"","sources":["../../../server/service/quality/nonconformance-cause-resolver.ts"],"names":[],"mappings":";;;;AAAA,+CAA4C;AAC5C,iDAAqD;AACrD,+CAA2G;AAC3G,iDAA+D;AAC/D,gDAA+D;AAC/D,gDAA6C;AAC7C,gDAA2C;AAC3C,iEAA4D;AAG5D,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;CAA0G,CAAA;AAAjE;IAArC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,0CAAmB,CAAC,CAAC;;sDAA8B;AAAqB;IAAnB,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,CAAC;;sDAAc;AAA/H,uBAAuB;IAD5B,IAAA,yBAAU,GAAE;GACP,uBAAuB,CAA0G;AAIhI,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAGhC,AAAN,KAAK,CAAC,uBAAuB,CAA0B,MAAiB,EAAS,OAAwB;QACvG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,wBAAU,EAAC,qBAAqB,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC9F,OAAO,EAAE,KAAK,EAAE,KAA8B,EAAE,KAAK,EAAE,CAAA;IACzD,CAAC;IAIK,AAAN,KAAK,CAAC,iCAAiC,CAAyC,OAAsB,EAAS,OAAwB;QACrI,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1C,OAAO,MAAM,IAAA,+BAAiB,EAAC,EAAE,EAAE,MAAM,EAAE,IAAA,0BAAY,EAAC,qBAAqB,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAA0B,CAAA;IAC9J,CAAC;CACF,CAAA;AAdY,kEAA2B;AAGhC;IAFL,IAAA,wBAAS,EAAC,kFAAkF,CAAC;IAC7F,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,uBAAuB,CAAC;IACX,mBAAA,IAAA,mBAAI,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,CAAC,CAAA;IAAqB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAAjB,iBAAS;;0EAGvE;AAIK;IAHL,IAAA,wBAAS,EAAC,qFAAqF,CAAC;IAChG,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,0CAAmB,CAAC,CAAC;IACF,mBAAA,IAAA,kBAAG,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,oBAAY,CAAC,CAAC,CAAA;IAA0B,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;oFAG7G;sCAbU,2BAA2B;IAFvC,IAAA,uBAAQ,EAAC,0CAAmB,CAAC;IAC7B,IAAA,4BAAa,EAAC,qBAAa,CAAC;GAChB,2BAA2B,CAcvC","sourcesContent":["import { UseMiddleware } from 'type-graphql'\nimport { SpeakRefusals } from '@things-factory/shell'\nimport { Arg, Args, Ctx, Directive, Int, Mutation, ObjectType, Field, Query, Resolver } from 'type-graphql'\nimport { ListParam, ScalarObject } from '@things-factory/shell'\nimport { MasterPatch, saveMasterPatches } from '../master-crud'\nimport { masterAxisOf } from '../master-axis'\nimport { listMaster } from '../master-list'\nimport { NonconformanceCause } from './nonconformance-cause'\n\n@ObjectType()\nclass NonconformanceCauseList { @Field(type => [NonconformanceCause]) items: NonconformanceCause[]; @Field(type => Int) total: number }\n\n@Resolver(NonconformanceCause)\n@UseMiddleware(SpeakRefusals)\nexport class NonconformanceCauseResolver {\n @Directive('@privilege(category: \"ops-master\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => NonconformanceCauseList)\n async nonconformanceCauseList(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<NonconformanceCauseList> {\n const { items, total } = await listMaster('nonconformanceCause', params, context.state.domain)\n return { items: items as NonconformanceCause[], total }\n }\n @Directive('@privilege(category: \"ops-master\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [NonconformanceCause])\n async updateMultipleNonconformanceCause(@Arg('patches', type => [ScalarObject]) patches: MasterPatch[], @Ctx() context: ResolverContext): Promise<NonconformanceCause[]> {\n const { domain, user, tx } = context.state\n return await saveMasterPatches(tx, domain, masterAxisOf('nonconformanceCause').entity, patches, user, { hasEffectivePeriod: true }) as NonconformanceCause[]\n }\n}\n"]}
@@ -1,20 +0,0 @@
1
- import { Domain } from '@things-factory/shell';
2
- import { User } from '@things-factory/auth-base';
3
- /** 제품 부적합의 원인 코드. 설비 상태용 StopReason과 섞지 않는다. */
4
- export declare class NonconformanceCause {
5
- readonly id: string;
6
- domain?: Domain;
7
- domainId?: string;
8
- name: string;
9
- description?: string;
10
- parentName?: string;
11
- detailRequired?: boolean;
12
- effectiveStart?: Date;
13
- effectiveEnd?: Date;
14
- createdAt?: Date;
15
- updatedAt?: Date;
16
- creator?: User;
17
- creatorId?: string;
18
- updater?: User;
19
- updaterId?: string;
20
- }
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NonconformanceCause = void 0;
4
- const tslib_1 = require("tslib");
5
- const typeorm_1 = require("typeorm");
6
- const type_graphql_1 = require("type-graphql");
7
- const shell_1 = require("@things-factory/shell");
8
- const auth_base_1 = require("@things-factory/auth-base");
9
- /** 제품 부적합의 원인 코드. 설비 상태용 StopReason과 섞지 않는다. */
10
- let NonconformanceCause = class NonconformanceCause {
11
- };
12
- exports.NonconformanceCause = NonconformanceCause;
13
- tslib_1.__decorate([
14
- (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
15
- (0, type_graphql_1.Field)(type => type_graphql_1.ID),
16
- tslib_1.__metadata("design:type", String)
17
- ], NonconformanceCause.prototype, "id", void 0);
18
- tslib_1.__decorate([
19
- (0, typeorm_1.ManyToOne)(type => shell_1.Domain),
20
- (0, type_graphql_1.Field)(type => shell_1.Domain),
21
- tslib_1.__metadata("design:type", shell_1.Domain)
22
- ], NonconformanceCause.prototype, "domain", void 0);
23
- tslib_1.__decorate([
24
- (0, typeorm_1.RelationId)((cause) => cause.domain),
25
- tslib_1.__metadata("design:type", String)
26
- ], NonconformanceCause.prototype, "domainId", void 0);
27
- tslib_1.__decorate([
28
- (0, typeorm_1.Column)(),
29
- (0, type_graphql_1.Field)(),
30
- tslib_1.__metadata("design:type", String)
31
- ], NonconformanceCause.prototype, "name", void 0);
32
- tslib_1.__decorate([
33
- (0, typeorm_1.Column)({ nullable: true }),
34
- (0, type_graphql_1.Field)({ nullable: true }),
35
- tslib_1.__metadata("design:type", String)
36
- ], NonconformanceCause.prototype, "description", void 0);
37
- tslib_1.__decorate([
38
- (0, typeorm_1.Column)({ nullable: true }),
39
- (0, type_graphql_1.Field)({ nullable: true }),
40
- tslib_1.__metadata("design:type", String)
41
- ], NonconformanceCause.prototype, "parentName", void 0);
42
- tslib_1.__decorate([
43
- (0, typeorm_1.Column)({ type: 'boolean', nullable: true }),
44
- (0, type_graphql_1.Field)({ nullable: true }),
45
- tslib_1.__metadata("design:type", Boolean)
46
- ], NonconformanceCause.prototype, "detailRequired", void 0);
47
- tslib_1.__decorate([
48
- (0, typeorm_1.Column)({ nullable: true }),
49
- (0, type_graphql_1.Field)({ nullable: true }),
50
- tslib_1.__metadata("design:type", Date)
51
- ], NonconformanceCause.prototype, "effectiveStart", void 0);
52
- tslib_1.__decorate([
53
- (0, typeorm_1.Column)({ nullable: true }),
54
- (0, type_graphql_1.Field)({ nullable: true }),
55
- tslib_1.__metadata("design:type", Date)
56
- ], NonconformanceCause.prototype, "effectiveEnd", void 0);
57
- tslib_1.__decorate([
58
- (0, typeorm_1.CreateDateColumn)(),
59
- (0, type_graphql_1.Field)({ nullable: true }),
60
- tslib_1.__metadata("design:type", Date)
61
- ], NonconformanceCause.prototype, "createdAt", void 0);
62
- tslib_1.__decorate([
63
- (0, typeorm_1.UpdateDateColumn)(),
64
- (0, type_graphql_1.Field)({ nullable: true }),
65
- tslib_1.__metadata("design:type", Date)
66
- ], NonconformanceCause.prototype, "updatedAt", void 0);
67
- tslib_1.__decorate([
68
- (0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
69
- (0, type_graphql_1.Field)(type => auth_base_1.User, { nullable: true }),
70
- tslib_1.__metadata("design:type", auth_base_1.User)
71
- ], NonconformanceCause.prototype, "creator", void 0);
72
- tslib_1.__decorate([
73
- (0, typeorm_1.RelationId)((cause) => cause.creator),
74
- tslib_1.__metadata("design:type", String)
75
- ], NonconformanceCause.prototype, "creatorId", void 0);
76
- tslib_1.__decorate([
77
- (0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
78
- (0, type_graphql_1.Field)(type => auth_base_1.User, { nullable: true }),
79
- tslib_1.__metadata("design:type", auth_base_1.User)
80
- ], NonconformanceCause.prototype, "updater", void 0);
81
- tslib_1.__decorate([
82
- (0, typeorm_1.RelationId)((cause) => cause.updater),
83
- tslib_1.__metadata("design:type", String)
84
- ], NonconformanceCause.prototype, "updaterId", void 0);
85
- exports.NonconformanceCause = NonconformanceCause = tslib_1.__decorate([
86
- (0, typeorm_1.Entity)({ name: 'ops_nonconformance_cause' }),
87
- (0, typeorm_1.Index)('ix_ops_nonconformance_cause_0', (cause) => [cause.domain, cause.name], { unique: true }),
88
- (0, type_graphql_1.ObjectType)({ description: 'A classified product nonconformance cause' })
89
- ], NonconformanceCause);
90
- //# sourceMappingURL=nonconformance-cause.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nonconformance-cause.js","sourceRoot":"","sources":["../../../server/service/quality/nonconformance-cause.ts"],"names":[],"mappings":"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","sourcesContent":["import { Column, CreateDateColumn, Entity, Index, ManyToOne, PrimaryGeneratedColumn, RelationId, UpdateDateColumn } from 'typeorm'\nimport { Field, ID, ObjectType } from 'type-graphql'\nimport { Domain } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\n\n/** 제품 부적합의 원인 코드. 설비 상태용 StopReason과 섞지 않는다. */\n@Entity({ name: 'ops_nonconformance_cause' })\n@Index('ix_ops_nonconformance_cause_0', (cause: NonconformanceCause) => [cause.domain, cause.name], { unique: true })\n@ObjectType({ description: 'A classified product nonconformance cause' })\nexport class NonconformanceCause {\n @PrimaryGeneratedColumn('uuid') @Field(type => ID) readonly id: string\n @ManyToOne(type => Domain) @Field(type => Domain) domain?: Domain\n @RelationId((cause: NonconformanceCause) => cause.domain) domainId?: string\n @Column() @Field() name: string\n @Column({ nullable: true }) @Field({ nullable: true }) description?: string\n @Column({ nullable: true }) @Field({ nullable: true }) parentName?: string\n @Column({ type: 'boolean', nullable: true }) @Field({ nullable: true }) detailRequired?: boolean\n @Column({ nullable: true }) @Field({ nullable: true }) effectiveStart?: Date\n @Column({ nullable: true }) @Field({ nullable: true }) effectiveEnd?: Date\n @CreateDateColumn() @Field({ nullable: true }) createdAt?: Date\n @UpdateDateColumn() @Field({ nullable: true }) updatedAt?: Date\n @ManyToOne(type => User, { nullable: true }) @Field(type => User, { nullable: true }) creator?: User\n @RelationId((cause: NonconformanceCause) => cause.creator) creatorId?: string\n @ManyToOne(type => User, { nullable: true }) @Field(type => User, { nullable: true }) updater?: User\n @RelationId((cause: NonconformanceCause) => cause.updater) updaterId?: string\n}\n"]}
@@ -1,10 +0,0 @@
1
- import { RecipeDefinition } from './recipe-definition';
2
- import { RouteDefinition } from './route-definition';
3
- import { RecipeDefinitionResolver, RouteDefinitionResolver } from './recipe-master-resolver';
4
- import { RecipeQuery } from './recipe-query';
5
- import { RecipeRevisionResolver } from './recipe-revision-resolver';
6
- export declare const entities: (typeof RouteDefinition | typeof RecipeDefinition | typeof import("./recipe-revision").RecipeRevision | typeof import("./recipe-revision-line").RecipeRevisionOutput | typeof import("./recipe-revision").RecipePlan | typeof import("./recipe-revision").RecipeSegment | typeof import("./recipe-revision").RecipeBasis)[];
7
- export declare const resolvers: (typeof RecipeDefinitionResolver | typeof RouteDefinitionResolver | typeof RecipeRevisionResolver | typeof RecipeQuery)[];
8
- export * from './recipe-definition';
9
- export * from './route-definition';
10
- export * from './recipe-master';
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolvers = exports.entities = void 0;
4
- const tslib_1 = require("tslib");
5
- const recipe_definition_1 = require("./recipe-definition");
6
- const route_definition_1 = require("./route-definition");
7
- const recipe_master_resolver_1 = require("./recipe-master-resolver");
8
- const recipe_query_1 = require("./recipe-query");
9
- const recipe_revision_1 = require("./recipe-revision");
10
- const recipe_revision_resolver_1 = require("./recipe-revision-resolver");
11
- exports.entities = [recipe_definition_1.RecipeDefinition, route_definition_1.RouteDefinition, ...recipe_revision_1.RECIPE_REVISION_ENTITIES];
12
- exports.resolvers = [recipe_master_resolver_1.RecipeDefinitionResolver, recipe_master_resolver_1.RouteDefinitionResolver, recipe_query_1.RecipeQuery, recipe_revision_resolver_1.RecipeRevisionResolver];
13
- tslib_1.__exportStar(require("./recipe-definition"), exports);
14
- tslib_1.__exportStar(require("./route-definition"), exports);
15
- tslib_1.__exportStar(require("./recipe-master"), exports);
16
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/recipe/index.ts"],"names":[],"mappings":";;;;AAAA,2DAAsD;AACtD,yDAAoD;AACpD,qEAA4F;AAC5F,iDAA4C;AAC5C,uDAA4D;AAC5D,yEAAmE;AAEtD,QAAA,QAAQ,GAAG,CAAC,oCAAgB,EAAE,kCAAe,EAAE,GAAG,0CAAwB,CAAC,CAAA;AAC3E,QAAA,SAAS,GAAG,CAAC,iDAAwB,EAAE,gDAAuB,EAAE,0BAAW,EAAE,iDAAsB,CAAC,CAAA;AAEjH,8DAAmC;AACnC,6DAAkC;AAClC,0DAA+B","sourcesContent":["import { RecipeDefinition } from './recipe-definition'\nimport { RouteDefinition } from './route-definition'\nimport { RecipeDefinitionResolver, RouteDefinitionResolver } from './recipe-master-resolver'\nimport { RecipeQuery } from './recipe-query'\nimport { RECIPE_REVISION_ENTITIES } from './recipe-revision'\nimport { RecipeRevisionResolver } from './recipe-revision-resolver'\n\nexport const entities = [RecipeDefinition, RouteDefinition, ...RECIPE_REVISION_ENTITIES]\nexport const resolvers = [RecipeDefinitionResolver, RouteDefinitionResolver, RecipeQuery, RecipeRevisionResolver]\n\nexport * from './recipe-definition'\nexport * from './route-definition'\nexport * from './recipe-master'\n"]}
@@ -1,75 +0,0 @@
1
- import { Domain } from '@things-factory/shell';
2
- import { User } from '@things-factory/auth-base';
3
- /**
4
- * 레시피 — **무엇으로 무엇을 만드나**. 커널 `RecipeDef` 와 같은 모양이다.
5
- *
6
- * ── 이 자리가 답하는 것 ──────────────────────────────────────────────────
7
- * 「이 품목은 무엇으로 만드나」와 「이 품목을 만드는 것은 어느 레시피인가」다. 둘째가 MES 가 물어야 했던
8
- * 것인데 물을 곳이 없었다.
9
- *
10
- * ── 품목에 지시서를 달지 않는 이유 ───────────────────────────────────────
11
- * ISA-95 에는 자재 명세가 붙는 자리가 둘이고 뜻이 다르다(§`RecipePart.operation`).
12
- *
13
- * · `ProcessSegment` — 그 자리가 **할 수 있는 일**. 품목에 매이지 않는다 → `OperationDefinition`
14
- * · `OperationsSegment` — 그 **품목을 만드는 절차**의 한 단계. 품목에 매인다 → **레시피가 그 범위다**
15
- *
16
- * 그래서 품목→지시서를 이으려면 그 사이에 레시피가 있어야 한다. 공정에 품목을 붙이면 범주 오류이고,
17
- * 실 데이터가 그 크기를 보였다 — 「배합」에 품목별 BOM 을 붙이면 배합을 지나는 **모든** 로트가 자재
18
- * 631종 36톤을 먹는다.
19
- *
20
- * ── 같은 품목에 레시피가 둘일 수 있다 ────────────────────────────────────
21
- * 대체 레시피가 정상이다(첫 실 연동에서 라우팅이 둘 이상인 레시피가 306/471). 그래서 **품목이 레시피를
22
- * 가리키지 않고 레시피가 품목을 가리킨다** — 품목은 하나를 고를 수 없다.
23
- */
24
- export declare class RecipeDefinition {
25
- /** Read projection of the effective revision, not a mutable identity column. */
26
- revisionNumber?: number;
27
- planGeneration: number;
28
- revisionLock: number;
29
- readonly id: string;
30
- domain?: Domain;
31
- domainId?: string;
32
- /** 레시피 키 — 오더의 `recipeKey` 가 이 값을 가리킨다(커널 `RecipeDef.key`). */
33
- name: string;
34
- description?: string;
35
- /**
36
- * **무엇을 만드나** — `MaterialDefinition.name`.
37
- *
38
- * `outputs` 안에도 있지만 이 칸을 따로 둔다. 「이 품목을 만드는 레시피」를 JSON 안을 뒤져 찾으면
39
- * 다섯 드라이버에서 색인이 서지 않고, 그 질의는 MES 가 지시를 받을 때마다 부른다.
40
- *
41
- * 산출이 여럿인 레시피(부산물)에서는 **주 산출**을 적는다. 나머지는 `outputs` 가 든다.
42
- */
43
- materialDefinitionName: string;
44
- /**
45
- * 투입 — 커널 `RecipePart[]`(`material` · `qty` · `operation?`).
46
- *
47
- * `operation` 은 **이 투입이 들어가는 공정**이다. 없으면 오더 착수에 확보한다. 그 태그가 여기 있는
48
- * 이유는 품목별 소요가 사는 자리가 레시피이기 때문이다.
49
- */
50
- inputs: Record<string, unknown>[];
51
- /** 산출 — 커널 `RecipePart[]`. 부산물이 있으면 여기 함께 든다. */
52
- outputs: Record<string, unknown>[];
53
- /**
54
- * 이 산출물을 만드는 공정 라우팅 — `RouteDefinition.name`(커널 `RecipeDef.route`).
55
- *
56
- * 순서는 라우팅이 소유하고 레시피는 그것을 가리킨다. 레시피에 단계 목록을 또 두면 두 목록이 어긋날 수
57
- * 있고, 어긋났을 때 어느 쪽이 맞는지 말할 근거가 없다.
58
- */
59
- route?: string;
60
- /** 언제부터 유효한가 — 표준 `EffectiveStartDate`. */
61
- effectiveStart?: Date;
62
- /**
63
- * 언제까지 유효한가 — 표준 `EffectiveEndDate`.
64
- *
65
- * **개정할 때 행을 고치지 않고 이 칸을 채우고 새 행을 세운다.** 고치면 그 레시피로 만든 지난 실적이
66
- * 어느 배합으로 만든 것인지 잃는다.
67
- */
68
- effectiveEnd?: Date;
69
- createdAt?: Date;
70
- updatedAt?: Date;
71
- creator?: User;
72
- creatorId?: string;
73
- updater?: User;
74
- updaterId?: string;
75
- }