@seedtactics/insight-client 16.8.0 → 16.8.2

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 (167) hide show
  1. package/README.md +23 -29
  2. package/dist/assets/index-BDPKYaRT.js +388 -0
  3. package/dist/cell-status/current-status.js +4 -1
  4. package/dist/cell-status/estimated-cycle-times.js +2 -1
  5. package/dist/cell-status/inspections.js +1 -1
  6. package/dist/cell-status/loading.js +1 -1
  7. package/dist/cell-status/material-summary.js +4 -2
  8. package/dist/cell-status/names.js +1 -1
  9. package/dist/cell-status/rebookings.js +3 -1
  10. package/dist/cell-status/scheduled-jobs.js +1 -1
  11. package/dist/cell-status/sim-production.js +6 -2
  12. package/dist/cell-status/station-cycles.js +3 -1
  13. package/dist/cell-status/tool-replacements.js +21 -7
  14. package/dist/cell-status/tool-usage.js +7 -2
  15. package/dist/components/App.d.ts +2 -2
  16. package/dist/components/App.js +13 -5
  17. package/dist/components/AxisAndGrid.d.ts +6 -6
  18. package/dist/components/BarcodeScanning.d.ts +2 -2
  19. package/dist/components/BarcodeScanning.js +9 -3
  20. package/dist/components/ChartTooltip.d.ts +2 -2
  21. package/dist/components/ChooseMode.js +6 -1
  22. package/dist/components/ChooseOperator.d.ts +1 -1
  23. package/dist/components/ChooseOperator.js +1 -1
  24. package/dist/components/ErrorsAndLoading.d.ts +3 -3
  25. package/dist/components/ErrorsAndLoading.js +1 -1
  26. package/dist/components/LoadingIcon.d.ts +1 -1
  27. package/dist/components/LoadingIcon.js +2 -2
  28. package/dist/components/LogEntry.d.ts +2 -2
  29. package/dist/components/LogEntry.js +31 -29
  30. package/dist/components/ManualSerialEntry.d.ts +2 -2
  31. package/dist/components/ManualSerialEntry.js +1 -1
  32. package/dist/components/MonthSelect.d.ts +1 -1
  33. package/dist/components/MonthSelect.js +4 -2
  34. package/dist/components/Navigation.d.ts +2 -2
  35. package/dist/components/Navigation.js +2 -2
  36. package/dist/components/VerboseLogging.d.ts +1 -1
  37. package/dist/components/analysis/AnalysisSelectToolbar.d.ts +1 -1
  38. package/dist/components/analysis/BasketCycleCards.d.ts +1 -1
  39. package/dist/components/analysis/BasketCycleCards.js +2 -2
  40. package/dist/components/analysis/BufferChart.d.ts +1 -1
  41. package/dist/components/analysis/BufferChart.js +23 -4
  42. package/dist/components/analysis/CostPerPiece.d.ts +2 -2
  43. package/dist/components/analysis/CostPerPiece.js +3 -3
  44. package/dist/components/analysis/CycleChart.d.ts +1 -1
  45. package/dist/components/analysis/CycleChart.js +19 -6
  46. package/dist/components/analysis/DataTable.js +5 -3
  47. package/dist/components/analysis/EfficiencyPage.d.ts +2 -2
  48. package/dist/components/analysis/EfficiencyPage.js +1 -1
  49. package/dist/components/analysis/HeatChart.d.ts +1 -1
  50. package/dist/components/analysis/HeatChart.js +13 -4
  51. package/dist/components/analysis/InspectionDataTable.d.ts +1 -1
  52. package/dist/components/analysis/InspectionDataTable.js +6 -1
  53. package/dist/components/analysis/InspectionSankey.d.ts +1 -1
  54. package/dist/components/analysis/InspectionSankey.js +16 -6
  55. package/dist/components/analysis/PalletCycleCards.d.ts +1 -1
  56. package/dist/components/analysis/PalletCycleCards.js +5 -3
  57. package/dist/components/analysis/PartCycleCards.d.ts +2 -2
  58. package/dist/components/analysis/PartCycleCards.js +16 -6
  59. package/dist/components/analysis/QualityPage.d.ts +1 -1
  60. package/dist/components/analysis/ScheduleHistory.d.ts +1 -1
  61. package/dist/components/analysis/ScheduleHistory.js +2 -2
  62. package/dist/components/analysis/StationDataTable.d.ts +1 -1
  63. package/dist/components/analysis/ToolReplacements.d.ts +1 -1
  64. package/dist/components/analysis/ToolReplacements.js +8 -4
  65. package/dist/components/operations/AllMaterial.d.ts +1 -1
  66. package/dist/components/operations/AllMaterial.js +1 -1
  67. package/dist/components/operations/ChartRangeEdit.d.ts +1 -1
  68. package/dist/components/operations/ChartRangeEdit.js +14 -5
  69. package/dist/components/operations/CloseoutReport.js +2 -2
  70. package/dist/components/operations/CompletedParts.js +3 -3
  71. package/dist/components/operations/CurrentWorkorders.js +3 -3
  72. package/dist/components/operations/Dashboard.d.ts +2 -2
  73. package/dist/components/operations/Dashboard.js +1 -1
  74. package/dist/components/operations/OEEChart.d.ts +4 -4
  75. package/dist/components/operations/OEEChart.js +7 -2
  76. package/dist/components/operations/Outliers.d.ts +1 -1
  77. package/dist/components/operations/Outliers.js +1 -1
  78. package/dist/components/operations/Programs.js +10 -5
  79. package/dist/components/operations/Rebookings.d.ts +1 -1
  80. package/dist/components/operations/Rebookings.js +4 -2
  81. package/dist/components/operations/RecentCycleChart.d.ts +1 -1
  82. package/dist/components/operations/RecentCycleChart.js +3 -3
  83. package/dist/components/operations/RecentProduction.js +3 -3
  84. package/dist/components/operations/RecentSchedules.js +6 -4
  85. package/dist/components/operations/RecentStationCycles.d.ts +1 -1
  86. package/dist/components/operations/RecentStationCycles.js +2 -2
  87. package/dist/components/operations/ShiftSettings.d.ts +1 -1
  88. package/dist/components/operations/SimDayUsage.d.ts +1 -1
  89. package/dist/components/operations/SimDayUsage.js +1 -1
  90. package/dist/components/operations/ToolReport.js +21 -10
  91. package/dist/components/operations/WorkorderGantt.d.ts +1 -1
  92. package/dist/components/operations/WorkorderGantt.js +1 -1
  93. package/dist/components/quality/QualityMaterial.d.ts +2 -2
  94. package/dist/components/quality/QualityMaterial.js +2 -2
  95. package/dist/components/quality/QualityPaths.d.ts +1 -1
  96. package/dist/components/quality/RecentFailedInspections.d.ts +1 -1
  97. package/dist/components/quality/RecentFailedInspections.js +1 -1
  98. package/dist/components/routes.d.ts +1 -1
  99. package/dist/components/routes.js +1 -1
  100. package/dist/components/station-monitor/BulkRawMaterial.d.ts +2 -2
  101. package/dist/components/station-monitor/BulkRawMaterial.js +12 -6
  102. package/dist/components/station-monitor/Closeout.js +7 -3
  103. package/dist/components/station-monitor/CustomStationMonitorDialog.js +1 -1
  104. package/dist/components/station-monitor/Inspection.js +4 -2
  105. package/dist/components/station-monitor/InvalidateCycle.d.ts +3 -3
  106. package/dist/components/station-monitor/InvalidateCycle.js +11 -4
  107. package/dist/components/station-monitor/JobDetails.js +5 -3
  108. package/dist/components/station-monitor/LoadStation.d.ts +1 -1
  109. package/dist/components/station-monitor/LoadStation.js +11 -8
  110. package/dist/components/station-monitor/Material.d.ts +10 -10
  111. package/dist/components/station-monitor/Material.js +31 -23
  112. package/dist/components/station-monitor/Material.test.js +1 -1
  113. package/dist/components/station-monitor/MoveMaterialArrows.d.ts +2 -2
  114. package/dist/components/station-monitor/PrintedLabel.d.ts +3 -3
  115. package/dist/components/station-monitor/PrintedLabel.js +10 -5
  116. package/dist/components/station-monitor/QuarantineButton.d.ts +1 -1
  117. package/dist/components/station-monitor/QuarantineButton.js +5 -3
  118. package/dist/components/station-monitor/Queues.d.ts +2 -2
  119. package/dist/components/station-monitor/Queues.js +8 -6
  120. package/dist/components/station-monitor/QueuesAddMaterial.d.ts +3 -3
  121. package/dist/components/station-monitor/QueuesAddMaterial.js +22 -9
  122. package/dist/components/station-monitor/SelectInspType.d.ts +2 -2
  123. package/dist/components/station-monitor/SelectInspType.js +1 -1
  124. package/dist/components/station-monitor/SelectWorkorder.d.ts +1 -1
  125. package/dist/components/station-monitor/SelectWorkorder.js +1 -1
  126. package/dist/components/station-monitor/StationToolbar.d.ts +1 -1
  127. package/dist/components/station-monitor/StationToolbar.js +13 -3
  128. package/dist/components/station-monitor/SystemOverview.d.ts +4 -4
  129. package/dist/components/station-monitor/SystemOverview.js +45 -23
  130. package/dist/components/station-monitor/Whiteboard.d.ts +1 -1
  131. package/dist/data/all-material-bins.d.ts +1 -1
  132. package/dist/data/all-material-bins.js +7 -6
  133. package/dist/data/chart-times.d.ts +1 -1
  134. package/dist/data/cost-per-piece.js +3 -1
  135. package/dist/data/current-cycles.js +3 -3
  136. package/dist/data/move-arrows.js +3 -1
  137. package/dist/data/operators.d.ts +1 -1
  138. package/dist/data/part-summary.js +1 -1
  139. package/dist/data/results.cycles.js +13 -4
  140. package/dist/data/tools-programs.d.ts +2 -2
  141. package/dist/data/tools-programs.js +3 -2
  142. package/dist/index.html +1 -1
  143. package/dist/network/api.d.ts +75 -9
  144. package/dist/network/api.js +626 -379
  145. package/dist/util/chart-colors.js +12 -1
  146. package/docs/client-efficiency.md +226 -263
  147. package/docs/client-engineering.md +27 -28
  148. package/docs/client-launch.md +32 -33
  149. package/docs/client-operations.md +50 -53
  150. package/docs/client-quality.md +39 -43
  151. package/docs/client-sales.md +36 -40
  152. package/docs/client-scanners.md +27 -27
  153. package/docs/client-station-monitor.md +86 -96
  154. package/docs/client-tools-programs.md +47 -44
  155. package/docs/improve-fms.md +73 -78
  156. package/docs/makino.md +21 -25
  157. package/docs/material-quarantine.md +50 -64
  158. package/docs/material-tracking.md +162 -195
  159. package/docs/mazak.md +78 -91
  160. package/docs/niigata.md +145 -168
  161. package/docs/operator-procedures.md +72 -76
  162. package/docs/part-instructions.md +36 -36
  163. package/docs/security.md +87 -81
  164. package/docs/server-config.md +36 -45
  165. package/docs/server-errors.md +21 -22
  166. package/package.json +27 -26
  167. package/dist/assets/index-BwbaiELK.js +0 -364
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /* Copyright (c) 2024, John Lenz
3
3
 
4
4
  All rights reserved.
@@ -212,9 +212,11 @@ function useCellOverview() {
212
212
  return "Loading";
213
213
  if (m.lastCompletedMachiningRouteStopIndex !== null &&
214
214
  m.lastCompletedMachiningRouteStopIndex !== undefined) {
215
- const stop = currentSt.jobs[m.jobUnique]?.procsAndPaths?.[m.process - 1]?.paths?.[m.path - 1]?.stops?.[m.lastCompletedMachiningRouteStopIndex];
215
+ const stop = currentSt.jobs[m.jobUnique]?.procsAndPaths?.[m.process - 1]?.paths?.[m.path - 1]
216
+ ?.stops?.[m.lastCompletedMachiningRouteStopIndex];
216
217
  if (!stop ||
217
- (stop.stationGroup === mach.machineGroup && stop.stationNums.includes(mach.machineNum))) {
218
+ (stop.stationGroup === mach.machineGroup &&
219
+ stop.stationNums.includes(mach.machineNum))) {
218
220
  return "Loading";
219
221
  }
220
222
  }
@@ -223,7 +225,9 @@ function useCellOverview() {
223
225
  const newStatus = {
224
226
  lulNum,
225
227
  machineMoving: mach.moving,
226
- machineCurrentlyAtLoad: lulNum === mach.currentLoadStation ? { group: mach.machineGroup, num: mach.machineNum } : null,
228
+ machineCurrentlyAtLoad: lulNum === mach.currentLoadStation
229
+ ? { group: mach.machineGroup, num: mach.machineNum }
230
+ : null,
227
231
  readyMats: allMats.get("Ready") ?? [],
228
232
  machiningMats: allMats.get("Machining") ?? [],
229
233
  loadingMats: allMats.get("Loading") ?? [],
@@ -244,7 +248,7 @@ function useCellOverview() {
244
248
  basket,
245
249
  mats: matByBasket.get(basket.basketId) ?? [],
246
250
  };
247
- switch (basket.location) {
251
+ switch (basket.position.location) {
248
252
  case BasketLocationEnum.Storage:
249
253
  if (basketWithMaterial.mats.length > 0) {
250
254
  storageFilled += 1;
@@ -255,12 +259,14 @@ function useCellOverview() {
255
259
  break;
256
260
  case BasketLocationEnum.LoadUnload:
257
261
  case BasketLocationEnum.LoadStationStaging: {
258
- const loadNum = basket.locationNum;
262
+ const loadNum = basket.position.locationNum;
259
263
  if (loadNum === null) {
260
264
  floatingBaskets.set(basket.basketId, basketWithMaterial);
261
265
  break;
262
266
  }
263
- const byLoad = basket.location === BasketLocationEnum.LoadUnload ? activeBaskets : stagedBaskets;
267
+ const byLoad = basket.position.location === BasketLocationEnum.LoadUnload
268
+ ? activeBaskets
269
+ : stagedBaskets;
264
270
  const prev = byLoad.get(loadNum) ?? [];
265
271
  prev.push(basketWithMaterial);
266
272
  byLoad.set(loadNum, prev);
@@ -310,7 +316,7 @@ function useCellOverview() {
310
316
  }
311
317
  }
312
318
  const currentBasket = LazySeq.of(activeBaskets.get(load.lulNum) ?? [])
313
- .sortBy((b) => b.basket.locationNum)
319
+ .sortBy((b) => b.basket.position.locationNum)
314
320
  .toRArray();
315
321
  // Extras beyond the first active basket at this station fall back to floating
316
322
  for (const extra of currentBasket.slice(1)) {
@@ -321,7 +327,7 @@ function useCellOverview() {
321
327
  .toRArray());
322
328
  const staging = LazySeq.of(stagedBaskets.get(load.lulNum) ?? [])
323
329
  .filter((basket) => !loadingFromBasketIds.has(basket.basket.basketId))
324
- .sortBy((b) => b.basket.locationNum)
330
+ .sortBy((b) => b.basket.position.locationNum)
325
331
  .toRArray();
326
332
  maxNumStagingRows = Math.max(maxNumStagingRows, staging.length);
327
333
  const sources = LazySeq.of(sourceRows)
@@ -379,10 +385,17 @@ function MaterialIcon({ mats }) {
379
385
  function faceName(pallet, faceNum) {
380
386
  if (faceNum === null || faceNum === undefined)
381
387
  return null;
382
- const name = pallet != null && pallet != undefined ? curSt.pallets[pallet]?.faceNames?.[faceNum - 1] : null;
388
+ const name = pallet != null && pallet != undefined
389
+ ? curSt.pallets[pallet]?.faceNames?.[faceNum - 1]
390
+ : null;
383
391
  return name ?? "Face: " + faceNum.toString();
384
392
  }
385
- return (_jsxs(Box, { sx: { width: CollapsedIconSize, height: CollapsedIconSize, overflow: "visible" }, children: [_jsx(Paper, { elevation: 4, onPointerEnter: enter, onPointerLeave: leave, sx: { position: "relative", zIndex: open ? 10 : 0, width: "max-content", height: "max-content" }, children: _jsx(Badge, { badgeContent: mats.length > 1 ? mats.length : 0, color: "secondary", children: _jsx(ButtonBase, { focusRipple: true, onClick: click, ref: btnRef, children: _jsx(Collapse, { orientation: "horizontal", in: open, collapsedSize: CollapsedIconSize, children: _jsxs(Box, { sx: {
393
+ return (_jsxs(Box, { sx: { width: CollapsedIconSize, height: CollapsedIconSize, overflow: "visible" }, children: [_jsx(Paper, { elevation: 4, onPointerEnter: enter, onPointerLeave: leave, sx: {
394
+ position: "relative",
395
+ zIndex: open ? 10 : 0,
396
+ width: "max-content",
397
+ height: "max-content",
398
+ }, children: _jsx(Badge, { badgeContent: mats.length > 1 ? mats.length : 0, color: "secondary", children: _jsx(ButtonBase, { focusRipple: true, onClick: click, ref: btnRef, children: _jsx(Collapse, { orientation: "horizontal", in: open, collapsedSize: CollapsedIconSize, children: _jsxs(Box, { sx: {
386
399
  display: "flex",
387
400
  }, children: [_jsx(PartIdenticon, { part: mats[0].partName, size: CollapsedIconSize }), _jsx(Box, { sx: {
388
401
  marginLeft: "10px",
@@ -412,7 +425,9 @@ function PalletFaces({ maxNumFaces, mats: allMats, loadingOntoPallet, noFilter,
412
425
  .orderedGroupBy((m) => m.action.loadOntoFace ?? 1)
413
426
  : LazySeq.of(allMats)
414
427
  .filter((m) => noFilter || m.location.type === LocType.OnPallet)
415
- .orderedGroupBy((m) => m.action.type === ActionType.Loading ? (m.action.loadOntoFace ?? 1) : (m.location.face ?? 1));
428
+ .orderedGroupBy((m) => m.action.type === ActionType.Loading
429
+ ? (m.action.loadOntoFace ?? 1)
430
+ : (m.location.face ?? 1));
416
431
  return (_jsx(Box, { sx: {
417
432
  display: "grid",
418
433
  gridTemplateRows: `${CollapsedIconSize}px`,
@@ -428,7 +443,7 @@ function PalletFaces({ maxNumFaces, mats: allMats, loadingOntoPallet, noFilter,
428
443
  }
429
444
  }
430
445
  function BasketContents({ mats }) {
431
- const byPosition = LazySeq.of(mats).orderedGroupBy((m) => (m.location.basketSubPosition ?? 0) + 1);
446
+ const byPosition = LazySeq.of(mats).orderedGroupBy((m) => (m.location.basketSlot ?? 0) + 1);
432
447
  return (_jsx(Box, { sx: {
433
448
  display: "flex",
434
449
  flexWrap: "wrap",
@@ -487,12 +502,14 @@ function useRemainingMachineTime(material) {
487
502
  let remainingSecs = null;
488
503
  if (remainingDurationFromCurSt) {
489
504
  const remainingSecsInCurSt = durationToSeconds(remainingDurationFromCurSt);
490
- remainingSecs = remainingSecsInCurSt - (secondsSinceEpoch - Math.floor(currentStTime.getTime() / 1000));
505
+ remainingSecs =
506
+ remainingSecsInCurSt - (secondsSinceEpoch - Math.floor(currentStTime.getTime() / 1000));
491
507
  }
492
508
  let elapsedSecs = null;
493
509
  if (elapsedDurationFromCurSt) {
494
510
  const elapsedSecsInCurSt = durationToSeconds(elapsedDurationFromCurSt);
495
- elapsedSecs = elapsedSecsInCurSt + (secondsSinceEpoch - Math.floor(currentStTime.getTime() / 1000));
511
+ elapsedSecs =
512
+ elapsedSecsInCurSt + (secondsSinceEpoch - Math.floor(currentStTime.getTime() / 1000));
496
513
  }
497
514
  if (remainingSecs !== null && elapsedSecs !== null) {
498
515
  return [
@@ -539,7 +556,7 @@ function Machine({ maxNumFaces, machine }) {
539
556
  }, children: machine.inbound.pallet.palletNum })) : undefined] }) }), _jsx(Box, { sx: {
540
557
  gridArea: "inboundmat",
541
558
  borderBottom: "1px solid black",
542
- }, children: machine.inbound ? _jsx(PalletFaces, { mats: machine.inbound.mats, maxNumFaces: maxNumFaces }) : undefined }), _jsx(Box, { sx: {
559
+ }, children: machine.inbound ? (_jsx(PalletFaces, { mats: machine.inbound.mats, maxNumFaces: maxNumFaces })) : undefined }), _jsx(Box, { sx: {
543
560
  gridArea: "worktablepal",
544
561
  borderRight: "1px solid black",
545
562
  borderBottom: "1px solid black",
@@ -573,7 +590,8 @@ function useElapsedLoadTime(material) {
573
590
  let elapsedSecs = null;
574
591
  if (elapsedDurationFromCurSt) {
575
592
  const elapsedSecsInCurSt = durationToSeconds(elapsedDurationFromCurSt);
576
- elapsedSecs = elapsedSecsInCurSt + (secondsSinceEpoch - Math.floor(currentStTime.getTime() / 1000));
593
+ elapsedSecs =
594
+ elapsedSecsInCurSt + (secondsSinceEpoch - Math.floor(currentStTime.getTime() / 1000));
577
595
  }
578
596
  if (elapsedSecs !== null) {
579
597
  return formatSeconds(elapsedSecs);
@@ -676,15 +694,17 @@ function LoadStation({ maxNumFaces, maxNumStagingRows, maxNumSourceRows, load, }
676
694
  function MachineAtLoadLabel({ status }) {
677
695
  const lulStatus = useElapsedLoadTime(status.loadingMats);
678
696
  const [machining, mcStatus, mcElapsed] = useRemainingMachineTime(status.machiningMats);
679
- return (_jsxs("div", { children: [_jsxs(Typography, { variant: "h5", children: ["Station ", status.lulNum] }), status.machineCurrentlyAtLoad ? (_jsxs(_Fragment, { children: [_jsxs(Typography, { variant: "h5", children: [status.machineCurrentlyAtLoad.group, " ", status.machineCurrentlyAtLoad.num] }), _jsx(Typography, { variant: "subtitle1", children: mcStatus === "Idle" ? lulStatus : mcStatus }), machining ? (mcElapsed === null ? (_jsx(LinearProgress, {})) : mcElapsed < 0 ? (_jsx(LinearProgress, { color: "error" })) : (_jsx(LinearProgress, { variant: "determinate", value: mcElapsed }))) : undefined] })) : (_jsxs(_Fragment, { children: [status.machineMoving ? _jsx(Typography, { variant: "subtitle2", children: "Machine Moving" }) : undefined, _jsxs(Typography, { variant: "subtitle1", children: ["Loading ", lulStatus] })] }))] }));
697
+ return (_jsxs("div", { children: [_jsxs(Typography, { variant: "h5", children: ["Station ", status.lulNum] }), status.machineCurrentlyAtLoad ? (_jsxs(_Fragment, { children: [_jsxs(Typography, { variant: "h5", children: [status.machineCurrentlyAtLoad.group, " ", status.machineCurrentlyAtLoad.num] }), _jsx(Typography, { variant: "subtitle1", children: mcStatus === "Idle" ? lulStatus : mcStatus }), machining ? (mcElapsed === null ? (_jsx(LinearProgress, {})) : mcElapsed < 0 ? (_jsx(LinearProgress, { color: "error" })) : (_jsx(LinearProgress, { variant: "determinate", value: mcElapsed }))) : undefined] })) : (_jsxs(_Fragment, { children: [status.machineMoving ? (_jsx(Typography, { variant: "subtitle2", children: "Machine Moving" })) : undefined, _jsxs(Typography, { variant: "subtitle1", children: ["Loading ", lulStatus] })] }))] }));
680
698
  }
681
- function MachineAtLoad({ maxNumFaces, status }) {
699
+ function MachineAtLoad({ maxNumFaces, status, }) {
682
700
  return (_jsxs(Box, { sx: {
683
701
  display: "grid",
684
702
  border: "1px solid black",
685
703
  margin: "5px",
686
704
  gridTemplateRows: `minmax(104px, max-content) repeat(3, ${maxNumFaces > 1 ? rowSize.toString() + "px" : "minmax(110px, max-content)"})`,
687
- gridTemplateColumns: maxNumFaces === 1 ? "60px minmax(230px, max-content)" : gridTemplateColumns(maxNumFaces, true),
705
+ gridTemplateColumns: maxNumFaces === 1
706
+ ? "60px minmax(230px, max-content)"
707
+ : gridTemplateColumns(maxNumFaces, true),
688
708
  gridTemplateAreas: `"name name" "ready readymat" "machining machiningmat" "loadstation loadstationmat"`,
689
709
  }, children: [_jsx(Box, { sx: {
690
710
  gridArea: "name",
@@ -731,7 +751,7 @@ function MachineAtLoad({ maxNumFaces, status }) {
731
751
  justifyContent: "center",
732
752
  }, children: _jsx(PalletFaces, { mats: status.loadingMats, maxNumFaces: maxNumFaces, showExpanded: true, noFilter: true }) })] }));
733
753
  }
734
- function StockerPallet({ maxNumFaces, pallet }) {
754
+ function StockerPallet({ maxNumFaces, pallet, }) {
735
755
  return (_jsxs(Box, { sx: {
736
756
  display: "grid",
737
757
  border: "1px solid black",
@@ -773,7 +793,7 @@ function BasketStorageSummary({ empty, filled }) {
773
793
  minWidth: "170px",
774
794
  }, children: [_jsxs(Typography, { variant: "h5", children: [basketName, " Storage"] }), _jsxs(Typography, { variant: "body1", children: ["Empty: ", empty] }), _jsxs(Typography, { variant: "body1", children: ["Filled: ", filled] })] }));
775
795
  }
776
- export const SystemOverview = memo(function SystemOverview({ overview }) {
796
+ export const SystemOverview = memo(function SystemOverview({ overview, }) {
777
797
  return (_jsxs("div", { children: [overview.machines.toAscLazySeq().map(([group, machines]) => (_jsx(Box, { sx: {
778
798
  display: "flex",
779
799
  flexWrap: "wrap",
@@ -786,7 +806,9 @@ export const SystemOverview = memo(function SystemOverview({ overview }) {
786
806
  display: "flex",
787
807
  flexWrap: "wrap",
788
808
  justifyContent: "space-evenly",
789
- }, children: overview.machineAtLoad.map((status) => (_jsx(MachineAtLoad, { status: status, maxNumFaces: overview.maxNumFacesOnPallet }, status.lulNum))) })) : undefined, overview.stockerPals.length > 0 || overview.floatingBaskets.length > 0 || overview.storageBaskets ? (_jsxs(Box, { sx: {
809
+ }, children: overview.machineAtLoad.map((status) => (_jsx(MachineAtLoad, { status: status, maxNumFaces: overview.maxNumFacesOnPallet }, status.lulNum))) })) : undefined, overview.stockerPals.length > 0 ||
810
+ overview.floatingBaskets.length > 0 ||
811
+ overview.storageBaskets ? (_jsxs(Box, { sx: {
790
812
  display: "flex",
791
813
  flexWrap: "wrap",
792
814
  justifyContent: "space-evenly",
@@ -7,4 +7,4 @@ export interface SortableRegionProps {
7
7
  readonly renderDragOverlay: (mat: Readonly<IInProcessMaterial>) => ReactNode;
8
8
  readonly children?: ReactNode;
9
9
  }
10
- export declare const SortableRegion: import("react").MemoExoticComponent<(props: SortableRegionProps) => import("react/jsx-runtime").JSX.Element>;
10
+ export declare const SortableRegion: import("react").MemoExoticComponent<(props: SortableRegionProps) => import("react").JSX.Element>;
@@ -8,7 +8,7 @@ export declare const BasketsBinId: MaterialBinId;
8
8
  export interface MaterialBinState {
9
9
  readonly curBinOrder: ReadonlyArray<MaterialBinId>;
10
10
  }
11
- export declare const currentMaterialBinOrder: import("jotai").WritableAtom<readonly string[], [readonly string[] | typeof import("jotai/utils").RESET | ((prev: readonly string[]) => readonly string[] | typeof import("jotai/utils").RESET)], void>;
11
+ export declare const currentMaterialBinOrder: import("jotai").WritableAtom<readonly string[], [typeof import("jotai/utils").RESET | readonly string[] | ((prev: readonly string[]) => typeof import("jotai/utils").RESET | readonly string[])], void>;
12
12
  export declare function moveMaterialBin(curBinOrder: ReadonlyArray<MaterialBinId>, oldIdx: number, newIdx: number): ReadonlyArray<MaterialBinId>;
13
13
  export declare enum MaterialBinType {
14
14
  LoadStations = "Bin_LoadStations",
@@ -63,14 +63,14 @@ export var MaterialBinType;
63
63
  })(MaterialBinType || (MaterialBinType = {}));
64
64
  function basketLocation(st) {
65
65
  let loc;
66
- if (st.locationTitle && st.locationTitle.length > 0) {
67
- loc = st.locationTitle;
66
+ if (st.position.locationTitle && st.position.locationTitle.length > 0) {
67
+ loc = st.position.locationTitle;
68
68
  }
69
69
  else {
70
- loc = st.location + " " + st.locationNum.toString();
70
+ loc = st.position.location + " " + st.position.locationNum.toString();
71
71
  }
72
- if (st.slot) {
73
- loc += `-${st.slot}`;
72
+ if (st.position.zone) {
73
+ loc += `-${st.position.zone}`;
74
74
  }
75
75
  return loc;
76
76
  }
@@ -150,7 +150,8 @@ export function selectAllMaterialIntoBins(curSt, curBinOrder) {
150
150
  return q;
151
151
  })
152
152
  .concat(LazySeq.ofObject(curSt.queues)
153
- .filter(([, info]) => info.role === api.QueueRole.RawMaterial || info.role === api.QueueRole.InProcessTransfer)
153
+ .filter(([, info]) => info.role === api.QueueRole.RawMaterial ||
154
+ info.role === api.QueueRole.InProcessTransfer)
154
155
  .map(([qname, _]) => qname))
155
156
  .toRSet((x) => x);
156
157
  const quarantineQueues = LazySeq.ofObject(curSt.queues)
@@ -1,7 +1,7 @@
1
1
  import { Atom, WritableAtom } from "jotai";
2
2
  export type Last30ChartStart = "StartOfToday" | "StartOfYesterday" | "StartOfWeek" | "StartOfLastWeek" | "Last30";
3
3
  export type Last30ChartEnd = "Now" | "EndOfYesterday" | "EndOfLastWeek";
4
- export declare const last30WeekdayStartIdx: WritableAtom<0 | 2 | 1 | 3 | 4 | 5 | 6, [0 | 2 | 1 | 3 | 4 | 5 | 6 | typeof import("jotai/utils").RESET | ((prev: 0 | 2 | 1 | 3 | 4 | 5 | 6) => 0 | 2 | 1 | 3 | 4 | 5 | 6 | typeof import("jotai/utils").RESET)], void>;
4
+ export declare const last30WeekdayStartIdx: WritableAtom<0 | 1 | 2 | 3 | 4 | 5 | 6, [0 | 1 | 2 | 3 | 4 | 5 | 6 | typeof import("jotai/utils").RESET | ((prev: 0 | 1 | 2 | 3 | 4 | 5 | 6) => 0 | 1 | 2 | 3 | 4 | 5 | 6 | typeof import("jotai/utils").RESET)], void>;
5
5
  export declare const last30WeekdayStartMinuteOffset: WritableAtom<number, [number | typeof import("jotai/utils").RESET | ((prev: number) => number | typeof import("jotai/utils").RESET)], void>;
6
6
  export declare const last30ChartStartTimes: import("jotai-family").AtomFamily<Last30ChartStart, Atom<Date>>;
7
7
  export declare const last30ChartEndTimes: import("jotai-family").AtomFamily<Last30ChartEnd, Atom<Date | null>>;
@@ -116,7 +116,9 @@ export function convert_cost_percent_to_cost_per_piece(costs, machineCostPerYear
116
116
  parts: costs.parts.map((p) => ({
117
117
  part: p.part,
118
118
  parts_completed: p.parts_completed,
119
- machine: p.machine.mapValues((pct, statGroup) => p.parts_completed > 0 ? (pct * (stationCostForPeriod.get(statGroup) ?? 0)) / p.parts_completed : 0),
119
+ machine: p.machine.mapValues((pct, statGroup) => p.parts_completed > 0
120
+ ? (pct * (stationCostForPeriod.get(statGroup) ?? 0)) / p.parts_completed
121
+ : 0),
120
122
  labor: p.parts_completed > 0 ? (p.labor * totalLaborCostForPeriod) / p.parts_completed : 0,
121
123
  automation: p.parts_completed > 0 ? (p.automation * automationCostForPeriod) / p.parts_completed : 0,
122
124
  })),
@@ -39,9 +39,9 @@ import { durationToMinutes, durationToSeconds } from "../util/parseISODuration.j
39
39
  function basketsAtLoad(currentSt) {
40
40
  return LazySeq.ofObject(currentSt.baskets ?? {})
41
41
  .collect(([, basket]) => {
42
- if (basket.location === BasketLocationEnum.LoadUnload ||
43
- basket.location === BasketLocationEnum.LoadStationStaging) {
44
- return [basket.basketId, { group: "L/U", num: basket.locationNum }];
42
+ if (basket.position.location === BasketLocationEnum.LoadUnload ||
43
+ basket.position.location === BasketLocationEnum.LoadStationStaging) {
44
+ return [basket.basketId, { group: "L/U", num: basket.position.locationNum }];
45
45
  }
46
46
  return null;
47
47
  })
@@ -145,7 +145,9 @@ export function computeArrows(container, allNodes) {
145
145
  fromX: rect.right,
146
146
  fromY: rect.top + rect.height / 2,
147
147
  toY: rect.top + rect.height / 2,
148
- toX: byKind.completedMaterial ? byKind.completedMaterial.left + 2 : container.right - 10,
148
+ toX: byKind.completedMaterial
149
+ ? byKind.completedMaterial.left + 2
150
+ : container.right - 10,
149
151
  curveDirection: 1,
150
152
  });
151
153
  }
@@ -1,2 +1,2 @@
1
- export declare const allOperators: import("jotai").WritableAtom<readonly string[], [readonly string[] | typeof import("jotai/utils").RESET | ((prev: readonly string[]) => readonly string[] | typeof import("jotai/utils").RESET)], void>;
1
+ export declare const allOperators: import("jotai").WritableAtom<readonly string[], [typeof import("jotai/utils").RESET | readonly string[] | ((prev: readonly string[]) => typeof import("jotai/utils").RESET | readonly string[])], void>;
2
2
  export declare const currentOperator: import("jotai").WritableAtom<string | null, [newVal: string | null], void>;
@@ -31,7 +31,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31
31
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
32
  */
