@seedtactics/insight-client 16.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/README.md +37 -0
  2. package/dist/cell-status/buffers.d.ts +36 -0
  3. package/dist/cell-status/buffers.js +127 -0
  4. package/dist/cell-status/current-status.d.ts +30 -0
  5. package/dist/cell-status/current-status.js +200 -0
  6. package/dist/cell-status/estimated-cycle-times.d.ts +41 -0
  7. package/dist/cell-status/estimated-cycle-times.js +257 -0
  8. package/dist/cell-status/inspections.d.ts +55 -0
  9. package/dist/cell-status/inspections.js +213 -0
  10. package/dist/cell-status/loading.d.ts +26 -0
  11. package/dist/cell-status/loading.js +112 -0
  12. package/dist/cell-status/material-details.d.ts +116 -0
  13. package/dist/cell-status/material-details.js +422 -0
  14. package/dist/cell-status/material-summary.d.ts +52 -0
  15. package/dist/cell-status/material-summary.js +312 -0
  16. package/dist/cell-status/names.d.ts +19 -0
  17. package/dist/cell-status/names.js +134 -0
  18. package/dist/cell-status/pallet-cycles.d.ts +24 -0
  19. package/dist/cell-status/pallet-cycles.js +78 -0
  20. package/dist/cell-status/rebookings.d.ts +30 -0
  21. package/dist/cell-status/rebookings.js +139 -0
  22. package/dist/cell-status/scheduled-jobs.d.ts +18 -0
  23. package/dist/cell-status/scheduled-jobs.js +94 -0
  24. package/dist/cell-status/sim-day-usage.d.ts +14 -0
  25. package/dist/cell-status/sim-day-usage.js +54 -0
  26. package/dist/cell-status/sim-production.d.ts +22 -0
  27. package/dist/cell-status/sim-production.js +91 -0
  28. package/dist/cell-status/sim-station-use.d.ts +25 -0
  29. package/dist/cell-status/sim-station-use.js +71 -0
  30. package/dist/cell-status/station-cycles.d.ts +34 -0
  31. package/dist/cell-status/station-cycles.js +145 -0
  32. package/dist/cell-status/tool-replacements.d.ts +44 -0
  33. package/dist/cell-status/tool-replacements.js +155 -0
  34. package/dist/cell-status/tool-usage.d.ts +25 -0
  35. package/dist/cell-status/tool-usage.js +95 -0
  36. package/dist/components/App.d.ts +15 -0
  37. package/dist/components/App.js +549 -0
  38. package/dist/components/AxisAndGrid.d.ts +51 -0
  39. package/dist/components/AxisAndGrid.js +47 -0
  40. package/dist/components/BarcodeScanning.d.ts +6 -0
  41. package/dist/components/BarcodeScanning.js +150 -0
  42. package/dist/components/ChartTooltip.d.ts +28 -0
  43. package/dist/components/ChartTooltip.js +95 -0
  44. package/dist/components/ChooseMode.d.ts +18 -0
  45. package/dist/components/ChooseMode.js +136 -0
  46. package/dist/components/ChooseOperator.d.ts +1 -0
  47. package/dist/components/ChooseOperator.js +93 -0
  48. package/dist/components/ErrorsAndLoading.d.ts +9 -0
  49. package/dist/components/ErrorsAndLoading.js +55 -0
  50. package/dist/components/LoadingIcon.d.ts +1 -0
  51. package/dist/components/LoadingIcon.js +48 -0
  52. package/dist/components/LogEntry.d.ts +16 -0
  53. package/dist/components/LogEntry.js +365 -0
  54. package/dist/components/ManualSerialEntry.d.ts +5 -0
  55. package/dist/components/ManualSerialEntry.js +91 -0
  56. package/dist/components/MonthSelect.d.ts +6 -0
  57. package/dist/components/MonthSelect.js +67 -0
  58. package/dist/components/Navigation.d.ts +23 -0
  59. package/dist/components/Navigation.js +120 -0
  60. package/dist/components/VerboseLogging.d.ts +1 -0
  61. package/dist/components/VerboseLogging.js +47 -0
  62. package/dist/components/analysis/AnalysisSelectToolbar.d.ts +1 -0
  63. package/dist/components/analysis/AnalysisSelectToolbar.js +55 -0
  64. package/dist/components/analysis/BufferChart.d.ts +1 -0
  65. package/dist/components/analysis/BufferChart.js +139 -0
  66. package/dist/components/analysis/CostPerPiece.d.ts +2 -0
  67. package/dist/components/analysis/CostPerPiece.js +175 -0
  68. package/dist/components/analysis/CycleChart.d.ts +42 -0
  69. package/dist/components/analysis/CycleChart.js +281 -0
  70. package/dist/components/analysis/DataTable.d.ts +83 -0
  71. package/dist/components/analysis/DataTable.js +215 -0
  72. package/dist/components/analysis/EfficiencyPage.d.ts +2 -0
  73. package/dist/components/analysis/EfficiencyPage.js +138 -0
  74. package/dist/components/analysis/HeatChart.d.ts +22 -0
  75. package/dist/components/analysis/HeatChart.js +161 -0
  76. package/dist/components/analysis/InspectionDataTable.d.ts +10 -0
  77. package/dist/components/analysis/InspectionDataTable.js +148 -0
  78. package/dist/components/analysis/InspectionSankey.d.ts +12 -0
  79. package/dist/components/analysis/InspectionSankey.js +140 -0
  80. package/dist/components/analysis/PalletCycleCards.d.ts +1 -0
  81. package/dist/components/analysis/PalletCycleCards.js +137 -0
  82. package/dist/components/analysis/PartCycleCards.d.ts +2 -0
  83. package/dist/components/analysis/PartCycleCards.js +331 -0
  84. package/dist/components/analysis/QualityPage.d.ts +1 -0
  85. package/dist/components/analysis/QualityPage.js +49 -0
  86. package/dist/components/analysis/ScheduleHistory.d.ts +3 -0
  87. package/dist/components/analysis/ScheduleHistory.js +108 -0
  88. package/dist/components/analysis/StationDataTable.d.ts +25 -0
  89. package/dist/components/analysis/StationDataTable.js +246 -0
  90. package/dist/components/analysis/ToolReplacements.d.ts +1 -0
  91. package/dist/components/analysis/ToolReplacements.js +370 -0
  92. package/dist/components/operations/AllMaterial.d.ts +5 -0
  93. package/dist/components/operations/AllMaterial.js +267 -0
  94. package/dist/components/operations/ChartRangeEdit.d.ts +4 -0
  95. package/dist/components/operations/ChartRangeEdit.js +148 -0
  96. package/dist/components/operations/CloseoutReport.d.ts +2 -0
  97. package/dist/components/operations/CloseoutReport.js +172 -0
  98. package/dist/components/operations/CompletedParts.d.ts +2 -0
  99. package/dist/components/operations/CompletedParts.js +286 -0
  100. package/dist/components/operations/CurrentWorkorders.d.ts +3 -0
  101. package/dist/components/operations/CurrentWorkorders.js +368 -0
  102. package/dist/components/operations/Dashboard.d.ts +2 -0
  103. package/dist/components/operations/Dashboard.js +90 -0
  104. package/dist/components/operations/OEEChart.d.ts +10 -0
  105. package/dist/components/operations/OEEChart.js +173 -0
  106. package/dist/components/operations/Outliers.d.ts +4 -0
  107. package/dist/components/operations/Outliers.js +69 -0
  108. package/dist/components/operations/ProgramHighlight.d.ts +1 -0
  109. package/dist/components/operations/ProgramHighlight.js +9 -0
  110. package/dist/components/operations/Programs.d.ts +5 -0
  111. package/dist/components/operations/Programs.js +363 -0
  112. package/dist/components/operations/Rebookings.d.ts +1 -0
  113. package/dist/components/operations/Rebookings.js +213 -0
  114. package/dist/components/operations/RecentCycleChart.d.ts +4 -0
  115. package/dist/components/operations/RecentCycleChart.js +240 -0
  116. package/dist/components/operations/RecentProduction.d.ts +2 -0
  117. package/dist/components/operations/RecentProduction.js +213 -0
  118. package/dist/components/operations/RecentSchedules.d.ts +12 -0
  119. package/dist/components/operations/RecentSchedules.js +180 -0
  120. package/dist/components/operations/RecentStationCycles.d.ts +4 -0
  121. package/dist/components/operations/RecentStationCycles.js +159 -0
  122. package/dist/components/operations/ShiftSettings.d.ts +6 -0
  123. package/dist/components/operations/ShiftSettings.js +134 -0
  124. package/dist/components/operations/SimDayUsage.d.ts +1 -0
  125. package/dist/components/operations/SimDayUsage.js +133 -0
  126. package/dist/components/operations/ToolReport.d.ts +3 -0
  127. package/dist/components/operations/ToolReport.js +233 -0
  128. package/dist/components/operations/WorkorderGantt.d.ts +1 -0
  129. package/dist/components/operations/WorkorderGantt.js +124 -0
  130. package/dist/components/quality/QualityMaterial.d.ts +2 -0
  131. package/dist/components/quality/QualityMaterial.js +169 -0
  132. package/dist/components/quality/QualityPaths.d.ts +1 -0
  133. package/dist/components/quality/QualityPaths.js +53 -0
  134. package/dist/components/quality/RecentFailedInspections.d.ts +1 -0
  135. package/dist/components/quality/RecentFailedInspections.js +123 -0
  136. package/dist/components/routes.d.ts +170 -0
  137. package/dist/components/routes.js +301 -0
  138. package/dist/components/station-monitor/BulkRawMaterial.d.ts +11 -0
  139. package/dist/components/station-monitor/BulkRawMaterial.js +251 -0
  140. package/dist/components/station-monitor/Closeout.d.ts +5 -0
  141. package/dist/components/station-monitor/Closeout.js +162 -0
  142. package/dist/components/station-monitor/CustomStationMonitorDialog.d.ts +1 -0
  143. package/dist/components/station-monitor/CustomStationMonitorDialog.js +55 -0
  144. package/dist/components/station-monitor/Inspection.d.ts +8 -0
  145. package/dist/components/station-monitor/Inspection.js +164 -0
  146. package/dist/components/station-monitor/InvalidateCycle.d.ts +33 -0
  147. package/dist/components/station-monitor/InvalidateCycle.js +262 -0
  148. package/dist/components/station-monitor/JobDetails.d.ts +7 -0
  149. package/dist/components/station-monitor/JobDetails.js +108 -0
  150. package/dist/components/station-monitor/LoadStation.d.ts +10 -0
  151. package/dist/components/station-monitor/LoadStation.js +450 -0
  152. package/dist/components/station-monitor/Material.d.ts +77 -0
  153. package/dist/components/station-monitor/Material.js +489 -0
  154. package/dist/components/station-monitor/MoveMaterialArrows.d.ts +11 -0
  155. package/dist/components/station-monitor/MoveMaterialArrows.js +118 -0
  156. package/dist/components/station-monitor/PrintedLabel.d.ts +29 -0
  157. package/dist/components/station-monitor/PrintedLabel.js +166 -0
  158. package/dist/components/station-monitor/QuarantineButton.d.ts +4 -0
  159. package/dist/components/station-monitor/QuarantineButton.js +184 -0
  160. package/dist/components/station-monitor/Queues.d.ts +23 -0
  161. package/dist/components/station-monitor/Queues.js +312 -0
  162. package/dist/components/station-monitor/QueuesAddMaterial.d.ts +30 -0
  163. package/dist/components/station-monitor/QueuesAddMaterial.js +248 -0
  164. package/dist/components/station-monitor/SelectInspType.d.ts +2 -0
  165. package/dist/components/station-monitor/SelectInspType.js +99 -0
  166. package/dist/components/station-monitor/SelectWorkorder.d.ts +4 -0
  167. package/dist/components/station-monitor/SelectWorkorder.js +100 -0
  168. package/dist/components/station-monitor/StationToolbar.d.ts +3 -0
  169. package/dist/components/station-monitor/StationToolbar.js +168 -0
  170. package/dist/components/station-monitor/SystemOverview.d.ts +46 -0
  171. package/dist/components/station-monitor/SystemOverview.js +439 -0
  172. package/dist/components/station-monitor/Whiteboard.d.ts +10 -0
  173. package/dist/components/station-monitor/Whiteboard.js +67 -0
  174. package/dist/data/all-material-bins.d.ts +45 -0
  175. package/dist/data/all-material-bins.js +224 -0
  176. package/dist/data/chart-times.d.ts +20 -0
  177. package/dist/data/chart-times.js +99 -0
  178. package/dist/data/cost-per-piece.d.ts +32 -0
  179. package/dist/data/cost-per-piece.js +183 -0
  180. package/dist/data/current-cycles.d.ts +13 -0
  181. package/dist/data/current-cycles.js +144 -0
  182. package/dist/data/inspection-sankey.d.ts +15 -0
  183. package/dist/data/inspection-sankey.js +147 -0
  184. package/dist/data/move-arrows.d.ts +48 -0
  185. package/dist/data/move-arrows.js +217 -0
  186. package/dist/data/operators.d.ts +2 -0
  187. package/dist/data/operators.js +44 -0
  188. package/dist/data/part-summary.d.ts +17 -0
  189. package/dist/data/part-summary.js +107 -0
  190. package/dist/data/path-lookup.d.ts +13 -0
  191. package/dist/data/path-lookup.js +107 -0
  192. package/dist/data/queue-material.d.ts +46 -0
  193. package/dist/data/queue-material.js +256 -0
  194. package/dist/data/results.bufferchart.d.ts +10 -0
  195. package/dist/data/results.bufferchart.js +90 -0
  196. package/dist/data/results.completed-parts.d.ts +26 -0
  197. package/dist/data/results.completed-parts.js +181 -0
  198. package/dist/data/results.cycles.d.ts +86 -0
  199. package/dist/data/results.cycles.js +454 -0
  200. package/dist/data/results.inspection.d.ts +36 -0
  201. package/dist/data/results.inspection.js +188 -0
  202. package/dist/data/results.oee.d.ts +40 -0
  203. package/dist/data/results.oee.js +330 -0
  204. package/dist/data/results.schedules.d.ts +23 -0
  205. package/dist/data/results.schedules.js +157 -0
  206. package/dist/data/tools-programs.d.ts +78 -0
  207. package/dist/data/tools-programs.js +376 -0
  208. package/dist/index.d.ts +1 -0
  209. package/dist/index.js +60 -0
  210. package/dist/network/api.d.ts +1390 -0
  211. package/dist/network/api.js +4971 -0
  212. package/dist/network/backend-mock.d.ts +11 -0
  213. package/dist/network/backend-mock.js +512 -0
  214. package/dist/network/backend.d.ts +57 -0
  215. package/dist/network/backend.js +77 -0
  216. package/dist/network/load-specific-month.d.ts +13 -0
  217. package/dist/network/load-specific-month.js +77 -0
  218. package/dist/network/server-settings.d.ts +12 -0
  219. package/dist/network/server-settings.js +92 -0
  220. package/dist/network/websocket.d.ts +4 -0
  221. package/dist/network/websocket.js +165 -0
  222. package/dist/renderer.d.ts +8 -0
  223. package/dist/renderer.js +55 -0
  224. package/dist/seedtactics-logo.d.ts +2 -0
  225. package/dist/seedtactics-logo.js +4 -0
  226. package/dist/util/chart-colors.d.ts +1 -0
  227. package/dist/util/chart-colors.js +116 -0
  228. package/dist/util/chart-helpers.d.ts +3 -0
  229. package/dist/util/chart-helpers.js +51 -0
  230. package/dist/util/parseISODuration.d.ts +4 -0
  231. package/dist/util/parseISODuration.js +40 -0
  232. package/docs/client-efficiency.md +355 -0
  233. package/docs/client-engineering.md +54 -0
  234. package/docs/client-launch.md +55 -0
  235. package/docs/client-operations.md +88 -0
  236. package/docs/client-quality.md +74 -0
  237. package/docs/client-sales.md +61 -0
  238. package/docs/client-scanners.md +41 -0
  239. package/docs/client-station-monitor.md +149 -0
  240. package/docs/client-tools-programs.md +74 -0
  241. package/docs/improve-fms.md +141 -0
  242. package/docs/makino.md +40 -0
  243. package/docs/material-quarantine.md +82 -0
  244. package/docs/material-tracking.md +236 -0
  245. package/docs/mazak.md +115 -0
  246. package/docs/niigata.md +228 -0
  247. package/docs/operator-procedures.md +106 -0
  248. package/docs/part-instructions.md +63 -0
  249. package/docs/screenshots/insight-all-material.png +0 -0
  250. package/docs/screenshots/insight-analysis-pallets.png +0 -0
  251. package/docs/screenshots/insight-analysis-part-completed.png +0 -0
  252. package/docs/screenshots/insight-analysis-sankey.png +0 -0
  253. package/docs/screenshots/insight-analysis-station-oee.png +0 -0
  254. package/docs/screenshots/insight-buffer-occupancy.png +0 -0
  255. package/docs/screenshots/insight-choose-analysis-month.png +0 -0
  256. package/docs/screenshots/insight-closeout.png +0 -0
  257. package/docs/screenshots/insight-cost-percentages.png +0 -0
  258. package/docs/screenshots/insight-dashboard.png +0 -0
  259. package/docs/screenshots/insight-event-custom-view.jpg +0 -0
  260. package/docs/screenshots/insight-event-viewer.jpg +0 -0
  261. package/docs/screenshots/insight-inspection.png +0 -0
  262. package/docs/screenshots/insight-load-station-details.png +0 -0
  263. package/docs/screenshots/insight-load-station.png +0 -0
  264. package/docs/screenshots/insight-loadcycle-graph.png +0 -0
  265. package/docs/screenshots/insight-loadstation-small.jpg +0 -0
  266. package/docs/screenshots/insight-machinecycle-graph.png +0 -0
  267. package/docs/screenshots/insight-machinecycle-table.png +0 -0
  268. package/docs/screenshots/insight-machinecycles.png +0 -0
  269. package/docs/screenshots/insight-machinehours.png +0 -0
  270. package/docs/screenshots/insight-machineoutliers.png +0 -0
  271. package/docs/screenshots/insight-monthly-schedules.png +0 -0
  272. package/docs/screenshots/insight-operations-material.png +0 -0
  273. package/docs/screenshots/insight-operations-overview.png +0 -0
  274. package/docs/screenshots/insight-operations-reports.png +0 -0
  275. package/docs/screenshots/insight-part-cost.png +0 -0
  276. package/docs/screenshots/insight-program-report.png +0 -0
  277. package/docs/screenshots/insight-quality-material-details.png +0 -0
  278. package/docs/screenshots/insight-quality-material.png +0 -0
  279. package/docs/screenshots/insight-quality-quarantine.png +0 -0
  280. package/docs/screenshots/insight-quality-sankey.png +0 -0
  281. package/docs/screenshots/insight-quality-similar-paths.png +0 -0
  282. package/docs/screenshots/insight-queue-details.png +0 -0
  283. package/docs/screenshots/insight-queues-jobs-table.png +0 -0
  284. package/docs/screenshots/insight-queues.png +0 -0
  285. package/docs/screenshots/insight-sim-day-usage.png +0 -0
  286. package/docs/screenshots/insight-station-system-overview-buttons.png +0 -0
  287. package/docs/screenshots/insight-station-system-overview.png +0 -0
  288. package/docs/screenshots/insight-system-overview.png +0 -0
  289. package/docs/screenshots/insight-tool-replacements.png +0 -0
  290. package/docs/screenshots/insight-tool-report.png +0 -0
  291. package/docs/screenshots/insight-toolbar-btns.png +0 -0
  292. package/docs/screenshots/insight-workorder-gantt.png +0 -0
  293. package/docs/screenshots/insight-workorders.png +0 -0
  294. package/docs/security.md +131 -0
  295. package/docs/server-config.md +56 -0
  296. package/docs/server-errors.md +44 -0
  297. package/package.json +90 -0
  298. package/src/index.ts +65 -0
