@things-factory/ops-master 10.1.248 → 10.1.250

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/dist-client/bootstrap.d.ts +19 -0
  2. package/dist-client/bootstrap.js +66 -0
  3. package/dist-client/bootstrap.js.map +1 -0
  4. package/dist-client/index.d.ts +17 -0
  5. package/dist-client/index.js +21 -0
  6. package/dist-client/index.js.map +1 -0
  7. package/dist-client/master-change-approval.d.ts +14 -0
  8. package/dist-client/master-change-approval.js +36 -0
  9. package/dist-client/master-change-approval.js.map +1 -0
  10. package/dist-client/master-change-policy-axes.d.ts +37 -0
  11. package/dist-client/master-change-policy-axes.js +29 -0
  12. package/dist-client/master-change-policy-axes.js.map +1 -0
  13. package/dist-client/master-change-policy-panel.d.ts +59 -0
  14. package/dist-client/master-change-policy-panel.js +454 -0
  15. package/dist-client/master-change-policy-panel.js.map +1 -0
  16. package/dist-client/master-change-providers.d.ts +4 -0
  17. package/dist-client/master-change-providers.js +91 -0
  18. package/dist-client/master-change-providers.js.map +1 -0
  19. package/dist-client/pages/master/applied-when-dialog.d.ts +48 -0
  20. package/dist-client/pages/master/applied-when-dialog.js +137 -0
  21. package/dist-client/pages/master/applied-when-dialog.js.map +1 -0
  22. package/dist-client/pages/master/assignment-fields.d.ts +27 -0
  23. package/dist-client/pages/master/assignment-fields.js +62 -0
  24. package/dist-client/pages/master/assignment-fields.js.map +1 -0
  25. package/dist-client/pages/master/equipment-class.d.ts +12 -0
  26. package/dist-client/pages/master/equipment-class.js +42 -0
  27. package/dist-client/pages/master/equipment-class.js.map +1 -0
  28. package/dist-client/pages/master/equipment.d.ts +12 -0
  29. package/dist-client/pages/master/equipment.js +58 -0
  30. package/dist-client/pages/master/equipment.js.map +1 -0
  31. package/dist-client/pages/master/grist-iso-duration.d.ts +20 -0
  32. package/dist-client/pages/master/grist-iso-duration.js +70 -0
  33. package/dist-client/pages/master/grist-iso-duration.js.map +1 -0
  34. package/dist-client/pages/master/grist-reference.d.ts +91 -0
  35. package/dist-client/pages/master/grist-reference.js +419 -0
  36. package/dist-client/pages/master/grist-reference.js.map +1 -0
  37. package/dist-client/pages/master/import-rows.d.ts +35 -0
  38. package/dist-client/pages/master/import-rows.js +66 -0
  39. package/dist-client/pages/master/import-rows.js.map +1 -0
  40. package/dist-client/pages/master/iso-duration.d.ts +34 -0
  41. package/dist-client/pages/master/iso-duration.js +76 -0
  42. package/dist-client/pages/master/iso-duration.js.map +1 -0
  43. package/dist-client/pages/master/master-options.d.ts +40 -0
  44. package/dist-client/pages/master/master-options.js +54 -0
  45. package/dist-client/pages/master/master-options.js.map +1 -0
  46. package/dist-client/pages/master/master-page-base.d.ts +369 -0
  47. package/dist-client/pages/master/master-page-base.js +657 -0
  48. package/dist-client/pages/master/master-page-base.js.map +1 -0
  49. package/dist-client/pages/master/material-class.d.ts +12 -0
  50. package/dist-client/pages/master/material-class.js +42 -0
  51. package/dist-client/pages/master/material-class.js.map +1 -0
  52. package/dist-client/pages/master/material-definition.d.ts +5 -0
  53. package/dist-client/pages/master/material-definition.js +14 -0
  54. package/dist-client/pages/master/material-definition.js.map +1 -0
  55. package/dist-client/pages/master/material-revision-fields.d.ts +2 -0
  56. package/dist-client/pages/master/material-revision-fields.js +43 -0
  57. package/dist-client/pages/master/material-revision-fields.js.map +1 -0
  58. package/dist-client/pages/master/operation-definition.d.ts +12 -0
  59. package/dist-client/pages/master/operation-definition.js +49 -0
  60. package/dist-client/pages/master/operation-definition.js.map +1 -0
  61. package/dist-client/pages/master/operational-location.d.ts +84 -0
  62. package/dist-client/pages/master/operational-location.js +432 -0
  63. package/dist-client/pages/master/operational-location.js.map +1 -0
  64. package/dist-client/pages/master/person.d.ts +12 -0
  65. package/dist-client/pages/master/person.js +41 -0
  66. package/dist-client/pages/master/person.js.map +1 -0
  67. package/dist-client/pages/master/personnel-class.d.ts +12 -0
  68. package/dist-client/pages/master/personnel-class.js +43 -0
  69. package/dist-client/pages/master/personnel-class.js.map +1 -0
  70. package/dist-client/pages/master/physical-asset-class.d.ts +12 -0
  71. package/dist-client/pages/master/physical-asset-class.js +40 -0
  72. package/dist-client/pages/master/physical-asset-class.js.map +1 -0
  73. package/dist-client/pages/master/physical-asset.d.ts +12 -0
  74. package/dist-client/pages/master/physical-asset.js +41 -0
  75. package/dist-client/pages/master/physical-asset.js.map +1 -0
  76. package/dist-client/pages/master/recipe-definition.d.ts +5 -0
  77. package/dist-client/pages/master/recipe-definition.js +14 -0
  78. package/dist-client/pages/master/recipe-definition.js.map +1 -0
  79. package/dist-client/pages/master/reference-targets.d.ts +42 -0
  80. package/dist-client/pages/master/reference-targets.js +82 -0
  81. package/dist-client/pages/master/reference-targets.js.map +1 -0
  82. package/dist-client/pages/master/revision-comparison.d.ts +49 -0
  83. package/dist-client/pages/master/revision-comparison.js +560 -0
  84. package/dist-client/pages/master/revision-comparison.js.map +1 -0
  85. package/dist-client/pages/master/revision-view.d.ts +34 -0
  86. package/dist-client/pages/master/revision-view.js +145 -0
  87. package/dist-client/pages/master/revision-view.js.map +1 -0
  88. package/dist-client/pages/master/revision-workspace.d.ts +50 -0
  89. package/dist-client/pages/master/revision-workspace.js +763 -0
  90. package/dist-client/pages/master/revision-workspace.js.map +1 -0
  91. package/dist-client/pages/master/route-definition.d.ts +19 -0
  92. package/dist-client/pages/master/route-definition.js +40 -0
  93. package/dist-client/pages/master/route-definition.js.map +1 -0
  94. package/dist-client/pages/master/stop-reason.d.ts +12 -0
  95. package/dist-client/pages/master/stop-reason.js +48 -0
  96. package/dist-client/pages/master/stop-reason.js.map +1 -0
  97. package/dist-client/pages/master/test-specification.d.ts +5 -0
  98. package/dist-client/pages/master/test-specification.js +14 -0
  99. package/dist-client/pages/master/test-specification.js.map +1 -0
  100. package/dist-client/pages/master-axes.d.ts +24 -0
  101. package/dist-client/pages/master-axes.js +39 -0
  102. package/dist-client/pages/master-axes.js.map +1 -0
  103. package/dist-client/route.d.ts +1 -0
  104. package/dist-client/route.js +81 -0
  105. package/dist-client/route.js.map +1 -0
  106. package/dist-client/tsconfig.tsbuildinfo +1 -0
  107. package/dist-server/index.d.ts +1 -0
  108. package/dist-server/index.js +19 -0
  109. package/dist-server/index.js.map +1 -0
  110. package/dist-server/service/ai-entry/master-entry-rules.d.ts +175 -0
  111. package/dist-server/service/ai-entry/master-entry-rules.js +302 -0
  112. package/dist-server/service/ai-entry/master-entry-rules.js.map +1 -0
  113. package/dist-server/service/ai-entry/master-entry-targets.d.ts +23 -0
  114. package/dist-server/service/ai-entry/master-entry-targets.js +293 -0
  115. package/dist-server/service/ai-entry/master-entry-targets.js.map +1 -0
  116. package/dist-server/service/approval-route.d.ts +37 -0
  117. package/dist-server/service/approval-route.js +34 -0
  118. package/dist-server/service/approval-route.js.map +1 -0
  119. package/dist-server/service/asset/asset-lifecycle.d.ts +106 -0
  120. package/dist-server/service/asset/asset-lifecycle.js +126 -0
  121. package/dist-server/service/asset/asset-lifecycle.js.map +1 -0
  122. package/dist-server/service/asset/asset-master-resolver.d.ts +53 -0
  123. package/dist-server/service/asset/asset-master-resolver.js +185 -0
  124. package/dist-server/service/asset/asset-master-resolver.js.map +1 -0
  125. package/dist-server/service/asset/asset-master.d.ts +21 -0
  126. package/dist-server/service/asset/asset-master.js +25 -0
  127. package/dist-server/service/asset/asset-master.js.map +1 -0
  128. package/dist-server/service/asset/asset-query.d.ts +16 -0
  129. package/dist-server/service/asset/asset-query.js +72 -0
  130. package/dist-server/service/asset/asset-query.js.map +1 -0
  131. package/dist-server/service/asset/index.d.ts +6 -0
  132. package/dist-server/service/asset/index.js +10 -0
  133. package/dist-server/service/asset/index.js.map +1 -0
  134. package/dist-server/service/asset/physical-asset-class.d.ts +34 -0
  135. package/dist-server/service/asset/physical-asset-class.js +104 -0
  136. package/dist-server/service/asset/physical-asset-class.js.map +1 -0
  137. package/dist-server/service/asset/physical-asset.d.ts +66 -0
  138. package/dist-server/service/asset/physical-asset.js +123 -0
  139. package/dist-server/service/asset/physical-asset.js.map +1 -0
  140. package/dist-server/service/assignment/applied-when.d.ts +24 -0
  141. package/dist-server/service/assignment/applied-when.js +16 -0
  142. package/dist-server/service/assignment/applied-when.js.map +1 -0
  143. package/dist-server/service/assignment/assignment-history.d.ts +92 -0
  144. package/dist-server/service/assignment/assignment-history.js +289 -0
  145. package/dist-server/service/assignment/assignment-history.js.map +1 -0
  146. package/dist-server/service/assignment/assignment-write.d.ts +42 -0
  147. package/dist-server/service/assignment/assignment-write.js +101 -0
  148. package/dist-server/service/assignment/assignment-write.js.map +1 -0
  149. package/dist-server/service/assignment/master-value-claim.d.ts +135 -0
  150. package/dist-server/service/assignment/master-value-claim.js +174 -0
  151. package/dist-server/service/assignment/master-value-claim.js.map +1 -0
  152. package/dist-server/service/equipment/equipment-class.d.ts +34 -0
  153. package/dist-server/service/equipment/equipment-class.js +104 -0
  154. package/dist-server/service/equipment/equipment-class.js.map +1 -0
  155. package/dist-server/service/equipment/equipment-master-resolver.d.ts +77 -0
  156. package/dist-server/service/equipment/equipment-master-resolver.js +266 -0
  157. package/dist-server/service/equipment/equipment-master-resolver.js.map +1 -0
  158. package/dist-server/service/equipment/equipment-master.d.ts +30 -0
  159. package/dist-server/service/equipment/equipment-master.js +53 -0
  160. package/dist-server/service/equipment/equipment-master.js.map +1 -0
  161. package/dist-server/service/equipment/equipment-query.d.ts +16 -0
  162. package/dist-server/service/equipment/equipment-query.js +72 -0
  163. package/dist-server/service/equipment/equipment-query.js.map +1 -0
  164. package/dist-server/service/equipment/equipment.d.ts +71 -0
  165. package/dist-server/service/equipment/equipment.js +138 -0
  166. package/dist-server/service/equipment/equipment.js.map +1 -0
  167. package/dist-server/service/equipment/index.d.ts +8 -0
  168. package/dist-server/service/equipment/index.js +12 -0
  169. package/dist-server/service/equipment/index.js.map +1 -0
  170. package/dist-server/service/equipment/state-period-rules.d.ts +95 -0
  171. package/dist-server/service/equipment/state-period-rules.js +122 -0
  172. package/dist-server/service/equipment/state-period-rules.js.map +1 -0
  173. package/dist-server/service/equipment/stop-reason-query.d.ts +11 -0
  174. package/dist-server/service/equipment/stop-reason-query.js +39 -0
  175. package/dist-server/service/equipment/stop-reason-query.js.map +1 -0
  176. package/dist-server/service/equipment/stop-reason.d.ts +58 -0
  177. package/dist-server/service/equipment/stop-reason.js +114 -0
  178. package/dist-server/service/equipment/stop-reason.js.map +1 -0
  179. package/dist-server/service/index.d.ts +82 -0
  180. package/dist-server/service/index.js +145 -0
  181. package/dist-server/service/index.js.map +1 -0
  182. package/dist-server/service/location/index.d.ts +5 -0
  183. package/dist-server/service/location/index.js +9 -0
  184. package/dist-server/service/location/index.js.map +1 -0
  185. package/dist-server/service/location/location-master-resolver.d.ts +60 -0
  186. package/dist-server/service/location/location-master-resolver.js +313 -0
  187. package/dist-server/service/location/location-master-resolver.js.map +1 -0
  188. package/dist-server/service/location/location-master.d.ts +26 -0
  189. package/dist-server/service/location/location-master.js +28 -0
  190. package/dist-server/service/location/location-master.js.map +1 -0
  191. package/dist-server/service/location/location-query.d.ts +15 -0
  192. package/dist-server/service/location/location-query.js +56 -0
  193. package/dist-server/service/location/location-query.js.map +1 -0
  194. package/dist-server/service/location/operational-location.d.ts +116 -0
  195. package/dist-server/service/location/operational-location.js +157 -0
  196. package/dist-server/service/location/operational-location.js.map +1 -0
  197. package/dist-server/service/master-axis.d.ts +40 -0
  198. package/dist-server/service/master-axis.js +57 -0
  199. package/dist-server/service/master-axis.js.map +1 -0
  200. package/dist-server/service/master-change-approval/approval-input.d.ts +17 -0
  201. package/dist-server/service/master-change-approval/approval-input.js +35 -0
  202. package/dist-server/service/master-change-approval/approval-input.js.map +1 -0
  203. package/dist-server/service/master-change-approval/builtin-axes.d.ts +4 -0
  204. package/dist-server/service/master-change-approval/builtin-axes.js +96 -0
  205. package/dist-server/service/master-change-approval/builtin-axes.js.map +1 -0
  206. package/dist-server/service/master-change-approval/index.d.ts +14 -0
  207. package/dist-server/service/master-change-approval/index.js +37 -0
  208. package/dist-server/service/master-change-approval/index.js.map +1 -0
  209. package/dist-server/service/master-change-approval/master-change-axis.d.ts +54 -0
  210. package/dist-server/service/master-change-approval/master-change-axis.js +17 -0
  211. package/dist-server/service/master-change-approval/master-change-axis.js.map +1 -0
  212. package/dist-server/service/master-change-approval/master-change-flow.d.ts +65 -0
  213. package/dist-server/service/master-change-approval/master-change-flow.js +125 -0
  214. package/dist-server/service/master-change-approval/master-change-flow.js.map +1 -0
  215. package/dist-server/service/master-change-approval/master-change-resolver.d.ts +18 -0
  216. package/dist-server/service/master-change-approval/master-change-resolver.js +58 -0
  217. package/dist-server/service/master-change-approval/master-change-resolver.js.map +1 -0
  218. package/dist-server/service/master-change-policy.d.ts +122 -0
  219. package/dist-server/service/master-change-policy.js +304 -0
  220. package/dist-server/service/master-change-policy.js.map +1 -0
  221. package/dist-server/service/master-conformance-resolver.d.ts +34 -0
  222. package/dist-server/service/master-conformance-resolver.js +153 -0
  223. package/dist-server/service/master-conformance-resolver.js.map +1 -0
  224. package/dist-server/service/master-conformance.d.ts +80 -0
  225. package/dist-server/service/master-conformance.js +266 -0
  226. package/dist-server/service/master-conformance.js.map +1 -0
  227. package/dist-server/service/master-crud.d.ts +55 -0
  228. package/dist-server/service/master-crud.js +93 -0
  229. package/dist-server/service/master-crud.js.map +1 -0
  230. package/dist-server/service/master-list.d.ts +12 -0
  231. package/dist-server/service/master-list.js +30 -0
  232. package/dist-server/service/master-list.js.map +1 -0
  233. package/dist-server/service/master-page-query.d.ts +33 -0
  234. package/dist-server/service/master-page-query.js +55 -0
  235. package/dist-server/service/master-page-query.js.map +1 -0
  236. package/dist-server/service/master-page.d.ts +85 -0
  237. package/dist-server/service/master-page.js +104 -0
  238. package/dist-server/service/master-page.js.map +1 -0
  239. package/dist-server/service/material/index.d.ts +7 -0
  240. package/dist-server/service/material/index.js +12 -0
  241. package/dist-server/service/material/index.js.map +1 -0
  242. package/dist-server/service/material/material-axis-status.d.ts +8 -0
  243. package/dist-server/service/material/material-axis-status.js +19 -0
  244. package/dist-server/service/material/material-axis-status.js.map +1 -0
  245. package/dist-server/service/material/material-class.d.ts +34 -0
  246. package/dist-server/service/material/material-class.js +104 -0
  247. package/dist-server/service/material/material-class.js.map +1 -0
  248. package/dist-server/service/material/material-definition.d.ts +45 -0
  249. package/dist-server/service/material/material-definition.js +125 -0
  250. package/dist-server/service/material/material-definition.js.map +1 -0
  251. package/dist-server/service/material/material-effective-list.d.ts +39 -0
  252. package/dist-server/service/material/material-effective-list.js +54 -0
  253. package/dist-server/service/material/material-effective-list.js.map +1 -0
  254. package/dist-server/service/material/material-master-resolver.d.ts +106 -0
  255. package/dist-server/service/material/material-master-resolver.js +351 -0
  256. package/dist-server/service/material/material-master-resolver.js.map +1 -0
  257. package/dist-server/service/material/material-master.d.ts +9 -0
  258. package/dist-server/service/material/material-master.js +24 -0
  259. package/dist-server/service/material/material-master.js.map +1 -0
  260. package/dist-server/service/material/material-query.d.ts +16 -0
  261. package/dist-server/service/material/material-query.js +79 -0
  262. package/dist-server/service/material/material-query.js.map +1 -0
  263. package/dist-server/service/material/material-revision-content.d.ts +10 -0
  264. package/dist-server/service/material/material-revision-content.js +92 -0
  265. package/dist-server/service/material/material-revision-content.js.map +1 -0
  266. package/dist-server/service/material/material-revision-resolver.d.ts +60 -0
  267. package/dist-server/service/material/material-revision-resolver.js +96 -0
  268. package/dist-server/service/material/material-revision-resolver.js.map +1 -0
  269. package/dist-server/service/material/material-revision-service.d.ts +179 -0
  270. package/dist-server/service/material/material-revision-service.js +687 -0
  271. package/dist-server/service/material/material-revision-service.js.map +1 -0
  272. package/dist-server/service/material/material-revision.d.ts +86 -0
  273. package/dist-server/service/material/material-revision.js +339 -0
  274. package/dist-server/service/material/material-revision.js.map +1 -0
  275. package/dist-server/service/material/recipe-index.d.ts +23 -0
  276. package/dist-server/service/material/recipe-index.js +44 -0
  277. package/dist-server/service/material/recipe-index.js.map +1 -0
  278. package/dist-server/service/operation/index.d.ts +6 -0
  279. package/dist-server/service/operation/index.js +10 -0
  280. package/dist-server/service/operation/index.js.map +1 -0
  281. package/dist-server/service/operation/operation-definition.d.ts +52 -0
  282. package/dist-server/service/operation/operation-definition.js +143 -0
  283. package/dist-server/service/operation/operation-definition.js.map +1 -0
  284. package/dist-server/service/operation/operation-master-resolver.d.ts +52 -0
  285. package/dist-server/service/operation/operation-master-resolver.js +187 -0
  286. package/dist-server/service/operation/operation-master-resolver.js.map +1 -0
  287. package/dist-server/service/operation/operation-master.d.ts +21 -0
  288. package/dist-server/service/operation/operation-master.js +28 -0
  289. package/dist-server/service/operation/operation-master.js.map +1 -0
  290. package/dist-server/service/operation/operation-query.d.ts +15 -0
  291. package/dist-server/service/operation/operation-query.js +56 -0
  292. package/dist-server/service/operation/operation-query.js.map +1 -0
  293. package/dist-server/service/operation/operation-readiness-resolver.d.ts +39 -0
  294. package/dist-server/service/operation/operation-readiness-resolver.js +111 -0
  295. package/dist-server/service/operation/operation-readiness-resolver.js.map +1 -0
  296. package/dist-server/service/operation/operation-readiness.d.ts +34 -0
  297. package/dist-server/service/operation/operation-readiness.js +133 -0
  298. package/dist-server/service/operation/operation-readiness.js.map +1 -0
  299. package/dist-server/service/personnel/index.d.ts +6 -0
  300. package/dist-server/service/personnel/index.js +10 -0
  301. package/dist-server/service/personnel/index.js.map +1 -0
  302. package/dist-server/service/personnel/person.d.ts +51 -0
  303. package/dist-server/service/personnel/person.js +119 -0
  304. package/dist-server/service/personnel/person.js.map +1 -0
  305. package/dist-server/service/personnel/personnel-class-readiness.d.ts +22 -0
  306. package/dist-server/service/personnel/personnel-class-readiness.js +98 -0
  307. package/dist-server/service/personnel/personnel-class-readiness.js.map +1 -0
  308. package/dist-server/service/personnel/personnel-class.d.ts +54 -0
  309. package/dist-server/service/personnel/personnel-class.js +114 -0
  310. package/dist-server/service/personnel/personnel-class.js.map +1 -0
  311. package/dist-server/service/personnel/personnel-master-resolver.d.ts +53 -0
  312. package/dist-server/service/personnel/personnel-master-resolver.js +187 -0
  313. package/dist-server/service/personnel/personnel-master-resolver.js.map +1 -0
  314. package/dist-server/service/personnel/personnel-master.d.ts +39 -0
  315. package/dist-server/service/personnel/personnel-master.js +34 -0
  316. package/dist-server/service/personnel/personnel-master.js.map +1 -0
  317. package/dist-server/service/personnel/personnel-query.d.ts +29 -0
  318. package/dist-server/service/personnel/personnel-query.js +79 -0
  319. package/dist-server/service/personnel/personnel-query.js.map +1 -0
  320. package/dist-server/service/personnel/qualification.d.ts +104 -0
  321. package/dist-server/service/personnel/qualification.js +147 -0
  322. package/dist-server/service/personnel/qualification.js.map +1 -0
  323. package/dist-server/service/quality/index.d.ts +4 -0
  324. package/dist-server/service/quality/index.js +8 -0
  325. package/dist-server/service/quality/index.js.map +1 -0
  326. package/dist-server/service/quality/nonconformance-cause-resolver.d.ts +12 -0
  327. package/dist-server/service/quality/nonconformance-cause-resolver.js +60 -0
  328. package/dist-server/service/quality/nonconformance-cause-resolver.js.map +1 -0
  329. package/dist-server/service/quality/nonconformance-cause.d.ts +20 -0
  330. package/dist-server/service/quality/nonconformance-cause.js +90 -0
  331. package/dist-server/service/quality/nonconformance-cause.js.map +1 -0
  332. package/dist-server/service/recipe/index.d.ts +10 -0
  333. package/dist-server/service/recipe/index.js +16 -0
  334. package/dist-server/service/recipe/index.js.map +1 -0
  335. package/dist-server/service/recipe/recipe-definition.d.ts +75 -0
  336. package/dist-server/service/recipe/recipe-definition.js +143 -0
  337. package/dist-server/service/recipe/recipe-definition.js.map +1 -0
  338. package/dist-server/service/recipe/recipe-effective-list.d.ts +49 -0
  339. package/dist-server/service/recipe/recipe-effective-list.js +96 -0
  340. package/dist-server/service/recipe/recipe-effective-list.js.map +1 -0
  341. package/dist-server/service/recipe/recipe-master-resolver.d.ts +28 -0
  342. package/dist-server/service/recipe/recipe-master-resolver.js +128 -0
  343. package/dist-server/service/recipe/recipe-master-resolver.js.map +1 -0
  344. package/dist-server/service/recipe/recipe-master.d.ts +37 -0
  345. package/dist-server/service/recipe/recipe-master.js +47 -0
  346. package/dist-server/service/recipe/recipe-master.js.map +1 -0
  347. package/dist-server/service/recipe/recipe-query.d.ts +21 -0
  348. package/dist-server/service/recipe/recipe-query.js +82 -0
  349. package/dist-server/service/recipe/recipe-query.js.map +1 -0
  350. package/dist-server/service/recipe/recipe-revision-content.d.ts +32 -0
  351. package/dist-server/service/recipe/recipe-revision-content.js +70 -0
  352. package/dist-server/service/recipe/recipe-revision-content.js.map +1 -0
  353. package/dist-server/service/recipe/recipe-revision-line.d.ts +30 -0
  354. package/dist-server/service/recipe/recipe-revision-line.js +95 -0
  355. package/dist-server/service/recipe/recipe-revision-line.js.map +1 -0
  356. package/dist-server/service/recipe/recipe-revision-resolver.d.ts +65 -0
  357. package/dist-server/service/recipe/recipe-revision-resolver.js +96 -0
  358. package/dist-server/service/recipe/recipe-revision-resolver.js.map +1 -0
  359. package/dist-server/service/recipe/recipe-revision-service.d.ts +183 -0
  360. package/dist-server/service/recipe/recipe-revision-service.js +754 -0
  361. package/dist-server/service/recipe/recipe-revision-service.js.map +1 -0
  362. package/dist-server/service/recipe/recipe-revision.d.ts +102 -0
  363. package/dist-server/service/recipe/recipe-revision.js +373 -0
  364. package/dist-server/service/recipe/recipe-revision.js.map +1 -0
  365. package/dist-server/service/recipe/route-definition.d.ts +51 -0
  366. package/dist-server/service/recipe/route-definition.js +114 -0
  367. package/dist-server/service/recipe/route-definition.js.map +1 -0
  368. package/dist-server/service/resource/class-lineage.d.ts +46 -0
  369. package/dist-server/service/resource/class-lineage.js +80 -0
  370. package/dist-server/service/resource/class-lineage.js.map +1 -0
  371. package/dist-server/service/resource/class-members.d.ts +36 -0
  372. package/dist-server/service/resource/class-members.js +59 -0
  373. package/dist-server/service/resource/class-members.js.map +1 -0
  374. package/dist-server/service/resource/referrers.d.ts +54 -0
  375. package/dist-server/service/resource/referrers.js +99 -0
  376. package/dist-server/service/resource/referrers.js.map +1 -0
  377. package/dist-server/service/resource/resource-class.d.ts +25 -0
  378. package/dist-server/service/resource/resource-class.js +29 -0
  379. package/dist-server/service/resource/resource-class.js.map +1 -0
  380. package/dist-server/service/revision-baseline.d.ts +71 -0
  381. package/dist-server/service/revision-baseline.js +87 -0
  382. package/dist-server/service/revision-baseline.js.map +1 -0
  383. package/dist-server/service/row-lock.d.ts +22 -0
  384. package/dist-server/service/row-lock.js +31 -0
  385. package/dist-server/service/row-lock.js.map +1 -0
  386. package/dist-server/service/status/axis-stamp.d.ts +16 -0
  387. package/dist-server/service/status/axis-stamp.js +22 -0
  388. package/dist-server/service/status/axis-stamp.js.map +1 -0
  389. package/dist-server/service/status/index.d.ts +3 -0
  390. package/dist-server/service/status/index.js +7 -0
  391. package/dist-server/service/status/index.js.map +1 -0
  392. package/dist-server/service/status/master-status.d.ts +38 -0
  393. package/dist-server/service/status/master-status.js +129 -0
  394. package/dist-server/service/status/master-status.js.map +1 -0
  395. package/dist-server/service/test-spec/criteria-check.d.ts +53 -0
  396. package/dist-server/service/test-spec/criteria-check.js +142 -0
  397. package/dist-server/service/test-spec/criteria-check.js.map +1 -0
  398. package/dist-server/service/test-spec/criteria-rows.d.ts +89 -0
  399. package/dist-server/service/test-spec/criteria-rows.js +139 -0
  400. package/dist-server/service/test-spec/criteria-rows.js.map +1 -0
  401. package/dist-server/service/test-spec/index.d.ts +6 -0
  402. package/dist-server/service/test-spec/index.js +11 -0
  403. package/dist-server/service/test-spec/index.js.map +1 -0
  404. package/dist-server/service/test-spec/test-spec-effective-list.d.ts +34 -0
  405. package/dist-server/service/test-spec/test-spec-effective-list.js +42 -0
  406. package/dist-server/service/test-spec/test-spec-effective-list.js.map +1 -0
  407. package/dist-server/service/test-spec/test-spec-master-resolver.d.ts +44 -0
  408. package/dist-server/service/test-spec/test-spec-master-resolver.js +144 -0
  409. package/dist-server/service/test-spec/test-spec-master-resolver.js.map +1 -0
  410. package/dist-server/service/test-spec/test-spec-master.d.ts +6 -0
  411. package/dist-server/service/test-spec/test-spec-master.js +18 -0
  412. package/dist-server/service/test-spec/test-spec-master.js.map +1 -0
  413. package/dist-server/service/test-spec/test-spec-query.d.ts +15 -0
  414. package/dist-server/service/test-spec/test-spec-query.js +61 -0
  415. package/dist-server/service/test-spec/test-spec-query.js.map +1 -0
  416. package/dist-server/service/test-spec/test-spec-revision-resolver.d.ts +59 -0
  417. package/dist-server/service/test-spec/test-spec-revision-resolver.js +96 -0
  418. package/dist-server/service/test-spec/test-spec-revision-resolver.js.map +1 -0
  419. package/dist-server/service/test-spec/test-spec-revision-service.d.ts +178 -0
  420. package/dist-server/service/test-spec/test-spec-revision-service.js +685 -0
  421. package/dist-server/service/test-spec/test-spec-revision-service.js.map +1 -0
  422. package/dist-server/service/test-spec/test-spec-revision.d.ts +86 -0
  423. package/dist-server/service/test-spec/test-spec-revision.js +334 -0
  424. package/dist-server/service/test-spec/test-spec-revision.js.map +1 -0
  425. package/dist-server/service/test-spec/test-specification.d.ts +47 -0
  426. package/dist-server/service/test-spec/test-specification.js +119 -0
  427. package/dist-server/service/test-spec/test-specification.js.map +1 -0
  428. package/dist-server/tsconfig.tsbuildinfo +1 -0
  429. package/package.json +4 -4
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Equipment = 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
+ /**
10
+ * 설비 — **ISA-95 `Equipment`**.
11
+ *
12
+ * 설비는 작업을 수행하는 자원이다. 배정을 받고, 가동률로 평가받고, 능력으로 찾힌다. **계측기는 설비가
13
+ * 아니다** — 저울과 센서는 그 어느 것도 하지 않고, 그것은 관측의 원천이다. 계측기를 설비로 세우면
14
+ * 가동률 화면이 저울을 기계로 세고 「설비가 논다」가 나온다.
15
+ */
16
+ let Equipment = class Equipment {
17
+ };
18
+ exports.Equipment = Equipment;
19
+ tslib_1.__decorate([
20
+ (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
21
+ (0, type_graphql_1.Field)(type => type_graphql_1.ID),
22
+ tslib_1.__metadata("design:type", String)
23
+ ], Equipment.prototype, "id", void 0);
24
+ tslib_1.__decorate([
25
+ (0, typeorm_1.ManyToOne)(type => shell_1.Domain),
26
+ (0, type_graphql_1.Field)(type => shell_1.Domain),
27
+ tslib_1.__metadata("design:type", shell_1.Domain)
28
+ ], Equipment.prototype, "domain", void 0);
29
+ tslib_1.__decorate([
30
+ (0, typeorm_1.RelationId)((equipment) => equipment.domain),
31
+ tslib_1.__metadata("design:type", String)
32
+ ], Equipment.prototype, "domainId", void 0);
33
+ tslib_1.__decorate([
34
+ (0, typeorm_1.Column)(),
35
+ (0, type_graphql_1.Field)(),
36
+ tslib_1.__metadata("design:type", String)
37
+ ], Equipment.prototype, "name", void 0);
38
+ tslib_1.__decorate([
39
+ (0, typeorm_1.Column)({ nullable: true }),
40
+ (0, type_graphql_1.Field)({ nullable: true }),
41
+ tslib_1.__metadata("design:type", String)
42
+ ], Equipment.prototype, "description", void 0);
43
+ tslib_1.__decorate([
44
+ (0, typeorm_1.Column)(),
45
+ (0, type_graphql_1.Field)(),
46
+ tslib_1.__metadata("design:type", String)
47
+ ], Equipment.prototype, "kind", void 0);
48
+ tslib_1.__decorate([
49
+ (0, typeorm_1.Column)({ type: 'simple-json', nullable: true }),
50
+ (0, type_graphql_1.Field)(type => [String], { nullable: true }),
51
+ tslib_1.__metadata("design:type", Array)
52
+ ], Equipment.prototype, "equipmentClassIds", void 0);
53
+ tslib_1.__decorate([
54
+ (0, typeorm_1.Column)(),
55
+ (0, type_graphql_1.Field)(),
56
+ tslib_1.__metadata("design:type", String)
57
+ ], Equipment.prototype, "homeLocation", void 0);
58
+ tslib_1.__decorate([
59
+ (0, typeorm_1.Column)({ nullable: true }),
60
+ (0, type_graphql_1.Field)({ nullable: true }),
61
+ tslib_1.__metadata("design:type", String)
62
+ ], Equipment.prototype, "identity", void 0);
63
+ tslib_1.__decorate([
64
+ (0, typeorm_1.Column)({ type: 'bigint', nullable: true }),
65
+ (0, type_graphql_1.Field)(type => type_graphql_1.Int, { nullable: true }),
66
+ tslib_1.__metadata("design:type", Number)
67
+ ], Equipment.prototype, "mtbfMs", void 0);
68
+ tslib_1.__decorate([
69
+ (0, typeorm_1.Column)({ type: 'bigint', nullable: true }),
70
+ (0, type_graphql_1.Field)(type => type_graphql_1.Int, { nullable: true }),
71
+ tslib_1.__metadata("design:type", Number)
72
+ ], Equipment.prototype, "mttrMs", void 0);
73
+ tslib_1.__decorate([
74
+ (0, typeorm_1.Column)({ type: 'simple-json', nullable: true }),
75
+ (0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true, description: 'WorkCalendarEntry[]' }),
76
+ tslib_1.__metadata("design:type", Array)
77
+ ], Equipment.prototype, "workCalendar", void 0);
78
+ tslib_1.__decorate([
79
+ (0, typeorm_1.Column)({ type: 'simple-json', nullable: true }),
80
+ (0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true, description: 'ResourceProperty[]' }),
81
+ tslib_1.__metadata("design:type", Array)
82
+ ], Equipment.prototype, "properties", void 0);
83
+ tslib_1.__decorate([
84
+ (0, typeorm_1.Column)({ type: 'simple-json', nullable: true }),
85
+ (0, type_graphql_1.Field)(type => [String], { nullable: true }),
86
+ tslib_1.__metadata("design:type", Array)
87
+ ], Equipment.prototype, "testSpecificationIds", void 0);
88
+ tslib_1.__decorate([
89
+ (0, typeorm_1.Column)({ type: 'simple-json', nullable: true }),
90
+ (0, type_graphql_1.Field)(type => shell_1.ScalarObject, { nullable: true, description: 'TestResult[]' }),
91
+ tslib_1.__metadata("design:type", Array)
92
+ ], Equipment.prototype, "testResults", void 0);
93
+ tslib_1.__decorate([
94
+ (0, typeorm_1.Column)({ nullable: true }),
95
+ (0, type_graphql_1.Field)({ nullable: true }),
96
+ tslib_1.__metadata("design:type", Date
97
+ /** 언제까지 — 폐기한 설비가 영원히 배정 대상으로 남지 않게 한다. */
98
+ )
99
+ ], Equipment.prototype, "effectiveStart", void 0);
100
+ tslib_1.__decorate([
101
+ (0, typeorm_1.Column)({ nullable: true }),
102
+ (0, type_graphql_1.Field)({ nullable: true }),
103
+ tslib_1.__metadata("design:type", Date)
104
+ ], Equipment.prototype, "effectiveEnd", void 0);
105
+ tslib_1.__decorate([
106
+ (0, typeorm_1.CreateDateColumn)(),
107
+ (0, type_graphql_1.Field)({ nullable: true }),
108
+ tslib_1.__metadata("design:type", Date)
109
+ ], Equipment.prototype, "createdAt", void 0);
110
+ tslib_1.__decorate([
111
+ (0, typeorm_1.UpdateDateColumn)(),
112
+ (0, type_graphql_1.Field)({ nullable: true }),
113
+ tslib_1.__metadata("design:type", Date)
114
+ ], Equipment.prototype, "updatedAt", void 0);
115
+ tslib_1.__decorate([
116
+ (0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
117
+ (0, type_graphql_1.Field)(type => auth_base_1.User, { nullable: true }),
118
+ tslib_1.__metadata("design:type", auth_base_1.User)
119
+ ], Equipment.prototype, "creator", void 0);
120
+ tslib_1.__decorate([
121
+ (0, typeorm_1.RelationId)((equipment) => equipment.creator),
122
+ tslib_1.__metadata("design:type", String)
123
+ ], Equipment.prototype, "creatorId", void 0);
124
+ tslib_1.__decorate([
125
+ (0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
126
+ (0, type_graphql_1.Field)(type => auth_base_1.User, { nullable: true }),
127
+ tslib_1.__metadata("design:type", auth_base_1.User)
128
+ ], Equipment.prototype, "updater", void 0);
129
+ tslib_1.__decorate([
130
+ (0, typeorm_1.RelationId)((equipment) => equipment.updater),
131
+ tslib_1.__metadata("design:type", String)
132
+ ], Equipment.prototype, "updaterId", void 0);
133
+ exports.Equipment = Equipment = tslib_1.__decorate([
134
+ (0, typeorm_1.Entity)({ name: 'ops_equipment' }),
135
+ (0, typeorm_1.Index)('ix_ops_equipment_0', (equipment) => [equipment.domain, equipment.name], { unique: true }),
136
+ (0, type_graphql_1.ObjectType)({ description: 'ISA-95 Equipment — a resource that performs work' })
137
+ ], Equipment);
138
+ //# sourceMappingURL=equipment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equipment.js","sourceRoot":"","sources":["../../../server/service/equipment/equipment.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn\n} from 'typeorm'\nimport { Field, ID, Int, ObjectType } from 'type-graphql'\n\nimport { Domain, ScalarObject } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\n\n/**\n * 설비 — **ISA-95 `Equipment`**.\n *\n * 설비는 작업을 수행하는 자원이다. 배정을 받고, 가동률로 평가받고, 능력으로 찾힌다. **계측기는 설비가\n * 아니다** — 저울과 센서는 그 어느 것도 하지 않고, 그것은 관측의 원천이다. 계측기를 설비로 세우면\n * 가동률 화면이 저울을 기계로 세고 「설비가 논다」가 나온다.\n */\n@Entity({ name: 'ops_equipment' })\n@Index('ix_ops_equipment_0', (equipment: Equipment) => [equipment.domain, equipment.name], { unique: true })\n@ObjectType({ description: 'ISA-95 Equipment — a resource that performs work' })\nexport class Equipment {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n @Field(type => Domain)\n domain?: Domain\n\n @RelationId((equipment: Equipment) => equipment.domain)\n domainId?: string\n\n /** 표준 `EquipmentID` — 트윈으로 나갈 때 `equipment[].id` 가 된다. */\n @Column()\n @Field()\n name: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n description?: string\n\n /**\n * 종류 — 계약의 `kind` 자리다.\n *\n * **등급이기도 하고 종류이기도 한 칸이다.** 등급을 담을 칸이 따로 없던 동안 이 한 낱말이 둘을\n * 다 했고, 지금도 하중을 받고 있다 — 설비를 이름으로 부르는 공정들이 이 값을 가리킨다. 그래서\n * 아래에 `equipmentClassIds` 를 열면서도 이 칸을 빼지 않았다.\n *\n * 커널은 소속을 `equipmentClassIds ∪ {kind}` 로 본다(계약의 `equipmentClassMembership`).\n */\n @Column()\n @Field()\n kind: string\n\n /**\n * 속한 등급들 — 표준 `EquipmentClassID`(복수).\n *\n * ── 왜 복수인가 ──────────────────────────────────────────────────────────\n * 인원과 자산이 이미 복수다(`personnelClassIds` · `assetClassIds`). 설비만 없어서 판정이\n * `kind` 하나를 소속으로 썼고, 그래서 표준 요구가 **종류와 이름이 같을 때만** 채워졌다.\n *\n * ```\n * equipmentSpecification: { equipmentClass: 'welding-equipment', quantity: 2 }\n * → kind 가 'welding-equipment' 인 설비만 세어졌다\n * → 6축 로봇과 수동 용접기를 「용접설비 2대」로 함께 세는 것이 불가능했다\n * ```\n *\n * 요구가 조용히 안 채워지고 작업이 서 있었다. 오류는 나지 않았다.\n *\n * 비워 두면 예전과 똑같이 돈다 — `kind` 만으로 소속이 정해진다.\n */\n @Column({ type: 'simple-json', nullable: true })\n @Field(type => [String], { nullable: true })\n equipmentClassIds?: string[]\n\n /** 이 설비가 있는 자리 — 표준 `OperationalLocation`. */\n @Column()\n @Field()\n homeLocation: string\n\n /** GS1 GIAI. 없으면 비워 둔다 — 회사 프리픽스를 지어내지 않는다. */\n @Column({ nullable: true })\n @Field({ nullable: true })\n identity?: string\n\n /** 평균 고장 간격(밀리초) — 없으면 고장이 없는 설비로 예측된다. */\n @Column({ type: 'bigint', nullable: true })\n @Field(type => Int, { nullable: true })\n mtbfMs?: number\n\n /** 평균 수리 시간(밀리초). */\n @Column({ type: 'bigint', nullable: true })\n @Field(type => Int, { nullable: true })\n mttrMs?: number\n\n /** 근무 캘린더 — 표준 `WorkCalendar`. 교대 이름과 구간. */\n @Column({ type: 'simple-json', nullable: true })\n @Field(type => ScalarObject, { nullable: true, description: 'WorkCalendarEntry[]' })\n workCalendar?: Record<string, unknown>[]\n\n /** 개체 속성 — 표준 `EquipmentProperty`. 속도처럼 계산에 들어가는 속성이 여기 온다. */\n @Column({ type: 'simple-json', nullable: true })\n @Field(type => ScalarObject, { nullable: true, description: 'ResourceProperty[]' })\n properties?: Record<string, unknown>[]\n\n /** 이 설비에 요구되는 `TestSpecification` 참조들 — 검정·교정이 이 모양에 맞는다. */\n @Column({ type: 'simple-json', nullable: true })\n @Field(type => [String], { nullable: true })\n testSpecificationIds?: string[]\n\n /** `TestResult` — 만료되었거나 떨어졌으면 그 설비에 작업이 가지 않는다. */\n @Column({ type: 'simple-json', nullable: true })\n @Field(type => ScalarObject, { nullable: true, description: 'TestResult[]' })\n testResults?: Record<string, unknown>[]\n\n /** 언제부터 이 설비가 현장에 있나 — 도입 예정 설비를 미리 등록할 수 있다. */\n @Column({ nullable: true })\n @Field({ nullable: true })\n effectiveStart?: Date\n\n /** 언제까지 — 폐기한 설비가 영원히 배정 대상으로 남지 않게 한다. */\n @Column({ nullable: true })\n @Field({ nullable: true })\n effectiveEnd?: Date\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((equipment: Equipment) => equipment.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((equipment: Equipment) => equipment.updater)\n updaterId?: string\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { Equipment } from './equipment';
2
+ import { EquipmentClass } from './equipment-class';
3
+ import { EquipmentQuery } from './equipment-query';
4
+ import { StopReason } from './stop-reason';
5
+ import { StopReasonQuery } from './stop-reason-query';
6
+ import { EquipmentClassResolver, EquipmentResolver, StopReasonResolver } from './equipment-master-resolver';
7
+ export declare const entities: (typeof Equipment | typeof EquipmentClass | typeof StopReason)[];
8
+ export declare const resolvers: (typeof EquipmentClassResolver | typeof EquipmentResolver | typeof StopReasonResolver | typeof EquipmentQuery | typeof StopReasonQuery)[];
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolvers = exports.entities = void 0;
4
+ const equipment_1 = require("./equipment");
5
+ const equipment_class_1 = require("./equipment-class");
6
+ const equipment_query_1 = require("./equipment-query");
7
+ const stop_reason_1 = require("./stop-reason");
8
+ const stop_reason_query_1 = require("./stop-reason-query");
9
+ const equipment_master_resolver_1 = require("./equipment-master-resolver");
10
+ exports.entities = [equipment_class_1.EquipmentClass, equipment_1.Equipment, stop_reason_1.StopReason];
11
+ exports.resolvers = [equipment_query_1.EquipmentQuery, stop_reason_query_1.StopReasonQuery, equipment_master_resolver_1.EquipmentClassResolver, equipment_master_resolver_1.EquipmentResolver, equipment_master_resolver_1.StopReasonResolver];
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/equipment/index.ts"],"names":[],"mappings":";;;AAAA,2CAAuC;AACvC,uDAAkD;AAClD,uDAAkD;AAClD,+CAA0C;AAC1C,2DAAqD;AACrD,2EAA2G;AAE9F,QAAA,QAAQ,GAAG,CAAC,gCAAc,EAAE,qBAAS,EAAE,wBAAU,CAAC,CAAA;AAClD,QAAA,SAAS,GAAG,CAAC,gCAAc,EAAE,mCAAe,EAAE,kDAAsB,EAAE,6CAAiB,EAAE,8CAAkB,CAAC,CAAA","sourcesContent":["import { Equipment } from './equipment'\nimport { EquipmentClass } from './equipment-class'\nimport { EquipmentQuery } from './equipment-query'\nimport { StopReason } from './stop-reason'\nimport { StopReasonQuery } from './stop-reason-query'\nimport { EquipmentClassResolver, EquipmentResolver, StopReasonResolver } from './equipment-master-resolver'\n\nexport const entities = [EquipmentClass, Equipment, StopReason]\nexport const resolvers = [EquipmentQuery, StopReasonQuery, EquipmentClassResolver, EquipmentResolver, StopReasonResolver]\n"]}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * 상태 구간을 받아도 되나 — **순수 판단.**
3
+ *
4
+ * ── 왜 규칙이 필요한가 ──────────────────────────────────────────────────────
5
+ * 구간은 사람이 되돌아가 적는다. 그래서 겹치고, 거꾸로 되고, 미래로 간다. 그대로 받으면 가동률의
6
+ * 분자가 분모보다 커지는 날이 온다. 그때는 이미 잘못된 구간이 수백 개 쌓여 있다.
7
+ *
8
+ * ── 왜 사유와 상태를 맞춰 보나 ──────────────────────────────────────────────
9
+ * ISO 22400 에서 가동률을 깎느냐 마느냐는 **상태**가 정한다. 「점심시간」을 `down` 으로 적으면 가동률이
10
+ * 오류 보고 없이 낮아지고, 「고장」을 `planned-stop` 으로 적으면 오류 보고 없이 높아진다. 둘 다 조용한
11
+ * 거짓이라 나중에 찾을 방법이 없다.
12
+ */
13
+ /** 계약의 `EQUIPMENT_STATUS` 와 같은 어휘. 여기서 새로 만들지 않는다. */
14
+ export declare const EQUIPMENT_PERIOD_STATUS: readonly ["idle", "busy", "down", "setup", "planned-stop"];
15
+ export type EquipmentPeriodStatus = (typeof EQUIPMENT_PERIOD_STATUS)[number];
16
+ /**
17
+ * 정지 사유가 붙을 수 있는 상태 — **`busy` 는 빠진다.**
18
+ *
19
+ * 돌고 있는 것에는 사유가 없다(§`StopReason.status` 주석). 그래서 구간이 가질 수 있는 상태는 다섯인데
20
+ * 사유가 가질 수 있는 상태는 넷이다.
21
+ */
22
+ export declare const STOP_REASON_STATUS: ("idle" | "down" | "setup" | "planned-stop")[];
23
+ /**
24
+ * 이 사유를 마스터에 적을 수 있나 — **적을 수 없으면 왜인지, 그리고 무엇이 되는지.**
25
+ *
26
+ * ── 왜 마스터에서 막나 (2026-09-03) ────────────────────────────────────────
27
+ * 사유의 `status` 가 자유 문자열이라 `broken` 이 그대로 저장됐다. 그러면 **그 사유를 쓴 모든 구간이**
28
+ * 「사유와 상태가 어긋난다」로 걸린다(§`reasonIssues`). 잘못은 마스터 한 줄에서 났는데 불은 구간
29
+ * 수백 개에서 켜지고, 그 문장은 마스터를 가리키지 않는다.
30
+ *
31
+ * 그래서 틀린 자리에서 막는다. 구간 쪽 검사는 그대로 둔다 — 마스터를 채우기 전에 쓰인 지난 줄과,
32
+ * 사유를 나중에 고친 경우가 거기서 걸린다.
33
+ */
34
+ export declare function stopReasonStatusGap(status: unknown): string | undefined;
35
+ export type PeriodProblem =
36
+ /** 끝이 시작보다 앞이거나 같다 — 길이가 없는 구간은 셀 것이 없다. */
37
+ 'not-a-period'
38
+ /** 아직 오지 않은 시각이다. */
39
+ | 'in-the-future'
40
+ /** 같은 설비의 다른 구간과 겹친다 — 한 설비가 같은 시각에 두 상태일 수 없다. */
41
+ | 'overlaps'
42
+ /** 계약이 모르는 상태다. */
43
+ | 'unknown-status'
44
+ /** 사유가 사유 마스터에 없다. */
45
+ | 'unknown-reason'
46
+ /** 사유가 이 상태의 사유가 아니다 — 가동률이 오류 보고 없이 틀어진다. */
47
+ | 'reason-status-mismatch'
48
+ /** 이 사유는 상세를 함께 적어야 한다. */
49
+ | 'detail-required';
50
+ export interface PeriodIssue {
51
+ problem: PeriodProblem;
52
+ /** 겹치는 것이면 어느 구간과 겹치나(시작 시각, ISO). */
53
+ conflictsWith?: string;
54
+ /** 사유 문제이면 어느 사유인가. */
55
+ reasonCode?: string;
56
+ /** 사유가 속한 상태와 적힌 상태. */
57
+ reasonStatus?: string;
58
+ status?: string;
59
+ }
60
+ export interface JudgeablePeriod {
61
+ status: string;
62
+ startTime: Date | string;
63
+ endTime: Date | string;
64
+ reasonCode?: string;
65
+ reasonDetail?: string;
66
+ }
67
+ /** 사유 마스터에서 필요한 것만. */
68
+ export interface StopReasonFact {
69
+ name: string;
70
+ status: string;
71
+ detailRequired?: boolean;
72
+ }
73
+ /** 이미 적혀 있는 구간 — 겹침을 볼 때만 쓴다. */
74
+ export interface ExistingPeriod {
75
+ startTime: Date | string;
76
+ endTime: Date | string;
77
+ }
78
+ /**
79
+ * 이 구간을 받아도 되나.
80
+ *
81
+ * `now` 를 부르는 쪽이 준다 — 이 함수가 시계를 읽으면 테스트가 시각에 흔들린다.
82
+ */
83
+ export declare function judgePeriod(period: JudgeablePeriod, context: {
84
+ now: Date | string;
85
+ /** 같은 설비의 이미 적힌 구간들. 부르는 쪽이 시각으로 좁혀서 준다. */
86
+ existing?: readonly ExistingPeriod[];
87
+ /**
88
+ * 사유 마스터에서 읽은 것.
89
+ *
90
+ * **`undefined` 와 빈 배열의 뜻이 다르다.** `undefined` 는 「마스터를 아직 채우지 않았다」이고
91
+ * 확인하지 않는다. 빈 배열은 「채웠는데 이 사유가 없다」이고 막는다. 둘을 섞으면 오타로 적은
92
+ * 사유가 오류 보고 없이 통과한다.
93
+ */
94
+ reasons?: readonly StopReasonFact[];
95
+ }): PeriodIssue[];
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ /**
3
+ * 상태 구간을 받아도 되나 — **순수 판단.**
4
+ *
5
+ * ── 왜 규칙이 필요한가 ──────────────────────────────────────────────────────
6
+ * 구간은 사람이 되돌아가 적는다. 그래서 겹치고, 거꾸로 되고, 미래로 간다. 그대로 받으면 가동률의
7
+ * 분자가 분모보다 커지는 날이 온다. 그때는 이미 잘못된 구간이 수백 개 쌓여 있다.
8
+ *
9
+ * ── 왜 사유와 상태를 맞춰 보나 ──────────────────────────────────────────────
10
+ * ISO 22400 에서 가동률을 깎느냐 마느냐는 **상태**가 정한다. 「점심시간」을 `down` 으로 적으면 가동률이
11
+ * 오류 보고 없이 낮아지고, 「고장」을 `planned-stop` 으로 적으면 오류 보고 없이 높아진다. 둘 다 조용한
12
+ * 거짓이라 나중에 찾을 방법이 없다.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.STOP_REASON_STATUS = exports.EQUIPMENT_PERIOD_STATUS = void 0;
16
+ exports.stopReasonStatusGap = stopReasonStatusGap;
17
+ exports.judgePeriod = judgePeriod;
18
+ /** 계약의 `EQUIPMENT_STATUS` 와 같은 어휘. 여기서 새로 만들지 않는다. */
19
+ exports.EQUIPMENT_PERIOD_STATUS = ['idle', 'busy', 'down', 'setup', 'planned-stop'];
20
+ /**
21
+ * 정지 사유가 붙을 수 있는 상태 — **`busy` 는 빠진다.**
22
+ *
23
+ * 돌고 있는 것에는 사유가 없다(§`StopReason.status` 주석). 그래서 구간이 가질 수 있는 상태는 다섯인데
24
+ * 사유가 가질 수 있는 상태는 넷이다.
25
+ */
26
+ exports.STOP_REASON_STATUS = exports.EQUIPMENT_PERIOD_STATUS.filter(status => status !== 'busy');
27
+ /**
28
+ * 이 사유를 마스터에 적을 수 있나 — **적을 수 없으면 왜인지, 그리고 무엇이 되는지.**
29
+ *
30
+ * ── 왜 마스터에서 막나 (2026-09-03) ────────────────────────────────────────
31
+ * 사유의 `status` 가 자유 문자열이라 `broken` 이 그대로 저장됐다. 그러면 **그 사유를 쓴 모든 구간이**
32
+ * 「사유와 상태가 어긋난다」로 걸린다(§`reasonIssues`). 잘못은 마스터 한 줄에서 났는데 불은 구간
33
+ * 수백 개에서 켜지고, 그 문장은 마스터를 가리키지 않는다.
34
+ *
35
+ * 그래서 틀린 자리에서 막는다. 구간 쪽 검사는 그대로 둔다 — 마스터를 채우기 전에 쓰인 지난 줄과,
36
+ * 사유를 나중에 고친 경우가 거기서 걸린다.
37
+ */
38
+ function stopReasonStatusGap(status) {
39
+ const said = typeof status === 'string' ? status.trim() : '';
40
+ if (!said) {
41
+ return ('정지 사유에는 어느 상태에 쓰이는지가 있어야 합니다 — 가동률을 깎느냐 마느냐를 그 값이 정합니다 ' +
42
+ `(쓸 수 있는 것: ${exports.STOP_REASON_STATUS.join(' · ')})`);
43
+ }
44
+ if (said === 'busy') {
45
+ return '돌고 있는 상태에는 정지 사유가 없습니다 — busy 는 정지가 아닙니다';
46
+ }
47
+ if (!exports.STOP_REASON_STATUS.includes(said)) {
48
+ return (`모르는 상태입니다: "${said}" — 이 값으로 저장하면 그 사유를 쓴 모든 구간이 어긋남으로 걸립니다 ` +
49
+ `(쓸 수 있는 것: ${exports.STOP_REASON_STATUS.join(' · ')})`);
50
+ }
51
+ return undefined;
52
+ }
53
+ /**
54
+ * 이 구간을 받아도 되나.
55
+ *
56
+ * `now` 를 부르는 쪽이 준다 — 이 함수가 시계를 읽으면 테스트가 시각에 흔들린다.
57
+ */
58
+ function judgePeriod(period, context) {
59
+ const issues = [];
60
+ const start = ms(period.startTime);
61
+ const end = ms(period.endTime);
62
+ if (!(end > start)) {
63
+ issues.push({ problem: 'not-a-period' });
64
+ }
65
+ if (end > ms(context.now)) {
66
+ issues.push({ problem: 'in-the-future' });
67
+ }
68
+ if (!exports.EQUIPMENT_PERIOD_STATUS.includes(period.status)) {
69
+ issues.push({ problem: 'unknown-status', status: period.status });
70
+ }
71
+ for (const other of context.existing ?? []) {
72
+ const otherStart = ms(other.startTime);
73
+ const otherEnd = ms(other.endTime);
74
+ /* 끝과 시작이 맞닿는 것은 겹침이 아니다 — 한 구간이 끝나는 순간 다음이 시작한다. */
75
+ if (start < otherEnd && otherStart < end) {
76
+ issues.push({ problem: 'overlaps', conflictsWith: isoOf(other.startTime) });
77
+ }
78
+ }
79
+ issues.push(...reasonIssues(period, context.reasons));
80
+ return issues;
81
+ }
82
+ function reasonIssues(period, reasons) {
83
+ /*
84
+ * 사유를 적지 않은 것은 흠이 아니다. 정지는 일단 적고 사유는 나중에 정하는 것이 현장의 순서이고,
85
+ * 사유를 요구하면 그 순서를 막게 된다.
86
+ */
87
+ if (!period.reasonCode) {
88
+ return [];
89
+ }
90
+ /*
91
+ * 마스터를 아직 채우지 않은 현장은 확인하지 않는다 — 선언한 것만 걸린다.
92
+ *
93
+ * 빈 배열은 여기서 걸러지지 않는다. 채웠는데 이 사유가 없는 것이고, 아래에서 「모르는 사유」가 된다.
94
+ */
95
+ if (!reasons) {
96
+ return [];
97
+ }
98
+ const found = reasons.find(reason => reason.name === period.reasonCode);
99
+ if (!found) {
100
+ return [{ problem: 'unknown-reason', reasonCode: period.reasonCode }];
101
+ }
102
+ const issues = [];
103
+ if (found.status !== period.status) {
104
+ issues.push({
105
+ problem: 'reason-status-mismatch',
106
+ reasonCode: found.name,
107
+ reasonStatus: found.status,
108
+ status: period.status
109
+ });
110
+ }
111
+ if (found.detailRequired && !period.reasonDetail) {
112
+ issues.push({ problem: 'detail-required', reasonCode: found.name });
113
+ }
114
+ return issues;
115
+ }
116
+ function ms(at) {
117
+ return typeof at === 'string' ? Date.parse(at) : at.getTime();
118
+ }
119
+ function isoOf(at) {
120
+ return typeof at === 'string' ? at : at.toISOString();
121
+ }
122
+ //# sourceMappingURL=state-period-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-period-rules.js","sourceRoot":"","sources":["../../../server/service/equipment/state-period-rules.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 상태 구간을 받아도 되나 — **순수 판단.**\n *\n * ── 왜 규칙이 필요한가 ──────────────────────────────────────────────────────\n * 구간은 사람이 되돌아가 적는다. 그래서 겹치고, 거꾸로 되고, 미래로 간다. 그대로 받으면 가동률의\n * 분자가 분모보다 커지는 날이 온다. 그때는 이미 잘못된 구간이 수백 개 쌓여 있다.\n *\n * ── 왜 사유와 상태를 맞춰 보나 ──────────────────────────────────────────────\n * ISO 22400 에서 가동률을 깎느냐 마느냐는 **상태**가 정한다. 「점심시간」을 `down` 으로 적으면 가동률이\n * 오류 보고 없이 낮아지고, 「고장」을 `planned-stop` 으로 적으면 오류 보고 없이 높아진다. 둘 다 조용한\n * 거짓이라 나중에 찾을 방법이 없다.\n */\n\n/** 계약의 `EQUIPMENT_STATUS` 와 같은 어휘. 여기서 새로 만들지 않는다. */\nexport const EQUIPMENT_PERIOD_STATUS = ['idle', 'busy', 'down', 'setup', 'planned-stop'] as const\n\nexport type EquipmentPeriodStatus = (typeof EQUIPMENT_PERIOD_STATUS)[number]\n\n/**\n * 정지 사유가 붙을 수 있는 상태 — **`busy` 는 빠진다.**\n *\n * 돌고 있는 것에는 사유가 없다(§`StopReason.status` 주석). 그래서 구간이 가질 수 있는 상태는 다섯인데\n * 사유가 가질 수 있는 상태는 넷이다.\n */\nexport const STOP_REASON_STATUS = EQUIPMENT_PERIOD_STATUS.filter(status => status !== 'busy')\n\n/**\n * 이 사유를 마스터에 적을 수 있나 — **적을 수 없으면 왜인지, 그리고 무엇이 되는지.**\n *\n * ── 왜 마스터에서 막나 (2026-09-03) ────────────────────────────────────────\n * 사유의 `status` 가 자유 문자열이라 `broken` 이 그대로 저장됐다. 그러면 **그 사유를 쓴 모든 구간이**\n * 「사유와 상태가 어긋난다」로 걸린다(§`reasonIssues`). 잘못은 마스터 한 줄에서 났는데 불은 구간\n * 수백 개에서 켜지고, 그 문장은 마스터를 가리키지 않는다.\n *\n * 그래서 틀린 자리에서 막는다. 구간 쪽 검사는 그대로 둔다 — 마스터를 채우기 전에 쓰인 지난 줄과,\n * 사유를 나중에 고친 경우가 거기서 걸린다.\n */\nexport function stopReasonStatusGap(status: unknown): string | undefined {\n const said = typeof status === 'string' ? status.trim() : ''\n\n if (!said) {\n return (\n '정지 사유에는 어느 상태에 쓰이는지가 있어야 합니다 — 가동률을 깎느냐 마느냐를 그 값이 정합니다 ' +\n `(쓸 수 있는 것: ${STOP_REASON_STATUS.join(' · ')})`\n )\n }\n\n if (said === 'busy') {\n return '돌고 있는 상태에는 정지 사유가 없습니다 — busy 는 정지가 아닙니다'\n }\n\n if (!(STOP_REASON_STATUS as readonly string[]).includes(said)) {\n return (\n `모르는 상태입니다: \"${said}\" — 이 값으로 저장하면 그 사유를 쓴 모든 구간이 어긋남으로 걸립니다 ` +\n `(쓸 수 있는 것: ${STOP_REASON_STATUS.join(' · ')})`\n )\n }\n\n return undefined\n}\n\nexport type PeriodProblem =\n /** 끝이 시작보다 앞이거나 같다 — 길이가 없는 구간은 셀 것이 없다. */\n | 'not-a-period'\n /** 아직 오지 않은 시각이다. */\n | 'in-the-future'\n /** 같은 설비의 다른 구간과 겹친다 — 한 설비가 같은 시각에 두 상태일 수 없다. */\n | 'overlaps'\n /** 계약이 모르는 상태다. */\n | 'unknown-status'\n /** 사유가 사유 마스터에 없다. */\n | 'unknown-reason'\n /** 사유가 이 상태의 사유가 아니다 — 가동률이 오류 보고 없이 틀어진다. */\n | 'reason-status-mismatch'\n /** 이 사유는 상세를 함께 적어야 한다. */\n | 'detail-required'\n\nexport interface PeriodIssue {\n problem: PeriodProblem\n /** 겹치는 것이면 어느 구간과 겹치나(시작 시각, ISO). */\n conflictsWith?: string\n /** 사유 문제이면 어느 사유인가. */\n reasonCode?: string\n /** 사유가 속한 상태와 적힌 상태. */\n reasonStatus?: string\n status?: string\n}\n\nexport interface JudgeablePeriod {\n status: string\n startTime: Date | string\n endTime: Date | string\n reasonCode?: string\n reasonDetail?: string\n}\n\n/** 사유 마스터에서 필요한 것만. */\nexport interface StopReasonFact {\n name: string\n status: string\n detailRequired?: boolean\n}\n\n/** 이미 적혀 있는 구간 — 겹침을 볼 때만 쓴다. */\nexport interface ExistingPeriod {\n startTime: Date | string\n endTime: Date | string\n}\n\n/**\n * 이 구간을 받아도 되나.\n *\n * `now` 를 부르는 쪽이 준다 — 이 함수가 시계를 읽으면 테스트가 시각에 흔들린다.\n */\nexport function judgePeriod(\n period: JudgeablePeriod,\n context: {\n now: Date | string\n /** 같은 설비의 이미 적힌 구간들. 부르는 쪽이 시각으로 좁혀서 준다. */\n existing?: readonly ExistingPeriod[]\n /**\n * 사유 마스터에서 읽은 것.\n *\n * **`undefined` 와 빈 배열의 뜻이 다르다.** `undefined` 는 「마스터를 아직 채우지 않았다」이고\n * 확인하지 않는다. 빈 배열은 「채웠는데 이 사유가 없다」이고 막는다. 둘을 섞으면 오타로 적은\n * 사유가 오류 보고 없이 통과한다.\n */\n reasons?: readonly StopReasonFact[]\n }\n): PeriodIssue[] {\n const issues: PeriodIssue[] = []\n\n const start = ms(period.startTime)\n const end = ms(period.endTime)\n\n if (!(end > start)) {\n issues.push({ problem: 'not-a-period' })\n }\n\n if (end > ms(context.now)) {\n issues.push({ problem: 'in-the-future' })\n }\n\n if (!(EQUIPMENT_PERIOD_STATUS as readonly string[]).includes(period.status)) {\n issues.push({ problem: 'unknown-status', status: period.status })\n }\n\n for (const other of context.existing ?? []) {\n const otherStart = ms(other.startTime)\n const otherEnd = ms(other.endTime)\n\n /* 끝과 시작이 맞닿는 것은 겹침이 아니다 — 한 구간이 끝나는 순간 다음이 시작한다. */\n if (start < otherEnd && otherStart < end) {\n issues.push({ problem: 'overlaps', conflictsWith: isoOf(other.startTime) })\n }\n }\n\n issues.push(...reasonIssues(period, context.reasons))\n\n return issues\n}\n\nfunction reasonIssues(period: JudgeablePeriod, reasons: readonly StopReasonFact[] | undefined): PeriodIssue[] {\n /*\n * 사유를 적지 않은 것은 흠이 아니다. 정지는 일단 적고 사유는 나중에 정하는 것이 현장의 순서이고,\n * 사유를 요구하면 그 순서를 막게 된다.\n */\n if (!period.reasonCode) {\n return []\n }\n\n /*\n * 마스터를 아직 채우지 않은 현장은 확인하지 않는다 — 선언한 것만 걸린다.\n *\n * 빈 배열은 여기서 걸러지지 않는다. 채웠는데 이 사유가 없는 것이고, 아래에서 「모르는 사유」가 된다.\n */\n if (!reasons) {\n return []\n }\n\n const found = reasons.find(reason => reason.name === period.reasonCode)\n\n if (!found) {\n return [{ problem: 'unknown-reason', reasonCode: period.reasonCode }]\n }\n\n const issues: PeriodIssue[] = []\n\n if (found.status !== period.status) {\n issues.push({\n problem: 'reason-status-mismatch',\n reasonCode: found.name,\n reasonStatus: found.status,\n status: period.status\n })\n }\n\n if (found.detailRequired && !period.reasonDetail) {\n issues.push({ problem: 'detail-required', reasonCode: found.name })\n }\n\n return issues\n}\n\nfunction ms(at: Date | string): number {\n return typeof at === 'string' ? Date.parse(at) : at.getTime()\n}\n\nfunction isoOf(at: Date | string): string {\n return typeof at === 'string' ? at : at.toISOString()\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { ListParam } from '@things-factory/shell';
2
+ import { StopReason } from './stop-reason';
3
+ /**
4
+ * 정지 사유 목록.
5
+ *
6
+ * 트윈으로 내보내는 마스터에 넣지 않는다 — 사유는 **MES 가 사실을 적을 때 쓰는 분류**이고, 트윈은
7
+ * 상태 구간에 실려 오는 사유 코드를 그대로 받는다. 목록을 두 곳에 두면 한쪽만 늘어나는 날이 온다.
8
+ */
9
+ export declare class StopReasonQuery {
10
+ stopReasons(params: ListParam, context: ResolverContext): Promise<StopReason[]>;
11
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StopReasonQuery = 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 stop_reason_1 = require("./stop-reason");
8
+ /**
9
+ * 정지 사유 목록.
10
+ *
11
+ * 트윈으로 내보내는 마스터에 넣지 않는다 — 사유는 **MES 가 사실을 적을 때 쓰는 분류**이고, 트윈은
12
+ * 상태 구간에 실려 오는 사유 코드를 그대로 받는다. 목록을 두 곳에 두면 한쪽만 늘어나는 날이 온다.
13
+ */
14
+ let StopReasonQuery = class StopReasonQuery {
15
+ async stopReasons(params, context) {
16
+ const { domain } = context.state;
17
+ const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
18
+ repository: (0, shell_1.getRepository)(stop_reason_1.StopReason),
19
+ params,
20
+ domain,
21
+ searchables: ['name', 'description'],
22
+ alias: 'sr'
23
+ });
24
+ return queryBuilder.getMany();
25
+ }
26
+ };
27
+ exports.StopReasonQuery = StopReasonQuery;
28
+ tslib_1.__decorate([
29
+ (0, type_graphql_1.Query)(returns => [stop_reason_1.StopReason], { description: 'To fetch the classified reasons an equipment stops' }),
30
+ tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
31
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
32
+ tslib_1.__metadata("design:type", Function),
33
+ tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
34
+ tslib_1.__metadata("design:returntype", Promise)
35
+ ], StopReasonQuery.prototype, "stopReasons", null);
36
+ exports.StopReasonQuery = StopReasonQuery = tslib_1.__decorate([
37
+ (0, type_graphql_1.Resolver)(stop_reason_1.StopReason)
38
+ ], StopReasonQuery);
39
+ //# sourceMappingURL=stop-reason-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-reason-query.js","sourceRoot":"","sources":["../../../server/service/equipment/stop-reason-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAyD;AAEzD,iDAA+F;AAE/F,+CAA0C;AAE1C;;;;;GAKG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAe;IAEpB,AAAN,KAAK,CAAC,WAAW,CAA0B,MAAiB,EAAS,OAAwB;QAC3F,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC;YACjD,UAAU,EAAE,IAAA,qBAAa,EAAC,wBAAU,CAAC;YACrC,MAAM;YACN,MAAM;YACN,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;YACpC,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;QAEF,OAAO,YAAY,CAAC,OAAO,EAAE,CAAA;IAC/B,CAAC;CACF,CAAA;AAfY,0CAAe;AAEpB;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,wBAAU,CAAC,EAAE,EAAE,WAAW,EAAE,oDAAoD,EAAE,CAAC;IACnF,mBAAA,IAAA,mBAAI,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,CAAC,CAAA;IAAqB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAAjB,iBAAS;;kDAY3D;0BAdU,eAAe;IAD3B,IAAA,uBAAQ,EAAC,wBAAU,CAAC;GACR,eAAe,CAe3B","sourcesContent":["import { Args, Ctx, Query, Resolver } from 'type-graphql'\n\nimport { ListParam, getQueryBuilderFromListParams, getRepository } from '@things-factory/shell'\n\nimport { StopReason } from './stop-reason'\n\n/**\n * 정지 사유 목록.\n *\n * 트윈으로 내보내는 마스터에 넣지 않는다 — 사유는 **MES 가 사실을 적을 때 쓰는 분류**이고, 트윈은\n * 상태 구간에 실려 오는 사유 코드를 그대로 받는다. 목록을 두 곳에 두면 한쪽만 늘어나는 날이 온다.\n */\n@Resolver(StopReason)\nexport class StopReasonQuery {\n @Query(returns => [StopReason], { description: 'To fetch the classified reasons an equipment stops' })\n async stopReasons(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<StopReason[]> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(StopReason),\n params,\n domain,\n searchables: ['name', 'description'],\n alias: 'sr'\n })\n\n return queryBuilder.getMany()\n }\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import { Domain } from '@things-factory/shell';
2
+ import { User } from '@things-factory/auth-base';
3
+ /**
4
+ * 설비가 왜 섰나 — **사유의 목록.**
5
+ *
6
+ * ── 왜 마스터로 두나 ────────────────────────────────────────────────────────
7
+ * 사유를 자유 문장으로 받으면 「금형교체」 · 「금형 교체」 · 「몰드교환」이 서로 다른 사유가 된다. 그러면
8
+ * 「무엇 때문에 가장 많이 멈추나」에 답할 수 없다 — 그 답이 정지 사유를 적는 유일한 이유다.
9
+ *
10
+ * ── `status` 가 가동률을 정하고, 사유는 무엇을 고칠지 정한다 ────────────────
11
+ * ISO 22400 에서 가동률을 깎느냐 마느냐는 **상태**가 정한다(`down` · `idle` 은 깎고 `planned-stop` 은
12
+ * 깎지 않는다). 사유는 그 상태 안에서 **무엇을 고쳐야 하나**를 말한다.
13
+ *
14
+ * 그래서 사유마다 어느 상태에 쓰이는지 적어 둔다. 「점심시간」을 `down` 으로 적으면 가동률이 알리지
15
+ * 않고 낮아지고, 「고장」을 `planned-stop` 으로 적으면 알리지 않고 높아진다. 둘 다 조용한 거짓이다.
16
+ */
17
+ export declare class StopReason {
18
+ readonly id: string;
19
+ domain?: Domain;
20
+ domainId?: string;
21
+ /** 사유 코드 — 상태 구간이 이 값을 가리킨다. */
22
+ name: string;
23
+ description?: string;
24
+ /**
25
+ * 이 사유가 쓰이는 상태 — `down` · `idle` · `setup` · `planned-stop`.
26
+ *
27
+ * 어휘는 계약의 `EQUIPMENT_STATUS` 다. `busy` 는 여기 오지 않는다 — 돌고 있는 것에는 사유가 없다.
28
+ */
29
+ status: string;
30
+ /**
31
+ * 상위 사유 — 사유는 나무다.
32
+ *
33
+ * 「설비 고장」 아래 「금형 파손」 · 「모터 과열」이 온다. 위로 모아 보면 「고장으로 몇 시간」이 나오고,
34
+ * 아래로 내려가면 「무엇을 고칠까」가 나온다. 한 단으로만 두면 둘 중 하나를 잃는다.
35
+ */
36
+ parentName?: string;
37
+ /**
38
+ * 이 사유를 적을 때 상세를 함께 받나.
39
+ *
40
+ * 「기타」로만 적히는 사유가 목록의 절반을 차지하면 분류가 없는 것과 같다. 상세를 요구하는 사유를
41
+ * 표시해 두어 화면이 그때만 묻게 한다.
42
+ */
43
+ detailRequired?: boolean;
44
+ /** 언제부터 — 표준 `EffectiveStartDate`. */
45
+ effectiveStart?: Date;
46
+ /**
47
+ * 언제까지 — 표준 `EffectiveEndDate`.
48
+ *
49
+ * 쓰지 않는 사유는 지우지 않고 이 칸을 채운다. 지우면 그 사유로 적힌 지난 구간이 가리킬 것을 잃는다.
50
+ */
51
+ effectiveEnd?: Date;
52
+ createdAt?: Date;
53
+ updatedAt?: Date;
54
+ creator?: User;
55
+ creatorId?: string;
56
+ updater?: User;
57
+ updaterId?: string;
58
+ }