33
33
  import { LazySeq, OrderedMap, OrderedSet } from "@seedtactics/immutable-collections";
34
- import { last30MaterialSummary } from "../cell-status/material-summary";
34
+ import { last30MaterialSummary, } from "../cell-status/material-summary";
35
35
  import { atom } from "jotai";
36
36
  import { isLaborCycle, last30StationCycles } from "../cell-status/station-cycles";
37
37
  import { chartRangeAtom } from "./chart-times";
@@ -91,7 +91,11 @@ export function emptyStationCycles(allCycles) {
91
91
  }
92
92
  export function filterStationCycles(allCycles, { zoom, partAndProc, pallet, station, operation, carrierKind }) {
93
93
  const groupByPal = partAndProc && station && station !== FilterAnyMachineKey && station !== FilterAnyLoadKey;
94
- const groupByPart = pallet && !operation && station && station !== FilterAnyMachineKey && station !== FilterAnyLoadKey;
94
+ const groupByPart = pallet &&
95
+ !operation &&
96
+ station &&
97
+ station !== FilterAnyMachineKey &&
98
+ station !== FilterAnyLoadKey;
95
99
  return {
96
100
  ...extractFilterOptions(allCycles, partAndProc),
97
101
  seriesLabel: groupByPal ? "Carrier" : groupByPart ? "Part" : "Station",
@@ -182,7 +186,8 @@ export function loadOccupancyCycles(allCycles, { zoom, partAndProc, pallet, stat
182
186
  return false;
183
187
  }
184
188
  if (partAndProc &&
185
- (e.part !== partAndProc.part || !e.material.some((m) => m.proc === partAndProc.proc))) {
189
+ (e.part !== partAndProc.part ||
190
+ !e.material.some((m) => m.proc === partAndProc.proc))) {
186
191
  return false;
187
192
  }
188
193
  if (pallet && palletForCycle(e) !== pallet) {
@@ -324,7 +329,10 @@ export function buildCycleTable(cycles, matsById, startD, endD, hideMedian, load
324
329
  .toRArray()
325
330
  .join(":") +
326
331
  "</td>";
327
- table += "<td>" + displayStationName(cycle.stationGroup, cycle.stationNumber, loadStationNames) + "</td>";
332
+ table +=
333
+ "<td>" +
334
+ displayStationName(cycle.stationGroup, cycle.stationNumber, loadStationNames) +
335
+ "</td>";
328
336
  table += "<td>" + carrierLabel(cycle, basketDisplayName(basketName)) + "</td>";
329
337
  table +=
330
338
  "<td>" +
@@ -438,7 +446,8 @@ function result(e) {
438
446
  export function buildLogEntriesTable(cycles) {
439
447
  let table = "<table>\n<thead><tr>";
440
448
  table += "<th>Date</th><th>Part</th><th>Station</th><th>Pallet</th>";
441
- table += "<th>Serial</th><th>Workorder</th><th>Result</th><th>Elapsed Min</th><th>Active Min</th>";
449
+ table +=
450
+ "<th>Serial</th><th>Workorder</th><th>Result</th><th>Elapsed Min</th><th>Active Min</th>";
442
451
  table += "</tr></thead>\n<tbody>\n";
443
452
  for (const cycle of cycles) {
444
453
  if (cycle.startofcycle) {
@@ -55,8 +55,8 @@ export interface ProgramReport {
55
55
  readonly cellNameDifferentFromProgName: boolean;
56
56
  }
57
57
  export declare function calcProgramReport(usage: ToolUsage, cycleTimes: EstimatedCycleTimes, jobs: HashMap<string, Readonly<IHistoricJob>> | null, progsInCellCtrl: ReadonlyArray<Readonly<IProgramInCellController>>, progsToShow: ReadonlySet<string> | null): ProgramReport;
58
- export declare const programFilter: import("jotai").PrimitiveAtom<"AllPrograms" | "ActivePrograms"> & {
59
- init: "AllPrograms" | "ActivePrograms";
58
+ export declare const programFilter: import("jotai").PrimitiveAtom<"ActivePrograms" | "AllPrograms"> & {
59
+ init: "ActivePrograms" | "AllPrograms";
60
60
  };
61
61
  export declare const programReportRefreshTime: import("jotai").WritableAtom<Date | null, [Date], Promise<void>>;
62
62
  export declare const currentProgramReport: import("jotai").Atom<ProgramReport | null>;
@@ -35,7 +35,7 @@ import { durationToMinutes } from "../util/parseISODuration.js";
35
35
  import { MachineBackend } from "../network/backend.js";
36
36
  import { currentStatus } from "../cell-status/current-status.js";
37
37
  import copy from "copy-to-clipboard";
38
- import { last30ToolUse } from "../cell-status/tool-usage.js";
38
+ import { last30ToolUse, } from "../cell-status/tool-usage.js";
39
39
  import { last30EstimatedCycleTimes, PartAndStationOperation, } from "../cell-status/estimated-cycle-times.js";
40
40
  import { stat_name_and_num } from "../cell-status/station-cycles.js";
41
41
  import { LazySeq, HashMap, hashValues, OrderedSet } from "@seedtactics/immutable-collections";
@@ -258,7 +258,8 @@ function buildToolReportHTML(tools) {
258
258
  if (showTime) {
259
259
  const schUse = LazySeq.of(tool.parts).sumBy((p) => p.scheduledUseMinutes * p.quantity);
260
260
  table += "<td>" + schUse.toFixed(1) + "</td>";
261
- table += "<td>" + (mach.currentUseMinutes ? mach.currentUseMinutes.toFixed(1) : "") + "</td>";
261
+ table +=
262
+ "<td>" + (mach.currentUseMinutes ? mach.currentUseMinutes.toFixed(1) : "") + "</td>";
262
263
  table += "<td>" + (mach.lifetimeMinutes ? mach.lifetimeMinutes.toFixed(1) : "") + "</td>";
263
264
  table += "<td>" + (mach.remainingMinutes ? mach.remainingMinutes.toFixed(1) : "") + "</td>";
264
265
  }
package/dist/index.html CHANGED
@@ -44,7 +44,7 @@
44
44
  }
45
45
  }
46
46
  </style>
47
- <script type="module" crossorigin src="/assets/index-BwbaiELK.js"></script>
47
+ <script type="module" crossorigin src="/assets/index-BDPKYaRT.js"></script>
48
48
  <link rel="stylesheet" crossorigin href="/assets/index-CbqW4-gR.css">
49
49
  </head>
50
50
  <body>
@@ -409,6 +409,7 @@ export declare class Job implements IJob {
409
409
  allocationAlgorithm?: string | undefined;
410
410
  bookings?: string[] | undefined;
411
411
  provisionalWorkorderId?: string | undefined;
412
+ artifactRunDate?: Date | undefined;
412
413
  manuallyCreated?: boolean;
413
414
  holdEntireJob?: HoldPattern | undefined;
414
415
  cycles: number;
@@ -428,6 +429,7 @@ export interface IJob {
428
429
  allocationAlgorithm?: string | undefined;
429
430
  bookings?: string[] | undefined;
430
431
  provisionalWorkorderId?: string | undefined;
432
+ artifactRunDate?: Date | undefined;
431
433
  manuallyCreated?: boolean;
432
434
  holdEntireJob?: HoldPattern | undefined;
433
435
  cycles: number;
@@ -707,6 +709,7 @@ export declare class CurrentStatus implements ICurrentStatus {
707
709
  baskets?: {
708
710
  [key: string]: BasketStatus;
709
711
  } | undefined;
712
+ basketMoveInstructions?: BasketMoveInstruction[] | undefined;
710
713
  constructor(data?: ICurrentStatus);
711
714
  init(_data?: any): void;
712
715
  static fromJS(data: any): CurrentStatus;
@@ -730,6 +733,7 @@ export interface ICurrentStatus {
730
733
  baskets?: {
731
734
  [key: string]: BasketStatus;
732
735
  } | undefined;
736
+ basketMoveInstructions?: BasketMoveInstruction[] | undefined;
733
737
  }
734
738
  export declare class HistoricJob extends Job implements IHistoricJob {
735
739
  scheduleId?: string | undefined;
@@ -863,7 +867,7 @@ export declare class InProcessMaterialLocation implements IInProcessMaterialLoca
863
867
  currentQueue?: string | undefined;
864
868
  queuePosition?: number | undefined;
865
869
  basketId?: number | undefined;
866
- basketSubPosition?: number | undefined;
870
+ basketSlot?: number | undefined;
867
871
  constructor(data?: IInProcessMaterialLocation);
868
872
  init(_data?: any): void;
869
873
  static fromJS(data: any): InProcessMaterialLocation;
@@ -876,7 +880,7 @@ export interface IInProcessMaterialLocation {
876
880
  currentQueue?: string | undefined;
877
881
  queuePosition?: number | undefined;
878
882
  basketId?: number | undefined;
879
- basketSubPosition?: number | undefined;
883
+ basketSlot?: number | undefined;
880
884
  }
881
885
  export declare enum LocType {
882
886
  Free = "Free",
@@ -893,7 +897,7 @@ export declare class InProcessMaterialAction implements IInProcessMaterialAction
893
897
  loadFromBasketId?: number | undefined;
894
898
  unloadIntoQueue?: string | undefined;
895
899
  unloadToBasketId?: number | undefined;
896
- unloadToBasketSubPosition?: number | undefined;
900
+ unloadToBasketSlot?: number | undefined;
897
901
  elapsedLoadUnloadTime?: string | undefined;
898
902
  program?: string | undefined;
899
903
  elapsedMachiningTime?: string | undefined;
@@ -912,7 +916,7 @@ export interface IInProcessMaterialAction {
912
916
  loadFromBasketId?: number | undefined;
913
917
  unloadIntoQueue?: string | undefined;
914
918
  unloadToBasketId?: number | undefined;
915
- unloadToBasketSubPosition?: number | undefined;
919
+ unloadToBasketSlot?: number | undefined;
916
920
  elapsedLoadUnloadTime?: string | undefined;
917
921
  program?: string | undefined;
918
922
  elapsedMachiningTime?: string | undefined;
@@ -1038,10 +1042,9 @@ export declare enum WorkorderSerialCloseout {
1038
1042
  }
1039
1043
  export declare class BasketStatus implements IBasketStatus {
1040
1044
  basketId: number;
1041
- location: BasketLocationEnum;
1042
- locationNum: number;
1043
- locationTitle?: string | undefined;
1044
- slot?: number | undefined;
1045
+ position: BasketPosition;
1046
+ emptySlots?: number[];
1047
+ unknownSlots?: number[];
1045
1048
  constructor(data?: IBasketStatus);
1046
1049
  init(_data?: any): void;
1047
1050
  static fromJS(data: any): BasketStatus;
@@ -1049,10 +1052,25 @@ export declare class BasketStatus implements IBasketStatus {
1049
1052
  }
1050
1053
  export interface IBasketStatus {
1051
1054
  basketId: number;
1055
+ position: BasketPosition;
1056
+ emptySlots?: number[];
1057
+ unknownSlots?: number[];
1058
+ }
1059
+ export declare class BasketPosition implements IBasketPosition {
1052
1060
  location: BasketLocationEnum;
1053
1061
  locationNum: number;
1054
1062
  locationTitle?: string | undefined;
1055
- slot?: number | undefined;
1063
+ zone?: number | undefined;
1064
+ constructor(data?: IBasketPosition);
1065
+ init(_data?: any): void;
1066
+ static fromJS(data: any): BasketPosition;
1067
+ toJSON(data?: any): any;
1068
+ }
1069
+ export interface IBasketPosition {
1070
+ location: BasketLocationEnum;
1071
+ locationNum: number;
1072
+ locationTitle?: string | undefined;
1073
+ zone?: number | undefined;
1056
1074
  }
1057
1075
  export declare enum BasketLocationEnum {
1058
1076
  LoadUnload = "LoadUnload",
@@ -1060,6 +1078,38 @@ export declare enum BasketLocationEnum {
1060
1078
  Storage = "Storage",
1061
1079
  InTransit = "InTransit"
1062
1080
  }
1081
+ export declare class BasketMoveInstruction implements IBasketMoveInstruction {
1082
+ instructionId: string;
1083
+ basketId: number;
1084
+ source: BasketPosition;
1085
+ destination: BasketPosition;
1086
+ reason: BasketMoveReason;
1087
+ displayText: string;
1088
+ prerequisiteInstructionId?: string | undefined;
1089
+ constructor(data?: IBasketMoveInstruction);
1090
+ init(_data?: any): void;
1091
+ static fromJS(data: any): BasketMoveInstruction;
1092
+ toJSON(data?: any): any;
1093
+ }
1094
+ export interface IBasketMoveInstruction {
1095
+ instructionId: string;
1096
+ basketId: number;
1097
+ source: BasketPosition;
1098
+ destination: BasketPosition;
1099
+ reason: BasketMoveReason;
1100
+ displayText: string;
1101
+ prerequisiteInstructionId?: string | undefined;
1102
+ }
1103
+ export declare enum BasketMoveReason {
1104
+ LoadMaterial = "LoadMaterial",
1105
+ UnloadMaterial = "UnloadMaterial",
1106
+ ProcessTransfer = "ProcessTransfer",
1107
+ SupplyMaterialToCell = "SupplyMaterialToCell",
1108
+ SupplyEmptyBasket = "SupplyEmptyBasket",
1109
+ ReturnToStorage = "ReturnToStorage",
1110
+ RemoveForCorrection = "RemoveForCorrection",
1111
+ Other = "Other"
1112
+ }
1063
1113
  export declare class EditMaterialInLogEvents implements IEditMaterialInLogEvents {
1064
1114
  oldMaterialID: number;
1065
1115
  newMaterialID: number;
@@ -1204,6 +1254,7 @@ export declare class MostRecentSchedule implements IMostRecentSchedule {
1204
1254
  extraParts: {
1205
1255
  [key: string]: number;
1206
1256
  };
1257
+ recentArtifactRuns?: ScheduledArtifactRun[] | undefined;
1207
1258
  unscheduledRebookings?: Rebooking[] | undefined;
1208
1259
  constructor(data?: IMostRecentSchedule);
1209
1260
  init(_data?: any): void;
@@ -1216,8 +1267,23 @@ export interface IMostRecentSchedule {
1216
1267
  extraParts: {
1217
1268
  [key: string]: number;
1218
1269
  };
1270
+ recentArtifactRuns?: ScheduledArtifactRun[] | undefined;
1219
1271
  unscheduledRebookings?: Rebooking[] | undefined;
1220
1272
  }
1273
+ export declare class ScheduledArtifactRun implements IScheduledArtifactRun {
1274
+ jobUnique: string;
1275
+ partName: string;
1276
+ artifactRunDate: Date;
1277
+ constructor(data?: IScheduledArtifactRun);
1278
+ init(_data?: any): void;
1279
+ static fromJS(data: any): ScheduledArtifactRun;
1280
+ toJSON(data?: any): any;
1281
+ }
1282
+ export interface IScheduledArtifactRun {
1283
+ jobUnique: string;
1284
+ partName: string;
1285
+ artifactRunDate: Date;
1286
+ }
1221
1287
  export declare class Rebooking implements IRebooking {
1222
1288
  bookingId: string;
1223
1289
  partName: string;