@@ -0,0 +1,106 @@
1
+ ---
2
+ title: Load/Unload Procedures
3
+ nav: Procedures > Operator Load/Unload
4
+ description: >-
5
+ Implement continuous improvement of a flexible machining system by reviewing
6
+ targeted metrics which expose cell efficiency and cost per piece.
7
+ ---
8
+
9
+ # Load/Unload Procedures
10
+
11
+ FMS Insight provides [targeted pages](client-station-monitor) for operators on the factory floor:
12
+ a page for each load station which shows the material to load or unload, a page for each inspection stand
13
+ showing details about the material to be inspected, a page for the wash station, and finally a page
14
+ for in-process material queue management. These pages use the [whiteboard metaphor](material-tracking)
15
+ for material tracking. We suggest that each station has a dedicated display or tablet with the relevant page
16
+ bookmarked or made the homepage; these pages are designed to work on a touchscreen. In addition, each station
17
+ should have an attached barcode scanner.
18
+
19
+ FMS Insight's load station page will display what the cell controller
20
+ is expecting to happen at the load station. Specifically, the page will display the material
21
+ to load, the material to unload, and the material to transfer between faces (if the pallet has
22
+ multiple faces). If the operator performs all the tasks as specified, the operator presses
23
+ the load button to signal to the cell controller that the load is complete. FMS Insight monitors
24
+ the cell controller and will update the page.
25
+
26
+ ![Screenshot of Load Station screen](screenshots/insight-load-station.png)
27
+
28
+ If queues are used for managing material, the load station screen also can show the queues on the
29
+ right hand side. The specific material that is marked as loaded is the first material in the queue
30
+ which matches the job and route details. The material in the queue can be re-ordered by dragging,
31
+ which allows the operator to control which serial is loaded onto the pallet. Note that because
32
+ the cell controller has already assigned a job to the pallet at the load station, the material
33
+ at the front of the queue will not always be the material that is loaded; the first material which
34
+ matches the job is loaded.
35
+
36
+ ## Introducing Raw Material
37
+
38
+ The jobs control how raw material is introduced. If no raw
39
+ material queue is set on the job, the cell controller will assume that raw material is
40
+ always available and bring a pallet to be loaded as soon as it is empty. FMS Insight is watching
41
+ the cell controller and will create new material once the load is complete.
42
+
43
+ Alternatively, the job can be configured with an input queue on the first process. In this case,
44
+ the contents of the queue control when the cell controller will bring a pallet to the load
45
+ station to be loaded. The Queues webpage shows the contents of the queue and allows the operator
46
+ to scan or enter new material into the queue. The page also shows a table of scheduled jobs and
47
+ shows the quantity of parts that still must be loaded.
48
+
49
+ ![Screenshot of queues page](screenshots/insight-queues-jobs-table.png)
50
+
51
+ The operator should physically bring the casting/raw material to the cell and place it in
52
+ a designated area nearby the load station. Once the material has arrived, the operator
53
+ can click a button on the queues webpage (or scan a barcode) to add the material to the queue.
54
+ FMS Insight supports a variety of techniques controlled by [config settings](server-config):
55
+ adding raw material assigned to a specific job, adding raw material with or without a serial,
56
+ or bulk adding a large quantity of material.
57
+
58
+ Each physical location on the shop floor which holds material should correspond to a queue
59
+ in FMS Insight. In addition, each queue should have a dedicated display or tablet mounted
60
+ on the shop floor right next to the queue. This display should have the queues page
61
+ bookmarked or set as the homepage and only show the queues page. This allows the operators
62
+ and supervisors to quickly check at a glance that the material on the shop floor matches
63
+ the material FMS Insight records as in the queue.
64
+
65
+ ## Quarantine Material
66
+
67
+ FMS Insight optionally supports the ability to [quarantine material](material-quarantine).
68
+ Quarantined material is material that is temporarily removed from the cell for re-machining,
69
+ more detailed inspection, or some other rework. Material can be quarantined on the queues
70
+ page by opening the material dialog and clicking a button. This moves the material to
71
+ the quarantine queue where it is visible on the supervisor's material page.
72
+
73
+ Once the material is ready to be re-introduced into the cell, the operator should bring it
74
+ back to the shop floor. Once the material has arrived, the operator can click a button on
75
+ the queues webpage (or scan the barcode) to add the material into the queue. Once it is
76
+ back in the queue, the cell controller will activate a pallet to load the material.
77
+
78
+ ## Recovering From Misload
79
+
80
+ The load station page displays the load, unload, or reclamp steps that the cell
81
+ controller is expecting the operator to preform. When the operator presses the ready button,
82
+ both the cell controller and FMS Insight (which is watching the cell controller) assumes
83
+ that these instructions took place. FMS Insight will take the material from the input queue
84
+ and record it as loaded onto the pallet. The cell controller will begin moving the pallet
85
+ to the machine.
86
+
87
+ If for whatever reason the load instructions can not be followed, ideally the operator should
88
+ edit the cell controller **before** the load is completed. FMS Insight will adjust itself
89
+ based on whatever the cell controller expects to happen and only at the time that the load
90
+ is completed is anything finalized and recorded.
91
+
92
+ If the load button is pressed, the first step is to adjust the status in the cell controller
93
+ to match what actually happened. FMS Insight is watching the cell controller and when
94
+ the pallet status is adjusted, FMS Insight will move any material that was thought to
95
+ be loaded on the pallet to the quarantine queue. That material can then be re-introduced
96
+ back into the queue so that the queue in FMS Insight matches the material on the shop floor.
97
+ In addition, FMS Insight allows the ability to invalidate the inadvertent load events that
98
+ were created.
99
+
100
+ Finally, in certain situations depending on the specific configuration of the jobs and queues,
101
+ FMS Insight supports a serial swap. FMS Insight assumes the material that is loaded is the
102
+ first material in the queue which matches the job the cell controller expects.
103
+ If the serial actually loaded is different but the job and details match, the supervisor can
104
+ swap the two serials on the supervisor's material page. This is a data-only change and no
105
+ change is made to the cell controller. If a swap cannot be performed, the material must be
106
+ quarantined and invalidated as described above.
@@ -0,0 +1,63 @@
1
+ ---
2
+ title: Operator Instructions
3
+ nav: FMS Insight Server > Instructions
4
+ description: >-
5
+ The FMS Insight server can be configured to display arbitrary load, unload, wash
6
+ and inspection instructions to the operator.
7
+ ---
8
+
9
+ # FMS Insight Operator Instructions
10
+
11
+ FMS Insight can display load, wash, and inspection instructions to the operator.
12
+ The instructions are documents (typically PDF files) stored on the FMS Insight server,
13
+ and when the user clicks a button in the client the instructions are shown in a new
14
+ browser tab.
15
+
16
+ ### Configuration
17
+
18
+ The instruction files are kept on the FMS Insight server in a single directory. The
19
+ directory is configured via a [configuration option](server-config) `InstructionFilePath`
20
+ within the `FMS` section. Once configured, this directory should be filled with files
21
+ that can be displayed in a browser (PDF is a good choice). When the user requests an
22
+ instruction file, the FMS Insight server will search the filename of all files inside this
23
+ directory
24
+
25
+ ### Instruction Types
26
+
27
+ There are four instruction types: load, unload, wash, and inspections. Each instruction type will
28
+ search for a different file depending on the page on the
29
+ [station monitor screen](client-station-monitor) and the currently selected part. To create
30
+ instruction files for all possibilities, you should create files as follows:
31
+
32
+ - For each part, create a file with the partname and `load` in the filename. Inside this
33
+ file, add pictures and text to explain how to load and optionally unload the part from the pallet.
34
+ For example, for a part named `ABC123`, you could create a file `ABC123-load.pdf` which contains
35
+ the instructions. When the user is on the Load Station page in FMS Insight, FMS Insight
36
+ will search for a file with the partname and `load` in the filename, find `ABC123-load.pdf`,
37
+ and display it to the user.
38
+
39
+ - For each part, optionally create a file with the partname and `unload` in the filename. If no
40
+ file exists with the partname and `unload` in the filename, FMS Insight will fall back to searching
41
+ for a file with the partname and `load` in the filename. Thus you could just create a single file
42
+ (e.g. `ABC123-load.pdf`) which contains both the load and unload instructions, or you could create
43
+ two separate files (e.g. `ABC123-load.pdf` and `ABC123-unload.pdf`).
44
+
45
+ - For each part, create a file with the partname and `wash` in the filename. Inside this
46
+ file, add pictures and text to explain how to wash and perhaps other tasks at the wash station.
47
+ For example, for a part named `ABC123`, you could create a file `ABC123-wash.pdf`.
48
+ Similar to before, when the user is on the Wash page in FMS Insight, this instruction file
49
+ will be displayed.
50
+
51
+ - For each part and each inspection type, create a file with the partname and the inspection type
52
+ in the filename. For example, for a part named `ABC123` and inspection types `CMM` and `3DScan`,
53
+ you should create two files: `ABC123-CMM.pdf` and `ABC123-3DScan.pdf`. Each file should contain
54
+ pictures and text to explain how to perform the inspection on this part. When the user is on
55
+ the Inspection page, FMS Insight will find the file based on the currently selected part and
56
+ inspection type.
57
+
58
+ ### Opening the instructions
59
+
60
+ To open the instructions, click on any material card in the [station monitor page](client-station-monitor). When clicked, a dialog will appear with details about the
61
+ material. On the bottom of the dialog, there is a button "Instructions". When clicked,
62
+ FMS Insight will search for a file matching the current partname and page (load, wash, or inspection) as described above. The instruction file will then be displayed in a new tab. When subsequent instructions are requested, the tab will be re-used. Thus the tab does not need to be
63
+ manually closed after each operation.
@@ -0,0 +1,131 @@
1
+ ---
2
+ title: FMS Insight Security
3
+ nav: FMS Insight Server > Security
4
+ description: >-
5
+ The FMS Insight server runs on the cell controller and uses TLS and OpenID
6
+ Connect.
7
+ ---
8
+
9
+ # FMS Insight Security
10
+
11
+ FMS Insight implements a JSON+REST-based HTTP server and runs on the cell
12
+ controller. By default, FMS Insight listens on port 5000 with no TLS and no
13
+ authentication; any computer which can connect to the port can view data and
14
+ download jobs.
15
+
16
+ To implement security, we recommend one of two possible variants.
17
+
18
+ - FMS Insight can be configured to require TLS and require OpenID connect authentication for
19
+ single-sign-on. This requires the cell controller computer (running FMS Insight) to be directly connected
20
+ to the existing factory network, but a firewall can be used to only allow access on the specific
21
+ port running FMS Insight.
22
+ - A cell-local private network containing the machines, cell-controller, and FMS Insight is created.
23
+ A reverse HTTP proxy connects the cell-local private network to the factory network.
24
+
25
+ ## FMS Insight HTTPS, Authentication, and Firewall
26
+
27
+ In this design, FMS Insight is configured to require TLS/HTTPS and implements
28
+ authentication using OpenID Connect. We have tested with AzureAD, Okta, and
29
+ Keycloak, but any OpenID/OAuth2 compliant identity provider should work. An
30
+ external firewall is placed between the cell-controller and the factory
31
+ network and is configured to only allow traffic on the FMS Insight port.
32
+
33
+ To enable HTTPS, a server certificate must be created and stored in a pfx file. This
34
+ should be signed by the enterprise domain, but could also be a self-signed certificate.
35
+ Once created, within the FMS Insight [config.ini](server-config) file, enable the
36
+ `TLSCertFile` setting with the path to the certificate.
37
+
38
+ Within your identity provider, create an application for FMS Insight and create a client.
39
+ The client must require implicit grant flow with no client secret. The Redirect URI for the client
40
+ must be set to the common name from the TLS certificate with a root path.
41
+ Finally, most identity providers allow the administrator to restrict an
42
+ application to a set of users (e.g. Azure Active Directory allows assigning specific users
43
+ or groups to the application).
44
+
45
+ Once the client has been created, there are four settings in the [config.ini](server-config).
46
+
47
+ - `OpenIDConnectAuthority`: This setting is the path to the well-known configuration document for the identity provider.
48
+ For example, for AzureAD, this is `https://login.microsoftonline.com/{tenant}/v2.0` where `{tenant}` is your tenant GUID.
49
+ - `OpenIDConnectClientID`: This should be the ClientID for the implicit grant flow client. This ClientID is passed
50
+ to the FMS Insight webpage which then performs the implicit flow grant to obtain a token.
51
+ - `AuthAuthority`: This must be identical to the `OpenIDConnectAuthority`.
52
+ - `AuthTokenAudiences`: This is a list of audiences which the server uses to validate the identity tokens. In almost all
53
+ cases, the audience matches the ClientID. Multiple audiences are separated by semi-colons.
54
+
55
+ ## Cell-Local Private Network With Proxy
56
+
57
+ In this design, a cell-local private network is created with a proxy computer to the factory network.
58
+ The design is based on a networking DMZ-setup.
59
+
60
+ - The machines and cell controller are placed on a private network. This network has no DNS,
61
+ no DHCP, and no route or access to any other network. IP Addresses are statically assigned.
62
+
63
+ - The cell controller computer runs FMS Insight with no TLS, listening on port 5000.
64
+
65
+ - The factory provides a computer with two network cards. One network card connects
66
+ to the cell-local private network and is statically assigned an IP address.
67
+ The second network card connects to the existing factory network. This computer can join the domain,
68
+ enable Windows Updates, and use all the typical configuration of the Factory's IT.
69
+ This computer should deny ALL network traffic to be routed between the cell-local network and the
70
+ factory network. All communication is proxied (a networking DMZ setup). The factory provides this
71
+ computer, allowing you to use your preferred supplier and configuration.
72
+
73
+ - The proxy computer runs a reverse-HTTP-proxy. This can be Nginx, IIS, or something else. We
74
+ also provide the source code for a small C# reverse-proxy server built using ASP.NET Core and Kestrel
75
+ (~250 lines of code) which you can use if you wish it. The reverse-proxy implements TLS and requires connections over HTTPS.
76
+
77
+ - Either the reverse-proxy or FMS Insight itself is configured to require OpenID Connect/OAuth2 Authentication.
78
+ This allows single-sign-on and only authenticated users will then be able to view data and create jobs.
79
+ FMS Insight has been tested with AzureAD, Okta, and Keycloak, but any OpenID Connect compliant
80
+ identity provider should work.
81
+
82
+ - Software running on the factory network connects and authenticates with the reverse-proxy, which
83
+ passes the requests along to FMS Insight running on the cell controller.
84
+
85
+ #### Reverse-Proxy Implemented Authentication
86
+
87
+ One option for authentication is for the reverse-proxy to require authentication. The reverse-proxy
88
+ should require OpenID Connect authentication for all routes starting with `/api` except for `/api/v1/fms/fms-information`.
89
+ Our small C# reverse-proxy implements OpenID Connect authentication and has been tested with AzureAD, Okta,
90
+ and Keycloak. Alternatively, Nginx+ or IIS can be configured to require authentication.
91
+
92
+ In this scenario, two settings are needed in FMS Insight's [config.ini](server-config):
93
+
94
+ - `OpenIDConnectAuthority`: This setting is the path to the well-known configuration document for the identity provider.
95
+ For example, for AzureAD, this is `https://login.microsoftonline.com/{tenant}/v2.0` where `{tenant}` is your tenant GUID.
96
+ - `OpenIDConnectClientID`: This is the ClientID for an implicit grant flow client. This ClientID is passed
97
+ to the FMS Insight webpage which then performs the implicit flow grant to authenticate the user and obtain a token.
98
+
99
+ These settings are just returned to clients in the `/api/v1/fms/fms-information` route, FMS Insight itself does not
100
+ check the request for a proper JWT token.
101
+
102
+ Next, the reverse-proxy is configured with TLS certificates and authentication. For our small C# reverse-proxy,
103
+ this is done in the appsettings.json file.
104
+
105
+ #### FMS Insight Implemented Authentication
106
+
107
+ If the reverse-proxy does not implement authentication, FMS Insight itself can verify the tokens. The main challenge
108
+ is that the FMS Insight server requires access to the OpenID Connect Authority well-known configuration document
109
+ to be able to obtain the signing keys. For example, in AzureAD, the well-known document
110
+ is `https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration` where tenant is your tenant GUID.
111
+ This document is required to be accessible by the FMS Insight server to obtain the rotating signing keys of the
112
+ identity provider. Since FMS Insight is running on the cell-controller on the cell-local private network and the proxy
113
+ computer denies all routed traffic, FMS Insight has no direct access to the well-known configuration document.
114
+
115
+ Thus, the reverse-proxy must also proxy the well-known configuration document. That is, the reverse-proxy is
116
+ configured to first proxy all connections from the factory network to FMS Insight. In addition, the reverse-proxy
117
+ is then also configured to proxy the request from FMS Insight to the OpenID Connect configuration document to
118
+ the real identity provider.
119
+
120
+ The configuration in FMS Insight's [config.ini](server-config) are as follows:
121
+
122
+ - `OpenIDConnectAuthority`: The real identity-provided authority URL.
123
+ For example, for AzureAD, this is `https://login.microsoftonline.com/{tenant}/v2.0` where `{tenant}` is your tenant GUID.
124
+ - `OpenIDConnectClientID`: This is the ClientID for an implicit grant flow client. This ClientID is passed
125
+ to the FMS Insight webpage which then performs the implicit flow grant to authenticate the user and obtain a token.
126
+ - `AuthAuthority`: The path to the reverse-proxy to obtain the OpenID configuration. For example, it could be
127
+ `http://{reverse-proxy-ip-address}/openid-authority`. The reverse-proxy should then be configured to proxy all
128
+ paths starting with `/openid-authority/*` to the real identity provider.
129
+ - `AuthTokenAudiences`: This is a list of audiences which the server uses to validate the identity tokens. In almost all
130
+ cases, the audience matches the ClientID. Multiple audiences are separated by semi-colons. Thus this setting should
131
+ be all the ClientIDs created separated by semi-colons.
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: FMS Insight Server Configuration
3
+ nav: FMS Insight Server > Configuration
4
+ description: >-
5
+ The FMS Insight server runs on the cell controller and is configured by
6
+ a config.ini file.
7
+ ---
8
+
9
+ # FMS Insight Server Configuration
10
+
11
+ The FMS Insight server is configured via a file
12
+ `SeedTactics\FMSInsight\config.ini` located in the Windows Common AppData
13
+ folder. On a default Windows install, this has a full path of
14
+ `c:\ProgramData\SeedTactics\FMSInsight\config.ini`. The config file itself
15
+ describes the settings in detail, but they fall into three groups: server
16
+ settings such as network ports and SSL, FMS settings such as automatic serial
17
+ assignment, and finally cell controller specific settings.
18
+
19
+ The first time FMS Insight starts, if the `config.ini` file does not exist,
20
+ FMS Insight will create a default config file. FMS Insight should run fine
21
+ with the default settings, so typically when first getting started no config
22
+ file settings need to be changed. Any changes to settings in `config.ini`
23
+ require the FMS Insight server to be restarted before they take effect.
24
+
25
+ The `config.ini` file is an [INI file](https://en.wikipedia.org/wiki/INI_file).
26
+ The default config file contains a large number of comments describing each option.
27
+ Comments describing each option are prefixed by a hash (`#`) and the options themselves
28
+ are prefixed by a semicolon (`;`). To edit an option, remove the leading semicolon (`;`)
29
+ and then edit the option value. Remember to restart the FMS Insight server. If any configuration
30
+ errors are present, FMS Insight will generate an error message with details into the
31
+ [event log](server-errors).
32
+
33
+ ## Databases
34
+
35
+ FMS Insight uses [SQLite](https://www.sqlite.org/) to store data about the cell.
36
+ The primary data stored is a log of the activity of all parts, pallets, machines, jobs,
37
+ schedules, inspections, serial numbers, orders, and other data. In addition, FMS Insight
38
+ stores a small amount of temporary data to assist with monitoring.
39
+
40
+ The SQLite databases are by default stored locally in the Windows Common
41
+ AppData folder which on a default Windows install is
42
+ `c:\ProgramData\SeedTactics\FMSInsight`. This path can be changed in the
43
+ `config.ini` file if needed, but we suggest that the databases are kept on
44
+ the local drive for performance and data integrity (SQLite works best on a
45
+ local drive). The SQLite databases are not large, typically under 100
46
+ megabytes, so disk space is not a problem.
47
+
48
+ Every time FMS Insight starts, it checks for the existence of the SQLite
49
+ databases and if they are missing it creates them. For this reason, the
50
+ databases can be deleted without impacting the operation of the cell (as long
51
+ as FMS Insight is restarted). Also, since the databases just store a log of
52
+ past activity and all complex logic is outside FMS Insight, if the databases
53
+ are deleted (and recreated) the cell will continue to operate just fine in
54
+ the future (minus the historical data). Thus it is not necessary to backup
55
+ the databases (but of course you can if you want to preserve historical
56
+ data).
@@ -0,0 +1,44 @@
1
+ ---
2
+ title: FMS Insight Errors
3
+ nav: FMS Insight Server > Errors
4
+ description: >-
5
+ The FMS Insight server runs on the cell controller and logs errors and warnings
6
+ into the Windows Event Viewer.
7
+ ---
8
+
9
+ # FMS Insight Error Logging
10
+
11
+ When the FMS Insight server encounters an error, it reports the error back over the network to the
12
+ software that requested the operation (such as the Insight client web page). The FMS Insight server
13
+ also logs the error with more details into the Windows Event Log. Thus, when the Insight web page or
14
+ any other software reports an error you can check the Windows Event Log on the cell controller
15
+ for more information.
16
+
17
+ ## Windows Event Viewer
18
+
19
+ The location of the viewer is different in different versions of Windows;
20
+ on Windows 10 and 11, open the start menu and search for "Event Viewer" and on Windows 7 open the "Control Panel",
21
+ navigate to "Administrative Tools", and then open the "Event Viewer". To view the events in the event viewer,
22
+ navigate to "Windows Logs" and then "Application" in the tree on the left (see the screenshot below).
23
+
24
+ ![Screenshot of Windows 10 Event Viewer](screenshots/insight-event-viewer.jpg)
25
+
26
+ The windows event viewer shows events from all applications. FMS Insight generates events "FMS Insight"
27
+ as the event source, which allows you to create a custom view to filter only the events from FMS Insight.
28
+ To do so, go to the action menu, click "Create Custom View", and fill in "FMS Insight" as the event source
29
+ (see the screenshot below).
30
+
31
+ ![Screenshot of creating a custom event view](screenshots/insight-event-custom-view.jpg)
32
+
33
+ ## Debug Log
34
+
35
+ To assist with debugging, FMS Insight has the ability to output a trace of
36
+ activity with events for almost all actions that FMS Insight takes. The debug
37
+ trace is disabled by default because it generates a lot of data. To enable
38
+ it, edit the [config file](server-config) and change the setting
39
+ "EnableDebugLog" to true. The FMS Insight server must be restarted before the
40
+ config setting takes effect. The debug trace log will be generated into the
41
+ global AppData folder, which defaults to `c:\ProgramData\SeedTactics\FMSInsight`.
42
+ The debug trace files are named `fmsinsight-debug.txt`, there will be one file
43
+ per day, and the file is JSON formatted. Remember to disable the trace log after
44
+ a day or two because it generates a lot of data.
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "@seedtactics/insight-client",
3
+ "version": "16.4.0",
4
+ "license": "BSD-3-Clause",
5
+ "type": "module",
6
+ "main": "./src/index.ts",
7
+ "repository": {
8
+ "url": "https://github.com/seedtactics/fms-insight.git"
9
+ },
10
+ "exports": {
11
+ "./cell-status/*": "./dist/cell-status/*.js",
12
+ "./components/*": "./dist/components/*.js",
13
+ "./components/analysis/*": "./dist/components/analysis/*.js",
14
+ "./components/operations/*": "./dist/components/operations/*.js",
15
+ "./components/quality/*": "./dist/components/quality/*.js",
16
+ "./components/station-monitor/*": "./dist/components/station-monitor/*.js",
17
+ "./data/*": "./dist/data/*.js",
18
+ "./network/*": "./dist/network/*.js",
19
+ "./util/*": "./dist/util/*.js"
20
+ },
21
+ "files": [
22
+ "dist",
23
+ "docs"
24
+ ],
25
+ "dependencies": {
26
+ "@dnd-kit/core": "^6.3.1",
27
+ "@dnd-kit/sortable": "^10.0.0",
28
+ "@emotion/react": "^11.14.0",
29
+ "@emotion/styled": "^11.14.1",
30
+ "@fontsource/roboto": "^5.2.9",
31
+ "@mui/icons-material": "^7.3.6",
32
+ "@mui/material": "^7.3.6",
33
+ "@react-spring/rafz": "^10.0.3",
34
+ "@react-spring/web": "^10.0.3",
35
+ "@seedtactics/immutable-collections": "^1.0.2",
36
+ "@yudiel/react-qr-scanner": "^2.5.0",
37
+ "copy-to-clipboard": "^3.3.3",
38
+ "d3-interpolate-path": "^2.3.0",
39
+ "d3-sankey": "^0.12.3",
40
+ "d3-scale": "^4.0.2",
41
+ "d3-shape": "^3.2.0",
42
+ "date-fns": "^4.1.0",
43
+ "highlight.js": "^11.11.1",
44
+ "jdenticon": "^3.3.0",
45
+ "jotai": "^2.16.0",
46
+ "jotai-family": "^1.0.1",
47
+ "jsbarcode": "^3.12.1",
48
+ "oidc-client-ts": "^3.4.1",
49
+ "react": "^19.2.3",
50
+ "react-calendar": "^6.0.0",
51
+ "react-dom": "^19.2.3",
52
+ "react-error-boundary": "^6.0.0",
53
+ "react-resize-detector": "^12.3.0",
54
+ "react-timeago": "^8.3.0",
55
+ "react-to-print": "^3.2.0",
56
+ "urlpattern-polyfill": "^10.1.0"
57
+ },
58
+ "devDependencies": {
59
+ "@eslint/js": "^9.39.2",
60
+ "@faker-js/faker": "^10.1.0",
61
+ "@types/d3-interpolate-path": "^2.0.3",
62
+ "@types/d3-sankey": "^0.12.5",
63
+ "@types/d3-scale": "^4.0.9",
64
+ "@types/d3-shape": "^3.1.7",
65
+ "@types/node": "^25.0.3",
66
+ "@types/react": "^19.2.7",
67
+ "@types/react-dom": "^19.2.3",
68
+ "@vitejs/plugin-react": "^5.1.2",
69
+ "eslint": "^9.39.2",
70
+ "eslint-config-prettier": "^10.1.8",
71
+ "eslint-plugin-react": "^7.37.5",
72
+ "eslint-plugin-react-hooks": "^7.0.1",
73
+ "eslint-plugin-react-refresh": "^0.4.26",
74
+ "jsdom": "^27.3.0",
75
+ "nswag": "^14.6.3",
76
+ "prettier": "^3.7.4",
77
+ "typescript": "^5.9.3",
78
+ "typescript-eslint": "^8.50.0",
79
+ "vite": "^7.3.0",
80
+ "vitest": "^4.0.16"
81
+ },
82
+ "scripts": {
83
+ "build": "tsc --noEmit --skipLibCheck && vite build",
84
+ "build:package": "tsc --project tsconfig.publish.json && cp -Tr ../../docs ./docs",
85
+ "start": "vite",
86
+ "test": "vitest run",
87
+ "test:watch": "vitest watch",
88
+ "nswag": "./node_modules/nswag/bin/nswag.js aspnetcore2openapi /project:../../server/debug-mock /output:../../server/fms-insight-api.json && ./node_modules/nswag/bin/nswag.js openapi2tsclient /UseAbortSignal:true /input:../../server/fms-insight-api.json /output:src/network/api.ts"
89
+ }
90
+ }