[{"data":1,"prerenderedAt":14219},["ShallowReactive",2],{"blog-\u002Fblog\u002F2026\u002F07\u002Fdigital-work-instruction":3,"blog-all-for-related":14218},{"id":4,"title":5,"authors":6,"body":8,"cta":14195,"date":14199,"description":14200,"extension":14201,"image":14202,"lastUpdated":14203,"meta":14204,"navigation":5404,"path":14209,"seo":14210,"sitemap":14211,"stem":14212,"subtitle":14213,"tags":14214,"tldr":14216,"video":14203,"__hash__":14217},"blog\u002Fblog\u002F2026\u002F07\u002Fdigital-work-instruction.md","Building Digital Work Instructions Dashboard for the Shop Floor",[7],"sumit-shinde",{"type":9,"value":10,"toc":14173},"minimark",[11,15,18,28,36,39,49,58,63,66,129,139,143,146,171,174,177,199,203,206,214,4789,4796,4800,4821,4914,4923,4926,4930,4933,4940,4961,4970,4973,4976,4998,5013,5017,5020,5044,5050,5146,5160,5192,5206,5218,5222,5231,5249,5619,5625,5634,5638,5641,5652,5658,5714,5717,5793,5797,5800,5805,5841,5845,5873,6112,6150,6163,6172,6176,6179,6201,6445,6496,6506,6510,6513,6528,7038,7043,7059,9225,9245,9254,9264,9273,9294,9303,9307,9310,9330,9334,9345,9356,9377,9388,12661,12670,12677,13073,13081,13100,13103,13107,13114,13147,13342,13376,13379,13383,13389,13398,13474,13483,13492,13501,13899,13934,13943,13946,13950,13956,13993,14133,14143,14146,14149,14153,14163,14170],[12,13,14],"p",{},"Operators need to know what to build, how to build it, and what to do when something breaks. Digital work instructions put that on a screen, guided steps, a checklist, buttons to finish or flag a defect, and retire the paper binder.",[12,16,17],{},"But shared stations raise a question paper never had: who's using it? Without a way to tell operators apart, the work order, the current step, and the record of what happened all blur together. Authentication draws the line, the operator's identity becomes the thread the app hangs on.",[12,19,20,25],{},[21,22],"img",{"alt":23,"src":24},"Digital work instructions dashboard showing operator work orders, production status","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fdigital-work-instruction-dashboard.png",[26,27,23],"em",{},[12,29,30,34],{},[21,31],{"alt":32,"src":33},"Operator interface displaying guided work instructions with step completion and defect reporting options","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fdigital-work-instruction-2.png",[26,35,32],{},[12,37,38],{},"In this article, we'll build a digital work instructions app in FlowFuse: an operator interface with work orders, step-by-step assembly guidance, defect reporting, and traceability via authentication.",[40,41,42],"blockquote",{},[12,43,44,48],{},[45,46,47],"strong",{},"Note:"," This demo is deliberately configured with a preset demo user so anyone can try it, even without being on the team where it's deployed. The version you build following this article uses FlowFuse User Authentication, which limits dashboard access to members of the same team.",[12,50,51,52,57],{},"You can interact with the live demo here: ",[53,54,56],"a",{"href":55},"https:\u002F\u002Fexpensive-pied-flycatcher-5052.flowfuse.cloud\u002Fdashboard\u002Fhome","Try the Digital Work Instruction Dashboard Demo",".",[59,60,62],"h2",{"id":61},"what-youll-need","What You'll Need",[12,64,65],{},"Before you start building, get these ready:",[67,68,69,83,89,123],"ul",{},[70,71,72,75,76,82],"li",{},[45,73,74],{},"A FlowFuse account."," ",[53,77,81],{"href":78,"rel":79},"https:\u002F\u002Fapp.flowfuse.com\u002Faccount\u002Fcreate",[80],"nofollow","Sign up"," for FlowFuse Cloud, or use a self-hosted instance.",[70,84,85,88],{},[45,86,87],{},"A FlowFuse instance up and running."," If you don't have one yet, create a new instance from your FlowFuse Platform.",[70,90,91,94,95,99,100,103,104,103,107,103,110,103,113,103,116,103,119,122],{},[45,92,93],{},"FlowFuse Dashboard installed."," This tutorial uses ",[96,97,98],"code",{},"@flowfuse\u002Fnode-red-dashboard"," nodes (",[96,101,102],{},"ui-template",", ",[96,105,106],{},"ui-table",[96,108,109],{},"ui-form",[96,111,112],{},"ui-button",[96,114,115],{},"ui-control",[96,117,118],{},"ui-event",[96,120,121],{},"ui-text",") to build the operator interface. Install it from the Palette Manager if it isn't already in your instance.",[70,124,125,128],{},[45,126,127],{},"The FlowFuse Dashboard user addon."," This is what attaches the logged-in user to every dashboard message. We'll install it in the first section.",[40,130,131],{},[12,132,133,134,138],{},"Note: The Multi-User addon is available to Teams and Enterprise Self-Hosted customers. If you're on a different tier, ",[53,135,137],{"href":136},"\u002Fcontact-us\u002F","contact us"," for the configuration to get started.",[59,140,142],{"id":141},"how-the-application-works","How the Application Works",[12,144,145],{},"Before we build anything, let's walk through what the app does and how the pieces fit together. There are three pages, and one idea holding them together.",[147,148,149,159,165],"ol",{},[70,150,151,154,155,158],{},[45,152,153],{},"Home."," After logging in, the application uses the operator's username to retrieve only the work orders assigned to them from the ERP or MES. It displays their station, production summary, the highest-priority work order, and the remaining queue. Selecting ",[45,156,157],{},"Start Work Order"," opens the instructions.",[70,160,161,164],{},[45,162,163],{},"Instructions."," Operators follow step-by-step instructions with images, checklists, and target cycle times. They can progress through each step, complete the operation, or report an issue at any time.",[70,166,167,170],{},[45,168,169],{},"Report Issue."," Operators can quickly log defects by selecting the issue type, severity, affected part, and description, with the issue automatically linked to the current work order.",[12,172,173],{},"The logged-in username acts as the application's lookup key. It retrieves the operator's assigned work orders and stores their active work order and current step, allowing them to resume exactly where they left off, even on shared production stations.",[12,175,176],{},"There are two different questions the app has to answer, and it's worth keeping them separate from the start:",[67,178,179,189],{},[70,180,181,184,185,188],{},[45,182,183],{},"\"Where is this operator's data stored?\""," — under a persistent global key named after their username, e.g. ",[96,186,187],{},"global.get('operator1', 'persistent')",". This is a durable, shared store, and it's meant to be: it's what lets progress survive reloads and reconnects.",[70,190,191,194,195,198],{},[45,192,193],{},"\"Who is acting right now, in this message?\""," — this must be read fresh from the message that triggered the flow (",[96,196,197],{},"msg._client.user","), not from a single shared \"current user\" variable. A shared variable has only one value at a time; the moment a second operator's browser connects, it overwrites the first operator's identity for the whole running flow. We'll come back to this the moment it becomes relevant, but it's the one rule that makes every \"per operator\" claim in this tutorial actually true when two people are logged in at once.",[59,200,202],{"id":201},"importing-the-simulated-flow","Importing the Simulated Flow",[12,204,205],{},"Instead of connecting to a real ERP or MES, we'll use a simple simulated backend that serves sample work orders through an HTTP API.",[147,207,208],{},[70,209,210,211,57],{},"Import the following flow into FlowFuse and click ",[45,212,213],{},"Deploy",[215,216,218],"render-flow",{":height":217},"300",[219,220,225],"pre",{"className":221,"code":222,"language":223,"meta":224,"style":224},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[{\"id\":\"83cd1b1c4cc8e310\",\"type\":\"group\",\"z\":\"3012f9c2796b5b41\",\"style\":{\"stroke\":\"#b2b3bd\",\"stroke-opacity\":\"1\",\"fill\":\"#f2f3fb\",\"fill-opacity\":\"0.5\",\"label\":true,\"label-position\":\"nw\",\"color\":\"#32333b\"},\"nodes\":[\"5a2c1cb7932accb9\",\"f2334a5d527a684a\",\"f65db363fdde0eba\",\"cdda81f6a2701b7c\",\"8554ad9dfdb36f54\",\"6dd109a105da5dd5\",\"439862e5c86675cd\",\"9d853fad37785bec\",\"3506d88cd094d44c\",\"wo_stats_http_in\",\"wo_stats_func\",\"wo_stats_response\",\"6d1644eabb9a5bf5\",\"62760b81dea503c2\"],\"x\":44,\"y\":59,\"w\":652,\"h\":482},{\"id\":\"5a2c1cb7932accb9\",\"type\":\"http in\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"GET Work Orders\",\"url\":\"\u002Fworkorders\",\"method\":\"get\",\"upload\":false,\"skipBodyParsing\":false,\"swaggerDoc\":\"\",\"x\":160,\"y\":300,\"wires\":[[\"f2334a5d527a684a\"]]},{\"id\":\"f2334a5d527a684a\",\"type\":\"function\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"Generate Work Orders\",\"func\":\"const stationId = msg.req.query.stationId;\\nconst username = msg.req.query.username;\\n\\nconst workOrders = global.get(\\\"workOrders\\\", \\\"persistent\\\") || [];\\n\\nconst result = workOrders.filter(w =>\\n    w.stationId === stationId &&\\n    w.assignedTo === username &&\\n    w.status !== \\\"defect\\\" &&\\n    w.status !== \\\"completed\\\"\\n);\\n\\nmsg.payload = result;\\n\\nreturn msg;\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":420,\"y\":300,\"wires\":[[\"f65db363fdde0eba\"]]},{\"id\":\"f65db363fdde0eba\",\"type\":\"http response\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"\",\"statusCode\":\"\",\"headers\":{\"Content-Type\":\"application\u002Fjson\"},\"x\":610,\"y\":300,\"wires\":[]},{\"id\":\"cdda81f6a2701b7c\",\"type\":\"http in\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"POST Mark Defect\",\"url\":\"\u002Fworkorders\u002Fdefect\",\"method\":\"post\",\"upload\":false,\"skipBodyParsing\":false,\"swaggerDoc\":\"\",\"x\":160,\"y\":400,\"wires\":[[\"8554ad9dfdb36f54\"]]},{\"id\":\"8554ad9dfdb36f54\",\"type\":\"function\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"Mark Defect\",\"func\":\"const { workOrderId, issueType, severity, affectedPart, description } = msg.payload || {};\\n\\nif (!workOrderId || !issueType || !severity || !affectedPart) {\\n    msg.statusCode = 400;\\n    msg.payload = { error: 'workOrderId, issueType, severity, and affectedPart are required' };\\n    return msg;\\n}\\n\\nconst workOrders = global.get('workOrders', 'persistent') || [];\\nconst idx = workOrders.findIndex(w => w.workOrderId === workOrderId);\\n\\nif (idx === -1) {\\n    msg.statusCode = 404;\\n    msg.payload = { error: 'Work order not found' };\\n    return msg;\\n}\\n\\nworkOrders[idx].status = 'defect';\\nworkOrders[idx].defect = {\\n    issueType,\\n    severity,\\n    affectedPart,\\n    description: description || null,\\n    reportedAt: new Date().toISOString()\\n};\\n\\nglobal.set('workOrders', workOrders, 'persistent');\\n\\nmsg.statusCode = 200;\\nmsg.payload = { success: true, workOrder: workOrders[idx] };\\nreturn msg;\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":390,\"y\":400,\"wires\":[[\"6dd109a105da5dd5\"]]},{\"id\":\"6dd109a105da5dd5\",\"type\":\"http response\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"\",\"statusCode\":\"\",\"headers\":{\"Content-Type\":\"application\u002Fjson\"},\"x\":610,\"y\":400,\"wires\":[]},{\"id\":\"439862e5c86675cd\",\"type\":\"http in\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"POST Complete Order\",\"url\":\"\u002Fworkorders\u002Fcomplete\",\"method\":\"post\",\"upload\":false,\"skipBodyParsing\":false,\"swaggerDoc\":\"\",\"x\":170,\"y\":500,\"wires\":[[\"9d853fad37785bec\"]]},{\"id\":\"9d853fad37785bec\",\"type\":\"function\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"Complete Work Order\",\"func\":\"const { workOrderId } = msg.payload || {};\\n\\nif (!workOrderId) {\\n    msg.statusCode = 400;\\n    msg.payload = { error: 'workOrderId is required' };\\n    return msg;\\n}\\n\\nconst workOrders = global.get('workOrders', 'persistent') || [];\\nconst idx = workOrders.findIndex(w => w.workOrderId === workOrderId);\\n\\nif (idx === -1) {\\n    msg.statusCode = 404;\\n    msg.payload = { error: 'Work order not found' };\\n    return msg;\\n}\\n\\nworkOrders[idx].status = 'completed';\\nworkOrders[idx].completedAt = new Date().toISOString();\\n\\nglobal.set('workOrders', workOrders, 'persistent');\\n\\nmsg.statusCode = 200;\\nmsg.payload = { success: true, workOrder: workOrders[idx] };\\nreturn msg;\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":410,\"y\":500,\"wires\":[[\"3506d88cd094d44c\"]]},{\"id\":\"3506d88cd094d44c\",\"type\":\"http response\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"\",\"statusCode\":\"\",\"headers\":{\"Content-Type\":\"application\u002Fjson\"},\"x\":620,\"y\":500,\"wires\":[]},{\"id\":\"wo_stats_http_in\",\"type\":\"http in\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"GET Work Order Stats\",\"url\":\"\u002Fworkorders\u002Fstats\",\"method\":\"get\",\"upload\":false,\"skipBodyParsing\":false,\"swaggerDoc\":\"\",\"x\":180,\"y\":220,\"wires\":[[\"wo_stats_func\"]]},{\"id\":\"wo_stats_func\",\"type\":\"function\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"Compute Stats\",\"func\":\"const workOrders = global.get('workOrders', 'persistent') || [];\\nnode.warn(msg.req.query);\\nconst stationId = msg.req.query.stationId;\\nconst username = msg.req.query.username;\\n\\n\u002F\u002F Filter only by station\\nconst stationWorkOrders = stationId\\n    ? workOrders.filter(w => w.stationId === stationId)\\n    : workOrders;\\n\\nconst total = stationWorkOrders.length;\\nconst completed = stationWorkOrders.filter(w => w.status === \\\"completed\\\").length;\\nconst defected = stationWorkOrders.filter(w => w.status === \\\"defect\\\").length;\\n\\n\u002F\u002F Filter by user within the station\\nconst assignedToMe = username\\n    ? stationWorkOrders.filter(w => w.assignedTo === username).length\\n    : 0;\\n\\nmsg.statusCode = 200;\\nmsg.payload = {\\n    total,\\n    completed,\\n    defected,\\n    assignedToMe\\n};\\n\\nreturn msg;\",\"outputs\":1,\"timeout\":\"\",\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":400,\"y\":220,\"wires\":[[\"wo_stats_response\"]]},{\"id\":\"wo_stats_response\",\"type\":\"http response\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"\",\"statusCode\":\"\",\"headers\":{\"Content-Type\":\"application\u002Fjson\"},\"x\":610,\"y\":220,\"wires\":[]},{\"id\":\"6d1644eabb9a5bf5\",\"type\":\"function\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"name\":\"Generate Mock Work Orders\",\"func\":\"const user = global.get(\\\"user\\\", \\\"persistent\\\");\\nconst currentUser = user?.username || \\\"operator1\\\";\\n\\n\u002F\u002F Pool of 5 operators (logged-in user + 4 others)\\nconst operators = [\\n    currentUser,\\n    \\\"operator2\\\",\\n    \\\"operator3\\\",\\n    \\\"operator4\\\",\\n    \\\"operator5\\\"\\n];\\n\\nconst vehicles = [\\n    {\\n        model: \\\"Sedan X\\\",\\n        variants: [\\\"Standard\\\", \\\"Premium\\\", \\\"Sport\\\"],\\n        colors: [\\\"White\\\", \\\"Black\\\", \\\"Red\\\"]\\n    },\\n    {\\n        model: \\\"SUV Y\\\",\\n        variants: [\\\"Base\\\", \\\"Premium\\\", \\\"Sport\\\"],\\n        colors: [\\\"Grey\\\", \\\"White\\\", \\\"Black\\\"]\\n    },\\n    {\\n        model: \\\"Truck Z\\\",\\n        variants: [\\\"Standard\\\", \\\"Heavy Duty\\\"],\\n        colors: [\\\"Blue\\\", \\\"Green\\\", \\\"White\\\"]\\n    },\\n    {\\n        model: \\\"Hatchback W\\\",\\n        variants: [\\\"Base\\\", \\\"Sport\\\"],\\n        colors: [\\\"Silver\\\", \\\"Yellow\\\", \\\"Red\\\"]\\n    }\\n];\\n\\nconst operations = [\\n    {\\n        operationId: \\\"OP_WHEEL_FL\\\",\\n        name: \\\"Install Front Left Wheel\\\",\\n        instructionSetId: \\\"INS001\\\",\\n        estimatedCycleTime: 45\\n    },\\n    {\\n        operationId: \\\"OP_WHEEL_FR\\\",\\n        name: \\\"Install Front Right Wheel\\\",\\n        instructionSetId: \\\"INS002\\\",\\n        estimatedCycleTime: 45\\n    }\\n];\\n\\nconst priorities = [\\\"Critical\\\", \\\"High\\\", \\\"Normal\\\", \\\"Low\\\"];\\nconst statuses = [\\\"Ready\\\", \\\"Waiting\\\", \\\"Queued\\\"];\\n\\nfunction random(arr) {\\n    return arr[Math.floor(Math.random() * arr.length)];\\n}\\n\\n\u002F\u002F Read existing work orders\\nconst existingWorkOrders = global.get(\\\"workOrders\\\", \\\"persistent\\\") || [];\\n\\n\u002F\u002F Start IDs after the existing ones\\nlet nextId = 10245 + existingWorkOrders.length;\\n\\n\u002F\u002F Generate 20 new work orders\\nfor (let i = 0; i \u003C 20; i++) {\\n    const vehicle = random(vehicles);\\n    const operation = random(operations);\\n\\n    existingWorkOrders.push({\\n        workOrderId: `WO-${nextId++}`,\\n        stationId: \\\"ST12\\\",\\n        status: random(statuses),\\n        priority: random(priorities),\\n        assignedTo: random(operators),\\n        vehicle: {\\n            vin: `MH01AB${1234567890 + existingWorkOrders.length}`,\\n            model: vehicle.model,\\n            variant: random(vehicle.variants),\\n            color: random(vehicle.colors)\\n        },\\n        operation: {\\n            operationId: operation.operationId,\\n            name: operation.name,\\n            estimatedCycleTime: operation.estimatedCycleTime,\\n            instructionSetId: operation.instructionSetId\\n        }\\n    });\\n}\\n\\n\u002F\u002F Save updated list\\nglobal.set(\\\"workOrders\\\", existingWorkOrders, \\\"persistent\\\");\\n\\nmsg.payload = existingWorkOrders;\\nreturn msg;\",\"outputs\":1,\"timeout\":0,\"noerr\":0,\"initialize\":\"\",\"finalize\":\"\",\"libs\":[],\"x\":440,\"y\":100,\"wires\":[[]]},{\"id\":\"62760b81dea503c2\",\"type\":\"ui-event\",\"z\":\"3012f9c2796b5b41\",\"g\":\"83cd1b1c4cc8e310\",\"ui\":\"37b66bc5b4d6d3d3\",\"name\":\"\",\"x\":160,\"y\":100,\"wires\":[[\"6d1644eabb9a5bf5\"]]},{\"id\":\"37b66bc5b4d6d3d3\",\"type\":\"ui-base\",\"name\":\"My Dashboard\",\"path\":\"\u002Fdashboard\",\"appIcon\":\"\",\"includeClientData\":true,\"acceptsClientConfig\":[\"ui-notification\",\"ui-control\",\"ui-template\",\"ui-form\",\"ui-table\",\"ui-text-input\",\"ui-number-input\",\"ui-file-input\",\"ui-button\",\"ui-button-group\",\"ui-dropdown\",\"ui-radio-group\",\"ui-slider\",\"ui-text\",\"ui-switch\",\"ui-chart\",\"ui-audio\",\"ui-markdown\",\"ui-progress\",\"ui-gauge\"],\"showPathInSidebar\":false,\"headerContent\":\"page\",\"navigationStyle\":\"default\",\"titleBarStyle\":\"default\",\"showReconnectNotification\":true,\"notificationDisplayTime\":1,\"showDisconnectNotification\":true,\"allowInstall\":false},{\"id\":\"4b583d9b76bf5cf2\",\"type\":\"global-config\",\"env\":[],\"modules\":{\"@flowfuse\u002Fnode-red-dashboard\":\"1.30.2\"}}]\n","json","",[96,226,227],{"__ignoreMap":224},[228,229,232,236,239,243,245,248,250,254,256,259,261,264,266,268,270,273,275,277,279,282,284,286,288,291,293,295,297,300,302,305,307,311,313,315,317,320,322,324,326,329,331,333,335,338,340,342,344,347,349,351,353,356,358,360,362,365,367,369,371,374,376,378,380,383,385,388,390,393,395,397,399,402,404,406,408,411,413,415,417,420,422,425,427,430,432,435,437,440,442,444,446,449,451,453,455,458,460,462,464,467,469,471,473,476,478,480,482,485,487,489,491,494,496,498,500,503,505,507,509,512,514,516,518,521,523,525,527,530,532,534,536,539,541,543,545,548,550,552,554,557,559,562,564,567,569,571,575,577,579,582,584,586,589,591,593,596,598,600,603,605,607,610,612,614,617,620,622,624,626,628,630,632,634,636,638,640,642,644,646,649,651,653,655,657,659,661,663,665,667,669,671,674,676,678,680,682,684,686,688,691,693,695,697,700,702,704,706,709,711,713,715,718,720,722,724,727,729,731,733,736,738,740,742,745,747,750,752,755,757,759,761,764,766,768,771,773,775,777,779,781,784,786,788,790,792,794,796,798,800,803,805,808,810,812,814,817,819,821,823,825,827,829,831,833,835,837,839,841,843,846,848,850,852,854,856,858,860,862,864,866,868,870,872,874,876,878,880,882,884,886,888,890,892,895,897,899,901,904,906,908,910,913,917,920,923,926,929,932,934,936,938,941,943,946,948,951,953,956,958,961,963,966,968,971,973,976,978,980,982,985,988,991,993,996,998,1001,1003,1005,1007,1010,1012,1014,1016,1018,1020,1023,1025,1027,1029,1031,1033,1036,1038,1040,1043,1045,1047,1050,1052,1054,1056,1058,1060,1063,1065,1067,1069,1071,1073,1076,1078,1081,1083,1085,1087,1089,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1204,1206,1208,1210,1212,1214,1217,1219,1221,1223,1226,1228,1230,1232,1235,1237,1239,1241,1243,1245,1247,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1350,1352,1354,1356,1358,1360,1362,1364,1367,1369,1371,1373,1375,1377,1379,1381,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1534,1536,1538,1540,1542,1544,1546,1548,1551,1553,1556,1558,1561,1563,1566,1568,1571,1573,1576,1578,1581,1583,1586,1588,1591,1593,1596,1598,1601,1603,1605,1607,1609,1611,1614,1616,1619,1621,1624,1626,1629,1631,1634,1636,1639,1641,1644,1646,1649,1651,1654,1656,1659,1661,1664,1666,1668,1670,1672,1674,1676,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696,1698,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746,1748,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927,1929,1931,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1999,2002,2004,2006,2008,2010,2012,2014,2016,2019,2021,2023,2025,2027,2029,2031,2033,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2078,2080,2082,2084,2086,2088,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157,2159,2161,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183,2186,2188,2190,2192,2194,2196,2198,2200,2203,2205,2208,2210,2212,2214,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2258,2260,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2359,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456,2458,2460,2462,2464,2466,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486,2488,2490,2492,2494,2496,2498,2500,2502,2504,2506,2508,2510,2512,2515,2517,2519,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579,2581,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2614,2616,2618,2620,2622,2624,2626,2628,2631,2633,2635,2637,2639,2641,2643,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2690,2692,2694,2696,2698,2700,2703,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795,2798,2800,2802,2804,2806,2808,2810,2812,2814,2816,2819,2821,2823,2825,2827,2829,2832,2834,2837,2839,2842,2844,2847,2849,2852,2854,2857,2859,2861,2863,2866,2868,2871,2873,2875,2877,2879,2881,2884,2886,2889,2891,2894,2896,2899,2901,2903,2905,2908,2910,2913,2915,2918,2920,2923,2925,2928,2930,2932,2934,2936,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050,3052,3054,3056,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090,3092,3094,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120,3122,3124,3126,3128,3130,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150,3152,3154,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192,3194,3196,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3218,3220,3222,3224,3226,3228,3230,3232,3234,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256,3258,3260,3262,3264,3266,3269,3271,3273,3275,3277,3279,3281,3283,3286,3288,3291,3293,3295,3297,3299,3301,3303,3305,3308,3310,3313,3315,3318,3320,3323,3325,3328,3330,3333,3335,3338,3341,3343,3345,3347,3349,3352,3354,3356,3358,3360,3363,3365,3367,3369,3371,3374,3376,3379,3381,3384,3386,3389,3391,3394,3396,3399,3401,3403,3405,3408,3410,3413,3415,3417,3419,3422,3424,3426,3428,3431,3433,3435,3437,3440,3442,3445,3447,3449,3451,3454,3456,3458,3460,3463,3465,3468,3470,3473,3475,3477,3479,3481,3483,3486,3488,3490,3492,3494,3496,3499,3501,3503,3505,3507,3509,3511,3513,3515,3517,3519,3521,3523,3525,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3586,3588,3590,3592,3594,3596,3599,3601,3603,3605,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3628,3630,3632,3634,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655,3657,3659,3661,3663,3665,3667,3670,3672,3674,3676,3679,3681,3683,3685,3687,3689,3691,3693,3696,3698,3700,3702,3705,3707,3709,3711,3714,3716,3719,3721,3723,3725,3728,3730,3733,3735,3737,3739,3742,3744,3747,3749,3751,3753,3756,3758,3760,3762,3764,3766,3768,3770,3773,3775,3777,3779,3781,3783,3786,3788,3790,3792,3794,3796,3799,3801,3803,3805,3807,3809,3811,3813,3815,3817,3820,3822,3825,3827,3829,3831,3834,3836,3838,3840,3843,3845,3847,3849,3852,3854,3856,3858,3861,3863,3866,3868,3870,3872,3875,3877,3879,3881,3884,3886,3888,3890,3893,3895,3898,3900,3902,3904,3907,3909,3912,3914,3916,3918,3920,3922,3924,3926,3928,3930,3933,3935,3938,3940,3943,3945,3948,3950,3953,3955,3958,3960,3963,3965,3968,3970,3973,3975,3978,3980,3982,3984,3987,3989,3992,3994,3997,3999,4002,4004,4007,4009,4012,4014,4017,4019,4022,4024,4027,4029,4032,4034,4037,4039,4042,4044,4047,4049,4052,4054,4057,4059,4062,4064,4066,4068,4071,4073,4076,4078,4080,4082,4085,4087,4089,4091,4093,4095,4098,4100,4102,4104,4106,4108,4110,4112,4114,4116,4118,4120,4122,4124,4126,4128,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148,4150,4152,4154,4156,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176,4178,4180,4182,4185,4187,4189,4191,4193,4195,4198,4200,4202,4204,4206,4209,4211,4213,4215,4217,4219,4221,4223,4225,4227,4229,4231,4233,4235,4237,4239,4241,4243,4245,4247,4249,4251,4253,4255,4257,4259,4261,4263,4265,4267,4269,4271,4273,4275,4278,4280,4282,4284,4287,4289,4291,4293,4295,4297,4299,4301,4303,4305,4307,4309,4311,4313,4315,4317,4319,4321,4323,4325,4327,4329,4331,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361,4363,4365,4367,4369,4372,4374,4376,4378,4380,4382,4384,4386,4389,4391,4393,4395,4398,4400,4402,4404,4407,4409,4411,4413,4416,4418,4420,4422,4424,4426,4429,4431,4433,4435,4438,4440,4442,4444,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465,4467,4469,4471,4473,4475,4477,4479,4481,4483,4485,4488,4490,4492,4494,4497,4499,4501,4503,4506,4508,4510,4512,4514,4516,4518,4520,4523,4525,4527,4529,4532,4534,4536,4538,4541,4543,4545,4547,4550,4552,4554,4556,4558,4560,4562,4564,4567,4569,4571,4573,4576,4578,4580,4582,4585,4587,4589,4591,4594,4596,4598,4600,4603,4605,4607,4609,4612,4614,4616,4618,4621,4623,4625,4627,4630,4632,4634,4636,4639,4641,4643,4645,4648,4650,4652,4654,4657,4659,4661,4663,4666,4668,4670,4672,4674,4676,4678,4680,4683,4685,4687,4689,4692,4694,4696,4698,4700,4702,4705,4707,4709,4711,4714,4716,4719,4721,4723,4725,4727,4729,4732,4734,4736,4738,4740,4742,4744,4746,4749,4751,4753,4755,4758,4760,4762,4764,4767,4769,4771,4773,4775,4777,4779,4781,4784,4786],"span",{"class":230,"line":231},"line",1,[228,233,235],{"class":234},"sMK4o","[{",[228,237,238],{"class":234},"\"",[228,240,242],{"class":241},"spNyl","id",[228,244,238],{"class":234},[228,246,247],{"class":234},":",[228,249,238],{"class":234},[228,251,253],{"class":252},"sfazB","83cd1b1c4cc8e310",[228,255,238],{"class":234},[228,257,258],{"class":234},",",[228,260,238],{"class":234},[228,262,263],{"class":241},"type",[228,265,238],{"class":234},[228,267,247],{"class":234},[228,269,238],{"class":234},[228,271,272],{"class":252},"group",[228,274,238],{"class":234},[228,276,258],{"class":234},[228,278,238],{"class":234},[228,280,281],{"class":241},"z",[228,283,238],{"class":234},[228,285,247],{"class":234},[228,287,238],{"class":234},[228,289,290],{"class":252},"3012f9c2796b5b41",[228,292,238],{"class":234},[228,294,258],{"class":234},[228,296,238],{"class":234},[228,298,299],{"class":241},"style",[228,301,238],{"class":234},[228,303,304],{"class":234},":{",[228,306,238],{"class":234},[228,308,310],{"class":309},"sBMFI","stroke",[228,312,238],{"class":234},[228,314,247],{"class":234},[228,316,238],{"class":234},[228,318,319],{"class":252},"#b2b3bd",[228,321,238],{"class":234},[228,323,258],{"class":234},[228,325,238],{"class":234},[228,327,328],{"class":309},"stroke-opacity",[228,330,238],{"class":234},[228,332,247],{"class":234},[228,334,238],{"class":234},[228,336,337],{"class":252},"1",[228,339,238],{"class":234},[228,341,258],{"class":234},[228,343,238],{"class":234},[228,345,346],{"class":309},"fill",[228,348,238],{"class":234},[228,350,247],{"class":234},[228,352,238],{"class":234},[228,354,355],{"class":252},"#f2f3fb",[228,357,238],{"class":234},[228,359,258],{"class":234},[228,361,238],{"class":234},[228,363,364],{"class":309},"fill-opacity",[228,366,238],{"class":234},[228,368,247],{"class":234},[228,370,238],{"class":234},[228,372,373],{"class":252},"0.5",[228,375,238],{"class":234},[228,377,258],{"class":234},[228,379,238],{"class":234},[228,381,382],{"class":309},"label",[228,384,238],{"class":234},[228,386,387],{"class":234},":true,",[228,389,238],{"class":234},[228,391,392],{"class":309},"label-position",[228,394,238],{"class":234},[228,396,247],{"class":234},[228,398,238],{"class":234},[228,400,401],{"class":252},"nw",[228,403,238],{"class":234},[228,405,258],{"class":234},[228,407,238],{"class":234},[228,409,410],{"class":309},"color",[228,412,238],{"class":234},[228,414,247],{"class":234},[228,416,238],{"class":234},[228,418,419],{"class":252},"#32333b",[228,421,238],{"class":234},[228,423,424],{"class":234},"},",[228,426,238],{"class":234},[228,428,429],{"class":241},"nodes",[228,431,238],{"class":234},[228,433,434],{"class":234},":[",[228,436,238],{"class":234},[228,438,439],{"class":252},"5a2c1cb7932accb9",[228,441,238],{"class":234},[228,443,258],{"class":234},[228,445,238],{"class":234},[228,447,448],{"class":252},"f2334a5d527a684a",[228,450,238],{"class":234},[228,452,258],{"class":234},[228,454,238],{"class":234},[228,456,457],{"class":252},"f65db363fdde0eba",[228,459,238],{"class":234},[228,461,258],{"class":234},[228,463,238],{"class":234},[228,465,466],{"class":252},"cdda81f6a2701b7c",[228,468,238],{"class":234},[228,470,258],{"class":234},[228,472,238],{"class":234},[228,474,475],{"class":252},"8554ad9dfdb36f54",[228,477,238],{"class":234},[228,479,258],{"class":234},[228,481,238],{"class":234},[228,483,484],{"class":252},"6dd109a105da5dd5",[228,486,238],{"class":234},[228,488,258],{"class":234},[228,490,238],{"class":234},[228,492,493],{"class":252},"439862e5c86675cd",[228,495,238],{"class":234},[228,497,258],{"class":234},[228,499,238],{"class":234},[228,501,502],{"class":252},"9d853fad37785bec",[228,504,238],{"class":234},[228,506,258],{"class":234},[228,508,238],{"class":234},[228,510,511],{"class":252},"3506d88cd094d44c",[228,513,238],{"class":234},[228,515,258],{"class":234},[228,517,238],{"class":234},[228,519,520],{"class":252},"wo_stats_http_in",[228,522,238],{"class":234},[228,524,258],{"class":234},[228,526,238],{"class":234},[228,528,529],{"class":252},"wo_stats_func",[228,531,238],{"class":234},[228,533,258],{"class":234},[228,535,238],{"class":234},[228,537,538],{"class":252},"wo_stats_response",[228,540,238],{"class":234},[228,542,258],{"class":234},[228,544,238],{"class":234},[228,546,547],{"class":252},"6d1644eabb9a5bf5",[228,549,238],{"class":234},[228,551,258],{"class":234},[228,553,238],{"class":234},[228,555,556],{"class":252},"62760b81dea503c2",[228,558,238],{"class":234},[228,560,561],{"class":234},"],",[228,563,238],{"class":234},[228,565,566],{"class":241},"x",[228,568,238],{"class":234},[228,570,247],{"class":234},[228,572,574],{"class":573},"sbssI","44",[228,576,258],{"class":234},[228,578,238],{"class":234},[228,580,581],{"class":241},"y",[228,583,238],{"class":234},[228,585,247],{"class":234},[228,587,588],{"class":573},"59",[228,590,258],{"class":234},[228,592,238],{"class":234},[228,594,595],{"class":241},"w",[228,597,238],{"class":234},[228,599,247],{"class":234},[228,601,602],{"class":573},"652",[228,604,258],{"class":234},[228,606,238],{"class":234},[228,608,609],{"class":241},"h",[228,611,238],{"class":234},[228,613,247],{"class":234},[228,615,616],{"class":573},"482",[228,618,619],{"class":234},"},{",[228,621,238],{"class":234},[228,623,242],{"class":241},[228,625,238],{"class":234},[228,627,247],{"class":234},[228,629,238],{"class":234},[228,631,439],{"class":252},[228,633,238],{"class":234},[228,635,258],{"class":234},[228,637,238],{"class":234},[228,639,263],{"class":241},[228,641,238],{"class":234},[228,643,247],{"class":234},[228,645,238],{"class":234},[228,647,648],{"class":252},"http in",[228,650,238],{"class":234},[228,652,258],{"class":234},[228,654,238],{"class":234},[228,656,281],{"class":241},[228,658,238],{"class":234},[228,660,247],{"class":234},[228,662,238],{"class":234},[228,664,290],{"class":252},[228,666,238],{"class":234},[228,668,258],{"class":234},[228,670,238],{"class":234},[228,672,673],{"class":241},"g",[228,675,238],{"class":234},[228,677,247],{"class":234},[228,679,238],{"class":234},[228,681,253],{"class":252},[228,683,238],{"class":234},[228,685,258],{"class":234},[228,687,238],{"class":234},[228,689,690],{"class":241},"name",[228,692,238],{"class":234},[228,694,247],{"class":234},[228,696,238],{"class":234},[228,698,699],{"class":252},"GET Work Orders",[228,701,238],{"class":234},[228,703,258],{"class":234},[228,705,238],{"class":234},[228,707,708],{"class":241},"url",[228,710,238],{"class":234},[228,712,247],{"class":234},[228,714,238],{"class":234},[228,716,717],{"class":252},"\u002Fworkorders",[228,719,238],{"class":234},[228,721,258],{"class":234},[228,723,238],{"class":234},[228,725,726],{"class":241},"method",[228,728,238],{"class":234},[228,730,247],{"class":234},[228,732,238],{"class":234},[228,734,735],{"class":252},"get",[228,737,238],{"class":234},[228,739,258],{"class":234},[228,741,238],{"class":234},[228,743,744],{"class":241},"upload",[228,746,238],{"class":234},[228,748,749],{"class":234},":false,",[228,751,238],{"class":234},[228,753,754],{"class":241},"skipBodyParsing",[228,756,238],{"class":234},[228,758,749],{"class":234},[228,760,238],{"class":234},[228,762,763],{"class":241},"swaggerDoc",[228,765,238],{"class":234},[228,767,247],{"class":234},[228,769,770],{"class":234},"\"\"",[228,772,258],{"class":234},[228,774,238],{"class":234},[228,776,566],{"class":241},[228,778,238],{"class":234},[228,780,247],{"class":234},[228,782,783],{"class":573},"160",[228,785,258],{"class":234},[228,787,238],{"class":234},[228,789,581],{"class":241},[228,791,238],{"class":234},[228,793,247],{"class":234},[228,795,217],{"class":573},[228,797,258],{"class":234},[228,799,238],{"class":234},[228,801,802],{"class":241},"wires",[228,804,238],{"class":234},[228,806,807],{"class":234},":[[",[228,809,238],{"class":234},[228,811,448],{"class":252},[228,813,238],{"class":234},[228,815,816],{"class":234},"]]},{",[228,818,238],{"class":234},[228,820,242],{"class":241},[228,822,238],{"class":234},[228,824,247],{"class":234},[228,826,238],{"class":234},[228,828,448],{"class":252},[228,830,238],{"class":234},[228,832,258],{"class":234},[228,834,238],{"class":234},[228,836,263],{"class":241},[228,838,238],{"class":234},[228,840,247],{"class":234},[228,842,238],{"class":234},[228,844,845],{"class":252},"function",[228,847,238],{"class":234},[228,849,258],{"class":234},[228,851,238],{"class":234},[228,853,281],{"class":241},[228,855,238],{"class":234},[228,857,247],{"class":234},[228,859,238],{"class":234},[228,861,290],{"class":252},[228,863,238],{"class":234},[228,865,258],{"class":234},[228,867,238],{"class":234},[228,869,673],{"class":241},[228,871,238],{"class":234},[228,873,247],{"class":234},[228,875,238],{"class":234},[228,877,253],{"class":252},[228,879,238],{"class":234},[228,881,258],{"class":234},[228,883,238],{"class":234},[228,885,690],{"class":241},[228,887,238],{"class":234},[228,889,247],{"class":234},[228,891,238],{"class":234},[228,893,894],{"class":252},"Generate Work Orders",[228,896,238],{"class":234},[228,898,258],{"class":234},[228,900,238],{"class":234},[228,902,903],{"class":241},"func",[228,905,238],{"class":234},[228,907,247],{"class":234},[228,909,238],{"class":234},[228,911,912],{"class":252},"const stationId = msg.req.query.stationId;",[228,914,916],{"class":915},"sTEyZ","\\n",[228,918,919],{"class":252},"const username = msg.req.query.username;",[228,921,922],{"class":915},"\\n\\n",[228,924,925],{"class":252},"const workOrders = global.get(",[228,927,928],{"class":915},"\\\"",[228,930,931],{"class":252},"workOrders",[228,933,928],{"class":915},[228,935,103],{"class":252},[228,937,928],{"class":915},[228,939,940],{"class":252},"persistent",[228,942,928],{"class":915},[228,944,945],{"class":252},") || [];",[228,947,922],{"class":915},[228,949,950],{"class":252},"const result = workOrders.filter(w =>",[228,952,916],{"class":915},[228,954,955],{"class":252},"    w.stationId === stationId &&",[228,957,916],{"class":915},[228,959,960],{"class":252},"    w.assignedTo === username &&",[228,962,916],{"class":915},[228,964,965],{"class":252},"    w.status !== ",[228,967,928],{"class":915},[228,969,970],{"class":252},"defect",[228,972,928],{"class":915},[228,974,975],{"class":252}," &&",[228,977,916],{"class":915},[228,979,965],{"class":252},[228,981,928],{"class":915},[228,983,984],{"class":252},"completed",[228,986,987],{"class":915},"\\\"\\n",[228,989,990],{"class":252},");",[228,992,922],{"class":915},[228,994,995],{"class":252},"msg.payload = result;",[228,997,922],{"class":915},[228,999,1000],{"class":252},"return msg;",[228,1002,238],{"class":234},[228,1004,258],{"class":234},[228,1006,238],{"class":234},[228,1008,1009],{"class":241},"outputs",[228,1011,238],{"class":234},[228,1013,247],{"class":234},[228,1015,337],{"class":573},[228,1017,258],{"class":234},[228,1019,238],{"class":234},[228,1021,1022],{"class":241},"timeout",[228,1024,238],{"class":234},[228,1026,247],{"class":234},[228,1028,770],{"class":234},[228,1030,258],{"class":234},[228,1032,238],{"class":234},[228,1034,1035],{"class":241},"noerr",[228,1037,238],{"class":234},[228,1039,247],{"class":234},[228,1041,1042],{"class":573},"0",[228,1044,258],{"class":234},[228,1046,238],{"class":234},[228,1048,1049],{"class":241},"initialize",[228,1051,238],{"class":234},[228,1053,247],{"class":234},[228,1055,770],{"class":234},[228,1057,258],{"class":234},[228,1059,238],{"class":234},[228,1061,1062],{"class":241},"finalize",[228,1064,238],{"class":234},[228,1066,247],{"class":234},[228,1068,770],{"class":234},[228,1070,258],{"class":234},[228,1072,238],{"class":234},[228,1074,1075],{"class":241},"libs",[228,1077,238],{"class":234},[228,1079,1080],{"class":234},":[],",[228,1082,238],{"class":234},[228,1084,566],{"class":241},[228,1086,238],{"class":234},[228,1088,247],{"class":234},[228,1090,1091],{"class":573},"420",[228,1093,258],{"class":234},[228,1095,238],{"class":234},[228,1097,581],{"class":241},[228,1099,238],{"class":234},[228,1101,247],{"class":234},[228,1103,217],{"class":573},[228,1105,258],{"class":234},[228,1107,238],{"class":234},[228,1109,802],{"class":241},[228,1111,238],{"class":234},[228,1113,807],{"class":234},[228,1115,238],{"class":234},[228,1117,457],{"class":252},[228,1119,238],{"class":234},[228,1121,816],{"class":234},[228,1123,238],{"class":234},[228,1125,242],{"class":241},[228,1127,238],{"class":234},[228,1129,247],{"class":234},[228,1131,238],{"class":234},[228,1133,457],{"class":252},[228,1135,238],{"class":234},[228,1137,258],{"class":234},[228,1139,238],{"class":234},[228,1141,263],{"class":241},[228,1143,238],{"class":234},[228,1145,247],{"class":234},[228,1147,238],{"class":234},[228,1149,1150],{"class":252},"http response",[228,1152,238],{"class":234},[228,1154,258],{"class":234},[228,1156,238],{"class":234},[228,1158,281],{"class":241},[228,1160,238],{"class":234},[228,1162,247],{"class":234},[228,1164,238],{"class":234},[228,1166,290],{"class":252},[228,1168,238],{"class":234},[228,1170,258],{"class":234},[228,1172,238],{"class":234},[228,1174,673],{"class":241},[228,1176,238],{"class":234},[228,1178,247],{"class":234},[228,1180,238],{"class":234},[228,1182,253],{"class":252},[228,1184,238],{"class":234},[228,1186,258],{"class":234},[228,1188,238],{"class":234},[228,1190,690],{"class":241},[228,1192,238],{"class":234},[228,1194,247],{"class":234},[228,1196,770],{"class":234},[228,1198,258],{"class":234},[228,1200,238],{"class":234},[228,1202,1203],{"class":241},"statusCode",[228,1205,238],{"class":234},[228,1207,247],{"class":234},[228,1209,770],{"class":234},[228,1211,258],{"class":234},[228,1213,238],{"class":234},[228,1215,1216],{"class":241},"headers",[228,1218,238],{"class":234},[228,1220,304],{"class":234},[228,1222,238],{"class":234},[228,1224,1225],{"class":309},"Content-Type",[228,1227,238],{"class":234},[228,1229,247],{"class":234},[228,1231,238],{"class":234},[228,1233,1234],{"class":252},"application\u002Fjson",[228,1236,238],{"class":234},[228,1238,424],{"class":234},[228,1240,238],{"class":234},[228,1242,566],{"class":241},[228,1244,238],{"class":234},[228,1246,247],{"class":234},[228,1248,1249],{"class":573},"610",[228,1251,258],{"class":234},[228,1253,238],{"class":234},[228,1255,581],{"class":241},[228,1257,238],{"class":234},[228,1259,247],{"class":234},[228,1261,217],{"class":573},[228,1263,258],{"class":234},[228,1265,238],{"class":234},[228,1267,802],{"class":241},[228,1269,238],{"class":234},[228,1271,1272],{"class":234},":[]},{",[228,1274,238],{"class":234},[228,1276,242],{"class":241},[228,1278,238],{"class":234},[228,1280,247],{"class":234},[228,1282,238],{"class":234},[228,1284,466],{"class":252},[228,1286,238],{"class":234},[228,1288,258],{"class":234},[228,1290,238],{"class":234},[228,1292,263],{"class":241},[228,1294,238],{"class":234},[228,1296,247],{"class":234},[228,1298,238],{"class":234},[228,1300,648],{"class":252},[228,1302,238],{"class":234},[228,1304,258],{"class":234},[228,1306,238],{"class":234},[228,1308,281],{"class":241},[228,1310,238],{"class":234},[228,1312,247],{"class":234},[228,1314,238],{"class":234},[228,1316,290],{"class":252},[228,1318,238],{"class":234},[228,1320,258],{"class":234},[228,1322,238],{"class":234},[228,1324,673],{"class":241},[228,1326,238],{"class":234},[228,1328,247],{"class":234},[228,1330,238],{"class":234},[228,1332,253],{"class":252},[228,1334,238],{"class":234},[228,1336,258],{"class":234},[228,1338,238],{"class":234},[228,1340,690],{"class":241},[228,1342,238],{"class":234},[228,1344,247],{"class":234},[228,1346,238],{"class":234},[228,1348,1349],{"class":252},"POST Mark Defect",[228,1351,238],{"class":234},[228,1353,258],{"class":234},[228,1355,238],{"class":234},[228,1357,708],{"class":241},[228,1359,238],{"class":234},[228,1361,247],{"class":234},[228,1363,238],{"class":234},[228,1365,1366],{"class":252},"\u002Fworkorders\u002Fdefect",[228,1368,238],{"class":234},[228,1370,258],{"class":234},[228,1372,238],{"class":234},[228,1374,726],{"class":241},[228,1376,238],{"class":234},[228,1378,247],{"class":234},[228,1380,238],{"class":234},[228,1382,1383],{"class":252},"post",[228,1385,238],{"class":234},[228,1387,258],{"class":234},[228,1389,238],{"class":234},[228,1391,744],{"class":241},[228,1393,238],{"class":234},[228,1395,749],{"class":234},[228,1397,238],{"class":234},[228,1399,754],{"class":241},[228,1401,238],{"class":234},[228,1403,749],{"class":234},[228,1405,238],{"class":234},[228,1407,763],{"class":241},[228,1409,238],{"class":234},[228,1411,247],{"class":234},[228,1413,770],{"class":234},[228,1415,258],{"class":234},[228,1417,238],{"class":234},[228,1419,566],{"class":241},[228,1421,238],{"class":234},[228,1423,247],{"class":234},[228,1425,783],{"class":573},[228,1427,258],{"class":234},[228,1429,238],{"class":234},[228,1431,581],{"class":241},[228,1433,238],{"class":234},[228,1435,247],{"class":234},[228,1437,1438],{"class":573},"400",[228,1440,258],{"class":234},[228,1442,238],{"class":234},[228,1444,802],{"class":241},[228,1446,238],{"class":234},[228,1448,807],{"class":234},[228,1450,238],{"class":234},[228,1452,475],{"class":252},[228,1454,238],{"class":234},[228,1456,816],{"class":234},[228,1458,238],{"class":234},[228,1460,242],{"class":241},[228,1462,238],{"class":234},[228,1464,247],{"class":234},[228,1466,238],{"class":234},[228,1468,475],{"class":252},[228,1470,238],{"class":234},[228,1472,258],{"class":234},[228,1474,238],{"class":234},[228,1476,263],{"class":241},[228,1478,238],{"class":234},[228,1480,247],{"class":234},[228,1482,238],{"class":234},[228,1484,845],{"class":252},[228,1486,238],{"class":234},[228,1488,258],{"class":234},[228,1490,238],{"class":234},[228,1492,281],{"class":241},[228,1494,238],{"class":234},[228,1496,247],{"class":234},[228,1498,238],{"class":234},[228,1500,290],{"class":252},[228,1502,238],{"class":234},[228,1504,258],{"class":234},[228,1506,238],{"class":234},[228,1508,673],{"class":241},[228,1510,238],{"class":234},[228,1512,247],{"class":234},[228,1514,238],{"class":234},[228,1516,253],{"class":252},[228,1518,238],{"class":234},[228,1520,258],{"class":234},[228,1522,238],{"class":234},[228,1524,690],{"class":241},[228,1526,238],{"class":234},[228,1528,247],{"class":234},[228,1530,238],{"class":234},[228,1532,1533],{"class":252},"Mark Defect",[228,1535,238],{"class":234},[228,1537,258],{"class":234},[228,1539,238],{"class":234},[228,1541,903],{"class":241},[228,1543,238],{"class":234},[228,1545,247],{"class":234},[228,1547,238],{"class":234},[228,1549,1550],{"class":252},"const { workOrderId, issueType, severity, affectedPart, description } = msg.payload || {};",[228,1552,922],{"class":915},[228,1554,1555],{"class":252},"if (!workOrderId || !issueType || !severity || !affectedPart) {",[228,1557,916],{"class":915},[228,1559,1560],{"class":252},"    msg.statusCode = 400;",[228,1562,916],{"class":915},[228,1564,1565],{"class":252},"    msg.payload = { error: 'workOrderId, issueType, severity, and affectedPart are required' };",[228,1567,916],{"class":915},[228,1569,1570],{"class":252},"    return msg;",[228,1572,916],{"class":915},[228,1574,1575],{"class":252},"}",[228,1577,922],{"class":915},[228,1579,1580],{"class":252},"const workOrders = global.get('workOrders', 'persistent') || [];",[228,1582,916],{"class":915},[228,1584,1585],{"class":252},"const idx = workOrders.findIndex(w => w.workOrderId === workOrderId);",[228,1587,922],{"class":915},[228,1589,1590],{"class":252},"if (idx === -1) {",[228,1592,916],{"class":915},[228,1594,1595],{"class":252},"    msg.statusCode = 404;",[228,1597,916],{"class":915},[228,1599,1600],{"class":252},"    msg.payload = { error: 'Work order not found' };",[228,1602,916],{"class":915},[228,1604,1570],{"class":252},[228,1606,916],{"class":915},[228,1608,1575],{"class":252},[228,1610,922],{"class":915},[228,1612,1613],{"class":252},"workOrders[idx].status = 'defect';",[228,1615,916],{"class":915},[228,1617,1618],{"class":252},"workOrders[idx].defect = {",[228,1620,916],{"class":915},[228,1622,1623],{"class":252},"    issueType,",[228,1625,916],{"class":915},[228,1627,1628],{"class":252},"    severity,",[228,1630,916],{"class":915},[228,1632,1633],{"class":252},"    affectedPart,",[228,1635,916],{"class":915},[228,1637,1638],{"class":252},"    description: description || null,",[228,1640,916],{"class":915},[228,1642,1643],{"class":252},"    reportedAt: new Date().toISOString()",[228,1645,916],{"class":915},[228,1647,1648],{"class":252},"};",[228,1650,922],{"class":915},[228,1652,1653],{"class":252},"global.set('workOrders', workOrders, 'persistent');",[228,1655,922],{"class":915},[228,1657,1658],{"class":252},"msg.statusCode = 200;",[228,1660,916],{"class":915},[228,1662,1663],{"class":252},"msg.payload = { success: true, workOrder: workOrders[idx] };",[228,1665,916],{"class":915},[228,1667,1000],{"class":252},[228,1669,238],{"class":234},[228,1671,258],{"class":234},[228,1673,238],{"class":234},[228,1675,1009],{"class":241},[228,1677,238],{"class":234},[228,1679,247],{"class":234},[228,1681,337],{"class":573},[228,1683,258],{"class":234},[228,1685,238],{"class":234},[228,1687,1022],{"class":241},[228,1689,238],{"class":234},[228,1691,247],{"class":234},[228,1693,770],{"class":234},[228,1695,258],{"class":234},[228,1697,238],{"class":234},[228,1699,1035],{"class":241},[228,1701,238],{"class":234},[228,1703,247],{"class":234},[228,1705,1042],{"class":573},[228,1707,258],{"class":234},[228,1709,238],{"class":234},[228,1711,1049],{"class":241},[228,1713,238],{"class":234},[228,1715,247],{"class":234},[228,1717,770],{"class":234},[228,1719,258],{"class":234},[228,1721,238],{"class":234},[228,1723,1062],{"class":241},[228,1725,238],{"class":234},[228,1727,247],{"class":234},[228,1729,770],{"class":234},[228,1731,258],{"class":234},[228,1733,238],{"class":234},[228,1735,1075],{"class":241},[228,1737,238],{"class":234},[228,1739,1080],{"class":234},[228,1741,238],{"class":234},[228,1743,566],{"class":241},[228,1745,238],{"class":234},[228,1747,247],{"class":234},[228,1749,1750],{"class":573},"390",[228,1752,258],{"class":234},[228,1754,238],{"class":234},[228,1756,581],{"class":241},[228,1758,238],{"class":234},[228,1760,247],{"class":234},[228,1762,1438],{"class":573},[228,1764,258],{"class":234},[228,1766,238],{"class":234},[228,1768,802],{"class":241},[228,1770,238],{"class":234},[228,1772,807],{"class":234},[228,1774,238],{"class":234},[228,1776,484],{"class":252},[228,1778,238],{"class":234},[228,1780,816],{"class":234},[228,1782,238],{"class":234},[228,1784,242],{"class":241},[228,1786,238],{"class":234},[228,1788,247],{"class":234},[228,1790,238],{"class":234},[228,1792,484],{"class":252},[228,1794,238],{"class":234},[228,1796,258],{"class":234},[228,1798,238],{"class":234},[228,1800,263],{"class":241},[228,1802,238],{"class":234},[228,1804,247],{"class":234},[228,1806,238],{"class":234},[228,1808,1150],{"class":252},[228,1810,238],{"class":234},[228,1812,258],{"class":234},[228,1814,238],{"class":234},[228,1816,281],{"class":241},[228,1818,238],{"class":234},[228,1820,247],{"class":234},[228,1822,238],{"class":234},[228,1824,290],{"class":252},[228,1826,238],{"class":234},[228,1828,258],{"class":234},[228,1830,238],{"class":234},[228,1832,673],{"class":241},[228,1834,238],{"class":234},[228,1836,247],{"class":234},[228,1838,238],{"class":234},[228,1840,253],{"class":252},[228,1842,238],{"class":234},[228,1844,258],{"class":234},[228,1846,238],{"class":234},[228,1848,690],{"class":241},[228,1850,238],{"class":234},[228,1852,247],{"class":234},[228,1854,770],{"class":234},[228,1856,258],{"class":234},[228,1858,238],{"class":234},[228,1860,1203],{"class":241},[228,1862,238],{"class":234},[228,1864,247],{"class":234},[228,1866,770],{"class":234},[228,1868,258],{"class":234},[228,1870,238],{"class":234},[228,1872,1216],{"class":241},[228,1874,238],{"class":234},[228,1876,304],{"class":234},[228,1878,238],{"class":234},[228,1880,1225],{"class":309},[228,1882,238],{"class":234},[228,1884,247],{"class":234},[228,1886,238],{"class":234},[228,1888,1234],{"class":252},[228,1890,238],{"class":234},[228,1892,424],{"class":234},[228,1894,238],{"class":234},[228,1896,566],{"class":241},[228,1898,238],{"class":234},[228,1900,247],{"class":234},[228,1902,1249],{"class":573},[228,1904,258],{"class":234},[228,1906,238],{"class":234},[228,1908,581],{"class":241},[228,1910,238],{"class":234},[228,1912,247],{"class":234},[228,1914,1438],{"class":573},[228,1916,258],{"class":234},[228,1918,238],{"class":234},[228,1920,802],{"class":241},[228,1922,238],{"class":234},[228,1924,1272],{"class":234},[228,1926,238],{"class":234},[228,1928,242],{"class":241},[228,1930,238],{"class":234},[228,1932,247],{"class":234},[228,1934,238],{"class":234},[228,1936,493],{"class":252},[228,1938,238],{"class":234},[228,1940,258],{"class":234},[228,1942,238],{"class":234},[228,1944,263],{"class":241},[228,1946,238],{"class":234},[228,1948,247],{"class":234},[228,1950,238],{"class":234},[228,1952,648],{"class":252},[228,1954,238],{"class":234},[228,1956,258],{"class":234},[228,1958,238],{"class":234},[228,1960,281],{"class":241},[228,1962,238],{"class":234},[228,1964,247],{"class":234},[228,1966,238],{"class":234},[228,1968,290],{"class":252},[228,1970,238],{"class":234},[228,1972,258],{"class":234},[228,1974,238],{"class":234},[228,1976,673],{"class":241},[228,1978,238],{"class":234},[228,1980,247],{"class":234},[228,1982,238],{"class":234},[228,1984,253],{"class":252},[228,1986,238],{"class":234},[228,1988,258],{"class":234},[228,1990,238],{"class":234},[228,1992,690],{"class":241},[228,1994,238],{"class":234},[228,1996,247],{"class":234},[228,1998,238],{"class":234},[228,2000,2001],{"class":252},"POST Complete Order",[228,2003,238],{"class":234},[228,2005,258],{"class":234},[228,2007,238],{"class":234},[228,2009,708],{"class":241},[228,2011,238],{"class":234},[228,2013,247],{"class":234},[228,2015,238],{"class":234},[228,2017,2018],{"class":252},"\u002Fworkorders\u002Fcomplete",[228,2020,238],{"class":234},[228,2022,258],{"class":234},[228,2024,238],{"class":234},[228,2026,726],{"class":241},[228,2028,238],{"class":234},[228,2030,247],{"class":234},[228,2032,238],{"class":234},[228,2034,1383],{"class":252},[228,2036,238],{"class":234},[228,2038,258],{"class":234},[228,2040,238],{"class":234},[228,2042,744],{"class":241},[228,2044,238],{"class":234},[228,2046,749],{"class":234},[228,2048,238],{"class":234},[228,2050,754],{"class":241},[228,2052,238],{"class":234},[228,2054,749],{"class":234},[228,2056,238],{"class":234},[228,2058,763],{"class":241},[228,2060,238],{"class":234},[228,2062,247],{"class":234},[228,2064,770],{"class":234},[228,2066,258],{"class":234},[228,2068,238],{"class":234},[228,2070,566],{"class":241},[228,2072,238],{"class":234},[228,2074,247],{"class":234},[228,2076,2077],{"class":573},"170",[228,2079,258],{"class":234},[228,2081,238],{"class":234},[228,2083,581],{"class":241},[228,2085,238],{"class":234},[228,2087,247],{"class":234},[228,2089,2090],{"class":573},"500",[228,2092,258],{"class":234},[228,2094,238],{"class":234},[228,2096,802],{"class":241},[228,2098,238],{"class":234},[228,2100,807],{"class":234},[228,2102,238],{"class":234},[228,2104,502],{"class":252},[228,2106,238],{"class":234},[228,2108,816],{"class":234},[228,2110,238],{"class":234},[228,2112,242],{"class":241},[228,2114,238],{"class":234},[228,2116,247],{"class":234},[228,2118,238],{"class":234},[228,2120,502],{"class":252},[228,2122,238],{"class":234},[228,2124,258],{"class":234},[228,2126,238],{"class":234},[228,2128,263],{"class":241},[228,2130,238],{"class":234},[228,2132,247],{"class":234},[228,2134,238],{"class":234},[228,2136,845],{"class":252},[228,2138,238],{"class":234},[228,2140,258],{"class":234},[228,2142,238],{"class":234},[228,2144,281],{"class":241},[228,2146,238],{"class":234},[228,2148,247],{"class":234},[228,2150,238],{"class":234},[228,2152,290],{"class":252},[228,2154,238],{"class":234},[228,2156,258],{"class":234},[228,2158,238],{"class":234},[228,2160,673],{"class":241},[228,2162,238],{"class":234},[228,2164,247],{"class":234},[228,2166,238],{"class":234},[228,2168,253],{"class":252},[228,2170,238],{"class":234},[228,2172,258],{"class":234},[228,2174,238],{"class":234},[228,2176,690],{"class":241},[228,2178,238],{"class":234},[228,2180,247],{"class":234},[228,2182,238],{"class":234},[228,2184,2185],{"class":252},"Complete Work Order",[228,2187,238],{"class":234},[228,2189,258],{"class":234},[228,2191,238],{"class":234},[228,2193,903],{"class":241},[228,2195,238],{"class":234},[228,2197,247],{"class":234},[228,2199,238],{"class":234},[228,2201,2202],{"class":252},"const { workOrderId } = msg.payload || {};",[228,2204,922],{"class":915},[228,2206,2207],{"class":252},"if (!workOrderId) {",[228,2209,916],{"class":915},[228,2211,1560],{"class":252},[228,2213,916],{"class":915},[228,2215,2216],{"class":252},"    msg.payload = { error: 'workOrderId is required' };",[228,2218,916],{"class":915},[228,2220,1570],{"class":252},[228,2222,916],{"class":915},[228,2224,1575],{"class":252},[228,2226,922],{"class":915},[228,2228,1580],{"class":252},[228,2230,916],{"class":915},[228,2232,1585],{"class":252},[228,2234,922],{"class":915},[228,2236,1590],{"class":252},[228,2238,916],{"class":915},[228,2240,1595],{"class":252},[228,2242,916],{"class":915},[228,2244,1600],{"class":252},[228,2246,916],{"class":915},[228,2248,1570],{"class":252},[228,2250,916],{"class":915},[228,2252,1575],{"class":252},[228,2254,922],{"class":915},[228,2256,2257],{"class":252},"workOrders[idx].status = 'completed';",[228,2259,916],{"class":915},[228,2261,2262],{"class":252},"workOrders[idx].completedAt = new Date().toISOString();",[228,2264,922],{"class":915},[228,2266,1653],{"class":252},[228,2268,922],{"class":915},[228,2270,1658],{"class":252},[228,2272,916],{"class":915},[228,2274,1663],{"class":252},[228,2276,916],{"class":915},[228,2278,1000],{"class":252},[228,2280,238],{"class":234},[228,2282,258],{"class":234},[228,2284,238],{"class":234},[228,2286,1009],{"class":241},[228,2288,238],{"class":234},[228,2290,247],{"class":234},[228,2292,337],{"class":573},[228,2294,258],{"class":234},[228,2296,238],{"class":234},[228,2298,1022],{"class":241},[228,2300,238],{"class":234},[228,2302,247],{"class":234},[228,2304,770],{"class":234},[228,2306,258],{"class":234},[228,2308,238],{"class":234},[228,2310,1035],{"class":241},[228,2312,238],{"class":234},[228,2314,247],{"class":234},[228,2316,1042],{"class":573},[228,2318,258],{"class":234},[228,2320,238],{"class":234},[228,2322,1049],{"class":241},[228,2324,238],{"class":234},[228,2326,247],{"class":234},[228,2328,770],{"class":234},[228,2330,258],{"class":234},[228,2332,238],{"class":234},[228,2334,1062],{"class":241},[228,2336,238],{"class":234},[228,2338,247],{"class":234},[228,2340,770],{"class":234},[228,2342,258],{"class":234},[228,2344,238],{"class":234},[228,2346,1075],{"class":241},[228,2348,238],{"class":234},[228,2350,1080],{"class":234},[228,2352,238],{"class":234},[228,2354,566],{"class":241},[228,2356,238],{"class":234},[228,2358,247],{"class":234},[228,2360,2361],{"class":573},"410",[228,2363,258],{"class":234},[228,2365,238],{"class":234},[228,2367,581],{"class":241},[228,2369,238],{"class":234},[228,2371,247],{"class":234},[228,2373,2090],{"class":573},[228,2375,258],{"class":234},[228,2377,238],{"class":234},[228,2379,802],{"class":241},[228,2381,238],{"class":234},[228,2383,807],{"class":234},[228,2385,238],{"class":234},[228,2387,511],{"class":252},[228,2389,238],{"class":234},[228,2391,816],{"class":234},[228,2393,238],{"class":234},[228,2395,242],{"class":241},[228,2397,238],{"class":234},[228,2399,247],{"class":234},[228,2401,238],{"class":234},[228,2403,511],{"class":252},[228,2405,238],{"class":234},[228,2407,258],{"class":234},[228,2409,238],{"class":234},[228,2411,263],{"class":241},[228,2413,238],{"class":234},[228,2415,247],{"class":234},[228,2417,238],{"class":234},[228,2419,1150],{"class":252},[228,2421,238],{"class":234},[228,2423,258],{"class":234},[228,2425,238],{"class":234},[228,2427,281],{"class":241},[228,2429,238],{"class":234},[228,2431,247],{"class":234},[228,2433,238],{"class":234},[228,2435,290],{"class":252},[228,2437,238],{"class":234},[228,2439,258],{"class":234},[228,2441,238],{"class":234},[228,2443,673],{"class":241},[228,2445,238],{"class":234},[228,2447,247],{"class":234},[228,2449,238],{"class":234},[228,2451,253],{"class":252},[228,2453,238],{"class":234},[228,2455,258],{"class":234},[228,2457,238],{"class":234},[228,2459,690],{"class":241},[228,2461,238],{"class":234},[228,2463,247],{"class":234},[228,2465,770],{"class":234},[228,2467,258],{"class":234},[228,2469,238],{"class":234},[228,2471,1203],{"class":241},[228,2473,238],{"class":234},[228,2475,247],{"class":234},[228,2477,770],{"class":234},[228,2479,258],{"class":234},[228,2481,238],{"class":234},[228,2483,1216],{"class":241},[228,2485,238],{"class":234},[228,2487,304],{"class":234},[228,2489,238],{"class":234},[228,2491,1225],{"class":309},[228,2493,238],{"class":234},[228,2495,247],{"class":234},[228,2497,238],{"class":234},[228,2499,1234],{"class":252},[228,2501,238],{"class":234},[228,2503,424],{"class":234},[228,2505,238],{"class":234},[228,2507,566],{"class":241},[228,2509,238],{"class":234},[228,2511,247],{"class":234},[228,2513,2514],{"class":573},"620",[228,2516,258],{"class":234},[228,2518,238],{"class":234},[228,2520,581],{"class":241},[228,2522,238],{"class":234},[228,2524,247],{"class":234},[228,2526,2090],{"class":573},[228,2528,258],{"class":234},[228,2530,238],{"class":234},[228,2532,802],{"class":241},[228,2534,238],{"class":234},[228,2536,1272],{"class":234},[228,2538,238],{"class":234},[228,2540,242],{"class":241},[228,2542,238],{"class":234},[228,2544,247],{"class":234},[228,2546,238],{"class":234},[228,2548,520],{"class":252},[228,2550,238],{"class":234},[228,2552,258],{"class":234},[228,2554,238],{"class":234},[228,2556,263],{"class":241},[228,2558,238],{"class":234},[228,2560,247],{"class":234},[228,2562,238],{"class":234},[228,2564,648],{"class":252},[228,2566,238],{"class":234},[228,2568,258],{"class":234},[228,2570,238],{"class":234},[228,2572,281],{"class":241},[228,2574,238],{"class":234},[228,2576,247],{"class":234},[228,2578,238],{"class":234},[228,2580,290],{"class":252},[228,2582,238],{"class":234},[228,2584,258],{"class":234},[228,2586,238],{"class":234},[228,2588,673],{"class":241},[228,2590,238],{"class":234},[228,2592,247],{"class":234},[228,2594,238],{"class":234},[228,2596,253],{"class":252},[228,2598,238],{"class":234},[228,2600,258],{"class":234},[228,2602,238],{"class":234},[228,2604,690],{"class":241},[228,2606,238],{"class":234},[228,2608,247],{"class":234},[228,2610,238],{"class":234},[228,2612,2613],{"class":252},"GET Work Order Stats",[228,2615,238],{"class":234},[228,2617,258],{"class":234},[228,2619,238],{"class":234},[228,2621,708],{"class":241},[228,2623,238],{"class":234},[228,2625,247],{"class":234},[228,2627,238],{"class":234},[228,2629,2630],{"class":252},"\u002Fworkorders\u002Fstats",[228,2632,238],{"class":234},[228,2634,258],{"class":234},[228,2636,238],{"class":234},[228,2638,726],{"class":241},[228,2640,238],{"class":234},[228,2642,247],{"class":234},[228,2644,238],{"class":234},[228,2646,735],{"class":252},[228,2648,238],{"class":234},[228,2650,258],{"class":234},[228,2652,238],{"class":234},[228,2654,744],{"class":241},[228,2656,238],{"class":234},[228,2658,749],{"class":234},[228,2660,238],{"class":234},[228,2662,754],{"class":241},[228,2664,238],{"class":234},[228,2666,749],{"class":234},[228,2668,238],{"class":234},[228,2670,763],{"class":241},[228,2672,238],{"class":234},[228,2674,247],{"class":234},[228,2676,770],{"class":234},[228,2678,258],{"class":234},[228,2680,238],{"class":234},[228,2682,566],{"class":241},[228,2684,238],{"class":234},[228,2686,247],{"class":234},[228,2688,2689],{"class":573},"180",[228,2691,258],{"class":234},[228,2693,238],{"class":234},[228,2695,581],{"class":241},[228,2697,238],{"class":234},[228,2699,247],{"class":234},[228,2701,2702],{"class":573},"220",[228,2704,258],{"class":234},[228,2706,238],{"class":234},[228,2708,802],{"class":241},[228,2710,238],{"class":234},[228,2712,807],{"class":234},[228,2714,238],{"class":234},[228,2716,529],{"class":252},[228,2718,238],{"class":234},[228,2720,816],{"class":234},[228,2722,238],{"class":234},[228,2724,242],{"class":241},[228,2726,238],{"class":234},[228,2728,247],{"class":234},[228,2730,238],{"class":234},[228,2732,529],{"class":252},[228,2734,238],{"class":234},[228,2736,258],{"class":234},[228,2738,238],{"class":234},[228,2740,263],{"class":241},[228,2742,238],{"class":234},[228,2744,247],{"class":234},[228,2746,238],{"class":234},[228,2748,845],{"class":252},[228,2750,238],{"class":234},[228,2752,258],{"class":234},[228,2754,238],{"class":234},[228,2756,281],{"class":241},[228,2758,238],{"class":234},[228,2760,247],{"class":234},[228,2762,238],{"class":234},[228,2764,290],{"class":252},[228,2766,238],{"class":234},[228,2768,258],{"class":234},[228,2770,238],{"class":234},[228,2772,673],{"class":241},[228,2774,238],{"class":234},[228,2776,247],{"class":234},[228,2778,238],{"class":234},[228,2780,253],{"class":252},[228,2782,238],{"class":234},[228,2784,258],{"class":234},[228,2786,238],{"class":234},[228,2788,690],{"class":241},[228,2790,238],{"class":234},[228,2792,247],{"class":234},[228,2794,238],{"class":234},[228,2796,2797],{"class":252},"Compute Stats",[228,2799,238],{"class":234},[228,2801,258],{"class":234},[228,2803,238],{"class":234},[228,2805,903],{"class":241},[228,2807,238],{"class":234},[228,2809,247],{"class":234},[228,2811,238],{"class":234},[228,2813,1580],{"class":252},[228,2815,916],{"class":915},[228,2817,2818],{"class":252},"node.warn(msg.req.query);",[228,2820,916],{"class":915},[228,2822,912],{"class":252},[228,2824,916],{"class":915},[228,2826,919],{"class":252},[228,2828,922],{"class":915},[228,2830,2831],{"class":252},"\u002F\u002F Filter only by station",[228,2833,916],{"class":915},[228,2835,2836],{"class":252},"const stationWorkOrders = stationId",[228,2838,916],{"class":915},[228,2840,2841],{"class":252},"    ? workOrders.filter(w => w.stationId === stationId)",[228,2843,916],{"class":915},[228,2845,2846],{"class":252},"    : workOrders;",[228,2848,922],{"class":915},[228,2850,2851],{"class":252},"const total = stationWorkOrders.length;",[228,2853,916],{"class":915},[228,2855,2856],{"class":252},"const completed = stationWorkOrders.filter(w => w.status === ",[228,2858,928],{"class":915},[228,2860,984],{"class":252},[228,2862,928],{"class":915},[228,2864,2865],{"class":252},").length;",[228,2867,916],{"class":915},[228,2869,2870],{"class":252},"const defected = stationWorkOrders.filter(w => w.status === ",[228,2872,928],{"class":915},[228,2874,970],{"class":252},[228,2876,928],{"class":915},[228,2878,2865],{"class":252},[228,2880,922],{"class":915},[228,2882,2883],{"class":252},"\u002F\u002F Filter by user within the station",[228,2885,916],{"class":915},[228,2887,2888],{"class":252},"const assignedToMe = username",[228,2890,916],{"class":915},[228,2892,2893],{"class":252},"    ? stationWorkOrders.filter(w => w.assignedTo === username).length",[228,2895,916],{"class":915},[228,2897,2898],{"class":252},"    : 0;",[228,2900,922],{"class":915},[228,2902,1658],{"class":252},[228,2904,916],{"class":915},[228,2906,2907],{"class":252},"msg.payload = {",[228,2909,916],{"class":915},[228,2911,2912],{"class":252},"    total,",[228,2914,916],{"class":915},[228,2916,2917],{"class":252},"    completed,",[228,2919,916],{"class":915},[228,2921,2922],{"class":252},"    defected,",[228,2924,916],{"class":915},[228,2926,2927],{"class":252},"    assignedToMe",[228,2929,916],{"class":915},[228,2931,1648],{"class":252},[228,2933,922],{"class":915},[228,2935,1000],{"class":252},[228,2937,238],{"class":234},[228,2939,258],{"class":234},[228,2941,238],{"class":234},[228,2943,1009],{"class":241},[228,2945,238],{"class":234},[228,2947,247],{"class":234},[228,2949,337],{"class":573},[228,2951,258],{"class":234},[228,2953,238],{"class":234},[228,2955,1022],{"class":241},[228,2957,238],{"class":234},[228,2959,247],{"class":234},[228,2961,770],{"class":234},[228,2963,258],{"class":234},[228,2965,238],{"class":234},[228,2967,1035],{"class":241},[228,2969,238],{"class":234},[228,2971,247],{"class":234},[228,2973,1042],{"class":573},[228,2975,258],{"class":234},[228,2977,238],{"class":234},[228,2979,1049],{"class":241},[228,2981,238],{"class":234},[228,2983,247],{"class":234},[228,2985,770],{"class":234},[228,2987,258],{"class":234},[228,2989,238],{"class":234},[228,2991,1062],{"class":241},[228,2993,238],{"class":234},[228,2995,247],{"class":234},[228,2997,770],{"class":234},[228,2999,258],{"class":234},[228,3001,238],{"class":234},[228,3003,1075],{"class":241},[228,3005,238],{"class":234},[228,3007,1080],{"class":234},[228,3009,238],{"class":234},[228,3011,566],{"class":241},[228,3013,238],{"class":234},[228,3015,247],{"class":234},[228,3017,1438],{"class":573},[228,3019,258],{"class":234},[228,3021,238],{"class":234},[228,3023,581],{"class":241},[228,3025,238],{"class":234},[228,3027,247],{"class":234},[228,3029,2702],{"class":573},[228,3031,258],{"class":234},[228,3033,238],{"class":234},[228,3035,802],{"class":241},[228,3037,238],{"class":234},[228,3039,807],{"class":234},[228,3041,238],{"class":234},[228,3043,538],{"class":252},[228,3045,238],{"class":234},[228,3047,816],{"class":234},[228,3049,238],{"class":234},[228,3051,242],{"class":241},[228,3053,238],{"class":234},[228,3055,247],{"class":234},[228,3057,238],{"class":234},[228,3059,538],{"class":252},[228,3061,238],{"class":234},[228,3063,258],{"class":234},[228,3065,238],{"class":234},[228,3067,263],{"class":241},[228,3069,238],{"class":234},[228,3071,247],{"class":234},[228,3073,238],{"class":234},[228,3075,1150],{"class":252},[228,3077,238],{"class":234},[228,3079,258],{"class":234},[228,3081,238],{"class":234},[228,3083,281],{"class":241},[228,3085,238],{"class":234},[228,3087,247],{"class":234},[228,3089,238],{"class":234},[228,3091,290],{"class":252},[228,3093,238],{"class":234},[228,3095,258],{"class":234},[228,3097,238],{"class":234},[228,3099,673],{"class":241},[228,3101,238],{"class":234},[228,3103,247],{"class":234},[228,3105,238],{"class":234},[228,3107,253],{"class":252},[228,3109,238],{"class":234},[228,3111,258],{"class":234},[228,3113,238],{"class":234},[228,3115,690],{"class":241},[228,3117,238],{"class":234},[228,3119,247],{"class":234},[228,3121,770],{"class":234},[228,3123,258],{"class":234},[228,3125,238],{"class":234},[228,3127,1203],{"class":241},[228,3129,238],{"class":234},[228,3131,247],{"class":234},[228,3133,770],{"class":234},[228,3135,258],{"class":234},[228,3137,238],{"class":234},[228,3139,1216],{"class":241},[228,3141,238],{"class":234},[228,3143,304],{"class":234},[228,3145,238],{"class":234},[228,3147,1225],{"class":309},[228,3149,238],{"class":234},[228,3151,247],{"class":234},[228,3153,238],{"class":234},[228,3155,1234],{"class":252},[228,3157,238],{"class":234},[228,3159,424],{"class":234},[228,3161,238],{"class":234},[228,3163,566],{"class":241},[228,3165,238],{"class":234},[228,3167,247],{"class":234},[228,3169,1249],{"class":573},[228,3171,258],{"class":234},[228,3173,238],{"class":234},[228,3175,581],{"class":241},[228,3177,238],{"class":234},[228,3179,247],{"class":234},[228,3181,2702],{"class":573},[228,3183,258],{"class":234},[228,3185,238],{"class":234},[228,3187,802],{"class":241},[228,3189,238],{"class":234},[228,3191,1272],{"class":234},[228,3193,238],{"class":234},[228,3195,242],{"class":241},[228,3197,238],{"class":234},[228,3199,247],{"class":234},[228,3201,238],{"class":234},[228,3203,547],{"class":252},[228,3205,238],{"class":234},[228,3207,258],{"class":234},[228,3209,238],{"class":234},[228,3211,263],{"class":241},[228,3213,238],{"class":234},[228,3215,247],{"class":234},[228,3217,238],{"class":234},[228,3219,845],{"class":252},[228,3221,238],{"class":234},[228,3223,258],{"class":234},[228,3225,238],{"class":234},[228,3227,281],{"class":241},[228,3229,238],{"class":234},[228,3231,247],{"class":234},[228,3233,238],{"class":234},[228,3235,290],{"class":252},[228,3237,238],{"class":234},[228,3239,258],{"class":234},[228,3241,238],{"class":234},[228,3243,673],{"class":241},[228,3245,238],{"class":234},[228,3247,247],{"class":234},[228,3249,238],{"class":234},[228,3251,253],{"class":252},[228,3253,238],{"class":234},[228,3255,258],{"class":234},[228,3257,238],{"class":234},[228,3259,690],{"class":241},[228,3261,238],{"class":234},[228,3263,247],{"class":234},[228,3265,238],{"class":234},[228,3267,3268],{"class":252},"Generate Mock Work Orders",[228,3270,238],{"class":234},[228,3272,258],{"class":234},[228,3274,238],{"class":234},[228,3276,903],{"class":241},[228,3278,238],{"class":234},[228,3280,247],{"class":234},[228,3282,238],{"class":234},[228,3284,3285],{"class":252},"const user = global.get(",[228,3287,928],{"class":915},[228,3289,3290],{"class":252},"user",[228,3292,928],{"class":915},[228,3294,103],{"class":252},[228,3296,928],{"class":915},[228,3298,940],{"class":252},[228,3300,928],{"class":915},[228,3302,990],{"class":252},[228,3304,916],{"class":915},[228,3306,3307],{"class":252},"const currentUser = user?.username || ",[228,3309,928],{"class":915},[228,3311,3312],{"class":252},"operator1",[228,3314,928],{"class":915},[228,3316,3317],{"class":252},";",[228,3319,922],{"class":915},[228,3321,3322],{"class":252},"\u002F\u002F Pool of 5 operators (logged-in user + 4 others)",[228,3324,916],{"class":915},[228,3326,3327],{"class":252},"const operators = [",[228,3329,916],{"class":915},[228,3331,3332],{"class":252},"    currentUser,",[228,3334,916],{"class":915},[228,3336,3337],{"class":915},"    \\\"",[228,3339,3340],{"class":252},"operator2",[228,3342,928],{"class":915},[228,3344,258],{"class":252},[228,3346,916],{"class":915},[228,3348,3337],{"class":915},[228,3350,3351],{"class":252},"operator3",[228,3353,928],{"class":915},[228,3355,258],{"class":252},[228,3357,916],{"class":915},[228,3359,3337],{"class":915},[228,3361,3362],{"class":252},"operator4",[228,3364,928],{"class":915},[228,3366,258],{"class":252},[228,3368,916],{"class":915},[228,3370,3337],{"class":915},[228,3372,3373],{"class":252},"operator5",[228,3375,987],{"class":915},[228,3377,3378],{"class":252},"];",[228,3380,922],{"class":915},[228,3382,3383],{"class":252},"const vehicles = [",[228,3385,916],{"class":915},[228,3387,3388],{"class":252},"    {",[228,3390,916],{"class":915},[228,3392,3393],{"class":252},"        model: ",[228,3395,928],{"class":915},[228,3397,3398],{"class":252},"Sedan X",[228,3400,928],{"class":915},[228,3402,258],{"class":252},[228,3404,916],{"class":915},[228,3406,3407],{"class":252},"        variants: [",[228,3409,928],{"class":915},[228,3411,3412],{"class":252},"Standard",[228,3414,928],{"class":915},[228,3416,103],{"class":252},[228,3418,928],{"class":915},[228,3420,3421],{"class":252},"Premium",[228,3423,928],{"class":915},[228,3425,103],{"class":252},[228,3427,928],{"class":915},[228,3429,3430],{"class":252},"Sport",[228,3432,928],{"class":915},[228,3434,561],{"class":252},[228,3436,916],{"class":915},[228,3438,3439],{"class":252},"        colors: [",[228,3441,928],{"class":915},[228,3443,3444],{"class":252},"White",[228,3446,928],{"class":915},[228,3448,103],{"class":252},[228,3450,928],{"class":915},[228,3452,3453],{"class":252},"Black",[228,3455,928],{"class":915},[228,3457,103],{"class":252},[228,3459,928],{"class":915},[228,3461,3462],{"class":252},"Red",[228,3464,928],{"class":915},[228,3466,3467],{"class":252},"]",[228,3469,916],{"class":915},[228,3471,3472],{"class":252},"    },",[228,3474,916],{"class":915},[228,3476,3388],{"class":252},[228,3478,916],{"class":915},[228,3480,3393],{"class":252},[228,3482,928],{"class":915},[228,3484,3485],{"class":252},"SUV Y",[228,3487,928],{"class":915},[228,3489,258],{"class":252},[228,3491,916],{"class":915},[228,3493,3407],{"class":252},[228,3495,928],{"class":915},[228,3497,3498],{"class":252},"Base",[228,3500,928],{"class":915},[228,3502,103],{"class":252},[228,3504,928],{"class":915},[228,3506,3421],{"class":252},[228,3508,928],{"class":915},[228,3510,103],{"class":252},[228,3512,928],{"class":915},[228,3514,3430],{"class":252},[228,3516,928],{"class":915},[228,3518,561],{"class":252},[228,3520,916],{"class":915},[228,3522,3439],{"class":252},[228,3524,928],{"class":915},[228,3526,3527],{"class":252},"Grey",[228,3529,928],{"class":915},[228,3531,103],{"class":252},[228,3533,928],{"class":915},[228,3535,3444],{"class":252},[228,3537,928],{"class":915},[228,3539,103],{"class":252},[228,3541,928],{"class":915},[228,3543,3453],{"class":252},[228,3545,928],{"class":915},[228,3547,3467],{"class":252},[228,3549,916],{"class":915},[228,3551,3472],{"class":252},[228,3553,916],{"class":915},[228,3555,3388],{"class":252},[228,3557,916],{"class":915},[228,3559,3393],{"class":252},[228,3561,928],{"class":915},[228,3563,3564],{"class":252},"Truck Z",[228,3566,928],{"class":915},[228,3568,258],{"class":252},[228,3570,916],{"class":915},[228,3572,3407],{"class":252},[228,3574,928],{"class":915},[228,3576,3412],{"class":252},[228,3578,928],{"class":915},[228,3580,103],{"class":252},[228,3582,928],{"class":915},[228,3584,3585],{"class":252},"Heavy Duty",[228,3587,928],{"class":915},[228,3589,561],{"class":252},[228,3591,916],{"class":915},[228,3593,3439],{"class":252},[228,3595,928],{"class":915},[228,3597,3598],{"class":252},"Blue",[228,3600,928],{"class":915},[228,3602,103],{"class":252},[228,3604,928],{"class":915},[228,3606,3607],{"class":252},"Green",[228,3609,928],{"class":915},[228,3611,103],{"class":252},[228,3613,928],{"class":915},[228,3615,3444],{"class":252},[228,3617,928],{"class":915},[228,3619,3467],{"class":252},[228,3621,916],{"class":915},[228,3623,3472],{"class":252},[228,3625,916],{"class":915},[228,3627,3388],{"class":252},[228,3629,916],{"class":915},[228,3631,3393],{"class":252},[228,3633,928],{"class":915},[228,3635,3636],{"class":252},"Hatchback W",[228,3638,928],{"class":915},[228,3640,258],{"class":252},[228,3642,916],{"class":915},[228,3644,3407],{"class":252},[228,3646,928],{"class":915},[228,3648,3498],{"class":252},[228,3650,928],{"class":915},[228,3652,103],{"class":252},[228,3654,928],{"class":915},[228,3656,3430],{"class":252},[228,3658,928],{"class":915},[228,3660,561],{"class":252},[228,3662,916],{"class":915},[228,3664,3439],{"class":252},[228,3666,928],{"class":915},[228,3668,3669],{"class":252},"Silver",[228,3671,928],{"class":915},[228,3673,103],{"class":252},[228,3675,928],{"class":915},[228,3677,3678],{"class":252},"Yellow",[228,3680,928],{"class":915},[228,3682,103],{"class":252},[228,3684,928],{"class":915},[228,3686,3462],{"class":252},[228,3688,928],{"class":915},[228,3690,3467],{"class":252},[228,3692,916],{"class":915},[228,3694,3695],{"class":252},"    }",[228,3697,916],{"class":915},[228,3699,3378],{"class":252},[228,3701,922],{"class":915},[228,3703,3704],{"class":252},"const operations = [",[228,3706,916],{"class":915},[228,3708,3388],{"class":252},[228,3710,916],{"class":915},[228,3712,3713],{"class":252},"        operationId: ",[228,3715,928],{"class":915},[228,3717,3718],{"class":252},"OP_WHEEL_FL",[228,3720,928],{"class":915},[228,3722,258],{"class":252},[228,3724,916],{"class":915},[228,3726,3727],{"class":252},"        name: ",[228,3729,928],{"class":915},[228,3731,3732],{"class":252},"Install Front Left Wheel",[228,3734,928],{"class":915},[228,3736,258],{"class":252},[228,3738,916],{"class":915},[228,3740,3741],{"class":252},"        instructionSetId: ",[228,3743,928],{"class":915},[228,3745,3746],{"class":252},"INS001",[228,3748,928],{"class":915},[228,3750,258],{"class":252},[228,3752,916],{"class":915},[228,3754,3755],{"class":252},"        estimatedCycleTime: 45",[228,3757,916],{"class":915},[228,3759,3472],{"class":252},[228,3761,916],{"class":915},[228,3763,3388],{"class":252},[228,3765,916],{"class":915},[228,3767,3713],{"class":252},[228,3769,928],{"class":915},[228,3771,3772],{"class":252},"OP_WHEEL_FR",[228,3774,928],{"class":915},[228,3776,258],{"class":252},[228,3778,916],{"class":915},[228,3780,3727],{"class":252},[228,3782,928],{"class":915},[228,3784,3785],{"class":252},"Install Front Right Wheel",[228,3787,928],{"class":915},[228,3789,258],{"class":252},[228,3791,916],{"class":915},[228,3793,3741],{"class":252},[228,3795,928],{"class":915},[228,3797,3798],{"class":252},"INS002",[228,3800,928],{"class":915},[228,3802,258],{"class":252},[228,3804,916],{"class":915},[228,3806,3755],{"class":252},[228,3808,916],{"class":915},[228,3810,3695],{"class":252},[228,3812,916],{"class":915},[228,3814,3378],{"class":252},[228,3816,922],{"class":915},[228,3818,3819],{"class":252},"const priorities = [",[228,3821,928],{"class":915},[228,3823,3824],{"class":252},"Critical",[228,3826,928],{"class":915},[228,3828,103],{"class":252},[228,3830,928],{"class":915},[228,3832,3833],{"class":252},"High",[228,3835,928],{"class":915},[228,3837,103],{"class":252},[228,3839,928],{"class":915},[228,3841,3842],{"class":252},"Normal",[228,3844,928],{"class":915},[228,3846,103],{"class":252},[228,3848,928],{"class":915},[228,3850,3851],{"class":252},"Low",[228,3853,928],{"class":915},[228,3855,3378],{"class":252},[228,3857,916],{"class":915},[228,3859,3860],{"class":252},"const statuses = [",[228,3862,928],{"class":915},[228,3864,3865],{"class":252},"Ready",[228,3867,928],{"class":915},[228,3869,103],{"class":252},[228,3871,928],{"class":915},[228,3873,3874],{"class":252},"Waiting",[228,3876,928],{"class":915},[228,3878,103],{"class":252},[228,3880,928],{"class":915},[228,3882,3883],{"class":252},"Queued",[228,3885,928],{"class":915},[228,3887,3378],{"class":252},[228,3889,922],{"class":915},[228,3891,3892],{"class":252},"function random(arr) {",[228,3894,916],{"class":915},[228,3896,3897],{"class":252},"    return arr[Math.floor(Math.random() * arr.length)];",[228,3899,916],{"class":915},[228,3901,1575],{"class":252},[228,3903,922],{"class":915},[228,3905,3906],{"class":252},"\u002F\u002F Read existing work orders",[228,3908,916],{"class":915},[228,3910,3911],{"class":252},"const existingWorkOrders = global.get(",[228,3913,928],{"class":915},[228,3915,931],{"class":252},[228,3917,928],{"class":915},[228,3919,103],{"class":252},[228,3921,928],{"class":915},[228,3923,940],{"class":252},[228,3925,928],{"class":915},[228,3927,945],{"class":252},[228,3929,922],{"class":915},[228,3931,3932],{"class":252},"\u002F\u002F Start IDs after the existing ones",[228,3934,916],{"class":915},[228,3936,3937],{"class":252},"let nextId = 10245 + existingWorkOrders.length;",[228,3939,922],{"class":915},[228,3941,3942],{"class":252},"\u002F\u002F Generate 20 new work orders",[228,3944,916],{"class":915},[228,3946,3947],{"class":252},"for (let i = 0; i \u003C 20; i++) {",[228,3949,916],{"class":915},[228,3951,3952],{"class":252},"    const vehicle = random(vehicles);",[228,3954,916],{"class":915},[228,3956,3957],{"class":252},"    const operation = random(operations);",[228,3959,922],{"class":915},[228,3961,3962],{"class":252},"    existingWorkOrders.push({",[228,3964,916],{"class":915},[228,3966,3967],{"class":252},"        workOrderId: `WO-${nextId++}`,",[228,3969,916],{"class":915},[228,3971,3972],{"class":252},"        stationId: ",[228,3974,928],{"class":915},[228,3976,3977],{"class":252},"ST12",[228,3979,928],{"class":915},[228,3981,258],{"class":252},[228,3983,916],{"class":915},[228,3985,3986],{"class":252},"        status: random(statuses),",[228,3988,916],{"class":915},[228,3990,3991],{"class":252},"        priority: random(priorities),",[228,3993,916],{"class":915},[228,3995,3996],{"class":252},"        assignedTo: random(operators),",[228,3998,916],{"class":915},[228,4000,4001],{"class":252},"        vehicle: {",[228,4003,916],{"class":915},[228,4005,4006],{"class":252},"            vin: `MH01AB${1234567890 + existingWorkOrders.length}`,",[228,4008,916],{"class":915},[228,4010,4011],{"class":252},"            model: vehicle.model,",[228,4013,916],{"class":915},[228,4015,4016],{"class":252},"            variant: random(vehicle.variants),",[228,4018,916],{"class":915},[228,4020,4021],{"class":252},"            color: random(vehicle.colors)",[228,4023,916],{"class":915},[228,4025,4026],{"class":252},"        },",[228,4028,916],{"class":915},[228,4030,4031],{"class":252},"        operation: {",[228,4033,916],{"class":915},[228,4035,4036],{"class":252},"            operationId: operation.operationId,",[228,4038,916],{"class":915},[228,4040,4041],{"class":252},"            name: operation.name,",[228,4043,916],{"class":915},[228,4045,4046],{"class":252},"            estimatedCycleTime: operation.estimatedCycleTime,",[228,4048,916],{"class":915},[228,4050,4051],{"class":252},"            instructionSetId: operation.instructionSetId",[228,4053,916],{"class":915},[228,4055,4056],{"class":252},"        }",[228,4058,916],{"class":915},[228,4060,4061],{"class":252},"    });",[228,4063,916],{"class":915},[228,4065,1575],{"class":252},[228,4067,922],{"class":915},[228,4069,4070],{"class":252},"\u002F\u002F Save updated list",[228,4072,916],{"class":915},[228,4074,4075],{"class":252},"global.set(",[228,4077,928],{"class":915},[228,4079,931],{"class":252},[228,4081,928],{"class":915},[228,4083,4084],{"class":252},", existingWorkOrders, ",[228,4086,928],{"class":915},[228,4088,940],{"class":252},[228,4090,928],{"class":915},[228,4092,990],{"class":252},[228,4094,922],{"class":915},[228,4096,4097],{"class":252},"msg.payload = existingWorkOrders;",[228,4099,916],{"class":915},[228,4101,1000],{"class":252},[228,4103,238],{"class":234},[228,4105,258],{"class":234},[228,4107,238],{"class":234},[228,4109,1009],{"class":241},[228,4111,238],{"class":234},[228,4113,247],{"class":234},[228,4115,337],{"class":573},[228,4117,258],{"class":234},[228,4119,238],{"class":234},[228,4121,1022],{"class":241},[228,4123,238],{"class":234},[228,4125,247],{"class":234},[228,4127,1042],{"class":573},[228,4129,258],{"class":234},[228,4131,238],{"class":234},[228,4133,1035],{"class":241},[228,4135,238],{"class":234},[228,4137,247],{"class":234},[228,4139,1042],{"class":573},[228,4141,258],{"class":234},[228,4143,238],{"class":234},[228,4145,1049],{"class":241},[228,4147,238],{"class":234},[228,4149,247],{"class":234},[228,4151,770],{"class":234},[228,4153,258],{"class":234},[228,4155,238],{"class":234},[228,4157,1062],{"class":241},[228,4159,238],{"class":234},[228,4161,247],{"class":234},[228,4163,770],{"class":234},[228,4165,258],{"class":234},[228,4167,238],{"class":234},[228,4169,1075],{"class":241},[228,4171,238],{"class":234},[228,4173,1080],{"class":234},[228,4175,238],{"class":234},[228,4177,566],{"class":241},[228,4179,238],{"class":234},[228,4181,247],{"class":234},[228,4183,4184],{"class":573},"440",[228,4186,258],{"class":234},[228,4188,238],{"class":234},[228,4190,581],{"class":241},[228,4192,238],{"class":234},[228,4194,247],{"class":234},[228,4196,4197],{"class":573},"100",[228,4199,258],{"class":234},[228,4201,238],{"class":234},[228,4203,802],{"class":241},[228,4205,238],{"class":234},[228,4207,4208],{"class":234},":[[]]},{",[228,4210,238],{"class":234},[228,4212,242],{"class":241},[228,4214,238],{"class":234},[228,4216,247],{"class":234},[228,4218,238],{"class":234},[228,4220,556],{"class":252},[228,4222,238],{"class":234},[228,4224,258],{"class":234},[228,4226,238],{"class":234},[228,4228,263],{"class":241},[228,4230,238],{"class":234},[228,4232,247],{"class":234},[228,4234,238],{"class":234},[228,4236,118],{"class":252},[228,4238,238],{"class":234},[228,4240,258],{"class":234},[228,4242,238],{"class":234},[228,4244,281],{"class":241},[228,4246,238],{"class":234},[228,4248,247],{"class":234},[228,4250,238],{"class":234},[228,4252,290],{"class":252},[228,4254,238],{"class":234},[228,4256,258],{"class":234},[228,4258,238],{"class":234},[228,4260,673],{"class":241},[228,4262,238],{"class":234},[228,4264,247],{"class":234},[228,4266,238],{"class":234},[228,4268,253],{"class":252},[228,4270,238],{"class":234},[228,4272,258],{"class":234},[228,4274,238],{"class":234},[228,4276,4277],{"class":241},"ui",[228,4279,238],{"class":234},[228,4281,247],{"class":234},[228,4283,238],{"class":234},[228,4285,4286],{"class":252},"37b66bc5b4d6d3d3",[228,4288,238],{"class":234},[228,4290,258],{"class":234},[228,4292,238],{"class":234},[228,4294,690],{"class":241},[228,4296,238],{"class":234},[228,4298,247],{"class":234},[228,4300,770],{"class":234},[228,4302,258],{"class":234},[228,4304,238],{"class":234},[228,4306,566],{"class":241},[228,4308,238],{"class":234},[228,4310,247],{"class":234},[228,4312,783],{"class":573},[228,4314,258],{"class":234},[228,4316,238],{"class":234},[228,4318,581],{"class":241},[228,4320,238],{"class":234},[228,4322,247],{"class":234},[228,4324,4197],{"class":573},[228,4326,258],{"class":234},[228,4328,238],{"class":234},[228,4330,802],{"class":241},[228,4332,238],{"class":234},[228,4334,807],{"class":234},[228,4336,238],{"class":234},[228,4338,547],{"class":252},[228,4340,238],{"class":234},[228,4342,816],{"class":234},[228,4344,238],{"class":234},[228,4346,242],{"class":241},[228,4348,238],{"class":234},[228,4350,247],{"class":234},[228,4352,238],{"class":234},[228,4354,4286],{"class":252},[228,4356,238],{"class":234},[228,4358,258],{"class":234},[228,4360,238],{"class":234},[228,4362,263],{"class":241},[228,4364,238],{"class":234},[228,4366,247],{"class":234},[228,4368,238],{"class":234},[228,4370,4371],{"class":252},"ui-base",[228,4373,238],{"class":234},[228,4375,258],{"class":234},[228,4377,238],{"class":234},[228,4379,690],{"class":241},[228,4381,238],{"class":234},[228,4383,247],{"class":234},[228,4385,238],{"class":234},[228,4387,4388],{"class":252},"My Dashboard",[228,4390,238],{"class":234},[228,4392,258],{"class":234},[228,4394,238],{"class":234},[228,4396,4397],{"class":241},"path",[228,4399,238],{"class":234},[228,4401,247],{"class":234},[228,4403,238],{"class":234},[228,4405,4406],{"class":252},"\u002Fdashboard",[228,4408,238],{"class":234},[228,4410,258],{"class":234},[228,4412,238],{"class":234},[228,4414,4415],{"class":241},"appIcon",[228,4417,238],{"class":234},[228,4419,247],{"class":234},[228,4421,770],{"class":234},[228,4423,258],{"class":234},[228,4425,238],{"class":234},[228,4427,4428],{"class":241},"includeClientData",[228,4430,238],{"class":234},[228,4432,387],{"class":234},[228,4434,238],{"class":234},[228,4436,4437],{"class":241},"acceptsClientConfig",[228,4439,238],{"class":234},[228,4441,434],{"class":234},[228,4443,238],{"class":234},[228,4445,4446],{"class":252},"ui-notification",[228,4448,238],{"class":234},[228,4450,258],{"class":234},[228,4452,238],{"class":234},[228,4454,115],{"class":252},[228,4456,238],{"class":234},[228,4458,258],{"class":234},[228,4460,238],{"class":234},[228,4462,102],{"class":252},[228,4464,238],{"class":234},[228,4466,258],{"class":234},[228,4468,238],{"class":234},[228,4470,109],{"class":252},[228,4472,238],{"class":234},[228,4474,258],{"class":234},[228,4476,238],{"class":234},[228,4478,106],{"class":252},[228,4480,238],{"class":234},[228,4482,258],{"class":234},[228,4484,238],{"class":234},[228,4486,4487],{"class":252},"ui-text-input",[228,4489,238],{"class":234},[228,4491,258],{"class":234},[228,4493,238],{"class":234},[228,4495,4496],{"class":252},"ui-number-input",[228,4498,238],{"class":234},[228,4500,258],{"class":234},[228,4502,238],{"class":234},[228,4504,4505],{"class":252},"ui-file-input",[228,4507,238],{"class":234},[228,4509,258],{"class":234},[228,4511,238],{"class":234},[228,4513,112],{"class":252},[228,4515,238],{"class":234},[228,4517,258],{"class":234},[228,4519,238],{"class":234},[228,4521,4522],{"class":252},"ui-button-group",[228,4524,238],{"class":234},[228,4526,258],{"class":234},[228,4528,238],{"class":234},[228,4530,4531],{"class":252},"ui-dropdown",[228,4533,238],{"class":234},[228,4535,258],{"class":234},[228,4537,238],{"class":234},[228,4539,4540],{"class":252},"ui-radio-group",[228,4542,238],{"class":234},[228,4544,258],{"class":234},[228,4546,238],{"class":234},[228,4548,4549],{"class":252},"ui-slider",[228,4551,238],{"class":234},[228,4553,258],{"class":234},[228,4555,238],{"class":234},[228,4557,121],{"class":252},[228,4559,238],{"class":234},[228,4561,258],{"class":234},[228,4563,238],{"class":234},[228,4565,4566],{"class":252},"ui-switch",[228,4568,238],{"class":234},[228,4570,258],{"class":234},[228,4572,238],{"class":234},[228,4574,4575],{"class":252},"ui-chart",[228,4577,238],{"class":234},[228,4579,258],{"class":234},[228,4581,238],{"class":234},[228,4583,4584],{"class":252},"ui-audio",[228,4586,238],{"class":234},[228,4588,258],{"class":234},[228,4590,238],{"class":234},[228,4592,4593],{"class":252},"ui-markdown",[228,4595,238],{"class":234},[228,4597,258],{"class":234},[228,4599,238],{"class":234},[228,4601,4602],{"class":252},"ui-progress",[228,4604,238],{"class":234},[228,4606,258],{"class":234},[228,4608,238],{"class":234},[228,4610,4611],{"class":252},"ui-gauge",[228,4613,238],{"class":234},[228,4615,561],{"class":234},[228,4617,238],{"class":234},[228,4619,4620],{"class":241},"showPathInSidebar",[228,4622,238],{"class":234},[228,4624,749],{"class":234},[228,4626,238],{"class":234},[228,4628,4629],{"class":241},"headerContent",[228,4631,238],{"class":234},[228,4633,247],{"class":234},[228,4635,238],{"class":234},[228,4637,4638],{"class":252},"page",[228,4640,238],{"class":234},[228,4642,258],{"class":234},[228,4644,238],{"class":234},[228,4646,4647],{"class":241},"navigationStyle",[228,4649,238],{"class":234},[228,4651,247],{"class":234},[228,4653,238],{"class":234},[228,4655,4656],{"class":252},"default",[228,4658,238],{"class":234},[228,4660,258],{"class":234},[228,4662,238],{"class":234},[228,4664,4665],{"class":241},"titleBarStyle",[228,4667,238],{"class":234},[228,4669,247],{"class":234},[228,4671,238],{"class":234},[228,4673,4656],{"class":252},[228,4675,238],{"class":234},[228,4677,258],{"class":234},[228,4679,238],{"class":234},[228,4681,4682],{"class":241},"showReconnectNotification",[228,4684,238],{"class":234},[228,4686,387],{"class":234},[228,4688,238],{"class":234},[228,4690,4691],{"class":241},"notificationDisplayTime",[228,4693,238],{"class":234},[228,4695,247],{"class":234},[228,4697,337],{"class":573},[228,4699,258],{"class":234},[228,4701,238],{"class":234},[228,4703,4704],{"class":241},"showDisconnectNotification",[228,4706,238],{"class":234},[228,4708,387],{"class":234},[228,4710,238],{"class":234},[228,4712,4713],{"class":241},"allowInstall",[228,4715,238],{"class":234},[228,4717,4718],{"class":234},":false},{",[228,4720,238],{"class":234},[228,4722,242],{"class":241},[228,4724,238],{"class":234},[228,4726,247],{"class":234},[228,4728,238],{"class":234},[228,4730,4731],{"class":252},"4b583d9b76bf5cf2",[228,4733,238],{"class":234},[228,4735,258],{"class":234},[228,4737,238],{"class":234},[228,4739,263],{"class":241},[228,4741,238],{"class":234},[228,4743,247],{"class":234},[228,4745,238],{"class":234},[228,4747,4748],{"class":252},"global-config",[228,4750,238],{"class":234},[228,4752,258],{"class":234},[228,4754,238],{"class":234},[228,4756,4757],{"class":241},"env",[228,4759,238],{"class":234},[228,4761,1080],{"class":234},[228,4763,238],{"class":234},[228,4765,4766],{"class":241},"modules",[228,4768,238],{"class":234},[228,4770,304],{"class":234},[228,4772,238],{"class":234},[228,4774,98],{"class":309},[228,4776,238],{"class":234},[228,4778,247],{"class":234},[228,4780,238],{"class":234},[228,4782,4783],{"class":252},"1.30.2",[228,4785,238],{"class":234},[228,4787,4788],{"class":234},"}}]\n",[12,4790,4791,4792,4795],{},"The flow initializes a set of sample work orders and exposes REST APIs that the Digital Work Instructions application uses throughout this tutorial. The ",[96,4793,4794],{},"GET \u002Fworkorders"," endpoint returns the active work orders, while the other endpoints simulate completing a work order, reporting defects, and retrieving production statistics. This lets you build and test the application without a live ERP or MES. Later, you can replace these endpoints with calls to your production system while keeping the rest of the application unchanged.",[59,4797,4799],{"id":4798},"setting-up-the-dashboard-layout","Setting Up the Dashboard Layout",[12,4801,4802,4803,4808,4809,4812,4813,4816,4817,4820],{},"The application consists of three pages. Most widgets are placed inside named groups, while a few are scoped differently. See the ",[53,4804,4807],{"href":4805,"rel":4806},"https:\u002F\u002Fdashboard.flowfuse.com\u002Fgetting-started",[80],"Dashboard layout docs"," if you're new to how pages, groups, and bases relate. The app bar greeting is ",[45,4810,4811],{},"UI-scoped",", and the work instruction widget is ",[45,4814,4815],{},"page-scoped",", allowing it to fill the entire ",[45,4818,4819],{},"Instructions"," page without requiring a group. Before adding any widgets, create the dashboard structure by setting up the pages and groups.",[147,4822,4823,4868,4871,4903],{},[70,4824,4825,4826,4829,4830],{},"Create three ",[45,4827,4828],{},"ui-page"," nodes. The Dashboard automatically creates a base dashboard the first time you add a Dashboard node to the canvas.",[67,4831,4832,4846,4857],{},[70,4833,4834,4837,4838,4841,4842,4845],{},[45,4835,4836],{},"Home"," (path: ",[96,4839,4840],{},"\u002Fhome",") – The operator's landing page after login. Set the layout to ",[45,4843,4844],{},"Notebook"," to match the demo application.",[70,4847,4848,4837,4850,4853,4854,57],{},[45,4849,4819],{},[96,4851,4852],{},"\u002Finstructions",") – Displays the step-by-step work instructions. Set the layout to ",[45,4855,4856],{},"Grid",[70,4858,4859,4837,4862,4865,4866,57],{},[45,4860,4861],{},"Report Issue",[96,4863,4864],{},"\u002Freport-issue",") – Contains the defect reporting form. Set the layout to ",[45,4867,4856],{},[70,4869,4870],{},"Configure the theme for each page as desired.",[70,4872,4873,4874,4876,4877,4880,4881],{},"On the ",[45,4875,4836],{}," page, create four ",[45,4878,4879],{},"ui-group"," nodes:",[67,4882,4883,4888,4893,4898],{},[70,4884,4885],{},[45,4886,4887],{},"Current Station",[70,4889,4890],{},[45,4891,4892],{},"Stats",[70,4894,4895],{},[45,4896,4897],{},"Current Work Order",[70,4899,4900],{},[45,4901,4902],{},"Up Next",[70,4904,4873,4905,4907,4908,4910,4911,4913],{},[45,4906,4861],{}," page, create a single ",[45,4909,4879],{}," named ",[45,4912,4861],{},". This group will contain the issue reporting form and its action buttons.",[12,4915,4916,4917,4919,4920,4922],{},"The ",[45,4918,4819],{}," page does not require a ",[45,4921,4879],{}," because the work instruction widget is page-scoped and automatically occupies the full page.",[12,4924,4925],{},"With this layout in place, each widget added in the following sections can be assigned to the appropriate group, or directly to the page when required.",[59,4927,4929],{"id":4928},"enabling-flowfuse-user-authentication","Enabling FlowFuse User Authentication",[12,4931,4932],{},"Everything starts with a login. Without authentication, the dashboard cannot identify who is using it, so every visitor sees the same experience.",[40,4934,4935],{},[12,4936,4937,4939],{},[45,4938,47],{}," FlowFuse User Authentication grants dashboard access to members of the same team as the instance. Operators you want to sign in must belong to that team, otherwise they won't be able to reach the dashboard. If you need people outside the team to use the application, you'll need to add them to the team.",[147,4941,4942,4948,4955],{},[70,4943,4944,4945,57],{},"Open your FlowFuse instance ",[45,4946,4947],{},"Settings",[70,4949,4950,4951,4954],{},"Select the ",[45,4952,4953],{},"Security"," tab.",[70,4956,4957,4958,57],{},"Enable ",[45,4959,4960],{},"FlowFuse User Authentication",[12,4962,4963,4967],{},[21,4964],{"alt":4965,"src":4966},"Screenshot: the Security tab in instance settings with FlowFuse User Authentication enabled","\u002Fblog\u002F2024\u002F04\u002Fimages\u002Fdisplaying-logged-in-user-flowfuse-instance-setting.png",[26,4968,4969],{},"Enable FlowFuse User Authentication in the instance Security settings. You'll also create a Personal Access Token here for authenticating API requests later in the tutorial.",[12,4971,4972],{},"The first time someone opens the dashboard, they will be prompted to sign in using their FlowFuse username and password. Once authenticated, the dashboard can personalize the experience for each operator throughout the rest of this tutorial.",[12,4974,4975],{},"Because this tutorial also interacts with the FlowFuse API, you'll need to create a Personal Access Token:",[147,4977,4979,4988,4991],{"start":4978},4,[70,4980,4981,4982,4984,4985,57],{},"In the same ",[45,4983,4953],{}," tab, click ",[45,4986,4987],{},"Add Token",[70,4989,4990],{},"Enter a name for the token and choose an expiration date.",[70,4992,4993,4994,4997],{},"Click ",[45,4995,4996],{},"Create",", then copy the generated token and save it somewhere secure. You will need it later in the tutorial.",[40,4999,5000],{},[12,5001,5002,5005,5006,5009,5010,5012],{},[45,5003,5004],{},"Security note:"," Every ",[96,5007,5008],{},"http request"," node in this tutorial authenticates with this token, and for the sake of a self-contained tutorial we reference it as a plain Bearer token on each node. Don't leave it hardcoded that way in a real deployment. Store it as an environment variable on your FlowFuse instance and reference that variable from each ",[96,5011,5008],{}," node's auth config instead, so the raw token never sits in exported flow JSON or version control.",[59,5014,5016],{"id":5015},"installing-the-user-addon","Installing the User Addon",[12,5018,5019],{},"Authentication identifies the user, but your flows also need access to that information. The FlowFuse User Addon attaches the authenticated user's details to every Dashboard message.",[147,5021,5022,5028,5034,5040],{},[70,5023,5024,5025,57],{},"Open ",[45,5026,5027],{},"Manage Palette",[70,5029,5030,5031,4954],{},"Go to the ",[45,5032,5033],{},"Install",[70,5035,5036,5037,57],{},"Search for ",[96,5038,5039],{},"@flowfuse\u002Fnode-red-dashboard-2-user-addon",[70,5041,4993,5042,57],{},[45,5043,5033],{},[12,5045,5046,5047,5049],{},"After installation, every Dashboard message includes a ",[96,5048,197],{}," object:",[219,5051,5053],{"className":221,"code":5052,"language":223,"meta":224,"style":224},"{\n  \"userId\": \"\",\n  \"username\": \"\",\n  \"email\": \"\",\n  \"name\": \"\",\n  \"image\": \"\"\n}\n",[96,5054,5055,5060,5079,5095,5110,5125,5140],{"__ignoreMap":224},[228,5056,5057],{"class":230,"line":231},[228,5058,5059],{"class":234},"{\n",[228,5061,5063,5066,5069,5071,5073,5076],{"class":230,"line":5062},2,[228,5064,5065],{"class":234},"  \"",[228,5067,5068],{"class":241},"userId",[228,5070,238],{"class":234},[228,5072,247],{"class":234},[228,5074,5075],{"class":234}," \"\"",[228,5077,5078],{"class":234},",\n",[228,5080,5082,5084,5087,5089,5091,5093],{"class":230,"line":5081},3,[228,5083,5065],{"class":234},[228,5085,5086],{"class":241},"username",[228,5088,238],{"class":234},[228,5090,247],{"class":234},[228,5092,5075],{"class":234},[228,5094,5078],{"class":234},[228,5096,5097,5099,5102,5104,5106,5108],{"class":230,"line":4978},[228,5098,5065],{"class":234},[228,5100,5101],{"class":241},"email",[228,5103,238],{"class":234},[228,5105,247],{"class":234},[228,5107,5075],{"class":234},[228,5109,5078],{"class":234},[228,5111,5113,5115,5117,5119,5121,5123],{"class":230,"line":5112},5,[228,5114,5065],{"class":234},[228,5116,690],{"class":241},[228,5118,238],{"class":234},[228,5120,247],{"class":234},[228,5122,5075],{"class":234},[228,5124,5078],{"class":234},[228,5126,5128,5130,5133,5135,5137],{"class":230,"line":5127},6,[228,5129,5065],{"class":234},[228,5131,5132],{"class":241},"image",[228,5134,238],{"class":234},[228,5136,247],{"class":234},[228,5138,5139],{"class":234}," \"\"\n",[228,5141,5143],{"class":230,"line":5142},7,[228,5144,5145],{"class":234},"}\n",[12,5147,5148,5149,5151,5152,5155,5156,5159],{},"The same information is available in a ",[45,5150,102],{}," using ",[96,5153,5154],{},"setup.socketio.auth.user"," (or ",[96,5157,5158],{},"this.setup.socketio.auth.user"," in the script).",[147,5161,5162,5173],{},[70,5163,5164,5165,5168,5169,5172],{},"In the ",[45,5166,5167],{},"FF Auth"," sidebar tab, ensure ",[45,5170,5171],{},"Include Client Data"," is enabled.",[70,5174,5175,5176,5179,5180,103,5182,103,5184,103,5186,5188,5189,5191],{},"Also enable ",[45,5177,5178],{},"Accept Client Data"," for ",[45,5181,102],{},[45,5183,115],{},[45,5185,118],{},[45,5187,109],{},", and ",[45,5190,106],{}," so each browser session is handled independently and operators don't affect each other's dashboard.",[12,5193,5194,5198],{},[21,5195],{"alt":5196,"src":5197},"Screenshot: FF Auth settings showing Include Client Data and Accept Client Data enabled for Dashboard nodes","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fclient-data-tab-dashboard.png",[26,5199,4957,5200,5202,5203,5205],{},[45,5201,5171],{}," and ",[45,5204,5178],{}," to make Dashboard interactions user-specific.",[12,5207,5208,5209,5211,5212,5214,5215,5217],{},"This is the setting that matters most in this tutorial, and it's worth being explicit about why. With ",[45,5210,5178],{}," enabled, every message a widget sends carries ",[96,5213,197],{}," for the session that sent it. That's a per-session identity attached directly to the message, as opposed to a single shared variable that every session would otherwise read and overwrite. We'll use ",[96,5216,197],{}," as the source of truth for \"who is acting right now\" in every function node from here on, rather than a global variable.",[59,5219,5221],{"id":5220},"greeting-the-logged-in-operator","Greeting the Logged-In Operator",[12,5223,5224,5225,5230],{},"The first, simplest payoff: show the operator their name and avatar in the app bar, so it's obvious who's signed in at this station. This uses Vue's ",[53,5226,5229],{"href":5227,"rel":5228},"https:\u002F\u002Fdashboard.flowfuse.com\u002Fnodes\u002Fwidgets\u002Fui-template.html#teleports",[80],"Teleport"," to render into the header's action area from a single widget that lives on every page, so you don't have to add it per page.",[147,5232,5233,5239,5246],{},[70,5234,5235,5236,5238],{},"Add a ",[96,5237,102],{}," node and name it \"App Bar User Info\".",[70,5240,5241,5242,5245],{},"Set its type to ",[45,5243,5244],{},"Widget (UI-Scoped)"," and select your \"My Dashboard\" ui-base. UI-scoped widgets render on every page automatically, so one widget covers the whole app, no group needed.",[70,5247,5248],{},"Paste in the snippet below:",[219,5250,5254],{"className":5251,"code":5252,"language":5253,"meta":224,"style":224},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ctemplate>\n    \u003C!-- Teleport into #app-bar-actions, the action bar's right-hand corner -->\n    \u003CTeleport v-if=\"loaded\" to=\"#app-bar-actions\">\n        \u003Cdiv class=\"user-info\">\n            \u003Cimg :src=\"setup.socketio.auth.user.image\" \u002F>\n            \u003Cspan>Hi, {{ setup.socketio.auth.user.name }}\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n    \u003C\u002FTeleport>\n\u003C\u002Ftemplate>\n\n\u003Cscript>\nexport default {\n    data() {\n        return { loaded: false };\n    },\n    mounted() {\n        \u002F\u002F Wait for mount so #app-bar-actions exists before teleporting into it.\n        this.loaded = true;\n    }\n}\n\u003C\u002Fscript>\n\n\u003Cstyle>\n.user-info { display: flex; align-items: center; gap: 8px; }\n.user-info img { width: 24px; height: 24px; }\n\u003C\u002Fstyle>\n","html",[96,5255,5256,5268,5274,5308,5330,5352,5371,5380,5390,5399,5406,5416,5429,5440,5461,5467,5477,5483,5500,5506,5511,5520,5525,5534,5577,5610],{"__ignoreMap":224},[228,5257,5258,5261,5265],{"class":230,"line":231},[228,5259,5260],{"class":234},"\u003C",[228,5262,5264],{"class":5263},"swJcz","template",[228,5266,5267],{"class":234},">\n",[228,5269,5270],{"class":230,"line":5062},[228,5271,5273],{"class":5272},"sHwdD","    \u003C!-- Teleport into #app-bar-actions, the action bar's right-hand corner -->\n",[228,5275,5276,5279,5281,5284,5287,5289,5292,5294,5297,5299,5301,5304,5306],{"class":230,"line":5081},[228,5277,5278],{"class":234},"    \u003C",[228,5280,5229],{"class":5263},[228,5282,5283],{"class":241}," v-if",[228,5285,5286],{"class":234},"=",[228,5288,238],{"class":234},[228,5290,5291],{"class":252},"loaded",[228,5293,238],{"class":234},[228,5295,5296],{"class":241}," to",[228,5298,5286],{"class":234},[228,5300,238],{"class":234},[228,5302,5303],{"class":252},"#app-bar-actions",[228,5305,238],{"class":234},[228,5307,5267],{"class":234},[228,5309,5310,5313,5316,5319,5321,5323,5326,5328],{"class":230,"line":4978},[228,5311,5312],{"class":234},"        \u003C",[228,5314,5315],{"class":5263},"div",[228,5317,5318],{"class":241}," class",[228,5320,5286],{"class":234},[228,5322,238],{"class":234},[228,5324,5325],{"class":252},"user-info",[228,5327,238],{"class":234},[228,5329,5267],{"class":234},[228,5331,5332,5335,5337,5340,5342,5344,5347,5349],{"class":230,"line":5112},[228,5333,5334],{"class":234},"            \u003C",[228,5336,21],{"class":5263},[228,5338,5339],{"class":241}," :src",[228,5341,5286],{"class":234},[228,5343,238],{"class":234},[228,5345,5346],{"class":252},"setup.socketio.auth.user.image",[228,5348,238],{"class":234},[228,5350,5351],{"class":234}," \u002F>\n",[228,5353,5354,5356,5358,5361,5364,5367,5369],{"class":230,"line":5127},[228,5355,5334],{"class":234},[228,5357,228],{"class":5263},[228,5359,5360],{"class":234},">",[228,5362,5363],{"class":915},"Hi, {{ setup.socketio.auth.user.name }}",[228,5365,5366],{"class":234},"\u003C\u002F",[228,5368,228],{"class":5263},[228,5370,5267],{"class":234},[228,5372,5373,5376,5378],{"class":230,"line":5142},[228,5374,5375],{"class":234},"        \u003C\u002F",[228,5377,5315],{"class":5263},[228,5379,5267],{"class":234},[228,5381,5383,5386,5388],{"class":230,"line":5382},8,[228,5384,5385],{"class":234},"    \u003C\u002F",[228,5387,5229],{"class":5263},[228,5389,5267],{"class":234},[228,5391,5393,5395,5397],{"class":230,"line":5392},9,[228,5394,5366],{"class":234},[228,5396,5264],{"class":5263},[228,5398,5267],{"class":234},[228,5400,5402],{"class":230,"line":5401},10,[228,5403,5405],{"emptyLinePlaceholder":5404},true,"\n",[228,5407,5409,5411,5414],{"class":230,"line":5408},11,[228,5410,5260],{"class":234},[228,5412,5413],{"class":5263},"script",[228,5415,5267],{"class":234},[228,5417,5419,5423,5426],{"class":230,"line":5418},12,[228,5420,5422],{"class":5421},"s7zQu","export",[228,5424,5425],{"class":5421}," default",[228,5427,5428],{"class":234}," {\n",[228,5430,5432,5435,5438],{"class":230,"line":5431},13,[228,5433,5434],{"class":5263},"    data",[228,5436,5437],{"class":234},"()",[228,5439,5428],{"class":234},[228,5441,5443,5446,5449,5452,5454,5458],{"class":230,"line":5442},14,[228,5444,5445],{"class":5421},"        return",[228,5447,5448],{"class":234}," {",[228,5450,5451],{"class":5263}," loaded",[228,5453,247],{"class":234},[228,5455,5457],{"class":5456},"sfNiH"," false",[228,5459,5460],{"class":234}," };\n",[228,5462,5464],{"class":230,"line":5463},15,[228,5465,5466],{"class":234},"    },\n",[228,5468,5470,5473,5475],{"class":230,"line":5469},16,[228,5471,5472],{"class":5263},"    mounted",[228,5474,5437],{"class":234},[228,5476,5428],{"class":234},[228,5478,5480],{"class":230,"line":5479},17,[228,5481,5482],{"class":5272},"        \u002F\u002F Wait for mount so #app-bar-actions exists before teleporting into it.\n",[228,5484,5486,5489,5491,5494,5497],{"class":230,"line":5485},18,[228,5487,5488],{"class":234},"        this.",[228,5490,5291],{"class":915},[228,5492,5493],{"class":234}," =",[228,5495,5496],{"class":5456}," true",[228,5498,5499],{"class":234},";\n",[228,5501,5503],{"class":230,"line":5502},19,[228,5504,5505],{"class":234},"    }\n",[228,5507,5509],{"class":230,"line":5508},20,[228,5510,5145],{"class":234},[228,5512,5514,5516,5518],{"class":230,"line":5513},21,[228,5515,5366],{"class":234},[228,5517,5413],{"class":5263},[228,5519,5267],{"class":234},[228,5521,5523],{"class":230,"line":5522},22,[228,5524,5405],{"emptyLinePlaceholder":5404},[228,5526,5528,5530,5532],{"class":230,"line":5527},23,[228,5529,5260],{"class":234},[228,5531,299],{"class":5263},[228,5533,5267],{"class":234},[228,5535,5537,5539,5541,5543,5547,5549,5552,5554,5557,5559,5562,5564,5567,5569,5572,5574],{"class":230,"line":5536},24,[228,5538,57],{"class":234},[228,5540,5325],{"class":309},[228,5542,5448],{"class":234},[228,5544,5546],{"class":5545},"sqsOY"," display",[228,5548,247],{"class":234},[228,5550,5551],{"class":915}," flex",[228,5553,3317],{"class":234},[228,5555,5556],{"class":5545}," align-items",[228,5558,247],{"class":234},[228,5560,5561],{"class":915}," center",[228,5563,3317],{"class":234},[228,5565,5566],{"class":5545}," gap",[228,5568,247],{"class":234},[228,5570,5571],{"class":573}," 8px",[228,5573,3317],{"class":234},[228,5575,5576],{"class":234}," }\n",[228,5578,5580,5582,5584,5587,5589,5592,5594,5597,5599,5602,5604,5606,5608],{"class":230,"line":5579},25,[228,5581,57],{"class":234},[228,5583,5325],{"class":309},[228,5585,5586],{"class":309}," img",[228,5588,5448],{"class":234},[228,5590,5591],{"class":5545}," width",[228,5593,247],{"class":234},[228,5595,5596],{"class":573}," 24px",[228,5598,3317],{"class":234},[228,5600,5601],{"class":5545}," height",[228,5603,247],{"class":234},[228,5605,5596],{"class":573},[228,5607,3317],{"class":234},[228,5609,5576],{"class":234},[228,5611,5613,5615,5617],{"class":230,"line":5612},26,[228,5614,5366],{"class":234},[228,5616,299],{"class":5263},[228,5618,5267],{"class":234},[12,5620,5621,5622,5624],{},"Deploy and open the dashboard. The signed-in operator's name and avatar appear in the top-right corner. You don't redeploy when a different operator logs in, the addon fetches each user's data at runtime, so everyone sees their own. This widget reads identity straight off the browser's own socket session (",[96,5623,5154],{},"), so it's already per-operator by construction, no shared state involved.",[12,5626,5627,75,5631],{},[21,5628],{"alt":5629,"src":5630},"Screenshot: the dashboard app bar showing the logged-in operator's avatar and greeting","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Flogged-in-user-app-bar.png",[26,5632,5633],{},"The signed-in operator greeted by name and avatar in the app bar, rendered from a single UI-scoped widget.",[59,5635,5637],{"id":5636},"seeding-the-operator-into-context-on-login","Seeding the Operator into Context on Login",[12,5639,5640],{},"Greeting the operator is the visible half. The other half is making their identity available to every function node, not just the widgets.",[12,5642,5643,5644,5647,5648,5651],{},"You might reach for a single shared global here, ",[96,5645,5646],{},"global.set('user', msg._client.user, 'persistent')"," on connect, then read it everywhere. ",[45,5649,5650],{},"Don't."," Global context is one store for the whole flow, not one per session, so if two operators are connected at once, whichever connects last overwrites the identity for everyone, and function nodes start attributing the wrong operator's actions to the wrong person.",[12,5653,5654,5655,5657],{},"Instead, read ",[96,5656,197],{}," off each message for \"who is acting right now,\" and use the username only as a durable storage key for saved state. A shared global is still handy as a bootstrap fallback for the very first tick of a page, before any client-tagged message has round-tripped.",[147,5659,5660,5665,5711],{},[70,5661,5235,5662,5664],{},[96,5663,118],{}," node named \"Client connected\" and select the \"My Dashboard\" ui-base. It fires when a browser session connects.",[70,5666,5235,5667,5670,5671,5674,5675],{},[96,5668,5669],{},"change"," node named \"Seed globals\" with these ",[96,5672,5673],{},"set"," rules, in order:\n",[67,5676,5677,5689,5698,5706],{},[70,5678,5679,5681,5682,5684,5685,5688],{},[96,5680,3290],{}," (global, persistent) → ",[96,5683,197],{},". ",[45,5686,5687],{},"Bootstrap fallback only",", not the source of truth elsewhere.",[70,5690,5691,5694,5695,57],{},[96,5692,5693],{},"StationContext.stationName"," (global) → your station's name, e.g. ",[96,5696,5697],{},"Wheel Assembly Station 12",[70,5699,5700,5703,5704,57],{},[96,5701,5702],{},"StationContext.stationId"," (global, persistent) → this station's ID, e.g. ",[96,5705,3977],{},[70,5707,5708,5710],{},[96,5709,4819],{}," (global, persistent) → the instruction set (steps, images, target times, checklists), cached so the Instructions page loads instantly.",[70,5712,5713],{},"Wire \"Client connected\" into \"Seed globals\".",[12,5715,5716],{},"From here on, every function node that needs the current operator uses this pattern, per-session identity first, bootstrap global only as a fallback:",[219,5718,5722],{"className":5719,"code":5720,"language":5721,"meta":224,"style":224},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n","javascript",[96,5723,5724,5752],{"__ignoreMap":224},[228,5725,5726,5729,5732,5734,5737,5739,5742,5745,5747,5749],{"class":230,"line":231},[228,5727,5728],{"class":241},"const",[228,5730,5731],{"class":915}," username ",[228,5733,5286],{"class":234},[228,5735,5736],{"class":915}," msg",[228,5738,57],{"class":234},[228,5740,5741],{"class":915},"_client",[228,5743,5744],{"class":234},"?.",[228,5746,3290],{"class":915},[228,5748,5744],{"class":234},[228,5750,5751],{"class":915},"username\n",[228,5753,5754,5757,5760,5762,5765,5768,5771,5773,5775,5777,5780,5782,5784,5787,5789,5791],{"class":230,"line":5062},[228,5755,5756],{"class":234},"    ||",[228,5758,5759],{"class":915}," global",[228,5761,57],{"class":234},[228,5763,735],{"class":5764},"s2Zo4",[228,5766,5767],{"class":915},"(",[228,5769,5770],{"class":234},"'",[228,5772,3290],{"class":252},[228,5774,5770],{"class":234},[228,5776,258],{"class":234},[228,5778,5779],{"class":234}," '",[228,5781,940],{"class":252},[228,5783,5770],{"class":234},[228,5785,5786],{"class":915},")",[228,5788,5744],{"class":234},[228,5790,5086],{"class":915},[228,5792,5499],{"class":234},[59,5794,5796],{"id":5795},"showing-the-station-and-stats-on-the-home-page","Showing the Station and Stats on the Home Page",[12,5798,5799],{},"The Home page shows the current station and a quick summary of work order statistics. Both update whenever the page opens.",[5801,5802,5804],"h3",{"id":5803},"display-the-station-name","Display the Station Name",[147,5806,5807,5828],{},[70,5808,5809,5810,5813,5814,5816,5817,5820,5821,5824,5825,57],{},"From the ",[45,5811,5812],{},"Client connected"," event, add a ",[45,5815,5669],{}," node named ",[45,5818,5819],{},"Read station name"," and set ",[96,5822,5823],{},"msg.payload"," to ",[96,5826,5827],{},"global.StationContext.stationName",[70,5829,5830,5831,5816,5833,5835,5836,5838,5839,57],{},"Connect it to a ",[45,5832,121],{},[45,5834,4887],{}," in the ",[45,5837,4887],{}," group. Set the value to ",[96,5840,5823],{},[5801,5842,5844],{"id":5843},"display-the-stats","Display the Stats",[147,5846,5847,5858],{},[70,5848,5235,5849,5816,5851,5854,5855,5857],{},[45,5850,115],{},[45,5852,5853],{},"Page changed",", set its event to ",[45,5856,5669],{},", and select your dashboard.",[70,5859,5235,5860,5816,5862,5865,5866],{},[45,5861,845],{},[45,5863,5864],{},"Build \u002Fstats request URL"," and paste in the following code. ",[45,5867,5868,5869,5872],{},"Replace ",[96,5870,5871],{},"https:\u002F\u002Fyour-instance.flowfuse.cloud"," with your own FlowFuse instance URL.",[219,5874,5876],{"className":5719,"code":5875,"language":5721,"meta":224,"style":224},"const StationContext = global.get('StationContext', 'persistent');\nconst username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n\nconst params = new URLSearchParams();\nparams.set('stationId', StationContext.stationId);\nif (username) params.set('username', username);\n\nmsg.url = `https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders\u002Fstats?${params}`;\nmsg.method = \"GET\";\nreturn msg;\n",[96,5877,5878,5914,5936,5970,5974,5993,6023,6050,6054,6082,6103],{"__ignoreMap":224},[228,5879,5880,5882,5885,5887,5889,5891,5893,5895,5897,5900,5902,5904,5906,5908,5910,5912],{"class":230,"line":231},[228,5881,5728],{"class":241},[228,5883,5884],{"class":915}," StationContext ",[228,5886,5286],{"class":234},[228,5888,5759],{"class":915},[228,5890,57],{"class":234},[228,5892,735],{"class":5764},[228,5894,5767],{"class":915},[228,5896,5770],{"class":234},[228,5898,5899],{"class":252},"StationContext",[228,5901,5770],{"class":234},[228,5903,258],{"class":234},[228,5905,5779],{"class":234},[228,5907,940],{"class":252},[228,5909,5770],{"class":234},[228,5911,5786],{"class":915},[228,5913,5499],{"class":234},[228,5915,5916,5918,5920,5922,5924,5926,5928,5930,5932,5934],{"class":230,"line":5062},[228,5917,5728],{"class":241},[228,5919,5731],{"class":915},[228,5921,5286],{"class":234},[228,5923,5736],{"class":915},[228,5925,57],{"class":234},[228,5927,5741],{"class":915},[228,5929,5744],{"class":234},[228,5931,3290],{"class":915},[228,5933,5744],{"class":234},[228,5935,5751],{"class":915},[228,5937,5938,5940,5942,5944,5946,5948,5950,5952,5954,5956,5958,5960,5962,5964,5966,5968],{"class":230,"line":5081},[228,5939,5756],{"class":234},[228,5941,5759],{"class":915},[228,5943,57],{"class":234},[228,5945,735],{"class":5764},[228,5947,5767],{"class":915},[228,5949,5770],{"class":234},[228,5951,3290],{"class":252},[228,5953,5770],{"class":234},[228,5955,258],{"class":234},[228,5957,5779],{"class":234},[228,5959,940],{"class":252},[228,5961,5770],{"class":234},[228,5963,5786],{"class":915},[228,5965,5744],{"class":234},[228,5967,5086],{"class":915},[228,5969,5499],{"class":234},[228,5971,5972],{"class":230,"line":4978},[228,5973,5405],{"emptyLinePlaceholder":5404},[228,5975,5976,5978,5981,5983,5986,5989,5991],{"class":230,"line":5112},[228,5977,5728],{"class":241},[228,5979,5980],{"class":915}," params ",[228,5982,5286],{"class":234},[228,5984,5985],{"class":234}," new",[228,5987,5988],{"class":5764}," URLSearchParams",[228,5990,5437],{"class":915},[228,5992,5499],{"class":234},[228,5994,5995,5998,6000,6002,6004,6006,6009,6011,6013,6016,6018,6021],{"class":230,"line":5127},[228,5996,5997],{"class":915},"params",[228,5999,57],{"class":234},[228,6001,5673],{"class":5764},[228,6003,5767],{"class":915},[228,6005,5770],{"class":234},[228,6007,6008],{"class":252},"stationId",[228,6010,5770],{"class":234},[228,6012,258],{"class":234},[228,6014,6015],{"class":915}," StationContext",[228,6017,57],{"class":234},[228,6019,6020],{"class":915},"stationId)",[228,6022,5499],{"class":234},[228,6024,6025,6028,6031,6033,6035,6037,6039,6041,6043,6045,6048],{"class":230,"line":5142},[228,6026,6027],{"class":5421},"if",[228,6029,6030],{"class":915}," (username) params",[228,6032,57],{"class":234},[228,6034,5673],{"class":5764},[228,6036,5767],{"class":915},[228,6038,5770],{"class":234},[228,6040,5086],{"class":252},[228,6042,5770],{"class":234},[228,6044,258],{"class":234},[228,6046,6047],{"class":915}," username)",[228,6049,5499],{"class":234},[228,6051,6052],{"class":230,"line":5382},[228,6053,5405],{"emptyLinePlaceholder":5404},[228,6055,6056,6059,6061,6064,6066,6069,6072,6075,6077,6080],{"class":230,"line":5392},[228,6057,6058],{"class":915},"msg",[228,6060,57],{"class":234},[228,6062,6063],{"class":915},"url ",[228,6065,5286],{"class":234},[228,6067,6068],{"class":234}," `",[228,6070,6071],{"class":252},"https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders\u002Fstats?",[228,6073,6074],{"class":234},"${",[228,6076,5997],{"class":915},[228,6078,6079],{"class":234},"}`",[228,6081,5499],{"class":234},[228,6083,6084,6086,6088,6091,6093,6096,6099,6101],{"class":230,"line":5401},[228,6085,6058],{"class":915},[228,6087,57],{"class":234},[228,6089,6090],{"class":915},"method ",[228,6092,5286],{"class":234},[228,6094,6095],{"class":234}," \"",[228,6097,6098],{"class":252},"GET",[228,6100,238],{"class":234},[228,6102,5499],{"class":234},[228,6104,6105,6108,6110],{"class":230,"line":5408},[228,6106,6107],{"class":5421},"return",[228,6109,5736],{"class":915},[228,6111,5499],{"class":234},[147,6113,6114,6131,6134,6144],{"start":5081},[70,6115,6116,6117,6119,6120,5202,6123,6126,6127,6130],{},"Add an ",[45,6118,5008],{}," node that uses ",[96,6121,6122],{},"msg.method",[96,6124,6125],{},"msg.url",", returns a parsed JSON object, and uses ",[45,6128,6129],{},"Bearer"," authentication.",[70,6132,6133],{},"Configure the bearer token using the access token you created earlier. For production, store it as an environment variable instead of hardcoding it in the flow.",[70,6135,5235,6136,4910,6138,5835,6141,6143],{},[45,6137,102],{},[45,6139,6140],{},"Stats Cards",[45,6142,4892],{}," group and paste in the template below.",[70,6145,6146,6147,57],{},"Wire the nodes: ",[45,6148,6149],{},"Page changed → Build \u002Fstats request URL → HTTP Request → Stats Cards",[12,6151,6152,6153,6156,6157,6159,6160,6162],{},"The request includes the logged-in username, so the ",[45,6154,6155],{},"Assigned to me"," count is personalized for each operator, and because ",[96,6158,115],{}," is client-data-aware, ",[96,6161,197],{}," reflects whichever operator's browser triggered the page change.",[12,6164,6165,6169],{},[21,6166],{"alt":6167,"src":6168},"Placeholder: Stats Cards widget rendered on the Home page","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fstats-and-station.png",[26,6170,6171],{},"The Home page displays station statistics, including total, assigned to me, completed, and defected work orders.",[59,6173,6175],{"id":6174},"loading-the-operators-work-orders","Loading the Operator's Work Orders",[12,6177,6178],{},"Now for the main part of the Home page: fetching and displaying the operator's work orders. Because the request includes the logged-in username, each operator only sees the work orders assigned to them at the current station.",[147,6180,6181,6191],{},[70,6182,5235,6183,5816,6185,6187,6188,6190],{},[45,6184,115],{},[45,6186,5853],{},", select your dashboard, and set the event to ",[45,6189,5669],{},". It fires whenever the operator navigates to the Home page, triggering the work order request.",[70,6192,5235,6193,5816,6195,6198,6199,5872],{},[45,6194,845],{},[45,6196,6197],{},"Build \u002Fworkorders request URL",", paste in the code below, and replace ",[96,6200,5871],{},[219,6202,6205],{"className":5719,"code":6203,"language":5721,"meta":6204,"style":224},"const StationContext = global.get('StationContext', 'persistent');\nconst username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n\nconst stationId = StationContext?.stationId;\n\nconst params = new URLSearchParams();\nparams.set('stationId', stationId);\nif (username) params.set('username', username);\n\nmsg.url = `https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders?${params.toString()}`;\nmsg.method = 'GET';\nreturn msg;\n","id=\"8m19sv\"",[96,6206,6207,6241,6263,6297,6301,6318,6322,6338,6361,6385,6389,6419,6437],{"__ignoreMap":224},[228,6208,6209,6211,6213,6215,6217,6219,6221,6223,6225,6227,6229,6231,6233,6235,6237,6239],{"class":230,"line":231},[228,6210,5728],{"class":241},[228,6212,5884],{"class":915},[228,6214,5286],{"class":234},[228,6216,5759],{"class":915},[228,6218,57],{"class":234},[228,6220,735],{"class":5764},[228,6222,5767],{"class":915},[228,6224,5770],{"class":234},[228,6226,5899],{"class":252},[228,6228,5770],{"class":234},[228,6230,258],{"class":234},[228,6232,5779],{"class":234},[228,6234,940],{"class":252},[228,6236,5770],{"class":234},[228,6238,5786],{"class":915},[228,6240,5499],{"class":234},[228,6242,6243,6245,6247,6249,6251,6253,6255,6257,6259,6261],{"class":230,"line":5062},[228,6244,5728],{"class":241},[228,6246,5731],{"class":915},[228,6248,5286],{"class":234},[228,6250,5736],{"class":915},[228,6252,57],{"class":234},[228,6254,5741],{"class":915},[228,6256,5744],{"class":234},[228,6258,3290],{"class":915},[228,6260,5744],{"class":234},[228,6262,5751],{"class":915},[228,6264,6265,6267,6269,6271,6273,6275,6277,6279,6281,6283,6285,6287,6289,6291,6293,6295],{"class":230,"line":5081},[228,6266,5756],{"class":234},[228,6268,5759],{"class":915},[228,6270,57],{"class":234},[228,6272,735],{"class":5764},[228,6274,5767],{"class":915},[228,6276,5770],{"class":234},[228,6278,3290],{"class":252},[228,6280,5770],{"class":234},[228,6282,258],{"class":234},[228,6284,5779],{"class":234},[228,6286,940],{"class":252},[228,6288,5770],{"class":234},[228,6290,5786],{"class":915},[228,6292,5744],{"class":234},[228,6294,5086],{"class":915},[228,6296,5499],{"class":234},[228,6298,6299],{"class":230,"line":4978},[228,6300,5405],{"emptyLinePlaceholder":5404},[228,6302,6303,6305,6308,6310,6312,6314,6316],{"class":230,"line":5112},[228,6304,5728],{"class":241},[228,6306,6307],{"class":915}," stationId ",[228,6309,5286],{"class":234},[228,6311,6015],{"class":915},[228,6313,5744],{"class":234},[228,6315,6008],{"class":915},[228,6317,5499],{"class":234},[228,6319,6320],{"class":230,"line":5127},[228,6321,5405],{"emptyLinePlaceholder":5404},[228,6323,6324,6326,6328,6330,6332,6334,6336],{"class":230,"line":5142},[228,6325,5728],{"class":241},[228,6327,5980],{"class":915},[228,6329,5286],{"class":234},[228,6331,5985],{"class":234},[228,6333,5988],{"class":5764},[228,6335,5437],{"class":915},[228,6337,5499],{"class":234},[228,6339,6340,6342,6344,6346,6348,6350,6352,6354,6356,6359],{"class":230,"line":5382},[228,6341,5997],{"class":915},[228,6343,57],{"class":234},[228,6345,5673],{"class":5764},[228,6347,5767],{"class":915},[228,6349,5770],{"class":234},[228,6351,6008],{"class":252},[228,6353,5770],{"class":234},[228,6355,258],{"class":234},[228,6357,6358],{"class":915}," stationId)",[228,6360,5499],{"class":234},[228,6362,6363,6365,6367,6369,6371,6373,6375,6377,6379,6381,6383],{"class":230,"line":5392},[228,6364,6027],{"class":5421},[228,6366,6030],{"class":915},[228,6368,57],{"class":234},[228,6370,5673],{"class":5764},[228,6372,5767],{"class":915},[228,6374,5770],{"class":234},[228,6376,5086],{"class":252},[228,6378,5770],{"class":234},[228,6380,258],{"class":234},[228,6382,6047],{"class":915},[228,6384,5499],{"class":234},[228,6386,6387],{"class":230,"line":5401},[228,6388,5405],{"emptyLinePlaceholder":5404},[228,6390,6391,6393,6395,6397,6399,6401,6404,6406,6408,6410,6413,6415,6417],{"class":230,"line":5408},[228,6392,6058],{"class":915},[228,6394,57],{"class":234},[228,6396,6063],{"class":915},[228,6398,5286],{"class":234},[228,6400,6068],{"class":234},[228,6402,6403],{"class":252},"https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders?",[228,6405,6074],{"class":234},[228,6407,5997],{"class":915},[228,6409,57],{"class":234},[228,6411,6412],{"class":5764},"toString",[228,6414,5437],{"class":915},[228,6416,6079],{"class":234},[228,6418,5499],{"class":234},[228,6420,6421,6423,6425,6427,6429,6431,6433,6435],{"class":230,"line":5418},[228,6422,6058],{"class":915},[228,6424,57],{"class":234},[228,6426,6090],{"class":915},[228,6428,5286],{"class":234},[228,6430,5779],{"class":234},[228,6432,6098],{"class":252},[228,6434,5770],{"class":234},[228,6436,5499],{"class":234},[228,6438,6439,6441,6443],{"class":230,"line":5431},[228,6440,6107],{"class":5421},[228,6442,5736],{"class":915},[228,6444,5499],{"class":234},[147,6446,6447,6479],{"start":5081},[70,6448,6116,6449,6451,6452,5824,6455,6460,6461,6464,6465,6467,6468,6471,6472,6475,6476,6478],{},[45,6450,5008],{}," node, set the ",[45,6453,6454],{},"Method",[45,6456,6457,6458],{},"Use ",[96,6459,6122],{},", leave the ",[45,6462,6463],{},"URL"," field blank so it uses ",[96,6466,6125],{},", set the ",[45,6469,6470],{},"Return"," type to a ",[45,6473,6474],{},"parsed JSON object",", and configure ",[45,6477,6129],{}," authentication. Use the access token you created earlier as the bearer token. For production deployments, store the token as an environment variable and reference it here instead of hardcoding it in the flow.",[70,6480,6481,6482,6484,6485,5816,6488,6491,6492,6495],{},"Connect the ",[45,6483,5008],{}," node to a ",[45,6486,6487],{},"link out",[45,6489,6490],{},"Work Orders Out",". The widgets that display the work orders will connect to this node using their own ",[45,6493,6494],{},"link in"," nodes, allowing the same API response to be reused without stretching wires across the canvas.",[12,6497,6498,6499,6501,6502,6505],{},"The username in the request is what makes the dashboard personal. Two operators can open the same page at the same station, yet each receives only the work orders assigned to them, because each one's ",[96,6500,115],{}," event carries their own ",[96,6503,6504],{},"_client.user",", not a shared one.",[59,6507,6509],{"id":6508},"splitting-the-current-order-from-the-queue","Splitting the Current Order From the Queue",[12,6511,6512],{},"The Home page shows one work order front and centre and the rest as a queue. A function splits the list, sorting by priority so the most urgent job is the one the operator sees first. This function also records which work order the operator is about to start, that's the record the Instructions page, the Complete Operation flow, and the Report Issue flow will all read back later, so it has to be attributed to the right operator from the start.",[147,6514,6515,6520],{},[70,6516,5235,6517,6519],{},[96,6518,6494],{}," node named \"link in 6\" and point it at the \"work orders out\" link.",[70,6521,5235,6522,6524,6525,247],{},[96,6523,845],{}," node named \"split current vs queue (by priority)\" with ",[45,6526,6527],{},"2 outputs",[219,6529,6531],{"className":5719,"code":6530,"language":5721,"meta":224,"style":224},"const orders = Array.isArray(msg.payload) ? msg.payload : [];\n\n\u002F\u002F Sort by priority (Critical\u002FUrgent -> High -> Medium -> Normal -> Low)\nconst priorityOrder = { critical: 0, urgent: 0, high: 1, medium: 2, normal: 3, low: 4 };\nconst sorted = [...orders].sort(\n    (a, b) => (priorityOrder[(a.priority || '').toLowerCase()] ?? 5)\n            - (priorityOrder[(b.priority || '').toLowerCase()] ?? 5)\n);\n\nconst currentWorkOrder = sorted[0] || null;\n\n\u002F\u002F Record which work order the current operator is about to see\u002Fstart.\n\u002F\u002F Identity comes from the triggering message's client data, not a shared global,\n\u002F\u002F so this is always attributed to the operator whose browser fetched this list.\nconst username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n\nif (username && currentWorkOrder) {\n    const userState = global.get(username, 'persistent') || {};\n    userState.workOrderId = currentWorkOrder.workOrderId;\n    global.set(username, userState, 'persistent');\n}\n\nreturn [\n    { payload: currentWorkOrder },  \u002F\u002F output 1: current order (for card)\n    { payload: sorted.slice(1) }    \u002F\u002F output 2: remaining orders (queue)\n];\n",[96,6532,6533,6575,6579,6584,6654,6680,6731,6761,6767,6771,6793,6797,6802,6807,6812,6834,6868,6872,6887,6923,6944,6973,6977,6981,6988,7004,7031],{"__ignoreMap":224},[228,6534,6535,6537,6540,6542,6545,6547,6550,6553,6555,6558,6561,6563,6565,6568,6570,6573],{"class":230,"line":231},[228,6536,5728],{"class":241},[228,6538,6539],{"class":915}," orders ",[228,6541,5286],{"class":234},[228,6543,6544],{"class":915}," Array",[228,6546,57],{"class":234},[228,6548,6549],{"class":5764},"isArray",[228,6551,6552],{"class":915},"(msg",[228,6554,57],{"class":234},[228,6556,6557],{"class":915},"payload) ",[228,6559,6560],{"class":234},"?",[228,6562,5736],{"class":915},[228,6564,57],{"class":234},[228,6566,6567],{"class":915},"payload ",[228,6569,247],{"class":234},[228,6571,6572],{"class":915}," []",[228,6574,5499],{"class":234},[228,6576,6577],{"class":230,"line":5062},[228,6578,5405],{"emptyLinePlaceholder":5404},[228,6580,6581],{"class":230,"line":5081},[228,6582,6583],{"class":5272},"\u002F\u002F Sort by priority (Critical\u002FUrgent -> High -> Medium -> Normal -> Low)\n",[228,6585,6586,6588,6591,6593,6595,6598,6600,6603,6605,6608,6610,6612,6614,6617,6619,6622,6624,6627,6629,6632,6634,6637,6639,6642,6644,6647,6649,6652],{"class":230,"line":4978},[228,6587,5728],{"class":241},[228,6589,6590],{"class":915}," priorityOrder ",[228,6592,5286],{"class":234},[228,6594,5448],{"class":234},[228,6596,6597],{"class":5263}," critical",[228,6599,247],{"class":234},[228,6601,6602],{"class":573}," 0",[228,6604,258],{"class":234},[228,6606,6607],{"class":5263}," urgent",[228,6609,247],{"class":234},[228,6611,6602],{"class":573},[228,6613,258],{"class":234},[228,6615,6616],{"class":5263}," high",[228,6618,247],{"class":234},[228,6620,6621],{"class":573}," 1",[228,6623,258],{"class":234},[228,6625,6626],{"class":5263}," medium",[228,6628,247],{"class":234},[228,6630,6631],{"class":573}," 2",[228,6633,258],{"class":234},[228,6635,6636],{"class":5263}," normal",[228,6638,247],{"class":234},[228,6640,6641],{"class":573}," 3",[228,6643,258],{"class":234},[228,6645,6646],{"class":5263}," low",[228,6648,247],{"class":234},[228,6650,6651],{"class":573}," 4",[228,6653,5460],{"class":234},[228,6655,6656,6658,6661,6663,6666,6669,6672,6674,6677],{"class":230,"line":5112},[228,6657,5728],{"class":241},[228,6659,6660],{"class":915}," sorted ",[228,6662,5286],{"class":234},[228,6664,6665],{"class":915}," [",[228,6667,6668],{"class":234},"...",[228,6670,6671],{"class":915},"orders]",[228,6673,57],{"class":234},[228,6675,6676],{"class":5764},"sort",[228,6678,6679],{"class":915},"(\n",[228,6681,6682,6685,6688,6690,6693,6695,6698,6701,6703,6706,6709,6712,6714,6716,6719,6722,6725,6728],{"class":230,"line":5127},[228,6683,6684],{"class":234},"    (",[228,6686,53],{"class":6687},"sHdIc",[228,6689,258],{"class":234},[228,6691,6692],{"class":6687}," b",[228,6694,5786],{"class":234},[228,6696,6697],{"class":241}," =>",[228,6699,6700],{"class":915}," (priorityOrder[(a",[228,6702,57],{"class":234},[228,6704,6705],{"class":915},"priority ",[228,6707,6708],{"class":234},"||",[228,6710,6711],{"class":234}," ''",[228,6713,5786],{"class":915},[228,6715,57],{"class":234},[228,6717,6718],{"class":5764},"toLowerCase",[228,6720,6721],{"class":915},"()] ",[228,6723,6724],{"class":234},"??",[228,6726,6727],{"class":573}," 5",[228,6729,6730],{"class":915},")\n",[228,6732,6733,6736,6739,6741,6743,6745,6747,6749,6751,6753,6755,6757,6759],{"class":230,"line":5142},[228,6734,6735],{"class":234},"            -",[228,6737,6738],{"class":915}," (priorityOrder[(b",[228,6740,57],{"class":234},[228,6742,6705],{"class":915},[228,6744,6708],{"class":234},[228,6746,6711],{"class":234},[228,6748,5786],{"class":915},[228,6750,57],{"class":234},[228,6752,6718],{"class":5764},[228,6754,6721],{"class":915},[228,6756,6724],{"class":234},[228,6758,6727],{"class":573},[228,6760,6730],{"class":915},[228,6762,6763,6765],{"class":230,"line":5382},[228,6764,5786],{"class":915},[228,6766,5499],{"class":234},[228,6768,6769],{"class":230,"line":5392},[228,6770,5405],{"emptyLinePlaceholder":5404},[228,6772,6773,6775,6778,6780,6783,6785,6788,6790],{"class":230,"line":5401},[228,6774,5728],{"class":241},[228,6776,6777],{"class":915}," currentWorkOrder ",[228,6779,5286],{"class":234},[228,6781,6782],{"class":915}," sorted[",[228,6784,1042],{"class":573},[228,6786,6787],{"class":915},"] ",[228,6789,6708],{"class":234},[228,6791,6792],{"class":234}," null;\n",[228,6794,6795],{"class":230,"line":5408},[228,6796,5405],{"emptyLinePlaceholder":5404},[228,6798,6799],{"class":230,"line":5418},[228,6800,6801],{"class":5272},"\u002F\u002F Record which work order the current operator is about to see\u002Fstart.\n",[228,6803,6804],{"class":230,"line":5431},[228,6805,6806],{"class":5272},"\u002F\u002F Identity comes from the triggering message's client data, not a shared global,\n",[228,6808,6809],{"class":230,"line":5442},[228,6810,6811],{"class":5272},"\u002F\u002F so this is always attributed to the operator whose browser fetched this list.\n",[228,6813,6814,6816,6818,6820,6822,6824,6826,6828,6830,6832],{"class":230,"line":5463},[228,6815,5728],{"class":241},[228,6817,5731],{"class":915},[228,6819,5286],{"class":234},[228,6821,5736],{"class":915},[228,6823,57],{"class":234},[228,6825,5741],{"class":915},[228,6827,5744],{"class":234},[228,6829,3290],{"class":915},[228,6831,5744],{"class":234},[228,6833,5751],{"class":915},[228,6835,6836,6838,6840,6842,6844,6846,6848,6850,6852,6854,6856,6858,6860,6862,6864,6866],{"class":230,"line":5469},[228,6837,5756],{"class":234},[228,6839,5759],{"class":915},[228,6841,57],{"class":234},[228,6843,735],{"class":5764},[228,6845,5767],{"class":915},[228,6847,5770],{"class":234},[228,6849,3290],{"class":252},[228,6851,5770],{"class":234},[228,6853,258],{"class":234},[228,6855,5779],{"class":234},[228,6857,940],{"class":252},[228,6859,5770],{"class":234},[228,6861,5786],{"class":915},[228,6863,5744],{"class":234},[228,6865,5086],{"class":915},[228,6867,5499],{"class":234},[228,6869,6870],{"class":230,"line":5479},[228,6871,5405],{"emptyLinePlaceholder":5404},[228,6873,6874,6876,6879,6882,6885],{"class":230,"line":5485},[228,6875,6027],{"class":5421},[228,6877,6878],{"class":915}," (username ",[228,6880,6881],{"class":234},"&&",[228,6883,6884],{"class":915}," currentWorkOrder) ",[228,6886,5059],{"class":234},[228,6888,6889,6892,6895,6897,6899,6901,6903,6905,6907,6909,6911,6913,6915,6918,6920],{"class":230,"line":5502},[228,6890,6891],{"class":241},"    const",[228,6893,6894],{"class":915}," userState",[228,6896,5493],{"class":234},[228,6898,5759],{"class":915},[228,6900,57],{"class":234},[228,6902,735],{"class":5764},[228,6904,5767],{"class":5263},[228,6906,5086],{"class":915},[228,6908,258],{"class":234},[228,6910,5779],{"class":234},[228,6912,940],{"class":252},[228,6914,5770],{"class":234},[228,6916,6917],{"class":5263},") ",[228,6919,6708],{"class":234},[228,6921,6922],{"class":234}," {};\n",[228,6924,6925,6928,6930,6933,6935,6938,6940,6942],{"class":230,"line":5508},[228,6926,6927],{"class":915},"    userState",[228,6929,57],{"class":234},[228,6931,6932],{"class":915},"workOrderId",[228,6934,5493],{"class":234},[228,6936,6937],{"class":915}," currentWorkOrder",[228,6939,57],{"class":234},[228,6941,6932],{"class":915},[228,6943,5499],{"class":234},[228,6945,6946,6949,6951,6953,6955,6957,6959,6961,6963,6965,6967,6969,6971],{"class":230,"line":5513},[228,6947,6948],{"class":915},"    global",[228,6950,57],{"class":234},[228,6952,5673],{"class":5764},[228,6954,5767],{"class":5263},[228,6956,5086],{"class":915},[228,6958,258],{"class":234},[228,6960,6894],{"class":915},[228,6962,258],{"class":234},[228,6964,5779],{"class":234},[228,6966,940],{"class":252},[228,6968,5770],{"class":234},[228,6970,5786],{"class":5263},[228,6972,5499],{"class":234},[228,6974,6975],{"class":230,"line":5522},[228,6976,5145],{"class":234},[228,6978,6979],{"class":230,"line":5527},[228,6980,5405],{"emptyLinePlaceholder":5404},[228,6982,6983,6985],{"class":230,"line":5536},[228,6984,6107],{"class":5421},[228,6986,6987],{"class":915}," [\n",[228,6989,6990,6992,6995,6997,6999,7001],{"class":230,"line":5579},[228,6991,3388],{"class":234},[228,6993,6994],{"class":5263}," payload",[228,6996,247],{"class":234},[228,6998,6777],{"class":915},[228,7000,424],{"class":234},[228,7002,7003],{"class":5272},"  \u002F\u002F output 1: current order (for card)\n",[228,7005,7006,7008,7010,7012,7015,7017,7020,7022,7024,7026,7028],{"class":230,"line":5612},[228,7007,3388],{"class":234},[228,7009,6994],{"class":5263},[228,7011,247],{"class":234},[228,7013,7014],{"class":915}," sorted",[228,7016,57],{"class":234},[228,7018,7019],{"class":5764},"slice",[228,7021,5767],{"class":915},[228,7023,337],{"class":573},[228,7025,6917],{"class":915},[228,7027,1575],{"class":234},[228,7029,7030],{"class":5272},"    \u002F\u002F output 2: remaining orders (queue)\n",[228,7032,7034,7036],{"class":230,"line":7033},27,[228,7035,3467],{"class":915},[228,7037,5499],{"class":234},[147,7039,7040],{"start":5081},[70,7041,7042],{},"Import the Current Work Order Card ui-template below and assign it to the Current Work Order group. The complete component is provided below, so there's no need to recreate it.",[40,7044,7045],{},[12,7046,7047,7050,7051,7055,7056,7058],{},[45,7048,7049],{},"Tip:"," Whenever you need a custom Dashboard widget, you don't have to write the Vue code yourself. Use ",[53,7052,7054],{"href":7053},"\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai\u002F#css-and-html-generation-for-flowfuse-dashboard","FlowFuse Expert"," and describe the widget in plain English and it will generate the ",[96,7057,102],{}," for you.",[215,7060,7061],{":height":217},[219,7062,7064],{"className":221,"code":7063,"language":223,"meta":224,"style":224},"{% raw %}\n[{\"id\":\"eb41d1ba8e4bfb01\",\"type\":\"ui-template\",\"z\":\"c50b1b501a74c081\",\"g\":\"3e9b1176168ca254\",\"group\":\"\",\"page\":\"\",\"ui\":\"\",\"name\":\"Current Work Order Card\",\"order\":1,\"width\":0,\"height\":0,\"head\":\"\",\"format\":\"\u003Ctemplate>\\n  \u003Cdiv class=\\\"wi-root\\\">\\n    \u003C!-- Top status bar -->\\n    \u003Cdiv class=\\\"wi-topbar\\\">\\n      \u003Cdiv class=\\\"wi-topbar-left\\\">\\n        \u003Cspan class=\\\"wi-wo-label\\\">WORK ORDER\u003C\u002Fspan>\\n        \u003Cspan class=\\\"wi-wo-id\\\">{{ msg?.payload?.workOrderId ?? '—' }}\u003C\u002Fspan>\\n      \u003C\u002Fdiv>\\n      \u003Cdiv class=\\\"wi-topbar-right\\\">\\n        \u003Cv-chip size=\\\"large\\\" variant=\\\"flat\\\" label :color=\\\"priorityColor\\\" class=\\\"wi-chip\\\">\\n          \u003Cv-icon start icon=\\\"mdi-flag\\\">\u003C\u002Fv-icon>\\n          {{ (msg?.payload?.priority ?? 'Normal').toUpperCase() }} PRIORITY\\n        \u003C\u002Fv-chip>\\n      \u003C\u002Fdiv>\\n    \u003C\u002Fdiv>\\n\\n    \u003Cv-row no-gutters class=\\\"wi-body\\\">\\n      \u003C!-- Left: Station + Operation -->\\n      \u003Cv-col cols=\\\"12\\\" md=\\\"5\\\" class=\\\"wi-col\\\">\\n        \u003Cv-card flat class=\\\"wi-card wi-card-station\\\">\\n          \u003Cdiv class=\\\"wi-card-head\\\">\\n            \u003Cv-icon icon=\\\"mdi-map-marker-radius\\\" size=\\\"22\\\">\u003C\u002Fv-icon>\\n            \u003Cspan>STATION\u003C\u002Fspan>\\n          \u003C\u002Fdiv>\\n          \u003Cdiv class=\\\"wi-station-id\\\">{{ msg?.payload?.stationId ?? '—' }}\u003C\u002Fdiv>\\n\\n          \u003Cv-divider class=\\\"wi-divider\\\">\u003C\u002Fv-divider>\\n\\n          \u003Cdiv class=\\\"wi-card-head\\\">\\n            \u003Cv-icon icon=\\\"mdi-clipboard-text-outline\\\" size=\\\"22\\\">\u003C\u002Fv-icon>\\n            \u003Cspan>OPERATION\u003C\u002Fspan>\\n          \u003C\u002Fdiv>\\n          \u003Cdiv class=\\\"wi-operation-name\\\">\\n            {{ msg?.payload?.operation?.name ?? 'Awaiting operation' }}\\n          \u003C\u002Fdiv>\\n\\n          \u003Cdiv class=\\\"wi-cycle\\\">\\n            \u003Cv-icon icon=\\\"mdi-timer-outline\\\" size=\\\"26\\\">\u003C\u002Fv-icon>\\n            \u003Cdiv class=\\\"wi-cycle-text\\\">\\n              \u003Cspan class=\\\"wi-cycle-label\\\">ESTIMATED CYCLE TIME\u003C\u002Fspan>\\n              \u003Cspan class=\\\"wi-cycle-value\\\">\\n                {{ msg?.payload?.operation?.estimatedCycleTime ?? '—' }}\\n              \u003C\u002Fspan>\\n            \u003C\u002Fdiv>\\n          \u003C\u002Fdiv>\\n        \u003C\u002Fv-card>\\n      \u003C\u002Fv-col>\\n\\n      \u003C!-- Right: Vehicle -->\\n      \u003Cv-col cols=\\\"12\\\" md=\\\"7\\\" class=\\\"wi-col\\\">\\n        \u003Cv-card flat class=\\\"wi-card wi-card-vehicle\\\">\\n          \u003Cdiv class=\\\"wi-card-head\\\">\\n            \u003Cv-icon icon=\\\"mdi-car-side\\\" size=\\\"22\\\">\u003C\u002Fv-icon>\\n            \u003Cspan>VEHICLE\u003C\u002Fspan>\\n          \u003C\u002Fdiv>\\n\\n          \u003Cdiv class=\\\"wi-vehicle-model\\\">\\n            {{ msg?.payload?.vehicle?.model ?? 'Unknown model' }}\\n          \u003C\u002Fdiv>\\n          \u003Cdiv class=\\\"wi-vehicle-variant\\\">\\n            {{ msg?.payload?.vehicle?.variant ?? '' }}\\n          \u003C\u002Fdiv>\\n\\n          \u003Cv-row no-gutters class=\\\"wi-spec-grid\\\">\\n            \u003Cv-col cols=\\\"12\\\" sm=\\\"7\\\">\\n              \u003Cdiv class=\\\"wi-spec\\\">\\n                \u003Cspan class=\\\"wi-spec-label\\\">VIN\u003C\u002Fspan>\\n                \u003Cspan class=\\\"wi-spec-value wi-vin\\\">\\n                  {{ msg?.payload?.vehicle?.vin ?? '—' }}\\n                \u003C\u002Fspan>\\n              \u003C\u002Fdiv>\\n            \u003C\u002Fv-col>\\n            \u003Cv-col cols=\\\"12\\\" sm=\\\"5\\\">\\n              \u003Cdiv class=\\\"wi-spec\\\">\\n                \u003Cspan class=\\\"wi-spec-label\\\">COLOR\u003C\u002Fspan>\\n                \u003Cspan class=\\\"wi-spec-value\\\">\\n                  \u003Cv-icon\\n                    icon=\\\"mdi-circle\\\"\\n                    size=\\\"18\\\"\\n                    class=\\\"wi-color-dot\\\"\\n                  >\u003C\u002Fv-icon>\\n                  {{ msg?.payload?.vehicle?.color ?? '—' }}\\n                \u003C\u002Fspan>\\n              \u003C\u002Fdiv>\\n            \u003C\u002Fv-col>\\n          \u003C\u002Fv-row>\\n        \u003C\u002Fv-card>\\n      \u003C\u002Fv-col>\\n    \u003C\u002Fv-row>\\n\\n    \u003C!-- Start button -->\\n    \u003Cv-btn block size=\\\"x-large\\\" color=\\\"green-darken-1\\\" class=\\\"wi-start-btn\\\" :disabled=\\\"!msg?.payload?.workOrderId\\\"\\n      @click=\\\"send({ payload: { action: 'start', workOrderId: msg?.payload?.workOrderId, stationId: msg?.payload?.stationId } })\\\">\\n      \u003Cv-icon start icon=\\\"mdi-play-circle\\\" size=\\\"34\\\">\u003C\u002Fv-icon>\\n      START WORK ORDER\\n    \u003C\u002Fv-btn>\\n  \u003C\u002Fdiv>\\n\u003C\u002Ftemplate>\\n\\n\u003Cscript>\\n  export default {\\n  computed: {\\n    priorityColor () {\\n      const p = (this.msg?.payload?.priority ?? '').toLowerCase()\\n      if (p === 'high' || p === 'urgent' || p === 'critical') return 'red-darken-1'\\n      if (p === 'medium') return 'amber-darken-2'\\n      return 'blue-grey-darken-1'\\n    }\\n  }\\n}\\n\u003C\u002Fscript>\\n\\n\u003Cstyle>\\n  .wi-root {\\n    font-family: 'Roboto', system-ui, sans-serif;\\n    color: #1f2933;\\n    padding: 4px;\\n  }\\n\\n  .wi-topbar {\\n    display: flex;\\n    align-items: center;\\n    justify-content: space-between;\\n    flex-wrap: wrap;\\n    gap: 12px;\\n    background: #ffffff;\\n    border: 1px solid #e2e8f0;\\n    border-left: 6px solid #1565c0;\\n    border-radius: 10px;\\n    padding: 14px 20px;\\n    margin-bottom: 14px;\\n  }\\n\\n  .wi-topbar-left {\\n    display: flex;\\n    flex-direction: column;\\n    line-height: 1.1;\\n  }\\n\\n  .wi-wo-label {\\n    font-size: 12px;\\n    letter-spacing: 2px;\\n    color: #64748b;\\n    font-weight: 600;\\n  }\\n\\n  .wi-wo-id {\\n    font-size: 30px;\\n    font-weight: 700;\\n    color: #0f172a;\\n    font-variant-numeric: tabular-nums;\\n  }\\n\\n  .wi-topbar-right {\\n    display: flex;\\n    gap: 10px;\\n    flex-wrap: wrap;\\n  }\\n\\n  .wi-chip {\\n    font-weight: 700 !important;\\n    letter-spacing: 0.5px;\\n  }\\n\\n  .wi-body {\\n    gap: 0;\\n  }\\n\\n  .wi-col {\\n    padding: 6px;\\n  }\\n\\n  .wi-card {\\n    background: #ffffff !important;\\n    border: 1px solid #e2e8f0 !important;\\n    border-radius: 10px !important;\\n    padding: 20px 22px;\\n    height: 100%;\\n  }\\n\\n  .wi-card-vehicle {\\n    border-left: 6px solid #00897b !important;\\n  }\\n\\n  .wi-card-station {\\n    border-left: 6px solid #5e35b1 !important;\\n  }\\n\\n  .wi-card-head {\\n    display: flex;\\n    align-items: center;\\n    gap: 8px;\\n    font-size: 13px;\\n    letter-spacing: 2px;\\n    font-weight: 700;\\n    color: #64748b;\\n    margin-bottom: 6px;\\n  }\\n\\n  .wi-station-id {\\n    font-size: 44px;\\n    font-weight: 700;\\n    color: #4527a0;\\n    line-height: 1;\\n    margin-bottom: 6px;\\n  }\\n\\n  .wi-divider {\\n    margin: 16px 0;\\n    border-color: #edf2f7 !important;\\n  }\\n\\n  .wi-operation-name {\\n    font-size: 24px;\\n    font-weight: 600;\\n    color: #0f172a;\\n    margin-bottom: 18px;\\n  }\\n\\n  .wi-cycle {\\n    display: flex;\\n    align-items: center;\\n    gap: 12px;\\n    background: #f1f5f9;\\n    border-radius: 8px;\\n    padding: 12px 16px;\\n  }\\n\\n  .wi-cycle-text {\\n    display: flex;\\n    flex-direction: column;\\n    line-height: 1.2;\\n  }\\n\\n  .wi-cycle-label {\\n    font-size: 11px;\\n    letter-spacing: 1.5px;\\n    font-weight: 600;\\n    color: #64748b;\\n  }\\n\\n  .wi-cycle-value {\\n    font-size: 22px;\\n    font-weight: 700;\\n    color: #0f172a;\\n    font-variant-numeric: tabular-nums;\\n  }\\n\\n  .wi-vehicle-model {\\n    font-size: 34px;\\n    font-weight: 700;\\n    color: #0f172a;\\n    line-height: 1.05;\\n  }\\n\\n  .wi-vehicle-variant {\\n    font-size: 18px;\\n    font-weight: 500;\\n    color: #00695c;\\n    margin-bottom: 20px;\\n  }\\n\\n  .wi-spec-grid {\\n    gap: 0;\\n  }\\n\\n  .wi-spec {\\n    display: flex;\\n    flex-direction: column;\\n    padding: 10px 0;\\n  }\\n\\n  .wi-spec-label {\\n    font-size: 11px;\\n    letter-spacing: 1.5px;\\n    font-weight: 600;\\n    color: #64748b;\\n    margin-bottom: 2px;\\n  }\\n\\n  .wi-spec-value {\\n    font-size: 20px;\\n    font-weight: 600;\\n    color: #0f172a;\\n    display: flex;\\n    align-items: center;\\n    gap: 6px;\\n  }\\n\\n  .wi-vin {\\n    font-family: 'Roboto Mono', monospace;\\n    font-size: 18px;\\n    letter-spacing: 1px;\\n  }\\n\\n  .wi-color-dot {\\n    color: #cbd5e1;\\n  }\\n\\n  .wi-start-btn {\\n    margin-top: 16px;\\n    height: 84px !important;\\n    font-size: 24px !important;\\n    font-weight: 700 !important;\\n    letter-spacing: 1px;\\n    border-radius: 12px !important;\\n  }\\n\u003C\u002Fstyle>\",\"storeOutMessages\":true,\"passthru\":false,\"resendOnRefresh\":true,\"templateScope\":\"local\",\"className\":\"\",\"x\":570,\"y\":620,\"wires\":[[\"455c7536a9adcfe6\"]]},{\"id\":\"77ecf88a48f8c4f0\",\"type\":\"global-config\",\"env\":[],\"modules\":{\"@flowfuse\u002Fnode-red-dashboard\":\"1.30.2\"}}]\n{% endraw %}\n",[96,7065,7066,7076,9216],{"__ignoreMap":224},[228,7067,7068,7071,7074],{"class":230,"line":231},[228,7069,7070],{"class":234},"{",[228,7072,7073],{"class":915},"% raw %",[228,7075,5145],{"class":234},[228,7077,7078,7080,7082,7084,7086,7088,7090,7093,7095,7097,7099,7101,7103,7105,7107,7109,7111,7113,7115,7117,7119,7121,7123,7126,7128,7130,7132,7134,7136,7138,7140,7143,7145,7147,7149,7151,7153,7155,7157,7159,7161,7163,7165,7167,7169,7171,7173,7175,7177,7179,7181,7183,7185,7187,7189,7191,7193,7196,7198,7200,7202,7205,7207,7209,7211,7213,7215,7218,7220,7222,7224,7226,7228,7231,7233,7235,7237,7239,7241,7244,7246,7248,7250,7252,7254,7257,7259,7261,7263,7266,7268,7271,7273,7276,7278,7280,7282,7285,7287,7290,7292,7295,7297,7299,7301,7304,7306,7309,7311,7313,7315,7318,7320,7323,7325,7328,7330,7332,7334,7337,7339,7342,7344,7347,7349,7351,7353,7356,7358,7360,7362,7365,7367,7370,7372,7375,7377,7380,7382,7385,7387,7390,7392,7395,7397,7400,7402,7404,7406,7409,7411,7414,7416,7419,7421,7424,7426,7429,7431,7433,7435,7438,7440,7443,7445,7448,7450,7452,7454,7457,7459,7462,7464,7467,7469,7472,7474,7477,7479,7481,7483,7486,7488,7490,7492,7495,7497,7500,7502,7504,7506,7509,7511,7514,7516,7518,7520,7523,7525,7528,7530,7533,7535,7538,7540,7542,7544,7547,7549,7552,7554,7556,7558,7561,7563,7566,7568,7571,7573,7576,7578,7581,7583,7585,7587,7589,7591,7593,7595,7597,7599,7602,7604,7606,7608,7610,7612,7614,7616,7619,7621,7623,7625,7627,7629,7632,7634,7636,7638,7641,7643,7645,7647,7649,7651,7654,7656,7658,7660,7662,7664,7667,7669,7671,7673,7676,7678,7680,7682,7685,7687,7690,7692,7694,7696,7699,7701,7704,7706,7709,7711,7713,7715,7718,7720,7722,7724,7727,7729,7732,7734,7737,7739,7741,7743,7746,7748,7751,7753,7756,7758,7760,7762,7764,7766,7768,7770,7773,7775,7777,7779,7781,7783,7785,7787,7789,7791,7794,7796,7798,7800,7802,7804,7806,7808,7810,7812,7814,7816,7819,7821,7823,7825,7827,7829,7831,7833,7836,7838,7840,7842,7844,7846,7849,7851,7853,7855,7858,7860,7862,7864,7866,7868,7871,7873,7875,7877,7880,7882,7884,7886,7889,7891,7894,7896,7898,7900,7903,7905,7907,7909,7912,7914,7916,7918,7920,7922,7925,7927,7930,7932,7934,7936,7939,7941,7944,7946,7949,7951,7953,7955,7958,7960,7962,7964,7967,7969,7972,7974,7977,7979,7982,7984,7986,7988,7990,7992,7994,7996,7998,8000,8002,8004,8006,8008,8010,8012,8014,8016,8018,8020,8022,8024,8027,8029,8031,8033,8036,8038,8040,8042,8045,8047,8050,8052,8055,8057,8060,8062,8065,8067,8070,8072,8075,8077,8080,8082,8085,8087,8089,8091,8093,8095,8097,8099,8102,8104,8106,8108,8110,8112,8115,8117,8120,8122,8125,8127,8130,8132,8135,8137,8140,8142,8144,8146,8149,8151,8154,8156,8159,8161,8164,8166,8169,8171,8173,8175,8178,8180,8183,8185,8187,8189,8192,8194,8196,8198,8201,8203,8206,8208,8211,8213,8216,8218,8221,8223,8226,8228,8231,8233,8236,8238,8241,8243,8246,8248,8251,8253,8256,8258,8260,8262,8265,8267,8269,8271,8274,8276,8279,8281,8284,8286,8289,8291,8294,8296,8299,8301,8303,8305,8308,8310,8313,8315,8318,8320,8323,8325,8328,8330,8333,8335,8338,8340,8343,8345,8348,8350,8353,8355,8358,8360,8363,8365,8367,8369,8372,8374,8376,8378,8381,8383,8386,8388,8390,8392,8395,8397,8400,8402,8405,8407,8410,8412,8415,8417,8419,8421,8424,8426,8429,8431,8434,8436,8439,8441,8444,8446,8448,8450,8453,8455,8457,8459,8462,8464,8466,8468,8470,8472,8475,8477,8480,8482,8485,8487,8489,8491,8494,8496,8499,8501,8503,8505,8508,8510,8513,8515,8517,8519,8522,8524,8527,8529,8532,8534,8537,8539,8542,8544,8547,8549,8551,8553,8556,8558,8561,8563,8565,8567,8570,8572,8575,8577,8579,8581,8584,8586,8588,8590,8592,8594,8597,8599,8602,8604,8606,8608,8610,8612,8614,8616,8619,8621,8623,8625,8628,8630,8633,8635,8637,8639,8642,8644,8647,8649,8651,8653,8655,8657,8660,8662,8665,8667,8670,8672,8674,8676,8679,8681,8684,8686,8688,8690,8692,8694,8697,8699,8701,8703,8706,8708,8710,8712,8714,8716,8718,8720,8723,8725,8728,8730,8733,8735,8737,8739,8742,8744,8746,8748,8750,8752,8755,8757,8759,8761,8764,8766,8769,8771,8774,8776,8778,8780,8782,8784,8786,8788,8791,8793,8796,8798,8800,8802,8804,8806,8808,8810,8812,8814,8817,8819,8822,8824,8826,8828,8830,8832,8835,8837,8839,8841,8844,8846,8849,8851,8854,8856,8859,8861,8864,8866,8868,8870,8873,8875,8877,8879,8881,8883,8886,8888,8890,8892,8894,8896,8899,8901,8903,8905,8908,8910,8912,8914,8916,8918,8920,8922,8924,8926,8929,8931,8933,8935,8938,8940,8943,8945,8947,8949,8951,8953,8955,8957,8959,8961,8964,8966,8968,8970,8973,8975,8978,8980,8982,8984,8987,8989,8991,8993,8996,8998,9001,9003,9005,9007,9010,9012,9015,9017,9020,9022,9025,9027,9029,9031,9033,9035,9038,9040,9042,9044,9047,9049,9051,9053,9056,9058,9060,9062,9065,9067,9069,9071,9074,9076,9078,9080,9083,9085,9087,9089,9092,9094,9096,9098,9101,9103,9105,9107,9109,9111,9113,9115,9117,9120,9122,9124,9126,9128,9130,9132,9134,9136,9138,9140,9142,9144,9147,9149,9151,9153,9155,9157,9159,9161,9164,9166,9168,9170,9172,9174,9176,9178,9180,9182,9184,9186,9188,9190,9192,9194,9196,9198,9200,9202,9204,9206,9208,9210,9212,9214],{"class":230,"line":5062},[228,7079,235],{"class":234},[228,7081,238],{"class":234},[228,7083,242],{"class":241},[228,7085,238],{"class":234},[228,7087,247],{"class":234},[228,7089,238],{"class":234},[228,7091,7092],{"class":252},"eb41d1ba8e4bfb01",[228,7094,238],{"class":234},[228,7096,258],{"class":234},[228,7098,238],{"class":234},[228,7100,263],{"class":241},[228,7102,238],{"class":234},[228,7104,247],{"class":234},[228,7106,238],{"class":234},[228,7108,102],{"class":252},[228,7110,238],{"class":234},[228,7112,258],{"class":234},[228,7114,238],{"class":234},[228,7116,281],{"class":241},[228,7118,238],{"class":234},[228,7120,247],{"class":234},[228,7122,238],{"class":234},[228,7124,7125],{"class":252},"c50b1b501a74c081",[228,7127,238],{"class":234},[228,7129,258],{"class":234},[228,7131,238],{"class":234},[228,7133,673],{"class":241},[228,7135,238],{"class":234},[228,7137,247],{"class":234},[228,7139,238],{"class":234},[228,7141,7142],{"class":252},"3e9b1176168ca254",[228,7144,238],{"class":234},[228,7146,258],{"class":234},[228,7148,238],{"class":234},[228,7150,272],{"class":241},[228,7152,238],{"class":234},[228,7154,247],{"class":234},[228,7156,770],{"class":234},[228,7158,258],{"class":234},[228,7160,238],{"class":234},[228,7162,4638],{"class":241},[228,7164,238],{"class":234},[228,7166,247],{"class":234},[228,7168,770],{"class":234},[228,7170,258],{"class":234},[228,7172,238],{"class":234},[228,7174,4277],{"class":241},[228,7176,238],{"class":234},[228,7178,247],{"class":234},[228,7180,770],{"class":234},[228,7182,258],{"class":234},[228,7184,238],{"class":234},[228,7186,690],{"class":241},[228,7188,238],{"class":234},[228,7190,247],{"class":234},[228,7192,238],{"class":234},[228,7194,7195],{"class":252},"Current Work Order Card",[228,7197,238],{"class":234},[228,7199,258],{"class":234},[228,7201,238],{"class":234},[228,7203,7204],{"class":241},"order",[228,7206,238],{"class":234},[228,7208,247],{"class":234},[228,7210,337],{"class":573},[228,7212,258],{"class":234},[228,7214,238],{"class":234},[228,7216,7217],{"class":241},"width",[228,7219,238],{"class":234},[228,7221,247],{"class":234},[228,7223,1042],{"class":573},[228,7225,258],{"class":234},[228,7227,238],{"class":234},[228,7229,7230],{"class":241},"height",[228,7232,238],{"class":234},[228,7234,247],{"class":234},[228,7236,1042],{"class":573},[228,7238,258],{"class":234},[228,7240,238],{"class":234},[228,7242,7243],{"class":241},"head",[228,7245,238],{"class":234},[228,7247,247],{"class":234},[228,7249,770],{"class":234},[228,7251,258],{"class":234},[228,7253,238],{"class":234},[228,7255,7256],{"class":241},"format",[228,7258,238],{"class":234},[228,7260,247],{"class":234},[228,7262,238],{"class":234},[228,7264,7265],{"class":252},"\u003Ctemplate>",[228,7267,916],{"class":915},[228,7269,7270],{"class":252},"  \u003Cdiv class=",[228,7272,928],{"class":915},[228,7274,7275],{"class":252},"wi-root",[228,7277,928],{"class":915},[228,7279,5360],{"class":252},[228,7281,916],{"class":915},[228,7283,7284],{"class":252},"    \u003C!-- Top status bar -->",[228,7286,916],{"class":915},[228,7288,7289],{"class":252},"    \u003Cdiv class=",[228,7291,928],{"class":915},[228,7293,7294],{"class":252},"wi-topbar",[228,7296,928],{"class":915},[228,7298,5360],{"class":252},[228,7300,916],{"class":915},[228,7302,7303],{"class":252},"      \u003Cdiv class=",[228,7305,928],{"class":915},[228,7307,7308],{"class":252},"wi-topbar-left",[228,7310,928],{"class":915},[228,7312,5360],{"class":252},[228,7314,916],{"class":915},[228,7316,7317],{"class":252},"        \u003Cspan class=",[228,7319,928],{"class":915},[228,7321,7322],{"class":252},"wi-wo-label",[228,7324,928],{"class":915},[228,7326,7327],{"class":252},">WORK ORDER\u003C\u002Fspan>",[228,7329,916],{"class":915},[228,7331,7317],{"class":252},[228,7333,928],{"class":915},[228,7335,7336],{"class":252},"wi-wo-id",[228,7338,928],{"class":915},[228,7340,7341],{"class":252},">{{ msg?.payload?.workOrderId ?? '—' }}\u003C\u002Fspan>",[228,7343,916],{"class":915},[228,7345,7346],{"class":252},"      \u003C\u002Fdiv>",[228,7348,916],{"class":915},[228,7350,7303],{"class":252},[228,7352,928],{"class":915},[228,7354,7355],{"class":252},"wi-topbar-right",[228,7357,928],{"class":915},[228,7359,5360],{"class":252},[228,7361,916],{"class":915},[228,7363,7364],{"class":252},"        \u003Cv-chip size=",[228,7366,928],{"class":915},[228,7368,7369],{"class":252},"large",[228,7371,928],{"class":915},[228,7373,7374],{"class":252}," variant=",[228,7376,928],{"class":915},[228,7378,7379],{"class":252},"flat",[228,7381,928],{"class":915},[228,7383,7384],{"class":252}," label :color=",[228,7386,928],{"class":915},[228,7388,7389],{"class":252},"priorityColor",[228,7391,928],{"class":915},[228,7393,7394],{"class":252}," class=",[228,7396,928],{"class":915},[228,7398,7399],{"class":252},"wi-chip",[228,7401,928],{"class":915},[228,7403,5360],{"class":252},[228,7405,916],{"class":915},[228,7407,7408],{"class":252},"          \u003Cv-icon start icon=",[228,7410,928],{"class":915},[228,7412,7413],{"class":252},"mdi-flag",[228,7415,928],{"class":915},[228,7417,7418],{"class":252},">\u003C\u002Fv-icon>",[228,7420,916],{"class":915},[228,7422,7423],{"class":252},"          {{ (msg?.payload?.priority ?? 'Normal').toUpperCase() }} PRIORITY",[228,7425,916],{"class":915},[228,7427,7428],{"class":252},"        \u003C\u002Fv-chip>",[228,7430,916],{"class":915},[228,7432,7346],{"class":252},[228,7434,916],{"class":915},[228,7436,7437],{"class":252},"    \u003C\u002Fdiv>",[228,7439,922],{"class":915},[228,7441,7442],{"class":252},"    \u003Cv-row no-gutters class=",[228,7444,928],{"class":915},[228,7446,7447],{"class":252},"wi-body",[228,7449,928],{"class":915},[228,7451,5360],{"class":252},[228,7453,916],{"class":915},[228,7455,7456],{"class":252},"      \u003C!-- Left: Station + Operation -->",[228,7458,916],{"class":915},[228,7460,7461],{"class":252},"      \u003Cv-col cols=",[228,7463,928],{"class":915},[228,7465,7466],{"class":252},"12",[228,7468,928],{"class":915},[228,7470,7471],{"class":252}," md=",[228,7473,928],{"class":915},[228,7475,7476],{"class":252},"5",[228,7478,928],{"class":915},[228,7480,7394],{"class":252},[228,7482,928],{"class":915},[228,7484,7485],{"class":252},"wi-col",[228,7487,928],{"class":915},[228,7489,5360],{"class":252},[228,7491,916],{"class":915},[228,7493,7494],{"class":252},"        \u003Cv-card flat class=",[228,7496,928],{"class":915},[228,7498,7499],{"class":252},"wi-card wi-card-station",[228,7501,928],{"class":915},[228,7503,5360],{"class":252},[228,7505,916],{"class":915},[228,7507,7508],{"class":252},"          \u003Cdiv class=",[228,7510,928],{"class":915},[228,7512,7513],{"class":252},"wi-card-head",[228,7515,928],{"class":915},[228,7517,5360],{"class":252},[228,7519,916],{"class":915},[228,7521,7522],{"class":252},"            \u003Cv-icon icon=",[228,7524,928],{"class":915},[228,7526,7527],{"class":252},"mdi-map-marker-radius",[228,7529,928],{"class":915},[228,7531,7532],{"class":252}," size=",[228,7534,928],{"class":915},[228,7536,7537],{"class":252},"22",[228,7539,928],{"class":915},[228,7541,7418],{"class":252},[228,7543,916],{"class":915},[228,7545,7546],{"class":252},"            \u003Cspan>STATION\u003C\u002Fspan>",[228,7548,916],{"class":915},[228,7550,7551],{"class":252},"          \u003C\u002Fdiv>",[228,7553,916],{"class":915},[228,7555,7508],{"class":252},[228,7557,928],{"class":915},[228,7559,7560],{"class":252},"wi-station-id",[228,7562,928],{"class":915},[228,7564,7565],{"class":252},">{{ msg?.payload?.stationId ?? '—' }}\u003C\u002Fdiv>",[228,7567,922],{"class":915},[228,7569,7570],{"class":252},"          \u003Cv-divider class=",[228,7572,928],{"class":915},[228,7574,7575],{"class":252},"wi-divider",[228,7577,928],{"class":915},[228,7579,7580],{"class":252},">\u003C\u002Fv-divider>",[228,7582,922],{"class":915},[228,7584,7508],{"class":252},[228,7586,928],{"class":915},[228,7588,7513],{"class":252},[228,7590,928],{"class":915},[228,7592,5360],{"class":252},[228,7594,916],{"class":915},[228,7596,7522],{"class":252},[228,7598,928],{"class":915},[228,7600,7601],{"class":252},"mdi-clipboard-text-outline",[228,7603,928],{"class":915},[228,7605,7532],{"class":252},[228,7607,928],{"class":915},[228,7609,7537],{"class":252},[228,7611,928],{"class":915},[228,7613,7418],{"class":252},[228,7615,916],{"class":915},[228,7617,7618],{"class":252},"            \u003Cspan>OPERATION\u003C\u002Fspan>",[228,7620,916],{"class":915},[228,7622,7551],{"class":252},[228,7624,916],{"class":915},[228,7626,7508],{"class":252},[228,7628,928],{"class":915},[228,7630,7631],{"class":252},"wi-operation-name",[228,7633,928],{"class":915},[228,7635,5360],{"class":252},[228,7637,916],{"class":915},[228,7639,7640],{"class":252},"            {{ msg?.payload?.operation?.name ?? 'Awaiting operation' }}",[228,7642,916],{"class":915},[228,7644,7551],{"class":252},[228,7646,922],{"class":915},[228,7648,7508],{"class":252},[228,7650,928],{"class":915},[228,7652,7653],{"class":252},"wi-cycle",[228,7655,928],{"class":915},[228,7657,5360],{"class":252},[228,7659,916],{"class":915},[228,7661,7522],{"class":252},[228,7663,928],{"class":915},[228,7665,7666],{"class":252},"mdi-timer-outline",[228,7668,928],{"class":915},[228,7670,7532],{"class":252},[228,7672,928],{"class":915},[228,7674,7675],{"class":252},"26",[228,7677,928],{"class":915},[228,7679,7418],{"class":252},[228,7681,916],{"class":915},[228,7683,7684],{"class":252},"            \u003Cdiv class=",[228,7686,928],{"class":915},[228,7688,7689],{"class":252},"wi-cycle-text",[228,7691,928],{"class":915},[228,7693,5360],{"class":252},[228,7695,916],{"class":915},[228,7697,7698],{"class":252},"              \u003Cspan class=",[228,7700,928],{"class":915},[228,7702,7703],{"class":252},"wi-cycle-label",[228,7705,928],{"class":915},[228,7707,7708],{"class":252},">ESTIMATED CYCLE TIME\u003C\u002Fspan>",[228,7710,916],{"class":915},[228,7712,7698],{"class":252},[228,7714,928],{"class":915},[228,7716,7717],{"class":252},"wi-cycle-value",[228,7719,928],{"class":915},[228,7721,5360],{"class":252},[228,7723,916],{"class":915},[228,7725,7726],{"class":252},"                {{ msg?.payload?.operation?.estimatedCycleTime ?? '—' }}",[228,7728,916],{"class":915},[228,7730,7731],{"class":252},"              \u003C\u002Fspan>",[228,7733,916],{"class":915},[228,7735,7736],{"class":252},"            \u003C\u002Fdiv>",[228,7738,916],{"class":915},[228,7740,7551],{"class":252},[228,7742,916],{"class":915},[228,7744,7745],{"class":252},"        \u003C\u002Fv-card>",[228,7747,916],{"class":915},[228,7749,7750],{"class":252},"      \u003C\u002Fv-col>",[228,7752,922],{"class":915},[228,7754,7755],{"class":252},"      \u003C!-- Right: Vehicle -->",[228,7757,916],{"class":915},[228,7759,7461],{"class":252},[228,7761,928],{"class":915},[228,7763,7466],{"class":252},[228,7765,928],{"class":915},[228,7767,7471],{"class":252},[228,7769,928],{"class":915},[228,7771,7772],{"class":252},"7",[228,7774,928],{"class":915},[228,7776,7394],{"class":252},[228,7778,928],{"class":915},[228,7780,7485],{"class":252},[228,7782,928],{"class":915},[228,7784,5360],{"class":252},[228,7786,916],{"class":915},[228,7788,7494],{"class":252},[228,7790,928],{"class":915},[228,7792,7793],{"class":252},"wi-card wi-card-vehicle",[228,7795,928],{"class":915},[228,7797,5360],{"class":252},[228,7799,916],{"class":915},[228,7801,7508],{"class":252},[228,7803,928],{"class":915},[228,7805,7513],{"class":252},[228,7807,928],{"class":915},[228,7809,5360],{"class":252},[228,7811,916],{"class":915},[228,7813,7522],{"class":252},[228,7815,928],{"class":915},[228,7817,7818],{"class":252},"mdi-car-side",[228,7820,928],{"class":915},[228,7822,7532],{"class":252},[228,7824,928],{"class":915},[228,7826,7537],{"class":252},[228,7828,928],{"class":915},[228,7830,7418],{"class":252},[228,7832,916],{"class":915},[228,7834,7835],{"class":252},"            \u003Cspan>VEHICLE\u003C\u002Fspan>",[228,7837,916],{"class":915},[228,7839,7551],{"class":252},[228,7841,922],{"class":915},[228,7843,7508],{"class":252},[228,7845,928],{"class":915},[228,7847,7848],{"class":252},"wi-vehicle-model",[228,7850,928],{"class":915},[228,7852,5360],{"class":252},[228,7854,916],{"class":915},[228,7856,7857],{"class":252},"            {{ msg?.payload?.vehicle?.model ?? 'Unknown model' }}",[228,7859,916],{"class":915},[228,7861,7551],{"class":252},[228,7863,916],{"class":915},[228,7865,7508],{"class":252},[228,7867,928],{"class":915},[228,7869,7870],{"class":252},"wi-vehicle-variant",[228,7872,928],{"class":915},[228,7874,5360],{"class":252},[228,7876,916],{"class":915},[228,7878,7879],{"class":252},"            {{ msg?.payload?.vehicle?.variant ?? '' }}",[228,7881,916],{"class":915},[228,7883,7551],{"class":252},[228,7885,922],{"class":915},[228,7887,7888],{"class":252},"          \u003Cv-row no-gutters class=",[228,7890,928],{"class":915},[228,7892,7893],{"class":252},"wi-spec-grid",[228,7895,928],{"class":915},[228,7897,5360],{"class":252},[228,7899,916],{"class":915},[228,7901,7902],{"class":252},"            \u003Cv-col cols=",[228,7904,928],{"class":915},[228,7906,7466],{"class":252},[228,7908,928],{"class":915},[228,7910,7911],{"class":252}," sm=",[228,7913,928],{"class":915},[228,7915,7772],{"class":252},[228,7917,928],{"class":915},[228,7919,5360],{"class":252},[228,7921,916],{"class":915},[228,7923,7924],{"class":252},"              \u003Cdiv class=",[228,7926,928],{"class":915},[228,7928,7929],{"class":252},"wi-spec",[228,7931,928],{"class":915},[228,7933,5360],{"class":252},[228,7935,916],{"class":915},[228,7937,7938],{"class":252},"                \u003Cspan class=",[228,7940,928],{"class":915},[228,7942,7943],{"class":252},"wi-spec-label",[228,7945,928],{"class":915},[228,7947,7948],{"class":252},">VIN\u003C\u002Fspan>",[228,7950,916],{"class":915},[228,7952,7938],{"class":252},[228,7954,928],{"class":915},[228,7956,7957],{"class":252},"wi-spec-value wi-vin",[228,7959,928],{"class":915},[228,7961,5360],{"class":252},[228,7963,916],{"class":915},[228,7965,7966],{"class":252},"                  {{ msg?.payload?.vehicle?.vin ?? '—' }}",[228,7968,916],{"class":915},[228,7970,7971],{"class":252},"                \u003C\u002Fspan>",[228,7973,916],{"class":915},[228,7975,7976],{"class":252},"              \u003C\u002Fdiv>",[228,7978,916],{"class":915},[228,7980,7981],{"class":252},"            \u003C\u002Fv-col>",[228,7983,916],{"class":915},[228,7985,7902],{"class":252},[228,7987,928],{"class":915},[228,7989,7466],{"class":252},[228,7991,928],{"class":915},[228,7993,7911],{"class":252},[228,7995,928],{"class":915},[228,7997,7476],{"class":252},[228,7999,928],{"class":915},[228,8001,5360],{"class":252},[228,8003,916],{"class":915},[228,8005,7924],{"class":252},[228,8007,928],{"class":915},[228,8009,7929],{"class":252},[228,8011,928],{"class":915},[228,8013,5360],{"class":252},[228,8015,916],{"class":915},[228,8017,7938],{"class":252},[228,8019,928],{"class":915},[228,8021,7943],{"class":252},[228,8023,928],{"class":915},[228,8025,8026],{"class":252},">COLOR\u003C\u002Fspan>",[228,8028,916],{"class":915},[228,8030,7938],{"class":252},[228,8032,928],{"class":915},[228,8034,8035],{"class":252},"wi-spec-value",[228,8037,928],{"class":915},[228,8039,5360],{"class":252},[228,8041,916],{"class":915},[228,8043,8044],{"class":252},"                  \u003Cv-icon",[228,8046,916],{"class":915},[228,8048,8049],{"class":252},"                    icon=",[228,8051,928],{"class":915},[228,8053,8054],{"class":252},"mdi-circle",[228,8056,987],{"class":915},[228,8058,8059],{"class":252},"                    size=",[228,8061,928],{"class":915},[228,8063,8064],{"class":252},"18",[228,8066,987],{"class":915},[228,8068,8069],{"class":252},"                    class=",[228,8071,928],{"class":915},[228,8073,8074],{"class":252},"wi-color-dot",[228,8076,987],{"class":915},[228,8078,8079],{"class":252},"                  >\u003C\u002Fv-icon>",[228,8081,916],{"class":915},[228,8083,8084],{"class":252},"                  {{ msg?.payload?.vehicle?.color ?? '—' }}",[228,8086,916],{"class":915},[228,8088,7971],{"class":252},[228,8090,916],{"class":915},[228,8092,7976],{"class":252},[228,8094,916],{"class":915},[228,8096,7981],{"class":252},[228,8098,916],{"class":915},[228,8100,8101],{"class":252},"          \u003C\u002Fv-row>",[228,8103,916],{"class":915},[228,8105,7745],{"class":252},[228,8107,916],{"class":915},[228,8109,7750],{"class":252},[228,8111,916],{"class":915},[228,8113,8114],{"class":252},"    \u003C\u002Fv-row>",[228,8116,922],{"class":915},[228,8118,8119],{"class":252},"    \u003C!-- Start button -->",[228,8121,916],{"class":915},[228,8123,8124],{"class":252},"    \u003Cv-btn block size=",[228,8126,928],{"class":915},[228,8128,8129],{"class":252},"x-large",[228,8131,928],{"class":915},[228,8133,8134],{"class":252}," color=",[228,8136,928],{"class":915},[228,8138,8139],{"class":252},"green-darken-1",[228,8141,928],{"class":915},[228,8143,7394],{"class":252},[228,8145,928],{"class":915},[228,8147,8148],{"class":252},"wi-start-btn",[228,8150,928],{"class":915},[228,8152,8153],{"class":252}," :disabled=",[228,8155,928],{"class":915},[228,8157,8158],{"class":252},"!msg?.payload?.workOrderId",[228,8160,987],{"class":915},[228,8162,8163],{"class":252},"      @click=",[228,8165,928],{"class":915},[228,8167,8168],{"class":252},"send({ payload: { action: 'start', workOrderId: msg?.payload?.workOrderId, stationId: msg?.payload?.stationId } })",[228,8170,928],{"class":915},[228,8172,5360],{"class":252},[228,8174,916],{"class":915},[228,8176,8177],{"class":252},"      \u003Cv-icon start icon=",[228,8179,928],{"class":915},[228,8181,8182],{"class":252},"mdi-play-circle",[228,8184,928],{"class":915},[228,8186,7532],{"class":252},[228,8188,928],{"class":915},[228,8190,8191],{"class":252},"34",[228,8193,928],{"class":915},[228,8195,7418],{"class":252},[228,8197,916],{"class":915},[228,8199,8200],{"class":252},"      START WORK ORDER",[228,8202,916],{"class":915},[228,8204,8205],{"class":252},"    \u003C\u002Fv-btn>",[228,8207,916],{"class":915},[228,8209,8210],{"class":252},"  \u003C\u002Fdiv>",[228,8212,916],{"class":915},[228,8214,8215],{"class":252},"\u003C\u002Ftemplate>",[228,8217,922],{"class":915},[228,8219,8220],{"class":252},"\u003Cscript>",[228,8222,916],{"class":915},[228,8224,8225],{"class":252},"  export default {",[228,8227,916],{"class":915},[228,8229,8230],{"class":252},"  computed: {",[228,8232,916],{"class":915},[228,8234,8235],{"class":252},"    priorityColor () {",[228,8237,916],{"class":915},[228,8239,8240],{"class":252},"      const p = (this.msg?.payload?.priority ?? '').toLowerCase()",[228,8242,916],{"class":915},[228,8244,8245],{"class":252},"      if (p === 'high' || p === 'urgent' || p === 'critical') return 'red-darken-1'",[228,8247,916],{"class":915},[228,8249,8250],{"class":252},"      if (p === 'medium') return 'amber-darken-2'",[228,8252,916],{"class":915},[228,8254,8255],{"class":252},"      return 'blue-grey-darken-1'",[228,8257,916],{"class":915},[228,8259,3695],{"class":252},[228,8261,916],{"class":915},[228,8263,8264],{"class":252},"  }",[228,8266,916],{"class":915},[228,8268,1575],{"class":252},[228,8270,916],{"class":915},[228,8272,8273],{"class":252},"\u003C\u002Fscript>",[228,8275,922],{"class":915},[228,8277,8278],{"class":252},"\u003Cstyle>",[228,8280,916],{"class":915},[228,8282,8283],{"class":252},"  .wi-root {",[228,8285,916],{"class":915},[228,8287,8288],{"class":252},"    font-family: 'Roboto', system-ui, sans-serif;",[228,8290,916],{"class":915},[228,8292,8293],{"class":252},"    color: #1f2933;",[228,8295,916],{"class":915},[228,8297,8298],{"class":252},"    padding: 4px;",[228,8300,916],{"class":915},[228,8302,8264],{"class":252},[228,8304,922],{"class":915},[228,8306,8307],{"class":252},"  .wi-topbar {",[228,8309,916],{"class":915},[228,8311,8312],{"class":252},"    display: flex;",[228,8314,916],{"class":915},[228,8316,8317],{"class":252},"    align-items: center;",[228,8319,916],{"class":915},[228,8321,8322],{"class":252},"    justify-content: space-between;",[228,8324,916],{"class":915},[228,8326,8327],{"class":252},"    flex-wrap: wrap;",[228,8329,916],{"class":915},[228,8331,8332],{"class":252},"    gap: 12px;",[228,8334,916],{"class":915},[228,8336,8337],{"class":252},"    background: #ffffff;",[228,8339,916],{"class":915},[228,8341,8342],{"class":252},"    border: 1px solid #e2e8f0;",[228,8344,916],{"class":915},[228,8346,8347],{"class":252},"    border-left: 6px solid #1565c0;",[228,8349,916],{"class":915},[228,8351,8352],{"class":252},"    border-radius: 10px;",[228,8354,916],{"class":915},[228,8356,8357],{"class":252},"    padding: 14px 20px;",[228,8359,916],{"class":915},[228,8361,8362],{"class":252},"    margin-bottom: 14px;",[228,8364,916],{"class":915},[228,8366,8264],{"class":252},[228,8368,922],{"class":915},[228,8370,8371],{"class":252},"  .wi-topbar-left {",[228,8373,916],{"class":915},[228,8375,8312],{"class":252},[228,8377,916],{"class":915},[228,8379,8380],{"class":252},"    flex-direction: column;",[228,8382,916],{"class":915},[228,8384,8385],{"class":252},"    line-height: 1.1;",[228,8387,916],{"class":915},[228,8389,8264],{"class":252},[228,8391,922],{"class":915},[228,8393,8394],{"class":252},"  .wi-wo-label {",[228,8396,916],{"class":915},[228,8398,8399],{"class":252},"    font-size: 12px;",[228,8401,916],{"class":915},[228,8403,8404],{"class":252},"    letter-spacing: 2px;",[228,8406,916],{"class":915},[228,8408,8409],{"class":252},"    color: #64748b;",[228,8411,916],{"class":915},[228,8413,8414],{"class":252},"    font-weight: 600;",[228,8416,916],{"class":915},[228,8418,8264],{"class":252},[228,8420,922],{"class":915},[228,8422,8423],{"class":252},"  .wi-wo-id {",[228,8425,916],{"class":915},[228,8427,8428],{"class":252},"    font-size: 30px;",[228,8430,916],{"class":915},[228,8432,8433],{"class":252},"    font-weight: 700;",[228,8435,916],{"class":915},[228,8437,8438],{"class":252},"    color: #0f172a;",[228,8440,916],{"class":915},[228,8442,8443],{"class":252},"    font-variant-numeric: tabular-nums;",[228,8445,916],{"class":915},[228,8447,8264],{"class":252},[228,8449,922],{"class":915},[228,8451,8452],{"class":252},"  .wi-topbar-right {",[228,8454,916],{"class":915},[228,8456,8312],{"class":252},[228,8458,916],{"class":915},[228,8460,8461],{"class":252},"    gap: 10px;",[228,8463,916],{"class":915},[228,8465,8327],{"class":252},[228,8467,916],{"class":915},[228,8469,8264],{"class":252},[228,8471,922],{"class":915},[228,8473,8474],{"class":252},"  .wi-chip {",[228,8476,916],{"class":915},[228,8478,8479],{"class":252},"    font-weight: 700 !important;",[228,8481,916],{"class":915},[228,8483,8484],{"class":252},"    letter-spacing: 0.5px;",[228,8486,916],{"class":915},[228,8488,8264],{"class":252},[228,8490,922],{"class":915},[228,8492,8493],{"class":252},"  .wi-body {",[228,8495,916],{"class":915},[228,8497,8498],{"class":252},"    gap: 0;",[228,8500,916],{"class":915},[228,8502,8264],{"class":252},[228,8504,922],{"class":915},[228,8506,8507],{"class":252},"  .wi-col {",[228,8509,916],{"class":915},[228,8511,8512],{"class":252},"    padding: 6px;",[228,8514,916],{"class":915},[228,8516,8264],{"class":252},[228,8518,922],{"class":915},[228,8520,8521],{"class":252},"  .wi-card {",[228,8523,916],{"class":915},[228,8525,8526],{"class":252},"    background: #ffffff !important;",[228,8528,916],{"class":915},[228,8530,8531],{"class":252},"    border: 1px solid #e2e8f0 !important;",[228,8533,916],{"class":915},[228,8535,8536],{"class":252},"    border-radius: 10px !important;",[228,8538,916],{"class":915},[228,8540,8541],{"class":252},"    padding: 20px 22px;",[228,8543,916],{"class":915},[228,8545,8546],{"class":252},"    height: 100%;",[228,8548,916],{"class":915},[228,8550,8264],{"class":252},[228,8552,922],{"class":915},[228,8554,8555],{"class":252},"  .wi-card-vehicle {",[228,8557,916],{"class":915},[228,8559,8560],{"class":252},"    border-left: 6px solid #00897b !important;",[228,8562,916],{"class":915},[228,8564,8264],{"class":252},[228,8566,922],{"class":915},[228,8568,8569],{"class":252},"  .wi-card-station {",[228,8571,916],{"class":915},[228,8573,8574],{"class":252},"    border-left: 6px solid #5e35b1 !important;",[228,8576,916],{"class":915},[228,8578,8264],{"class":252},[228,8580,922],{"class":915},[228,8582,8583],{"class":252},"  .wi-card-head {",[228,8585,916],{"class":915},[228,8587,8312],{"class":252},[228,8589,916],{"class":915},[228,8591,8317],{"class":252},[228,8593,916],{"class":915},[228,8595,8596],{"class":252},"    gap: 8px;",[228,8598,916],{"class":915},[228,8600,8601],{"class":252},"    font-size: 13px;",[228,8603,916],{"class":915},[228,8605,8404],{"class":252},[228,8607,916],{"class":915},[228,8609,8433],{"class":252},[228,8611,916],{"class":915},[228,8613,8409],{"class":252},[228,8615,916],{"class":915},[228,8617,8618],{"class":252},"    margin-bottom: 6px;",[228,8620,916],{"class":915},[228,8622,8264],{"class":252},[228,8624,922],{"class":915},[228,8626,8627],{"class":252},"  .wi-station-id {",[228,8629,916],{"class":915},[228,8631,8632],{"class":252},"    font-size: 44px;",[228,8634,916],{"class":915},[228,8636,8433],{"class":252},[228,8638,916],{"class":915},[228,8640,8641],{"class":252},"    color: #4527a0;",[228,8643,916],{"class":915},[228,8645,8646],{"class":252},"    line-height: 1;",[228,8648,916],{"class":915},[228,8650,8618],{"class":252},[228,8652,916],{"class":915},[228,8654,8264],{"class":252},[228,8656,922],{"class":915},[228,8658,8659],{"class":252},"  .wi-divider {",[228,8661,916],{"class":915},[228,8663,8664],{"class":252},"    margin: 16px 0;",[228,8666,916],{"class":915},[228,8668,8669],{"class":252},"    border-color: #edf2f7 !important;",[228,8671,916],{"class":915},[228,8673,8264],{"class":252},[228,8675,922],{"class":915},[228,8677,8678],{"class":252},"  .wi-operation-name {",[228,8680,916],{"class":915},[228,8682,8683],{"class":252},"    font-size: 24px;",[228,8685,916],{"class":915},[228,8687,8414],{"class":252},[228,8689,916],{"class":915},[228,8691,8438],{"class":252},[228,8693,916],{"class":915},[228,8695,8696],{"class":252},"    margin-bottom: 18px;",[228,8698,916],{"class":915},[228,8700,8264],{"class":252},[228,8702,922],{"class":915},[228,8704,8705],{"class":252},"  .wi-cycle {",[228,8707,916],{"class":915},[228,8709,8312],{"class":252},[228,8711,916],{"class":915},[228,8713,8317],{"class":252},[228,8715,916],{"class":915},[228,8717,8332],{"class":252},[228,8719,916],{"class":915},[228,8721,8722],{"class":252},"    background: #f1f5f9;",[228,8724,916],{"class":915},[228,8726,8727],{"class":252},"    border-radius: 8px;",[228,8729,916],{"class":915},[228,8731,8732],{"class":252},"    padding: 12px 16px;",[228,8734,916],{"class":915},[228,8736,8264],{"class":252},[228,8738,922],{"class":915},[228,8740,8741],{"class":252},"  .wi-cycle-text {",[228,8743,916],{"class":915},[228,8745,8312],{"class":252},[228,8747,916],{"class":915},[228,8749,8380],{"class":252},[228,8751,916],{"class":915},[228,8753,8754],{"class":252},"    line-height: 1.2;",[228,8756,916],{"class":915},[228,8758,8264],{"class":252},[228,8760,922],{"class":915},[228,8762,8763],{"class":252},"  .wi-cycle-label {",[228,8765,916],{"class":915},[228,8767,8768],{"class":252},"    font-size: 11px;",[228,8770,916],{"class":915},[228,8772,8773],{"class":252},"    letter-spacing: 1.5px;",[228,8775,916],{"class":915},[228,8777,8414],{"class":252},[228,8779,916],{"class":915},[228,8781,8409],{"class":252},[228,8783,916],{"class":915},[228,8785,8264],{"class":252},[228,8787,922],{"class":915},[228,8789,8790],{"class":252},"  .wi-cycle-value {",[228,8792,916],{"class":915},[228,8794,8795],{"class":252},"    font-size: 22px;",[228,8797,916],{"class":915},[228,8799,8433],{"class":252},[228,8801,916],{"class":915},[228,8803,8438],{"class":252},[228,8805,916],{"class":915},[228,8807,8443],{"class":252},[228,8809,916],{"class":915},[228,8811,8264],{"class":252},[228,8813,922],{"class":915},[228,8815,8816],{"class":252},"  .wi-vehicle-model {",[228,8818,916],{"class":915},[228,8820,8821],{"class":252},"    font-size: 34px;",[228,8823,916],{"class":915},[228,8825,8433],{"class":252},[228,8827,916],{"class":915},[228,8829,8438],{"class":252},[228,8831,916],{"class":915},[228,8833,8834],{"class":252},"    line-height: 1.05;",[228,8836,916],{"class":915},[228,8838,8264],{"class":252},[228,8840,922],{"class":915},[228,8842,8843],{"class":252},"  .wi-vehicle-variant {",[228,8845,916],{"class":915},[228,8847,8848],{"class":252},"    font-size: 18px;",[228,8850,916],{"class":915},[228,8852,8853],{"class":252},"    font-weight: 500;",[228,8855,916],{"class":915},[228,8857,8858],{"class":252},"    color: #00695c;",[228,8860,916],{"class":915},[228,8862,8863],{"class":252},"    margin-bottom: 20px;",[228,8865,916],{"class":915},[228,8867,8264],{"class":252},[228,8869,922],{"class":915},[228,8871,8872],{"class":252},"  .wi-spec-grid {",[228,8874,916],{"class":915},[228,8876,8498],{"class":252},[228,8878,916],{"class":915},[228,8880,8264],{"class":252},[228,8882,922],{"class":915},[228,8884,8885],{"class":252},"  .wi-spec {",[228,8887,916],{"class":915},[228,8889,8312],{"class":252},[228,8891,916],{"class":915},[228,8893,8380],{"class":252},[228,8895,916],{"class":915},[228,8897,8898],{"class":252},"    padding: 10px 0;",[228,8900,916],{"class":915},[228,8902,8264],{"class":252},[228,8904,922],{"class":915},[228,8906,8907],{"class":252},"  .wi-spec-label {",[228,8909,916],{"class":915},[228,8911,8768],{"class":252},[228,8913,916],{"class":915},[228,8915,8773],{"class":252},[228,8917,916],{"class":915},[228,8919,8414],{"class":252},[228,8921,916],{"class":915},[228,8923,8409],{"class":252},[228,8925,916],{"class":915},[228,8927,8928],{"class":252},"    margin-bottom: 2px;",[228,8930,916],{"class":915},[228,8932,8264],{"class":252},[228,8934,922],{"class":915},[228,8936,8937],{"class":252},"  .wi-spec-value {",[228,8939,916],{"class":915},[228,8941,8942],{"class":252},"    font-size: 20px;",[228,8944,916],{"class":915},[228,8946,8414],{"class":252},[228,8948,916],{"class":915},[228,8950,8438],{"class":252},[228,8952,916],{"class":915},[228,8954,8312],{"class":252},[228,8956,916],{"class":915},[228,8958,8317],{"class":252},[228,8960,916],{"class":915},[228,8962,8963],{"class":252},"    gap: 6px;",[228,8965,916],{"class":915},[228,8967,8264],{"class":252},[228,8969,922],{"class":915},[228,8971,8972],{"class":252},"  .wi-vin {",[228,8974,916],{"class":915},[228,8976,8977],{"class":252},"    font-family: 'Roboto Mono', monospace;",[228,8979,916],{"class":915},[228,8981,8848],{"class":252},[228,8983,916],{"class":915},[228,8985,8986],{"class":252},"    letter-spacing: 1px;",[228,8988,916],{"class":915},[228,8990,8264],{"class":252},[228,8992,922],{"class":915},[228,8994,8995],{"class":252},"  .wi-color-dot {",[228,8997,916],{"class":915},[228,8999,9000],{"class":252},"    color: #cbd5e1;",[228,9002,916],{"class":915},[228,9004,8264],{"class":252},[228,9006,922],{"class":915},[228,9008,9009],{"class":252},"  .wi-start-btn {",[228,9011,916],{"class":915},[228,9013,9014],{"class":252},"    margin-top: 16px;",[228,9016,916],{"class":915},[228,9018,9019],{"class":252},"    height: 84px !important;",[228,9021,916],{"class":915},[228,9023,9024],{"class":252},"    font-size: 24px !important;",[228,9026,916],{"class":915},[228,9028,8479],{"class":252},[228,9030,916],{"class":915},[228,9032,8986],{"class":252},[228,9034,916],{"class":915},[228,9036,9037],{"class":252},"    border-radius: 12px !important;",[228,9039,916],{"class":915},[228,9041,8264],{"class":252},[228,9043,916],{"class":915},[228,9045,9046],{"class":252},"\u003C\u002Fstyle>",[228,9048,238],{"class":234},[228,9050,258],{"class":234},[228,9052,238],{"class":234},[228,9054,9055],{"class":241},"storeOutMessages",[228,9057,238],{"class":234},[228,9059,387],{"class":234},[228,9061,238],{"class":234},[228,9063,9064],{"class":241},"passthru",[228,9066,238],{"class":234},[228,9068,749],{"class":234},[228,9070,238],{"class":234},[228,9072,9073],{"class":241},"resendOnRefresh",[228,9075,238],{"class":234},[228,9077,387],{"class":234},[228,9079,238],{"class":234},[228,9081,9082],{"class":241},"templateScope",[228,9084,238],{"class":234},[228,9086,247],{"class":234},[228,9088,238],{"class":234},[228,9090,9091],{"class":252},"local",[228,9093,238],{"class":234},[228,9095,258],{"class":234},[228,9097,238],{"class":234},[228,9099,9100],{"class":241},"className",[228,9102,238],{"class":234},[228,9104,247],{"class":234},[228,9106,770],{"class":234},[228,9108,258],{"class":234},[228,9110,238],{"class":234},[228,9112,566],{"class":241},[228,9114,238],{"class":234},[228,9116,247],{"class":234},[228,9118,9119],{"class":573},"570",[228,9121,258],{"class":234},[228,9123,238],{"class":234},[228,9125,581],{"class":241},[228,9127,238],{"class":234},[228,9129,247],{"class":234},[228,9131,2514],{"class":573},[228,9133,258],{"class":234},[228,9135,238],{"class":234},[228,9137,802],{"class":241},[228,9139,238],{"class":234},[228,9141,807],{"class":234},[228,9143,238],{"class":234},[228,9145,9146],{"class":252},"455c7536a9adcfe6",[228,9148,238],{"class":234},[228,9150,816],{"class":234},[228,9152,238],{"class":234},[228,9154,242],{"class":241},[228,9156,238],{"class":234},[228,9158,247],{"class":234},[228,9160,238],{"class":234},[228,9162,9163],{"class":252},"77ecf88a48f8c4f0",[228,9165,238],{"class":234},[228,9167,258],{"class":234},[228,9169,238],{"class":234},[228,9171,263],{"class":241},[228,9173,238],{"class":234},[228,9175,247],{"class":234},[228,9177,238],{"class":234},[228,9179,4748],{"class":252},[228,9181,238],{"class":234},[228,9183,258],{"class":234},[228,9185,238],{"class":234},[228,9187,4757],{"class":241},[228,9189,238],{"class":234},[228,9191,1080],{"class":234},[228,9193,238],{"class":234},[228,9195,4766],{"class":241},[228,9197,238],{"class":234},[228,9199,304],{"class":234},[228,9201,238],{"class":234},[228,9203,98],{"class":309},[228,9205,238],{"class":234},[228,9207,247],{"class":234},[228,9209,238],{"class":234},[228,9211,4783],{"class":252},[228,9213,238],{"class":234},[228,9215,4788],{"class":234},[228,9217,9218,9220,9223],{"class":230,"line":5081},[228,9219,7070],{"class":234},[228,9221,9222],{"class":915},"% endraw %",[228,9224,5145],{"class":234},[147,9226,9227],{"start":4978},[70,9228,9229,9230,9233,9234,5835,9236,9238,9239,9241,9242,57],{},"Wire ",[45,9231,9232],{},"output 1"," to the \"Current Work Order Card\" ",[96,9235,102],{},[45,9237,4897],{}," group. It shows the work order ID, station, operation and estimated cycle time, the vehicle (model, variant, VIN, colour), a priority chip, and a ",[45,9240,157],{}," button. On click, the button sends ",[96,9243,9244],{},"{ action: 'start', workOrderId, stationId }",[12,9246,9247,75,9251],{},[21,9248],{"alt":9249,"src":9250},"Placeholder: Current Work Order Card rendered on the Home page","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fcurrent-work-order.png",[26,9252,9253],{},"The Current Work Order card: work order ID, priority chip, station, operation, vehicle details, and the Start button.",[147,9255,9256],{"start":5112},[70,9257,5235,9258,9260,9261,9263],{},[96,9259,106],{}," node and assign it to the ",[45,9262,4902],{}," group. Turn off auto-columns and add two text columns as shown below: Work Order (workOrderId) and Priority (priority). Wire output 2 of the split function into it.",[12,9265,9266,75,9270],{},[21,9267],{"alt":9268,"src":9269},"Placeholder: Up Next table listing queued work orders","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fup-next.png",[26,9271,9272],{},"The Up Next table showing the remaining queued work orders with their priority.",[147,9274,9275],{"start":5127},[70,9276,9277,9278,9280,9281,9284,9285,9287,9288,9290,9291,9293],{},"From the card, wire a ",[96,9279,5669],{}," node named \"go to Instructions\" that sets ",[96,9282,9283],{},"payload"," (msg) to ",[96,9286,4819],{},", then into a ",[96,9289,115],{}," node with its event set to ",[45,9292,5669],{}," to switch the page.",[12,9295,9296,9297,9299,9300,9302],{},"When the operator taps ",[45,9298,157],{},", the card sends them to the Instructions page. Because the split function already saved this operator's ",[96,9301,6932],{}," under their own username, the Instructions page, Complete Operation, and Report Issue flows can all look it back up correctly, even if another operator is doing the exact same thing on another screen at the same moment.",[59,9304,9306],{"id":9305},"loading-the-cached-instruction-set","Loading the Cached Instruction Set",[12,9308,9309],{},"The Instructions page needs the steps to show. Because the instruction set was cached in context on login, the page can paint it instantly without another round trip.",[147,9311,9312,9317,9327],{},[70,9313,5235,9314,9316],{},[96,9315,118],{}," node named \"Page opened\" for the Instructions page.",[70,9318,5235,9319,9321,9322,9324,9325,57],{},[96,9320,5669],{}," node named \"Load cached instruction set\". Set ",[96,9323,9283],{}," (msg) to the persistent global ",[96,9326,4819],{},[70,9328,9329],{},"Wire \"Page opened\" into it, and its output into the \"Work Instruction Widget\" you build next.",[59,9331,9333],{"id":9332},"remembering-each-operators-step","Remembering Each Operator's Step",[12,9335,9336,9337,9340,9341,9344],{},"This is something paper can't do and shared screens get wrong. If an operator completes the first two steps of a five-step wheel installation and returns later, they should resume at ",[45,9338,9339],{},"step 3",", not start again at ",[45,9342,9343],{},"step 1",". We achieve this by saving their progress against their username, the one they were identified as when the step was saved, not whichever username happens to be sitting in a shared global at read time.",[12,9346,9347,9348,9351,9352,9355],{},"The instruction widget emits two housekeeping actions: ",[96,9349,9350],{},"save_step"," whenever the operator moves between steps, and ",[96,9353,9354],{},"load_step"," when the page opens and needs to know where to resume. One function node handles both.",[147,9357,9358],{},[70,9359,9360,9361,75,9364,9366,9367,9369,9370,9373,9374,57],{},"Import the ",[45,9362,9363],{},"Work Instruction Widget",[96,9365,102],{}," below, assign it to the ",[45,9368,4819],{}," page, and set its scope to ",[45,9371,9372],{},"Page",". The widget displays one instruction at a time with its image, target cycle time, and checklist. Operators can't move to the next step until every checklist item is completed, and the final step changes the button to ",[45,9375,9376],{},"Complete Operation",[40,9378,9379],{},[12,9380,9381,7050,9383,7055,9386,7058],{},[45,9382,7049],{},[53,9384,7054],{"href":9385},"\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai\u002F?utm_source=chatgpt.com#css-and-html-generation-for-flowfuse-dashboard",[96,9387,102],{},[215,9389,9390],{":height":217},[219,9391,9393],{"className":221,"code":9392,"language":223,"meta":224,"style":224},"{% raw %}\n[{\"id\":\"d3492b9665d71f27\",\"type\":\"ui-template\",\"z\":\"c50b1b501a74c081\",\"g\":\"96f12d35d68b430e\",\"group\":\"\",\"page\":\"\",\"ui\":\"\",\"name\":\"Work Instruction Widget\",\"order\":1,\"width\":0,\"height\":0,\"head\":\"\",\"format\":\"\u003Ctemplate>\\n  \u003Cdiv class=\\\"wi-root\\\">\\n    \u003C!-- Context header with live timer -->\\n    \u003Cdiv class=\\\"wi-topbar\\\">\\n      \u003Cdiv class=\\\"wi-topbar-left\\\">\\n        \u003Cspan class=\\\"wi-op-label\\\">OPERATION\u003C\u002Fspan>\\n        \u003Cspan class=\\\"wi-op-name\\\">{{ payload?.operation ?? 'Work Instruction' }}\u003C\u002Fspan>\\n        \u003Cspan class=\\\"wi-op-sub\\\">\\n          {{ payload?.instructionSetId ?? '—' }} &nbsp;·&nbsp; v{{ payload?.version ?? '—' }}\\n        \u003C\u002Fspan>\\n      \u003C\u002Fdiv>\\n      \u003Cdiv class=\\\"wi-topbar-right\\\">\\n        \u003Cdiv class=\\\"wi-timer\\\">\\n          \u003Cv-icon icon=\\\"mdi-timer-outline\\\" size=\\\"26\\\">\u003C\u002Fv-icon>\\n          \u003Cdiv class=\\\"wi-timer-text\\\">\\n            \u003Cspan class=\\\"wi-timer-label\\\">TARGET TIME\u003C\u002Fspan>\\n            \u003Cspan class=\\\"wi-timer-value\\\">{{ currentStep?.estimatedTime ?? '—' }}s\u003C\u002Fspan>\\n          \u003C\u002Fdiv>\\n        \u003C\u002Fdiv>\\n      \u003C\u002Fdiv>\\n    \u003C\u002Fdiv>\\n\\n    \u003C!-- Step progress -->\\n    \u003Cv-card flat class=\\\"wi-card wi-stepper-card\\\">\\n      \u003Cdiv class=\\\"wi-stepper-head\\\">\\n        \u003Cspan class=\\\"wi-step-count\\\">\\n          STEP {{ (currentIndex + 1) }} OF {{ steps.length }}\\n        \u003C\u002Fspan>\\n        \u003Cspan class=\\\"wi-step-percent\\\">{{ progressPercent }}% COMPLETE\u003C\u002Fspan>\\n      \u003C\u002Fdiv>\\n      \u003Cv-progress-linear :model-value=\\\"progressPercent\\\" color=\\\"green-darken-1\\\" height=\\\"8\\\" rounded>\u003C\u002Fv-progress-linear>\\n    \u003C\u002Fv-card>\\n\\n    \u003C!-- Main instruction pane: image left, instruction + checklist right -->\\n    \u003Cv-card flat class=\\\"wi-card wi-card-instruction\\\">\\n      \u003Cdiv class=\\\"wi-instruction-flex\\\">\\n        \u003C!-- Reference image (left) -->\\n        \u003Cdiv class=\\\"wi-img-col\\\">\\n          \u003Cdiv class=\\\"wi-image-wrap\\\">\\n            \u003Cimg\\n              :src=\\\"stepImage\\\"\\n              :alt=\\\"currentStep?.title\\\"\\n              class=\\\"wi-image\\\"\\n              @error=\\\"onImageError\\\"\\n            \u002F>\\n          \u003C\u002Fdiv>\\n        \u003C\u002Fdiv>\\n\\n        \u003C!-- Instruction + checklist (right) -->\\n        \u003Cdiv class=\\\"wi-text-col\\\">\\n          \u003Cdiv class=\\\"wi-card-head\\\">\\n            \u003Cv-icon icon=\\\"mdi-clipboard-text-outline\\\" size=\\\"20\\\">\u003C\u002Fv-icon>\\n            \u003Cspan>INSTRUCTION\u003C\u002Fspan>\\n          \u003C\u002Fdiv>\\n          \u003Cdiv class=\\\"wi-step-title\\\">{{ currentStep?.title ?? '—' }}\u003C\u002Fdiv>\\n          \u003Cp class=\\\"wi-step-instruction\\\">{{ currentStep?.instruction ?? '' }}\u003C\u002Fp>\\n\\n          \u003Cdiv class=\\\"wi-card-head wi-checklist-head\\\">\\n            \u003Cv-icon icon=\\\"mdi-format-list-checks\\\" size=\\\"20\\\">\u003C\u002Fv-icon>\\n            \u003Cspan>CHECKLIST\u003C\u002Fspan>\\n          \u003C\u002Fdiv>\\n          \u003Cdiv class=\\\"wi-checklist\\\">\\n            \u003Clabel\\n              v-for=\\\"(item, i) in (currentStep?.checklist ?? [])\\\"\\n              :key=\\\"i\\\"\\n              class=\\\"wi-check-row\\\"\\n              :class=\\\"{ 'wi-check-row-done': checkedState[i] }\\\"\\n            >\\n              \u003Cv-checkbox-btn\\n                :model-value=\\\"checkedState[i]\\\"\\n                color=\\\"green-darken-1\\\"\\n                density=\\\"comfortable\\\"\\n                @update:model-value=\\\"toggleCheck(i)\\\"\\n              >\u003C\u002Fv-checkbox-btn>\\n              \u003Cspan>{{ item }}\u003C\u002Fspan>\\n            \u003C\u002Flabel>\\n          \u003C\u002Fdiv>\\n        \u003C\u002Fdiv>\\n      \u003C\u002Fdiv>\\n    \u003C\u002Fv-card>\\n\\n    \u003C!-- Controls -->\\n    \u003Cv-row no-gutters class=\\\"wi-controls\\\">\\n      \u003Cv-col cols=\\\"12\\\" sm=\\\"3\\\" class=\\\"wi-ctrl-col\\\">\\n        \u003Cv-btn block size=\\\"x-large\\\" variant=\\\"outlined\\\" color=\\\"blue-grey-darken-1\\\" class=\\\"wi-nav-btn\\\"\\n          :disabled=\\\"currentIndex === 0\\\" @click=\\\"prevStep\\\">\\n          \u003Cv-icon start icon=\\\"mdi-chevron-left\\\" size=\\\"30\\\">\u003C\u002Fv-icon>\\n          PREVIOUS\\n        \u003C\u002Fv-btn>\\n      \u003C\u002Fv-col>\\n\\n      \u003Cv-col cols=\\\"12\\\" sm=\\\"3\\\" class=\\\"wi-ctrl-col\\\">\\n        \u003Cv-btn block size=\\\"x-large\\\" variant=\\\"flat\\\" color=\\\"red-darken-1\\\" class=\\\"wi-nav-btn\\\" @click=\\\"reportDefect\\\">\\n          \u003Cv-icon start icon=\\\"mdi-alert-octagon-outline\\\" size=\\\"28\\\">\u003C\u002Fv-icon>\\n          REPORT ISSUE\\n        \u003C\u002Fv-btn>\\n      \u003C\u002Fv-col>\\n\\n      \u003Cv-col cols=\\\"12\\\" sm=\\\"6\\\" class=\\\"wi-ctrl-col\\\">\\n        \u003Cv-btn block size=\\\"x-large\\\" variant=\\\"flat\\\" :color=\\\"isLastStep ? 'green-darken-2' : 'green-darken-1'\\\"\\n          class=\\\"wi-nav-btn wi-next-btn\\\" :disabled=\\\"!allChecked\\\" @click=\\\"nextStep\\\">\\n          \u003Cv-icon start :icon=\\\"isLastStep ? 'mdi-check-circle' : 'mdi-chevron-right'\\\" size=\\\"30\\\">\u003C\u002Fv-icon>\\n          {{ isLastStep ? 'COMPLETE OPERATION' : 'NEXT STEP' }}\\n        \u003C\u002Fv-btn>\\n      \u003C\u002Fv-col>\\n    \u003C\u002Fv-row>\\n\\n    \u003Cdiv v-if=\\\"!allChecked\\\" class=\\\"wi-hint\\\">\\n      \u003Cv-icon icon=\\\"mdi-information-outline\\\" size=\\\"18\\\">\u003C\u002Fv-icon>\\n      Complete all checklist items to continue.\\n    \u003C\u002Fdiv>\\n  \u003C\u002Fdiv>\\n\u003C\u002Ftemplate>\\n\\n\u003Cscript>\\n  export default {\\n  data () {\\n    return {\\n      currentIndex: 0,\\n      checked: {},\\n      assetBase: '\u002Fassets\u002F',\\n      placeholder: 'https:\u002F\u002Fplacehold.co\u002F800x600\u002Feef2f7\u002F475569?text=Step+Reference',\\n      instruction: null\\n    }\\n  },\\n  computed: {\\n    payload () {\\n      return this.instruction ?? {}\\n    },\\n    steps () {\\n      return this.instruction?.steps ?? []\\n    },\\n    currentStep () {\\n      return this.steps[this.currentIndex] ?? null\\n    },\\n    isLastStep () {\\n      return this.currentIndex === this.steps.length - 1\\n    },\\n    progressPercent () {\\n      if (!this.steps.length) return 0\\n      return Math.round((this.currentIndex \u002F this.steps.length) * 100)\\n    },\\n    checkedState () {\\n      return this.checked[this.currentIndex] ?? []\\n    },\\n    allChecked () {\\n      const list = this.currentStep?.checklist ?? []\\n      if (!list.length) return true\\n      const state = this.checkedState\\n      return list.every((_, i) => state[i])\\n    },\\n    stepImage () {\\n      return this.resolveImage(this.currentStep?.image)\\n    }\\n  },\\n  methods: {\\n    resolveImage (img) {\\n      if (!img) return this.placeholder\\n      if (\u002F^https?:\\\\\u002F\\\\\u002F\u002F.test(img) || img.startsWith('\u002F')) return img\\n      return this.assetBase + img\\n    },\\n    preloadImages () {\\n      for (const step of this.steps) {\\n        const url = this.resolveImage(step?.image)\\n        if (url && url !== this.placeholder) {\\n          const im = new Image()\\n          im.src = url\\n        }\\n      }\\n    },\\n    saveStep () {\\n      this.send({\\n        payload: {\\n          action: 'save_step',\\n          stepIndex: this.currentIndex,\\n          stepName: this.currentStep?.title ?? null,\\n          stepId: this.currentStep?.stepId ?? null\\n        }\\n      })\\n    },\\n    toggleCheck (i) {\\n      const arr = (this.checked[this.currentIndex] ?? []).slice()\\n      arr[i] = !arr[i]\\n      this.checked = { ...this.checked, [this.currentIndex]: arr }\\n    },\\n    onImageError (e) {\\n      if (e?.target && e.target.src !== this.placeholder) {\\n        e.target.src = this.placeholder\\n      }\\n    },\\n    goToStep (i) {\\n      const max = this.steps.length - 1\\n      this.currentIndex = Math.min(Math.max(i, 0), Math.max(max, 0))\\n      this.saveStep()\\n    },\\n    nextStep () {\\n      if (this.isLastStep) {\\n        this.send({ payload: { action: 'complete_operation', stepIndex: this.currentIndex } })\\n        return\\n      }\\n      this.goToStep(this.currentIndex + 1)\\n    },\\n    prevStep () {\\n      if (this.currentIndex === 0) return\\n      this.goToStep(this.currentIndex - 1)\\n    },\\n    reportDefect () {\\n      this.send({\\n        payload: {\\n          action: 'Report Issue',\\n        }\\n      })\\n    }\\n  },\\n  watch: {\\n    msg: {\\n      immediate: true,\\n      handler (m) {\\n        const pl = m?.payload\\n        if (!pl) return\\n        if (Array.isArray(pl.steps)) {\\n          \u002F\u002F Instruction-set data: cache it so later messages can't wipe it.\\n          this.instruction = pl\\n          \u002F\u002F Preload every step image so navigation is instant.\\n          this.$nextTick(() => this.preloadImages())\\n        } else if (typeof pl.stepIndex === 'number') {\\n          \u002F\u002F Resume reply from the tracker: jump to the saved step.\\n          this.currentIndex = Math.min(\\n            Math.max(pl.stepIndex, 0),\\n            Math.max(this.steps.length - 1, 0)\\n          )\\n        }\\n      }\\n    }\\n  },\\n  mounted () {\\n    \u002F\u002F Ask the tracker which step this work order was left on.\\n    this.send({ payload: { action: 'load_step' } })\\n  }\\n}\\n\u003C\u002Fscript>\\n\\n\u003Cstyle>\\n  .wi-root {\\n    font-family: 'Roboto', system-ui, sans-serif;\\n    color: #1f2933;\\n    padding: 2px;\\n  }\\n\\n  \u002F* Header *\u002F\\n  .wi-topbar {\\n    display: flex;\\n    align-items: center;\\n    justify-content: space-between;\\n    flex-wrap: wrap;\\n    gap: 12px;\\n    background: #ffffff;\\n    border: 1px solid #e2e8f0;\\n    border-left: 6px solid #1565c0;\\n    border-radius: 10px;\\n    padding: 10px 16px;\\n    margin-bottom: 10px;\\n  }\\n\\n  .wi-topbar-left {\\n    display: flex;\\n    flex-direction: column;\\n    line-height: 1.15;\\n  }\\n\\n  .wi-op-label {\\n    font-size: 11px;\\n    letter-spacing: 2px;\\n    color: #64748b;\\n    font-weight: 600;\\n  }\\n\\n  .wi-op-name {\\n    font-size: 21px;\\n    font-weight: 700;\\n    color: #0f172a;\\n  }\\n\\n  .wi-op-sub {\\n    font-size: 12px;\\n    color: #94a3b8;\\n    font-weight: 500;\\n    margin-top: 2px;\\n  }\\n\\n  .wi-timer {\\n    display: flex;\\n    align-items: center;\\n    gap: 10px;\\n    padding: 8px 14px;\\n    border-radius: 10px;\\n    background: #f1f5f9;\\n    color: #0f172a;\\n  }\\n\\n  .wi-timer-text {\\n    display: flex;\\n    flex-direction: column;\\n    line-height: 1.1;\\n  }\\n\\n  .wi-timer-label {\\n    font-size: 10px;\\n    letter-spacing: 1.5px;\\n    font-weight: 600;\\n    opacity: 0.75;\\n  }\\n\\n  .wi-timer-value {\\n    font-size: 20px;\\n    font-weight: 700;\\n    font-variant-numeric: tabular-nums;\\n  }\\n\\n  \u002F* Cards *\u002F\\n  .wi-card {\\n    background: #ffffff !important;\\n    border: 1px solid #e2e8f0 !important;\\n    border-radius: 10px !important;\\n    padding: 14px 18px !important;\\n    height: 100%;\\n    box-sizing: border-box;\\n  }\\n\\n  .wi-card-head {\\n    display: flex;\\n    align-items: center;\\n    gap: 8px;\\n    font-size: 13px;\\n    letter-spacing: 2px;\\n    font-weight: 700;\\n    color: #64748b;\\n    margin-bottom: 8px;\\n  }\\n\\n  \u002F* Stepper (compact) *\u002F\\n  .wi-stepper-card {\\n    margin-bottom: 10px;\\n    padding: 10px 16px;\\n  }\\n\\n  .wi-stepper-head {\\n    display: flex;\\n    justify-content: space-between;\\n    align-items: baseline;\\n    margin-bottom: 8px;\\n  }\\n\\n  .wi-step-count {\\n    font-size: 14px;\\n    font-weight: 700;\\n    letter-spacing: 1px;\\n    color: #0f172a;\\n  }\\n\\n  .wi-step-percent {\\n    font-size: 12px;\\n    font-weight: 600;\\n    letter-spacing: 1px;\\n    color: #64748b;\\n  }\\n\\n  \u002F* Instruction card *\u002F\\n  .wi-card-instruction {\\n    border-left: 5px solid #5e35b1 !important;\\n    padding: 16px 20px !important;\\n    box-sizing: border-box;\\n  }\\n\\n  \u002F* Desktop: keep the instruction card a consistent size across every step,\\n     so navigating between steps does not make the layout jump. The card\\n     still grows taller when the reference image needs more room. *\u002F\\n  @media (min-width: 701px) {\\n    .wi-card-instruction {\\n      min-height: 360px;\\n    }\\n  }\\n\\n  .wi-step-title {\\n    font-size: 19px;\\n    font-weight: 700;\\n    color: #0f172a;\\n    margin-bottom: 6px;\\n    line-height: 1.15;\\n  }\\n\\n  .wi-step-instruction {\\n    font-size: 15px;\\n    line-height: 1.55;\\n    color: #334155;\\n    margin: 0 0 16px;\\n  }\\n\\n  .wi-checklist-head {\\n    margin-top: 6px;\\n    padding-top: 12px;\\n    border-top: 1px solid #edf2f7;\\n  }\\n\\n  .wi-checklist {\\n    display: flex;\\n    flex-direction: column;\\n    gap: 4px;\\n  }\\n\\n  .wi-check-row {\\n    display: flex;\\n    align-items: center;\\n    justify-content: flex-start;\\n    gap: 10px;\\n    padding: 6px 4px;\\n    border-radius: 8px;\\n    font-size: 15px;\\n    font-weight: 500;\\n    color: #1f2933;\\n    cursor: pointer;\\n  }\\n\\n  .wi-check-row>span {\\n    flex: 1;\\n    line-height: 1.35;\\n  }\\n\\n  .wi-check-row .v-selection-control {\\n    flex: none;\\n    min-width: 0;\\n  }\\n\\n  .wi-check-row-done>span {\\n    color: #94a3b8;\\n  }\\n\\n  \u002F* Instruction two-column layout (plain flexbox, no Vuetify grid) *\u002F\\n  .wi-instruction-flex {\\n    display: flex;\\n    gap: 20px;\\n    align-items: stretch;\\n    width: 100%;\\n    height: 100%;\\n  }\\n\\n  .wi-img-col {\\n    flex: 0 0 40%;\\n    display: flex;\\n    min-width: 0;\\n  }\\n\\n  .wi-text-col {\\n    flex: 1 1 60%;\\n    padding-top: 4px;\\n    min-width: 0;\\n  }\\n\\n  \u002F* Reference image (left) *\u002F\\n  .wi-image-wrap {\\n    border-radius: 10px;\\n    overflow: hidden;\\n    background: #f1f5f9;\\n    border: 1px solid #e2e8f0;\\n    width: 100%;\\n    height: 100%;\\n    min-height: 210px;\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n  }\\n\\n  \u002F* Desktop: image box tracks a fixed aspect ratio based on its column\\n     width, so the card height scales with the image. The text column\\n     stretches to match via align-items: stretch on the flex container. *\u002F\\n  @media (min-width: 701px) {\\n    .wi-image-wrap {\\n      aspect-ratio: 4 \u002F 3;\\n      height: auto;\\n      align-self: flex-start;\\n    }\\n  }\\n\\n  .wi-image {\\n    width: 100%;\\n    height: 100%;\\n    object-fit: contain;\\n  }\\n\\n  @media (max-width: 700px) {\\n    .wi-instruction-flex {\\n      flex-direction: column;\\n    }\\n\\n    .wi-img-col {\\n      flex: none;\\n    }\\n\\n    .wi-image-wrap {\\n      min-height: 150px;\\n    }\\n  }\\n\\n  \u002F* Controls *\u002F\\n  .wi-controls {\\n    margin-top: 12px;\\n    gap: 0;\\n  }\\n\\n  .wi-ctrl-col {\\n    padding: 6px 8px;\\n  }\\n\\n  .wi-nav-btn {\\n    height: 52px !important;\\n    font-size: 15px !important;\\n    font-weight: 700 !important;\\n    letter-spacing: 0.5px;\\n    border-radius: 12px !important;\\n  }\\n\\n  .wi-nav-btn .v-btn__content {\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n  }\\n\\n  .wi-next-btn {\\n    font-size: 17px !important;\\n  }\\n\\n  .wi-hint {\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    gap: 6px;\\n    margin-top: 8px;\\n    font-size: 14px;\\n    font-weight: 500;\\n    color: #94a3b8;\\n  }\\n\u003C\u002Fstyle>\",\"storeOutMessages\":true,\"passthru\":true,\"resendOnRefresh\":true,\"templateScope\":\"widget:page\",\"className\":\"\",\"x\":670,\"y\":780,\"wires\":[[\"c67ea1f6c0580816\",\"effed3f3a008aef7\"]]},{\"id\":\"e51561215326fafd\",\"type\":\"global-config\",\"env\":[],\"modules\":{\"@flowfuse\u002Fnode-red-dashboard\":\"1.30.2\"}}]\n{% endraw %}\n",[96,9394,9395,9403,12653],{"__ignoreMap":224},[228,9396,9397,9399,9401],{"class":230,"line":231},[228,9398,7070],{"class":234},[228,9400,7073],{"class":915},[228,9402,5145],{"class":234},[228,9404,9405,9407,9409,9411,9413,9415,9417,9420,9422,9424,9426,9428,9430,9432,9434,9436,9438,9440,9442,9444,9446,9448,9450,9452,9454,9456,9458,9460,9462,9464,9466,9469,9471,9473,9475,9477,9479,9481,9483,9485,9487,9489,9491,9493,9495,9497,9499,9501,9503,9505,9507,9509,9511,9513,9515,9517,9519,9521,9523,9525,9527,9529,9531,9533,9535,9537,9539,9541,9543,9545,9547,9549,9551,9553,9555,9557,9559,9561,9563,9565,9567,9569,9571,9573,9575,9577,9579,9581,9583,9585,9587,9589,9591,9593,9595,9597,9599,9602,9604,9606,9608,9610,9612,9614,9616,9618,9620,9622,9624,9626,9628,9630,9632,9635,9637,9640,9642,9644,9646,9649,9651,9654,9656,9658,9660,9663,9665,9667,9669,9672,9674,9677,9679,9681,9683,9685,9687,9689,9691,9693,9695,9698,9700,9703,9705,9707,9709,9712,9714,9716,9718,9720,9722,9724,9726,9728,9730,9732,9734,9737,9739,9741,9743,9746,9748,9751,9753,9756,9758,9760,9762,9765,9767,9770,9772,9774,9776,9779,9781,9783,9785,9787,9789,9792,9794,9797,9799,9802,9804,9806,9808,9810,9812,9815,9817,9819,9821,9823,9825,9828,9830,9832,9834,9837,9839,9841,9843,9845,9847,9850,9852,9855,9857,9859,9861,9864,9866,9869,9871,9873,9875,9877,9879,9882,9884,9887,9889,9892,9894,9897,9899,9902,9904,9906,9908,9911,9913,9915,9917,9919,9921,9924,9926,9928,9930,9933,9935,9937,9939,9942,9944,9946,9948,9950,9952,9955,9957,9959,9961,9964,9966,9969,9971,9974,9976,9979,9981,9984,9986,9989,9991,9994,9996,9999,10001,10004,10006,10009,10011,10013,10015,10017,10019,10022,10024,10026,10028,10031,10033,10035,10037,10039,10041,10043,10045,10047,10049,10051,10053,10055,10057,10059,10061,10064,10066,10068,10070,10073,10075,10077,10079,10081,10083,10086,10088,10091,10093,10096,10098,10101,10103,10106,10108,10110,10112,10115,10117,10119,10121,10123,10125,10128,10130,10132,10134,10136,10138,10140,10142,10145,10147,10149,10151,10153,10155,10158,10160,10162,10164,10167,10169,10172,10174,10177,10179,10182,10184,10187,10189,10191,10193,10196,10198,10201,10203,10206,10208,10211,10213,10216,10218,10221,10223,10226,10228,10231,10233,10235,10237,10240,10242,10245,10247,10250,10252,10255,10257,10260,10262,10265,10267,10270,10272,10274,10276,10278,10280,10282,10284,10286,10288,10291,10293,10295,10297,10300,10302,10304,10306,10308,10310,10312,10314,10316,10318,10321,10323,10325,10327,10330,10332,10334,10336,10339,10341,10343,10345,10347,10349,10352,10354,10356,10358,10361,10363,10365,10367,10370,10372,10375,10377,10380,10382,10385,10387,10390,10392,10394,10396,10398,10400,10403,10405,10407,10409,10412,10414,10416,10418,10421,10423,10426,10428,10430,10432,10434,10436,10438,10440,10442,10444,10446,10448,10450,10452,10454,10456,10458,10460,10462,10464,10466,10468,10470,10472,10474,10476,10478,10480,10483,10485,10487,10489,10491,10493,10495,10497,10500,10502,10504,10506,10508,10510,10513,10515,10517,10519,10522,10524,10526,10528,10531,10533,10535,10537,10539,10541,10543,10545,10547,10549,10551,10553,10556,10558,10560,10562,10564,10566,10568,10570,10572,10574,10576,10578,10580,10582,10584,10586,10589,10591,10594,10596,10599,10601,10604,10606,10608,10610,10613,10615,10617,10619,10622,10624,10626,10628,10631,10633,10636,10638,10640,10642,10644,10646,10648,10650,10653,10655,10657,10659,10661,10663,10665,10667,10670,10672,10674,10676,10678,10680,10683,10685,10687,10689,10692,10694,10697,10699,10701,10703,10705,10707,10709,10711,10714,10716,10718,10720,10722,10724,10726,10728,10730,10732,10734,10736,10739,10741,10744,10746,10749,10751,10754,10756,10759,10761,10764,10766,10769,10771,10773,10775,10778,10780,10782,10784,10787,10789,10792,10794,10796,10798,10801,10803,10806,10808,10810,10812,10815,10817,10820,10822,10824,10826,10829,10831,10834,10836,10838,10840,10843,10845,10848,10850,10853,10855,10857,10859,10862,10864,10867,10869,10871,10873,10876,10878,10881,10883,10886,10888,10891,10893,10896,10898,10900,10902,10905,10907,10910,10912,10914,10916,10918,10920,10923,10925,10928,10930,10933,10935,10938,10941,10944,10946,10949,10951,10954,10956,10958,10960,10963,10965,10968,10970,10973,10975,10978,10980,10983,10985,10988,10990,10992,10994,10997,10999,11001,11003,11006,11008,11011,11013,11016,11018,11021,11023,11026,11028,11031,11033,11036,11038,11040,11042,11045,11047,11049,11051,11054,11056,11059,11061,11064,11066,11069,11071,11073,11075,11078,11080,11083,11085,11088,11090,11092,11094,11096,11098,11101,11103,11106,11108,11111,11113,11116,11118,11120,11122,11125,11127,11130,11132,11135,11137,11139,11141,11143,11145,11148,11150,11152,11154,11157,11159,11162,11164,11167,11169,11171,11173,11176,11178,11180,11182,11184,11186,11189,11191,11193,11195,11197,11199,11201,11203,11205,11207,11210,11212,11215,11217,11220,11222,11225,11227,11230,11232,11235,11237,11240,11242,11245,11247,11250,11252,11255,11257,11260,11262,11265,11267,11270,11272,11275,11277,11280,11282,11285,11287,11290,11292,11294,11296,11298,11300,11302,11304,11306,11308,11311,11313,11316,11318,11321,11323,11325,11327,11329,11331,11333,11335,11337,11339,11341,11343,11345,11347,11349,11351,11354,11356,11358,11360,11363,11365,11367,11369,11371,11373,11375,11377,11379,11381,11383,11385,11387,11389,11391,11393,11395,11397,11399,11401,11403,11405,11408,11410,11413,11415,11417,11419,11421,11423,11425,11427,11429,11431,11434,11436,11438,11440,11443,11445,11447,11449,11451,11453,11455,11457,11459,11461,11463,11465,11468,11470,11473,11475,11477,11479,11481,11483,11485,11487,11490,11492,11494,11496,11499,11501,11503,11505,11508,11510,11512,11514,11517,11519,11521,11523,11525,11527,11529,11531,11534,11536,11538,11540,11542,11544,11546,11548,11550,11552,11555,11557,11559,11561,11563,11565,11567,11569,11571,11573,11576,11578,11581,11583,11585,11587,11589,11591,11594,11596,11598,11600,11603,11605,11607,11609,11611,11613,11615,11617,11619,11621,11624,11626,11628,11630,11632,11634,11636,11638,11640,11642,11645,11647,11649,11651,11654,11656,11658,11660,11662,11664,11666,11668,11670,11672,11674,11676,11678,11680,11682,11684,11686,11688,11690,11692,11695,11697,11699,11701,11704,11706,11709,11711,11713,11715,11717,11719,11721,11723,11726,11728,11730,11732,11734,11736,11739,11741,11743,11745,11747,11749,11752,11754,11757,11759,11761,11763,11765,11767,11769,11771,11773,11775,11778,11780,11782,11784,11786,11788,11790,11792,11794,11796,11798,11800,11803,11805,11808,11810,11813,11815,11818,11820,11822,11824,11826,11828,11831,11833,11836,11838,11841,11843,11846,11848,11851,11853,11856,11858,11860,11862,11864,11866,11869,11871,11874,11876,11878,11880,11882,11884,11886,11888,11890,11892,11894,11896,11899,11901,11904,11906,11909,11911,11914,11916,11919,11921,11923,11925,11928,11930,11933,11935,11938,11940,11943,11945,11947,11949,11952,11954,11956,11958,11960,11962,11965,11967,11969,11971,11974,11976,11978,11980,11982,11984,11987,11989,11991,11993,11996,11998,12000,12002,12004,12006,12008,12010,12012,12014,12017,12019,12021,12023,12026,12028,12031,12033,12036,12038,12040,12042,12045,12047,12050,12052,12055,12057,12059,12061,12064,12066,12068,12070,12072,12074,12077,12079,12082,12084,12086,12088,12091,12093,12096,12098,12101,12103,12105,12107,12109,12111,12114,12116,12119,12121,12123,12125,12127,12129,12131,12133,12136,12138,12141,12143,12146,12148,12150,12152,12154,12156,12159,12161,12164,12166,12168,12170,12173,12175,12177,12179,12181,12183,12185,12187,12189,12191,12194,12196,12198,12200,12202,12204,12207,12209,12211,12213,12216,12218,12221,12223,12226,12228,12230,12232,12235,12237,12240,12242,12245,12247,12250,12252,12254,12256,12258,12260,12263,12265,12267,12269,12271,12273,12276,12278,12280,12282,12285,12287,12290,12292,12295,12297,12299,12301,12304,12306,12309,12311,12313,12315,12317,12319,12322,12324,12326,12328,12330,12332,12335,12337,12340,12342,12345,12347,12349,12351,12353,12355,12358,12360,12363,12365,12367,12369,12372,12374,12377,12379,12382,12384,12386,12388,12390,12392,12394,12396,12398,12400,12403,12405,12407,12409,12411,12413,12415,12417,12419,12421,12424,12426,12429,12431,12433,12435,12438,12440,12442,12444,12446,12448,12450,12452,12454,12456,12459,12461,12463,12465,12467,12469,12471,12473,12475,12477,12479,12481,12483,12485,12487,12489,12491,12493,12495,12497,12499,12501,12503,12505,12507,12509,12511,12513,12515,12517,12520,12522,12524,12526,12528,12530,12532,12534,12536,12538,12540,12542,12544,12547,12549,12551,12553,12555,12557,12560,12562,12564,12566,12568,12570,12572,12575,12577,12579,12581,12584,12586,12588,12590,12592,12594,12596,12598,12601,12603,12605,12607,12609,12611,12613,12615,12617,12619,12621,12623,12625,12627,12629,12631,12633,12635,12637,12639,12641,12643,12645,12647,12649,12651],{"class":230,"line":5062},[228,9406,235],{"class":234},[228,9408,238],{"class":234},[228,9410,242],{"class":241},[228,9412,238],{"class":234},[228,9414,247],{"class":234},[228,9416,238],{"class":234},[228,9418,9419],{"class":252},"d3492b9665d71f27",[228,9421,238],{"class":234},[228,9423,258],{"class":234},[228,9425,238],{"class":234},[228,9427,263],{"class":241},[228,9429,238],{"class":234},[228,9431,247],{"class":234},[228,9433,238],{"class":234},[228,9435,102],{"class":252},[228,9437,238],{"class":234},[228,9439,258],{"class":234},[228,9441,238],{"class":234},[228,9443,281],{"class":241},[228,9445,238],{"class":234},[228,9447,247],{"class":234},[228,9449,238],{"class":234},[228,9451,7125],{"class":252},[228,9453,238],{"class":234},[228,9455,258],{"class":234},[228,9457,238],{"class":234},[228,9459,673],{"class":241},[228,9461,238],{"class":234},[228,9463,247],{"class":234},[228,9465,238],{"class":234},[228,9467,9468],{"class":252},"96f12d35d68b430e",[228,9470,238],{"class":234},[228,9472,258],{"class":234},[228,9474,238],{"class":234},[228,9476,272],{"class":241},[228,9478,238],{"class":234},[228,9480,247],{"class":234},[228,9482,770],{"class":234},[228,9484,258],{"class":234},[228,9486,238],{"class":234},[228,9488,4638],{"class":241},[228,9490,238],{"class":234},[228,9492,247],{"class":234},[228,9494,770],{"class":234},[228,9496,258],{"class":234},[228,9498,238],{"class":234},[228,9500,4277],{"class":241},[228,9502,238],{"class":234},[228,9504,247],{"class":234},[228,9506,770],{"class":234},[228,9508,258],{"class":234},[228,9510,238],{"class":234},[228,9512,690],{"class":241},[228,9514,238],{"class":234},[228,9516,247],{"class":234},[228,9518,238],{"class":234},[228,9520,9363],{"class":252},[228,9522,238],{"class":234},[228,9524,258],{"class":234},[228,9526,238],{"class":234},[228,9528,7204],{"class":241},[228,9530,238],{"class":234},[228,9532,247],{"class":234},[228,9534,337],{"class":573},[228,9536,258],{"class":234},[228,9538,238],{"class":234},[228,9540,7217],{"class":241},[228,9542,238],{"class":234},[228,9544,247],{"class":234},[228,9546,1042],{"class":573},[228,9548,258],{"class":234},[228,9550,238],{"class":234},[228,9552,7230],{"class":241},[228,9554,238],{"class":234},[228,9556,247],{"class":234},[228,9558,1042],{"class":573},[228,9560,258],{"class":234},[228,9562,238],{"class":234},[228,9564,7243],{"class":241},[228,9566,238],{"class":234},[228,9568,247],{"class":234},[228,9570,770],{"class":234},[228,9572,258],{"class":234},[228,9574,238],{"class":234},[228,9576,7256],{"class":241},[228,9578,238],{"class":234},[228,9580,247],{"class":234},[228,9582,238],{"class":234},[228,9584,7265],{"class":252},[228,9586,916],{"class":915},[228,9588,7270],{"class":252},[228,9590,928],{"class":915},[228,9592,7275],{"class":252},[228,9594,928],{"class":915},[228,9596,5360],{"class":252},[228,9598,916],{"class":915},[228,9600,9601],{"class":252},"    \u003C!-- Context header with live timer -->",[228,9603,916],{"class":915},[228,9605,7289],{"class":252},[228,9607,928],{"class":915},[228,9609,7294],{"class":252},[228,9611,928],{"class":915},[228,9613,5360],{"class":252},[228,9615,916],{"class":915},[228,9617,7303],{"class":252},[228,9619,928],{"class":915},[228,9621,7308],{"class":252},[228,9623,928],{"class":915},[228,9625,5360],{"class":252},[228,9627,916],{"class":915},[228,9629,7317],{"class":252},[228,9631,928],{"class":915},[228,9633,9634],{"class":252},"wi-op-label",[228,9636,928],{"class":915},[228,9638,9639],{"class":252},">OPERATION\u003C\u002Fspan>",[228,9641,916],{"class":915},[228,9643,7317],{"class":252},[228,9645,928],{"class":915},[228,9647,9648],{"class":252},"wi-op-name",[228,9650,928],{"class":915},[228,9652,9653],{"class":252},">{{ payload?.operation ?? 'Work Instruction' }}\u003C\u002Fspan>",[228,9655,916],{"class":915},[228,9657,7317],{"class":252},[228,9659,928],{"class":915},[228,9661,9662],{"class":252},"wi-op-sub",[228,9664,928],{"class":915},[228,9666,5360],{"class":252},[228,9668,916],{"class":915},[228,9670,9671],{"class":252},"          {{ payload?.instructionSetId ?? '—' }} &nbsp;·&nbsp; v{{ payload?.version ?? '—' }}",[228,9673,916],{"class":915},[228,9675,9676],{"class":252},"        \u003C\u002Fspan>",[228,9678,916],{"class":915},[228,9680,7346],{"class":252},[228,9682,916],{"class":915},[228,9684,7303],{"class":252},[228,9686,928],{"class":915},[228,9688,7355],{"class":252},[228,9690,928],{"class":915},[228,9692,5360],{"class":252},[228,9694,916],{"class":915},[228,9696,9697],{"class":252},"        \u003Cdiv class=",[228,9699,928],{"class":915},[228,9701,9702],{"class":252},"wi-timer",[228,9704,928],{"class":915},[228,9706,5360],{"class":252},[228,9708,916],{"class":915},[228,9710,9711],{"class":252},"          \u003Cv-icon icon=",[228,9713,928],{"class":915},[228,9715,7666],{"class":252},[228,9717,928],{"class":915},[228,9719,7532],{"class":252},[228,9721,928],{"class":915},[228,9723,7675],{"class":252},[228,9725,928],{"class":915},[228,9727,7418],{"class":252},[228,9729,916],{"class":915},[228,9731,7508],{"class":252},[228,9733,928],{"class":915},[228,9735,9736],{"class":252},"wi-timer-text",[228,9738,928],{"class":915},[228,9740,5360],{"class":252},[228,9742,916],{"class":915},[228,9744,9745],{"class":252},"            \u003Cspan class=",[228,9747,928],{"class":915},[228,9749,9750],{"class":252},"wi-timer-label",[228,9752,928],{"class":915},[228,9754,9755],{"class":252},">TARGET TIME\u003C\u002Fspan>",[228,9757,916],{"class":915},[228,9759,9745],{"class":252},[228,9761,928],{"class":915},[228,9763,9764],{"class":252},"wi-timer-value",[228,9766,928],{"class":915},[228,9768,9769],{"class":252},">{{ currentStep?.estimatedTime ?? '—' }}s\u003C\u002Fspan>",[228,9771,916],{"class":915},[228,9773,7551],{"class":252},[228,9775,916],{"class":915},[228,9777,9778],{"class":252},"        \u003C\u002Fdiv>",[228,9780,916],{"class":915},[228,9782,7346],{"class":252},[228,9784,916],{"class":915},[228,9786,7437],{"class":252},[228,9788,922],{"class":915},[228,9790,9791],{"class":252},"    \u003C!-- Step progress -->",[228,9793,916],{"class":915},[228,9795,9796],{"class":252},"    \u003Cv-card flat class=",[228,9798,928],{"class":915},[228,9800,9801],{"class":252},"wi-card wi-stepper-card",[228,9803,928],{"class":915},[228,9805,5360],{"class":252},[228,9807,916],{"class":915},[228,9809,7303],{"class":252},[228,9811,928],{"class":915},[228,9813,9814],{"class":252},"wi-stepper-head",[228,9816,928],{"class":915},[228,9818,5360],{"class":252},[228,9820,916],{"class":915},[228,9822,7317],{"class":252},[228,9824,928],{"class":915},[228,9826,9827],{"class":252},"wi-step-count",[228,9829,928],{"class":915},[228,9831,5360],{"class":252},[228,9833,916],{"class":915},[228,9835,9836],{"class":252},"          STEP {{ (currentIndex + 1) }} OF {{ steps.length }}",[228,9838,916],{"class":915},[228,9840,9676],{"class":252},[228,9842,916],{"class":915},[228,9844,7317],{"class":252},[228,9846,928],{"class":915},[228,9848,9849],{"class":252},"wi-step-percent",[228,9851,928],{"class":915},[228,9853,9854],{"class":252},">{{ progressPercent }}% COMPLETE\u003C\u002Fspan>",[228,9856,916],{"class":915},[228,9858,7346],{"class":252},[228,9860,916],{"class":915},[228,9862,9863],{"class":252},"      \u003Cv-progress-linear :model-value=",[228,9865,928],{"class":915},[228,9867,9868],{"class":252},"progressPercent",[228,9870,928],{"class":915},[228,9872,8134],{"class":252},[228,9874,928],{"class":915},[228,9876,8139],{"class":252},[228,9878,928],{"class":915},[228,9880,9881],{"class":252}," height=",[228,9883,928],{"class":915},[228,9885,9886],{"class":252},"8",[228,9888,928],{"class":915},[228,9890,9891],{"class":252}," rounded>\u003C\u002Fv-progress-linear>",[228,9893,916],{"class":915},[228,9895,9896],{"class":252},"    \u003C\u002Fv-card>",[228,9898,922],{"class":915},[228,9900,9901],{"class":252},"    \u003C!-- Main instruction pane: image left, instruction + checklist right -->",[228,9903,916],{"class":915},[228,9905,9796],{"class":252},[228,9907,928],{"class":915},[228,9909,9910],{"class":252},"wi-card wi-card-instruction",[228,9912,928],{"class":915},[228,9914,5360],{"class":252},[228,9916,916],{"class":915},[228,9918,7303],{"class":252},[228,9920,928],{"class":915},[228,9922,9923],{"class":252},"wi-instruction-flex",[228,9925,928],{"class":915},[228,9927,5360],{"class":252},[228,9929,916],{"class":915},[228,9931,9932],{"class":252},"        \u003C!-- Reference image (left) -->",[228,9934,916],{"class":915},[228,9936,9697],{"class":252},[228,9938,928],{"class":915},[228,9940,9941],{"class":252},"wi-img-col",[228,9943,928],{"class":915},[228,9945,5360],{"class":252},[228,9947,916],{"class":915},[228,9949,7508],{"class":252},[228,9951,928],{"class":915},[228,9953,9954],{"class":252},"wi-image-wrap",[228,9956,928],{"class":915},[228,9958,5360],{"class":252},[228,9960,916],{"class":915},[228,9962,9963],{"class":252},"            \u003Cimg",[228,9965,916],{"class":915},[228,9967,9968],{"class":252},"              :src=",[228,9970,928],{"class":915},[228,9972,9973],{"class":252},"stepImage",[228,9975,987],{"class":915},[228,9977,9978],{"class":252},"              :alt=",[228,9980,928],{"class":915},[228,9982,9983],{"class":252},"currentStep?.title",[228,9985,987],{"class":915},[228,9987,9988],{"class":252},"              class=",[228,9990,928],{"class":915},[228,9992,9993],{"class":252},"wi-image",[228,9995,987],{"class":915},[228,9997,9998],{"class":252},"              @error=",[228,10000,928],{"class":915},[228,10002,10003],{"class":252},"onImageError",[228,10005,987],{"class":915},[228,10007,10008],{"class":252},"            \u002F>",[228,10010,916],{"class":915},[228,10012,7551],{"class":252},[228,10014,916],{"class":915},[228,10016,9778],{"class":252},[228,10018,922],{"class":915},[228,10020,10021],{"class":252},"        \u003C!-- Instruction + checklist (right) -->",[228,10023,916],{"class":915},[228,10025,9697],{"class":252},[228,10027,928],{"class":915},[228,10029,10030],{"class":252},"wi-text-col",[228,10032,928],{"class":915},[228,10034,5360],{"class":252},[228,10036,916],{"class":915},[228,10038,7508],{"class":252},[228,10040,928],{"class":915},[228,10042,7513],{"class":252},[228,10044,928],{"class":915},[228,10046,5360],{"class":252},[228,10048,916],{"class":915},[228,10050,7522],{"class":252},[228,10052,928],{"class":915},[228,10054,7601],{"class":252},[228,10056,928],{"class":915},[228,10058,7532],{"class":252},[228,10060,928],{"class":915},[228,10062,10063],{"class":252},"20",[228,10065,928],{"class":915},[228,10067,7418],{"class":252},[228,10069,916],{"class":915},[228,10071,10072],{"class":252},"            \u003Cspan>INSTRUCTION\u003C\u002Fspan>",[228,10074,916],{"class":915},[228,10076,7551],{"class":252},[228,10078,916],{"class":915},[228,10080,7508],{"class":252},[228,10082,928],{"class":915},[228,10084,10085],{"class":252},"wi-step-title",[228,10087,928],{"class":915},[228,10089,10090],{"class":252},">{{ currentStep?.title ?? '—' }}\u003C\u002Fdiv>",[228,10092,916],{"class":915},[228,10094,10095],{"class":252},"          \u003Cp class=",[228,10097,928],{"class":915},[228,10099,10100],{"class":252},"wi-step-instruction",[228,10102,928],{"class":915},[228,10104,10105],{"class":252},">{{ currentStep?.instruction ?? '' }}\u003C\u002Fp>",[228,10107,922],{"class":915},[228,10109,7508],{"class":252},[228,10111,928],{"class":915},[228,10113,10114],{"class":252},"wi-card-head wi-checklist-head",[228,10116,928],{"class":915},[228,10118,5360],{"class":252},[228,10120,916],{"class":915},[228,10122,7522],{"class":252},[228,10124,928],{"class":915},[228,10126,10127],{"class":252},"mdi-format-list-checks",[228,10129,928],{"class":915},[228,10131,7532],{"class":252},[228,10133,928],{"class":915},[228,10135,10063],{"class":252},[228,10137,928],{"class":915},[228,10139,7418],{"class":252},[228,10141,916],{"class":915},[228,10143,10144],{"class":252},"            \u003Cspan>CHECKLIST\u003C\u002Fspan>",[228,10146,916],{"class":915},[228,10148,7551],{"class":252},[228,10150,916],{"class":915},[228,10152,7508],{"class":252},[228,10154,928],{"class":915},[228,10156,10157],{"class":252},"wi-checklist",[228,10159,928],{"class":915},[228,10161,5360],{"class":252},[228,10163,916],{"class":915},[228,10165,10166],{"class":252},"            \u003Clabel",[228,10168,916],{"class":915},[228,10170,10171],{"class":252},"              v-for=",[228,10173,928],{"class":915},[228,10175,10176],{"class":252},"(item, i) in (currentStep?.checklist ?? [])",[228,10178,987],{"class":915},[228,10180,10181],{"class":252},"              :key=",[228,10183,928],{"class":915},[228,10185,10186],{"class":252},"i",[228,10188,987],{"class":915},[228,10190,9988],{"class":252},[228,10192,928],{"class":915},[228,10194,10195],{"class":252},"wi-check-row",[228,10197,987],{"class":915},[228,10199,10200],{"class":252},"              :class=",[228,10202,928],{"class":915},[228,10204,10205],{"class":252},"{ 'wi-check-row-done': checkedState[i] }",[228,10207,987],{"class":915},[228,10209,10210],{"class":252},"            >",[228,10212,916],{"class":915},[228,10214,10215],{"class":252},"              \u003Cv-checkbox-btn",[228,10217,916],{"class":915},[228,10219,10220],{"class":252},"                :model-value=",[228,10222,928],{"class":915},[228,10224,10225],{"class":252},"checkedState[i]",[228,10227,987],{"class":915},[228,10229,10230],{"class":252},"                color=",[228,10232,928],{"class":915},[228,10234,8139],{"class":252},[228,10236,987],{"class":915},[228,10238,10239],{"class":252},"                density=",[228,10241,928],{"class":915},[228,10243,10244],{"class":252},"comfortable",[228,10246,987],{"class":915},[228,10248,10249],{"class":252},"                @update:model-value=",[228,10251,928],{"class":915},[228,10253,10254],{"class":252},"toggleCheck(i)",[228,10256,987],{"class":915},[228,10258,10259],{"class":252},"              >\u003C\u002Fv-checkbox-btn>",[228,10261,916],{"class":915},[228,10263,10264],{"class":252},"              \u003Cspan>{{ item }}\u003C\u002Fspan>",[228,10266,916],{"class":915},[228,10268,10269],{"class":252},"            \u003C\u002Flabel>",[228,10271,916],{"class":915},[228,10273,7551],{"class":252},[228,10275,916],{"class":915},[228,10277,9778],{"class":252},[228,10279,916],{"class":915},[228,10281,7346],{"class":252},[228,10283,916],{"class":915},[228,10285,9896],{"class":252},[228,10287,922],{"class":915},[228,10289,10290],{"class":252},"    \u003C!-- Controls -->",[228,10292,916],{"class":915},[228,10294,7442],{"class":252},[228,10296,928],{"class":915},[228,10298,10299],{"class":252},"wi-controls",[228,10301,928],{"class":915},[228,10303,5360],{"class":252},[228,10305,916],{"class":915},[228,10307,7461],{"class":252},[228,10309,928],{"class":915},[228,10311,7466],{"class":252},[228,10313,928],{"class":915},[228,10315,7911],{"class":252},[228,10317,928],{"class":915},[228,10319,10320],{"class":252},"3",[228,10322,928],{"class":915},[228,10324,7394],{"class":252},[228,10326,928],{"class":915},[228,10328,10329],{"class":252},"wi-ctrl-col",[228,10331,928],{"class":915},[228,10333,5360],{"class":252},[228,10335,916],{"class":915},[228,10337,10338],{"class":252},"        \u003Cv-btn block size=",[228,10340,928],{"class":915},[228,10342,8129],{"class":252},[228,10344,928],{"class":915},[228,10346,7374],{"class":252},[228,10348,928],{"class":915},[228,10350,10351],{"class":252},"outlined",[228,10353,928],{"class":915},[228,10355,8134],{"class":252},[228,10357,928],{"class":915},[228,10359,10360],{"class":252},"blue-grey-darken-1",[228,10362,928],{"class":915},[228,10364,7394],{"class":252},[228,10366,928],{"class":915},[228,10368,10369],{"class":252},"wi-nav-btn",[228,10371,987],{"class":915},[228,10373,10374],{"class":252},"          :disabled=",[228,10376,928],{"class":915},[228,10378,10379],{"class":252},"currentIndex === 0",[228,10381,928],{"class":915},[228,10383,10384],{"class":252}," @click=",[228,10386,928],{"class":915},[228,10388,10389],{"class":252},"prevStep",[228,10391,928],{"class":915},[228,10393,5360],{"class":252},[228,10395,916],{"class":915},[228,10397,7408],{"class":252},[228,10399,928],{"class":915},[228,10401,10402],{"class":252},"mdi-chevron-left",[228,10404,928],{"class":915},[228,10406,7532],{"class":252},[228,10408,928],{"class":915},[228,10410,10411],{"class":252},"30",[228,10413,928],{"class":915},[228,10415,7418],{"class":252},[228,10417,916],{"class":915},[228,10419,10420],{"class":252},"          PREVIOUS",[228,10422,916],{"class":915},[228,10424,10425],{"class":252},"        \u003C\u002Fv-btn>",[228,10427,916],{"class":915},[228,10429,7750],{"class":252},[228,10431,922],{"class":915},[228,10433,7461],{"class":252},[228,10435,928],{"class":915},[228,10437,7466],{"class":252},[228,10439,928],{"class":915},[228,10441,7911],{"class":252},[228,10443,928],{"class":915},[228,10445,10320],{"class":252},[228,10447,928],{"class":915},[228,10449,7394],{"class":252},[228,10451,928],{"class":915},[228,10453,10329],{"class":252},[228,10455,928],{"class":915},[228,10457,5360],{"class":252},[228,10459,916],{"class":915},[228,10461,10338],{"class":252},[228,10463,928],{"class":915},[228,10465,8129],{"class":252},[228,10467,928],{"class":915},[228,10469,7374],{"class":252},[228,10471,928],{"class":915},[228,10473,7379],{"class":252},[228,10475,928],{"class":915},[228,10477,8134],{"class":252},[228,10479,928],{"class":915},[228,10481,10482],{"class":252},"red-darken-1",[228,10484,928],{"class":915},[228,10486,7394],{"class":252},[228,10488,928],{"class":915},[228,10490,10369],{"class":252},[228,10492,928],{"class":915},[228,10494,10384],{"class":252},[228,10496,928],{"class":915},[228,10498,10499],{"class":252},"reportDefect",[228,10501,928],{"class":915},[228,10503,5360],{"class":252},[228,10505,916],{"class":915},[228,10507,7408],{"class":252},[228,10509,928],{"class":915},[228,10511,10512],{"class":252},"mdi-alert-octagon-outline",[228,10514,928],{"class":915},[228,10516,7532],{"class":252},[228,10518,928],{"class":915},[228,10520,10521],{"class":252},"28",[228,10523,928],{"class":915},[228,10525,7418],{"class":252},[228,10527,916],{"class":915},[228,10529,10530],{"class":252},"          REPORT ISSUE",[228,10532,916],{"class":915},[228,10534,10425],{"class":252},[228,10536,916],{"class":915},[228,10538,7750],{"class":252},[228,10540,922],{"class":915},[228,10542,7461],{"class":252},[228,10544,928],{"class":915},[228,10546,7466],{"class":252},[228,10548,928],{"class":915},[228,10550,7911],{"class":252},[228,10552,928],{"class":915},[228,10554,10555],{"class":252},"6",[228,10557,928],{"class":915},[228,10559,7394],{"class":252},[228,10561,928],{"class":915},[228,10563,10329],{"class":252},[228,10565,928],{"class":915},[228,10567,5360],{"class":252},[228,10569,916],{"class":915},[228,10571,10338],{"class":252},[228,10573,928],{"class":915},[228,10575,8129],{"class":252},[228,10577,928],{"class":915},[228,10579,7374],{"class":252},[228,10581,928],{"class":915},[228,10583,7379],{"class":252},[228,10585,928],{"class":915},[228,10587,10588],{"class":252}," :color=",[228,10590,928],{"class":915},[228,10592,10593],{"class":252},"isLastStep ? 'green-darken-2' : 'green-darken-1'",[228,10595,987],{"class":915},[228,10597,10598],{"class":252},"          class=",[228,10600,928],{"class":915},[228,10602,10603],{"class":252},"wi-nav-btn wi-next-btn",[228,10605,928],{"class":915},[228,10607,8153],{"class":252},[228,10609,928],{"class":915},[228,10611,10612],{"class":252},"!allChecked",[228,10614,928],{"class":915},[228,10616,10384],{"class":252},[228,10618,928],{"class":915},[228,10620,10621],{"class":252},"nextStep",[228,10623,928],{"class":915},[228,10625,5360],{"class":252},[228,10627,916],{"class":915},[228,10629,10630],{"class":252},"          \u003Cv-icon start :icon=",[228,10632,928],{"class":915},[228,10634,10635],{"class":252},"isLastStep ? 'mdi-check-circle' : 'mdi-chevron-right'",[228,10637,928],{"class":915},[228,10639,7532],{"class":252},[228,10641,928],{"class":915},[228,10643,10411],{"class":252},[228,10645,928],{"class":915},[228,10647,7418],{"class":252},[228,10649,916],{"class":915},[228,10651,10652],{"class":252},"          {{ isLastStep ? 'COMPLETE OPERATION' : 'NEXT STEP' }}",[228,10654,916],{"class":915},[228,10656,10425],{"class":252},[228,10658,916],{"class":915},[228,10660,7750],{"class":252},[228,10662,916],{"class":915},[228,10664,8114],{"class":252},[228,10666,922],{"class":915},[228,10668,10669],{"class":252},"    \u003Cdiv v-if=",[228,10671,928],{"class":915},[228,10673,10612],{"class":252},[228,10675,928],{"class":915},[228,10677,7394],{"class":252},[228,10679,928],{"class":915},[228,10681,10682],{"class":252},"wi-hint",[228,10684,928],{"class":915},[228,10686,5360],{"class":252},[228,10688,916],{"class":915},[228,10690,10691],{"class":252},"      \u003Cv-icon icon=",[228,10693,928],{"class":915},[228,10695,10696],{"class":252},"mdi-information-outline",[228,10698,928],{"class":915},[228,10700,7532],{"class":252},[228,10702,928],{"class":915},[228,10704,8064],{"class":252},[228,10706,928],{"class":915},[228,10708,7418],{"class":252},[228,10710,916],{"class":915},[228,10712,10713],{"class":252},"      Complete all checklist items to continue.",[228,10715,916],{"class":915},[228,10717,7437],{"class":252},[228,10719,916],{"class":915},[228,10721,8210],{"class":252},[228,10723,916],{"class":915},[228,10725,8215],{"class":252},[228,10727,922],{"class":915},[228,10729,8220],{"class":252},[228,10731,916],{"class":915},[228,10733,8225],{"class":252},[228,10735,916],{"class":915},[228,10737,10738],{"class":252},"  data () {",[228,10740,916],{"class":915},[228,10742,10743],{"class":252},"    return {",[228,10745,916],{"class":915},[228,10747,10748],{"class":252},"      currentIndex: 0,",[228,10750,916],{"class":915},[228,10752,10753],{"class":252},"      checked: {},",[228,10755,916],{"class":915},[228,10757,10758],{"class":252},"      assetBase: '\u002Fassets\u002F',",[228,10760,916],{"class":915},[228,10762,10763],{"class":252},"      placeholder: 'https:\u002F\u002Fplacehold.co\u002F800x600\u002Feef2f7\u002F475569?text=Step+Reference',",[228,10765,916],{"class":915},[228,10767,10768],{"class":252},"      instruction: null",[228,10770,916],{"class":915},[228,10772,3695],{"class":252},[228,10774,916],{"class":915},[228,10776,10777],{"class":252},"  },",[228,10779,916],{"class":915},[228,10781,8230],{"class":252},[228,10783,916],{"class":915},[228,10785,10786],{"class":252},"    payload () {",[228,10788,916],{"class":915},[228,10790,10791],{"class":252},"      return this.instruction ?? {}",[228,10793,916],{"class":915},[228,10795,3472],{"class":252},[228,10797,916],{"class":915},[228,10799,10800],{"class":252},"    steps () {",[228,10802,916],{"class":915},[228,10804,10805],{"class":252},"      return this.instruction?.steps ?? []",[228,10807,916],{"class":915},[228,10809,3472],{"class":252},[228,10811,916],{"class":915},[228,10813,10814],{"class":252},"    currentStep () {",[228,10816,916],{"class":915},[228,10818,10819],{"class":252},"      return this.steps[this.currentIndex] ?? null",[228,10821,916],{"class":915},[228,10823,3472],{"class":252},[228,10825,916],{"class":915},[228,10827,10828],{"class":252},"    isLastStep () {",[228,10830,916],{"class":915},[228,10832,10833],{"class":252},"      return this.currentIndex === this.steps.length - 1",[228,10835,916],{"class":915},[228,10837,3472],{"class":252},[228,10839,916],{"class":915},[228,10841,10842],{"class":252},"    progressPercent () {",[228,10844,916],{"class":915},[228,10846,10847],{"class":252},"      if (!this.steps.length) return 0",[228,10849,916],{"class":915},[228,10851,10852],{"class":252},"      return Math.round((this.currentIndex \u002F this.steps.length) * 100)",[228,10854,916],{"class":915},[228,10856,3472],{"class":252},[228,10858,916],{"class":915},[228,10860,10861],{"class":252},"    checkedState () {",[228,10863,916],{"class":915},[228,10865,10866],{"class":252},"      return this.checked[this.currentIndex] ?? []",[228,10868,916],{"class":915},[228,10870,3472],{"class":252},[228,10872,916],{"class":915},[228,10874,10875],{"class":252},"    allChecked () {",[228,10877,916],{"class":915},[228,10879,10880],{"class":252},"      const list = this.currentStep?.checklist ?? []",[228,10882,916],{"class":915},[228,10884,10885],{"class":252},"      if (!list.length) return true",[228,10887,916],{"class":915},[228,10889,10890],{"class":252},"      const state = this.checkedState",[228,10892,916],{"class":915},[228,10894,10895],{"class":252},"      return list.every((_, i) => state[i])",[228,10897,916],{"class":915},[228,10899,3472],{"class":252},[228,10901,916],{"class":915},[228,10903,10904],{"class":252},"    stepImage () {",[228,10906,916],{"class":915},[228,10908,10909],{"class":252},"      return this.resolveImage(this.currentStep?.image)",[228,10911,916],{"class":915},[228,10913,3695],{"class":252},[228,10915,916],{"class":915},[228,10917,10777],{"class":252},[228,10919,916],{"class":915},[228,10921,10922],{"class":252},"  methods: {",[228,10924,916],{"class":915},[228,10926,10927],{"class":252},"    resolveImage (img) {",[228,10929,916],{"class":915},[228,10931,10932],{"class":252},"      if (!img) return this.placeholder",[228,10934,916],{"class":915},[228,10936,10937],{"class":252},"      if (\u002F^https?:",[228,10939,10940],{"class":915},"\\\\",[228,10942,10943],{"class":252},"\u002F",[228,10945,10940],{"class":915},[228,10947,10948],{"class":252},"\u002F\u002F.test(img) || img.startsWith('\u002F')) return img",[228,10950,916],{"class":915},[228,10952,10953],{"class":252},"      return this.assetBase + img",[228,10955,916],{"class":915},[228,10957,3472],{"class":252},[228,10959,916],{"class":915},[228,10961,10962],{"class":252},"    preloadImages () {",[228,10964,916],{"class":915},[228,10966,10967],{"class":252},"      for (const step of this.steps) {",[228,10969,916],{"class":915},[228,10971,10972],{"class":252},"        const url = this.resolveImage(step?.image)",[228,10974,916],{"class":915},[228,10976,10977],{"class":252},"        if (url && url !== this.placeholder) {",[228,10979,916],{"class":915},[228,10981,10982],{"class":252},"          const im = new Image()",[228,10984,916],{"class":915},[228,10986,10987],{"class":252},"          im.src = url",[228,10989,916],{"class":915},[228,10991,4056],{"class":252},[228,10993,916],{"class":915},[228,10995,10996],{"class":252},"      }",[228,10998,916],{"class":915},[228,11000,3472],{"class":252},[228,11002,916],{"class":915},[228,11004,11005],{"class":252},"    saveStep () {",[228,11007,916],{"class":915},[228,11009,11010],{"class":252},"      this.send({",[228,11012,916],{"class":915},[228,11014,11015],{"class":252},"        payload: {",[228,11017,916],{"class":915},[228,11019,11020],{"class":252},"          action: 'save_step',",[228,11022,916],{"class":915},[228,11024,11025],{"class":252},"          stepIndex: this.currentIndex,",[228,11027,916],{"class":915},[228,11029,11030],{"class":252},"          stepName: this.currentStep?.title ?? null,",[228,11032,916],{"class":915},[228,11034,11035],{"class":252},"          stepId: this.currentStep?.stepId ?? null",[228,11037,916],{"class":915},[228,11039,4056],{"class":252},[228,11041,916],{"class":915},[228,11043,11044],{"class":252},"      })",[228,11046,916],{"class":915},[228,11048,3472],{"class":252},[228,11050,916],{"class":915},[228,11052,11053],{"class":252},"    toggleCheck (i) {",[228,11055,916],{"class":915},[228,11057,11058],{"class":252},"      const arr = (this.checked[this.currentIndex] ?? []).slice()",[228,11060,916],{"class":915},[228,11062,11063],{"class":252},"      arr[i] = !arr[i]",[228,11065,916],{"class":915},[228,11067,11068],{"class":252},"      this.checked = { ...this.checked, [this.currentIndex]: arr }",[228,11070,916],{"class":915},[228,11072,3472],{"class":252},[228,11074,916],{"class":915},[228,11076,11077],{"class":252},"    onImageError (e) {",[228,11079,916],{"class":915},[228,11081,11082],{"class":252},"      if (e?.target && e.target.src !== this.placeholder) {",[228,11084,916],{"class":915},[228,11086,11087],{"class":252},"        e.target.src = this.placeholder",[228,11089,916],{"class":915},[228,11091,10996],{"class":252},[228,11093,916],{"class":915},[228,11095,3472],{"class":252},[228,11097,916],{"class":915},[228,11099,11100],{"class":252},"    goToStep (i) {",[228,11102,916],{"class":915},[228,11104,11105],{"class":252},"      const max = this.steps.length - 1",[228,11107,916],{"class":915},[228,11109,11110],{"class":252},"      this.currentIndex = Math.min(Math.max(i, 0), Math.max(max, 0))",[228,11112,916],{"class":915},[228,11114,11115],{"class":252},"      this.saveStep()",[228,11117,916],{"class":915},[228,11119,3472],{"class":252},[228,11121,916],{"class":915},[228,11123,11124],{"class":252},"    nextStep () {",[228,11126,916],{"class":915},[228,11128,11129],{"class":252},"      if (this.isLastStep) {",[228,11131,916],{"class":915},[228,11133,11134],{"class":252},"        this.send({ payload: { action: 'complete_operation', stepIndex: this.currentIndex } })",[228,11136,916],{"class":915},[228,11138,5445],{"class":252},[228,11140,916],{"class":915},[228,11142,10996],{"class":252},[228,11144,916],{"class":915},[228,11146,11147],{"class":252},"      this.goToStep(this.currentIndex + 1)",[228,11149,916],{"class":915},[228,11151,3472],{"class":252},[228,11153,916],{"class":915},[228,11155,11156],{"class":252},"    prevStep () {",[228,11158,916],{"class":915},[228,11160,11161],{"class":252},"      if (this.currentIndex === 0) return",[228,11163,916],{"class":915},[228,11165,11166],{"class":252},"      this.goToStep(this.currentIndex - 1)",[228,11168,916],{"class":915},[228,11170,3472],{"class":252},[228,11172,916],{"class":915},[228,11174,11175],{"class":252},"    reportDefect () {",[228,11177,916],{"class":915},[228,11179,11010],{"class":252},[228,11181,916],{"class":915},[228,11183,11015],{"class":252},[228,11185,916],{"class":915},[228,11187,11188],{"class":252},"          action: 'Report Issue',",[228,11190,916],{"class":915},[228,11192,4056],{"class":252},[228,11194,916],{"class":915},[228,11196,11044],{"class":252},[228,11198,916],{"class":915},[228,11200,3695],{"class":252},[228,11202,916],{"class":915},[228,11204,10777],{"class":252},[228,11206,916],{"class":915},[228,11208,11209],{"class":252},"  watch: {",[228,11211,916],{"class":915},[228,11213,11214],{"class":252},"    msg: {",[228,11216,916],{"class":915},[228,11218,11219],{"class":252},"      immediate: true,",[228,11221,916],{"class":915},[228,11223,11224],{"class":252},"      handler (m) {",[228,11226,916],{"class":915},[228,11228,11229],{"class":252},"        const pl = m?.payload",[228,11231,916],{"class":915},[228,11233,11234],{"class":252},"        if (!pl) return",[228,11236,916],{"class":915},[228,11238,11239],{"class":252},"        if (Array.isArray(pl.steps)) {",[228,11241,916],{"class":915},[228,11243,11244],{"class":252},"          \u002F\u002F Instruction-set data: cache it so later messages can't wipe it.",[228,11246,916],{"class":915},[228,11248,11249],{"class":252},"          this.instruction = pl",[228,11251,916],{"class":915},[228,11253,11254],{"class":252},"          \u002F\u002F Preload every step image so navigation is instant.",[228,11256,916],{"class":915},[228,11258,11259],{"class":252},"          this.$nextTick(() => this.preloadImages())",[228,11261,916],{"class":915},[228,11263,11264],{"class":252},"        } else if (typeof pl.stepIndex === 'number') {",[228,11266,916],{"class":915},[228,11268,11269],{"class":252},"          \u002F\u002F Resume reply from the tracker: jump to the saved step.",[228,11271,916],{"class":915},[228,11273,11274],{"class":252},"          this.currentIndex = Math.min(",[228,11276,916],{"class":915},[228,11278,11279],{"class":252},"            Math.max(pl.stepIndex, 0),",[228,11281,916],{"class":915},[228,11283,11284],{"class":252},"            Math.max(this.steps.length - 1, 0)",[228,11286,916],{"class":915},[228,11288,11289],{"class":252},"          )",[228,11291,916],{"class":915},[228,11293,4056],{"class":252},[228,11295,916],{"class":915},[228,11297,10996],{"class":252},[228,11299,916],{"class":915},[228,11301,3695],{"class":252},[228,11303,916],{"class":915},[228,11305,10777],{"class":252},[228,11307,916],{"class":915},[228,11309,11310],{"class":252},"  mounted () {",[228,11312,916],{"class":915},[228,11314,11315],{"class":252},"    \u002F\u002F Ask the tracker which step this work order was left on.",[228,11317,916],{"class":915},[228,11319,11320],{"class":252},"    this.send({ payload: { action: 'load_step' } })",[228,11322,916],{"class":915},[228,11324,8264],{"class":252},[228,11326,916],{"class":915},[228,11328,1575],{"class":252},[228,11330,916],{"class":915},[228,11332,8273],{"class":252},[228,11334,922],{"class":915},[228,11336,8278],{"class":252},[228,11338,916],{"class":915},[228,11340,8283],{"class":252},[228,11342,916],{"class":915},[228,11344,8288],{"class":252},[228,11346,916],{"class":915},[228,11348,8293],{"class":252},[228,11350,916],{"class":915},[228,11352,11353],{"class":252},"    padding: 2px;",[228,11355,916],{"class":915},[228,11357,8264],{"class":252},[228,11359,922],{"class":915},[228,11361,11362],{"class":252},"  \u002F* Header *\u002F",[228,11364,916],{"class":915},[228,11366,8307],{"class":252},[228,11368,916],{"class":915},[228,11370,8312],{"class":252},[228,11372,916],{"class":915},[228,11374,8317],{"class":252},[228,11376,916],{"class":915},[228,11378,8322],{"class":252},[228,11380,916],{"class":915},[228,11382,8327],{"class":252},[228,11384,916],{"class":915},[228,11386,8332],{"class":252},[228,11388,916],{"class":915},[228,11390,8337],{"class":252},[228,11392,916],{"class":915},[228,11394,8342],{"class":252},[228,11396,916],{"class":915},[228,11398,8347],{"class":252},[228,11400,916],{"class":915},[228,11402,8352],{"class":252},[228,11404,916],{"class":915},[228,11406,11407],{"class":252},"    padding: 10px 16px;",[228,11409,916],{"class":915},[228,11411,11412],{"class":252},"    margin-bottom: 10px;",[228,11414,916],{"class":915},[228,11416,8264],{"class":252},[228,11418,922],{"class":915},[228,11420,8371],{"class":252},[228,11422,916],{"class":915},[228,11424,8312],{"class":252},[228,11426,916],{"class":915},[228,11428,8380],{"class":252},[228,11430,916],{"class":915},[228,11432,11433],{"class":252},"    line-height: 1.15;",[228,11435,916],{"class":915},[228,11437,8264],{"class":252},[228,11439,922],{"class":915},[228,11441,11442],{"class":252},"  .wi-op-label {",[228,11444,916],{"class":915},[228,11446,8768],{"class":252},[228,11448,916],{"class":915},[228,11450,8404],{"class":252},[228,11452,916],{"class":915},[228,11454,8409],{"class":252},[228,11456,916],{"class":915},[228,11458,8414],{"class":252},[228,11460,916],{"class":915},[228,11462,8264],{"class":252},[228,11464,922],{"class":915},[228,11466,11467],{"class":252},"  .wi-op-name {",[228,11469,916],{"class":915},[228,11471,11472],{"class":252},"    font-size: 21px;",[228,11474,916],{"class":915},[228,11476,8433],{"class":252},[228,11478,916],{"class":915},[228,11480,8438],{"class":252},[228,11482,916],{"class":915},[228,11484,8264],{"class":252},[228,11486,922],{"class":915},[228,11488,11489],{"class":252},"  .wi-op-sub {",[228,11491,916],{"class":915},[228,11493,8399],{"class":252},[228,11495,916],{"class":915},[228,11497,11498],{"class":252},"    color: #94a3b8;",[228,11500,916],{"class":915},[228,11502,8853],{"class":252},[228,11504,916],{"class":915},[228,11506,11507],{"class":252},"    margin-top: 2px;",[228,11509,916],{"class":915},[228,11511,8264],{"class":252},[228,11513,922],{"class":915},[228,11515,11516],{"class":252},"  .wi-timer {",[228,11518,916],{"class":915},[228,11520,8312],{"class":252},[228,11522,916],{"class":915},[228,11524,8317],{"class":252},[228,11526,916],{"class":915},[228,11528,8461],{"class":252},[228,11530,916],{"class":915},[228,11532,11533],{"class":252},"    padding: 8px 14px;",[228,11535,916],{"class":915},[228,11537,8352],{"class":252},[228,11539,916],{"class":915},[228,11541,8722],{"class":252},[228,11543,916],{"class":915},[228,11545,8438],{"class":252},[228,11547,916],{"class":915},[228,11549,8264],{"class":252},[228,11551,922],{"class":915},[228,11553,11554],{"class":252},"  .wi-timer-text {",[228,11556,916],{"class":915},[228,11558,8312],{"class":252},[228,11560,916],{"class":915},[228,11562,8380],{"class":252},[228,11564,916],{"class":915},[228,11566,8385],{"class":252},[228,11568,916],{"class":915},[228,11570,8264],{"class":252},[228,11572,922],{"class":915},[228,11574,11575],{"class":252},"  .wi-timer-label {",[228,11577,916],{"class":915},[228,11579,11580],{"class":252},"    font-size: 10px;",[228,11582,916],{"class":915},[228,11584,8773],{"class":252},[228,11586,916],{"class":915},[228,11588,8414],{"class":252},[228,11590,916],{"class":915},[228,11592,11593],{"class":252},"    opacity: 0.75;",[228,11595,916],{"class":915},[228,11597,8264],{"class":252},[228,11599,922],{"class":915},[228,11601,11602],{"class":252},"  .wi-timer-value {",[228,11604,916],{"class":915},[228,11606,8942],{"class":252},[228,11608,916],{"class":915},[228,11610,8433],{"class":252},[228,11612,916],{"class":915},[228,11614,8443],{"class":252},[228,11616,916],{"class":915},[228,11618,8264],{"class":252},[228,11620,922],{"class":915},[228,11622,11623],{"class":252},"  \u002F* Cards *\u002F",[228,11625,916],{"class":915},[228,11627,8521],{"class":252},[228,11629,916],{"class":915},[228,11631,8526],{"class":252},[228,11633,916],{"class":915},[228,11635,8531],{"class":252},[228,11637,916],{"class":915},[228,11639,8536],{"class":252},[228,11641,916],{"class":915},[228,11643,11644],{"class":252},"    padding: 14px 18px !important;",[228,11646,916],{"class":915},[228,11648,8546],{"class":252},[228,11650,916],{"class":915},[228,11652,11653],{"class":252},"    box-sizing: border-box;",[228,11655,916],{"class":915},[228,11657,8264],{"class":252},[228,11659,922],{"class":915},[228,11661,8583],{"class":252},[228,11663,916],{"class":915},[228,11665,8312],{"class":252},[228,11667,916],{"class":915},[228,11669,8317],{"class":252},[228,11671,916],{"class":915},[228,11673,8596],{"class":252},[228,11675,916],{"class":915},[228,11677,8601],{"class":252},[228,11679,916],{"class":915},[228,11681,8404],{"class":252},[228,11683,916],{"class":915},[228,11685,8433],{"class":252},[228,11687,916],{"class":915},[228,11689,8409],{"class":252},[228,11691,916],{"class":915},[228,11693,11694],{"class":252},"    margin-bottom: 8px;",[228,11696,916],{"class":915},[228,11698,8264],{"class":252},[228,11700,922],{"class":915},[228,11702,11703],{"class":252},"  \u002F* Stepper (compact) *\u002F",[228,11705,916],{"class":915},[228,11707,11708],{"class":252},"  .wi-stepper-card {",[228,11710,916],{"class":915},[228,11712,11412],{"class":252},[228,11714,916],{"class":915},[228,11716,11407],{"class":252},[228,11718,916],{"class":915},[228,11720,8264],{"class":252},[228,11722,922],{"class":915},[228,11724,11725],{"class":252},"  .wi-stepper-head {",[228,11727,916],{"class":915},[228,11729,8312],{"class":252},[228,11731,916],{"class":915},[228,11733,8322],{"class":252},[228,11735,916],{"class":915},[228,11737,11738],{"class":252},"    align-items: baseline;",[228,11740,916],{"class":915},[228,11742,11694],{"class":252},[228,11744,916],{"class":915},[228,11746,8264],{"class":252},[228,11748,922],{"class":915},[228,11750,11751],{"class":252},"  .wi-step-count {",[228,11753,916],{"class":915},[228,11755,11756],{"class":252},"    font-size: 14px;",[228,11758,916],{"class":915},[228,11760,8433],{"class":252},[228,11762,916],{"class":915},[228,11764,8986],{"class":252},[228,11766,916],{"class":915},[228,11768,8438],{"class":252},[228,11770,916],{"class":915},[228,11772,8264],{"class":252},[228,11774,922],{"class":915},[228,11776,11777],{"class":252},"  .wi-step-percent {",[228,11779,916],{"class":915},[228,11781,8399],{"class":252},[228,11783,916],{"class":915},[228,11785,8414],{"class":252},[228,11787,916],{"class":915},[228,11789,8986],{"class":252},[228,11791,916],{"class":915},[228,11793,8409],{"class":252},[228,11795,916],{"class":915},[228,11797,8264],{"class":252},[228,11799,922],{"class":915},[228,11801,11802],{"class":252},"  \u002F* Instruction card *\u002F",[228,11804,916],{"class":915},[228,11806,11807],{"class":252},"  .wi-card-instruction {",[228,11809,916],{"class":915},[228,11811,11812],{"class":252},"    border-left: 5px solid #5e35b1 !important;",[228,11814,916],{"class":915},[228,11816,11817],{"class":252},"    padding: 16px 20px !important;",[228,11819,916],{"class":915},[228,11821,11653],{"class":252},[228,11823,916],{"class":915},[228,11825,8264],{"class":252},[228,11827,922],{"class":915},[228,11829,11830],{"class":252},"  \u002F* Desktop: keep the instruction card a consistent size across every step,",[228,11832,916],{"class":915},[228,11834,11835],{"class":252},"     so navigating between steps does not make the layout jump. The card",[228,11837,916],{"class":915},[228,11839,11840],{"class":252},"     still grows taller when the reference image needs more room. *\u002F",[228,11842,916],{"class":915},[228,11844,11845],{"class":252},"  @media (min-width: 701px) {",[228,11847,916],{"class":915},[228,11849,11850],{"class":252},"    .wi-card-instruction {",[228,11852,916],{"class":915},[228,11854,11855],{"class":252},"      min-height: 360px;",[228,11857,916],{"class":915},[228,11859,3695],{"class":252},[228,11861,916],{"class":915},[228,11863,8264],{"class":252},[228,11865,922],{"class":915},[228,11867,11868],{"class":252},"  .wi-step-title {",[228,11870,916],{"class":915},[228,11872,11873],{"class":252},"    font-size: 19px;",[228,11875,916],{"class":915},[228,11877,8433],{"class":252},[228,11879,916],{"class":915},[228,11881,8438],{"class":252},[228,11883,916],{"class":915},[228,11885,8618],{"class":252},[228,11887,916],{"class":915},[228,11889,11433],{"class":252},[228,11891,916],{"class":915},[228,11893,8264],{"class":252},[228,11895,922],{"class":915},[228,11897,11898],{"class":252},"  .wi-step-instruction {",[228,11900,916],{"class":915},[228,11902,11903],{"class":252},"    font-size: 15px;",[228,11905,916],{"class":915},[228,11907,11908],{"class":252},"    line-height: 1.55;",[228,11910,916],{"class":915},[228,11912,11913],{"class":252},"    color: #334155;",[228,11915,916],{"class":915},[228,11917,11918],{"class":252},"    margin: 0 0 16px;",[228,11920,916],{"class":915},[228,11922,8264],{"class":252},[228,11924,922],{"class":915},[228,11926,11927],{"class":252},"  .wi-checklist-head {",[228,11929,916],{"class":915},[228,11931,11932],{"class":252},"    margin-top: 6px;",[228,11934,916],{"class":915},[228,11936,11937],{"class":252},"    padding-top: 12px;",[228,11939,916],{"class":915},[228,11941,11942],{"class":252},"    border-top: 1px solid #edf2f7;",[228,11944,916],{"class":915},[228,11946,8264],{"class":252},[228,11948,922],{"class":915},[228,11950,11951],{"class":252},"  .wi-checklist {",[228,11953,916],{"class":915},[228,11955,8312],{"class":252},[228,11957,916],{"class":915},[228,11959,8380],{"class":252},[228,11961,916],{"class":915},[228,11963,11964],{"class":252},"    gap: 4px;",[228,11966,916],{"class":915},[228,11968,8264],{"class":252},[228,11970,922],{"class":915},[228,11972,11973],{"class":252},"  .wi-check-row {",[228,11975,916],{"class":915},[228,11977,8312],{"class":252},[228,11979,916],{"class":915},[228,11981,8317],{"class":252},[228,11983,916],{"class":915},[228,11985,11986],{"class":252},"    justify-content: flex-start;",[228,11988,916],{"class":915},[228,11990,8461],{"class":252},[228,11992,916],{"class":915},[228,11994,11995],{"class":252},"    padding: 6px 4px;",[228,11997,916],{"class":915},[228,11999,8727],{"class":252},[228,12001,916],{"class":915},[228,12003,11903],{"class":252},[228,12005,916],{"class":915},[228,12007,8853],{"class":252},[228,12009,916],{"class":915},[228,12011,8293],{"class":252},[228,12013,916],{"class":915},[228,12015,12016],{"class":252},"    cursor: pointer;",[228,12018,916],{"class":915},[228,12020,8264],{"class":252},[228,12022,922],{"class":915},[228,12024,12025],{"class":252},"  .wi-check-row>span {",[228,12027,916],{"class":915},[228,12029,12030],{"class":252},"    flex: 1;",[228,12032,916],{"class":915},[228,12034,12035],{"class":252},"    line-height: 1.35;",[228,12037,916],{"class":915},[228,12039,8264],{"class":252},[228,12041,922],{"class":915},[228,12043,12044],{"class":252},"  .wi-check-row .v-selection-control {",[228,12046,916],{"class":915},[228,12048,12049],{"class":252},"    flex: none;",[228,12051,916],{"class":915},[228,12053,12054],{"class":252},"    min-width: 0;",[228,12056,916],{"class":915},[228,12058,8264],{"class":252},[228,12060,922],{"class":915},[228,12062,12063],{"class":252},"  .wi-check-row-done>span {",[228,12065,916],{"class":915},[228,12067,11498],{"class":252},[228,12069,916],{"class":915},[228,12071,8264],{"class":252},[228,12073,922],{"class":915},[228,12075,12076],{"class":252},"  \u002F* Instruction two-column layout (plain flexbox, no Vuetify grid) *\u002F",[228,12078,916],{"class":915},[228,12080,12081],{"class":252},"  .wi-instruction-flex {",[228,12083,916],{"class":915},[228,12085,8312],{"class":252},[228,12087,916],{"class":915},[228,12089,12090],{"class":252},"    gap: 20px;",[228,12092,916],{"class":915},[228,12094,12095],{"class":252},"    align-items: stretch;",[228,12097,916],{"class":915},[228,12099,12100],{"class":252},"    width: 100%;",[228,12102,916],{"class":915},[228,12104,8546],{"class":252},[228,12106,916],{"class":915},[228,12108,8264],{"class":252},[228,12110,922],{"class":915},[228,12112,12113],{"class":252},"  .wi-img-col {",[228,12115,916],{"class":915},[228,12117,12118],{"class":252},"    flex: 0 0 40%;",[228,12120,916],{"class":915},[228,12122,8312],{"class":252},[228,12124,916],{"class":915},[228,12126,12054],{"class":252},[228,12128,916],{"class":915},[228,12130,8264],{"class":252},[228,12132,922],{"class":915},[228,12134,12135],{"class":252},"  .wi-text-col {",[228,12137,916],{"class":915},[228,12139,12140],{"class":252},"    flex: 1 1 60%;",[228,12142,916],{"class":915},[228,12144,12145],{"class":252},"    padding-top: 4px;",[228,12147,916],{"class":915},[228,12149,12054],{"class":252},[228,12151,916],{"class":915},[228,12153,8264],{"class":252},[228,12155,922],{"class":915},[228,12157,12158],{"class":252},"  \u002F* Reference image (left) *\u002F",[228,12160,916],{"class":915},[228,12162,12163],{"class":252},"  .wi-image-wrap {",[228,12165,916],{"class":915},[228,12167,8352],{"class":252},[228,12169,916],{"class":915},[228,12171,12172],{"class":252},"    overflow: hidden;",[228,12174,916],{"class":915},[228,12176,8722],{"class":252},[228,12178,916],{"class":915},[228,12180,8342],{"class":252},[228,12182,916],{"class":915},[228,12184,12100],{"class":252},[228,12186,916],{"class":915},[228,12188,8546],{"class":252},[228,12190,916],{"class":915},[228,12192,12193],{"class":252},"    min-height: 210px;",[228,12195,916],{"class":915},[228,12197,8312],{"class":252},[228,12199,916],{"class":915},[228,12201,8317],{"class":252},[228,12203,916],{"class":915},[228,12205,12206],{"class":252},"    justify-content: center;",[228,12208,916],{"class":915},[228,12210,8264],{"class":252},[228,12212,922],{"class":915},[228,12214,12215],{"class":252},"  \u002F* Desktop: image box tracks a fixed aspect ratio based on its column",[228,12217,916],{"class":915},[228,12219,12220],{"class":252},"     width, so the card height scales with the image. The text column",[228,12222,916],{"class":915},[228,12224,12225],{"class":252},"     stretches to match via align-items: stretch on the flex container. *\u002F",[228,12227,916],{"class":915},[228,12229,11845],{"class":252},[228,12231,916],{"class":915},[228,12233,12234],{"class":252},"    .wi-image-wrap {",[228,12236,916],{"class":915},[228,12238,12239],{"class":252},"      aspect-ratio: 4 \u002F 3;",[228,12241,916],{"class":915},[228,12243,12244],{"class":252},"      height: auto;",[228,12246,916],{"class":915},[228,12248,12249],{"class":252},"      align-self: flex-start;",[228,12251,916],{"class":915},[228,12253,3695],{"class":252},[228,12255,916],{"class":915},[228,12257,8264],{"class":252},[228,12259,922],{"class":915},[228,12261,12262],{"class":252},"  .wi-image {",[228,12264,916],{"class":915},[228,12266,12100],{"class":252},[228,12268,916],{"class":915},[228,12270,8546],{"class":252},[228,12272,916],{"class":915},[228,12274,12275],{"class":252},"    object-fit: contain;",[228,12277,916],{"class":915},[228,12279,8264],{"class":252},[228,12281,922],{"class":915},[228,12283,12284],{"class":252},"  @media (max-width: 700px) {",[228,12286,916],{"class":915},[228,12288,12289],{"class":252},"    .wi-instruction-flex {",[228,12291,916],{"class":915},[228,12293,12294],{"class":252},"      flex-direction: column;",[228,12296,916],{"class":915},[228,12298,3695],{"class":252},[228,12300,922],{"class":915},[228,12302,12303],{"class":252},"    .wi-img-col {",[228,12305,916],{"class":915},[228,12307,12308],{"class":252},"      flex: none;",[228,12310,916],{"class":915},[228,12312,3695],{"class":252},[228,12314,922],{"class":915},[228,12316,12234],{"class":252},[228,12318,916],{"class":915},[228,12320,12321],{"class":252},"      min-height: 150px;",[228,12323,916],{"class":915},[228,12325,3695],{"class":252},[228,12327,916],{"class":915},[228,12329,8264],{"class":252},[228,12331,922],{"class":915},[228,12333,12334],{"class":252},"  \u002F* Controls *\u002F",[228,12336,916],{"class":915},[228,12338,12339],{"class":252},"  .wi-controls {",[228,12341,916],{"class":915},[228,12343,12344],{"class":252},"    margin-top: 12px;",[228,12346,916],{"class":915},[228,12348,8498],{"class":252},[228,12350,916],{"class":915},[228,12352,8264],{"class":252},[228,12354,922],{"class":915},[228,12356,12357],{"class":252},"  .wi-ctrl-col {",[228,12359,916],{"class":915},[228,12361,12362],{"class":252},"    padding: 6px 8px;",[228,12364,916],{"class":915},[228,12366,8264],{"class":252},[228,12368,922],{"class":915},[228,12370,12371],{"class":252},"  .wi-nav-btn {",[228,12373,916],{"class":915},[228,12375,12376],{"class":252},"    height: 52px !important;",[228,12378,916],{"class":915},[228,12380,12381],{"class":252},"    font-size: 15px !important;",[228,12383,916],{"class":915},[228,12385,8479],{"class":252},[228,12387,916],{"class":915},[228,12389,8484],{"class":252},[228,12391,916],{"class":915},[228,12393,9037],{"class":252},[228,12395,916],{"class":915},[228,12397,8264],{"class":252},[228,12399,922],{"class":915},[228,12401,12402],{"class":252},"  .wi-nav-btn .v-btn__content {",[228,12404,916],{"class":915},[228,12406,8312],{"class":252},[228,12408,916],{"class":915},[228,12410,8317],{"class":252},[228,12412,916],{"class":915},[228,12414,12206],{"class":252},[228,12416,916],{"class":915},[228,12418,8264],{"class":252},[228,12420,922],{"class":915},[228,12422,12423],{"class":252},"  .wi-next-btn {",[228,12425,916],{"class":915},[228,12427,12428],{"class":252},"    font-size: 17px !important;",[228,12430,916],{"class":915},[228,12432,8264],{"class":252},[228,12434,922],{"class":915},[228,12436,12437],{"class":252},"  .wi-hint {",[228,12439,916],{"class":915},[228,12441,8312],{"class":252},[228,12443,916],{"class":915},[228,12445,8317],{"class":252},[228,12447,916],{"class":915},[228,12449,12206],{"class":252},[228,12451,916],{"class":915},[228,12453,8963],{"class":252},[228,12455,916],{"class":915},[228,12457,12458],{"class":252},"    margin-top: 8px;",[228,12460,916],{"class":915},[228,12462,11756],{"class":252},[228,12464,916],{"class":915},[228,12466,8853],{"class":252},[228,12468,916],{"class":915},[228,12470,11498],{"class":252},[228,12472,916],{"class":915},[228,12474,8264],{"class":252},[228,12476,916],{"class":915},[228,12478,9046],{"class":252},[228,12480,238],{"class":234},[228,12482,258],{"class":234},[228,12484,238],{"class":234},[228,12486,9055],{"class":241},[228,12488,238],{"class":234},[228,12490,387],{"class":234},[228,12492,238],{"class":234},[228,12494,9064],{"class":241},[228,12496,238],{"class":234},[228,12498,387],{"class":234},[228,12500,238],{"class":234},[228,12502,9073],{"class":241},[228,12504,238],{"class":234},[228,12506,387],{"class":234},[228,12508,238],{"class":234},[228,12510,9082],{"class":241},[228,12512,238],{"class":234},[228,12514,247],{"class":234},[228,12516,238],{"class":234},[228,12518,12519],{"class":252},"widget:page",[228,12521,238],{"class":234},[228,12523,258],{"class":234},[228,12525,238],{"class":234},[228,12527,9100],{"class":241},[228,12529,238],{"class":234},[228,12531,247],{"class":234},[228,12533,770],{"class":234},[228,12535,258],{"class":234},[228,12537,238],{"class":234},[228,12539,566],{"class":241},[228,12541,238],{"class":234},[228,12543,247],{"class":234},[228,12545,12546],{"class":573},"670",[228,12548,258],{"class":234},[228,12550,238],{"class":234},[228,12552,581],{"class":241},[228,12554,238],{"class":234},[228,12556,247],{"class":234},[228,12558,12559],{"class":573},"780",[228,12561,258],{"class":234},[228,12563,238],{"class":234},[228,12565,802],{"class":241},[228,12567,238],{"class":234},[228,12569,807],{"class":234},[228,12571,238],{"class":234},[228,12573,12574],{"class":252},"c67ea1f6c0580816",[228,12576,238],{"class":234},[228,12578,258],{"class":234},[228,12580,238],{"class":234},[228,12582,12583],{"class":252},"effed3f3a008aef7",[228,12585,238],{"class":234},[228,12587,816],{"class":234},[228,12589,238],{"class":234},[228,12591,242],{"class":241},[228,12593,238],{"class":234},[228,12595,247],{"class":234},[228,12597,238],{"class":234},[228,12599,12600],{"class":252},"e51561215326fafd",[228,12602,238],{"class":234},[228,12604,258],{"class":234},[228,12606,238],{"class":234},[228,12608,263],{"class":241},[228,12610,238],{"class":234},[228,12612,247],{"class":234},[228,12614,238],{"class":234},[228,12616,4748],{"class":252},[228,12618,238],{"class":234},[228,12620,258],{"class":234},[228,12622,238],{"class":234},[228,12624,4757],{"class":241},[228,12626,238],{"class":234},[228,12628,1080],{"class":234},[228,12630,238],{"class":234},[228,12632,4766],{"class":241},[228,12634,238],{"class":234},[228,12636,304],{"class":234},[228,12638,238],{"class":234},[228,12640,98],{"class":309},[228,12642,238],{"class":234},[228,12644,247],{"class":234},[228,12646,238],{"class":234},[228,12648,4783],{"class":252},[228,12650,238],{"class":234},[228,12652,4788],{"class":234},[228,12654,12655,12657,12659],{"class":230,"line":5081},[228,12656,7070],{"class":234},[228,12658,9222],{"class":915},[228,12660,5145],{"class":234},[12,12662,12663,75,12667],{},[21,12664],{"alt":12665,"src":12666},"Placeholder: Work Instruction Widget showing a step with image, checklist, and navigation controls","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Finstructions.png",[26,12668,12669],{},"The Instructions page: step image, checklist, target time, and Previous \u002F Report Issue \u002F Next controls.",[147,12671,12672],{"start":5062},[70,12673,5235,12674,12676],{},[96,12675,845],{}," node named \"Track step (save\u002Fload per user)\":",[219,12678,12680],{"className":5719,"code":12679,"language":5721,"meta":224,"style":224},"\u002F\u002F Remembers the current step per user for the active work order.\n\u002F\u002F Handles two actions from the widget:\n\u002F\u002F   save_step - persist the step the operator is on\n\u002F\u002F   load_step - reply with the saved step so the widget can resume\nconst p = msg.payload || {};\n\n\u002F\u002F Identity comes from this message's own client data first. This is what\n\u002F\u002F keeps two operators using the widget at the same time from reading or\n\u002F\u002F writing each other's progress.\nconst username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\nif (!username) return null;\n\n\u002F\u002F Read the user's saved state\nconst userState = global.get(username, \"persistent\") || {\n    workOrderId: null,\n    stepIndex: 0\n};\n\nswitch (p.action) {\n    case \"save_step\":\n        userState.stepIndex = p.stepIndex ?? 0;\n        global.set(username, userState, \"persistent\");\n        return null;\n\n    case \"load_step\":\n        msg.payload = {\n            workOrderId: userState.workOrderId,\n            stepIndex: userState.stepIndex ?? 0\n        };\n        return msg;\n\n    default:\n        return null;\n}\n",[96,12681,12682,12687,12692,12697,12702,12721,12725,12730,12735,12740,12762,12796,12813,12817,12822,12854,12864,12874,12879,12883,12898,12912,12937,12964,12970,12974,12986,12999,13015,13033,13039,13048,13053,13061,13068],{"__ignoreMap":224},[228,12683,12684],{"class":230,"line":231},[228,12685,12686],{"class":5272},"\u002F\u002F Remembers the current step per user for the active work order.\n",[228,12688,12689],{"class":230,"line":5062},[228,12690,12691],{"class":5272},"\u002F\u002F Handles two actions from the widget:\n",[228,12693,12694],{"class":230,"line":5081},[228,12695,12696],{"class":5272},"\u002F\u002F   save_step - persist the step the operator is on\n",[228,12698,12699],{"class":230,"line":4978},[228,12700,12701],{"class":5272},"\u002F\u002F   load_step - reply with the saved step so the widget can resume\n",[228,12703,12704,12706,12709,12711,12713,12715,12717,12719],{"class":230,"line":5112},[228,12705,5728],{"class":241},[228,12707,12708],{"class":915}," p ",[228,12710,5286],{"class":234},[228,12712,5736],{"class":915},[228,12714,57],{"class":234},[228,12716,6567],{"class":915},[228,12718,6708],{"class":234},[228,12720,6922],{"class":234},[228,12722,12723],{"class":230,"line":5127},[228,12724,5405],{"emptyLinePlaceholder":5404},[228,12726,12727],{"class":230,"line":5142},[228,12728,12729],{"class":5272},"\u002F\u002F Identity comes from this message's own client data first. This is what\n",[228,12731,12732],{"class":230,"line":5382},[228,12733,12734],{"class":5272},"\u002F\u002F keeps two operators using the widget at the same time from reading or\n",[228,12736,12737],{"class":230,"line":5392},[228,12738,12739],{"class":5272},"\u002F\u002F writing each other's progress.\n",[228,12741,12742,12744,12746,12748,12750,12752,12754,12756,12758,12760],{"class":230,"line":5401},[228,12743,5728],{"class":241},[228,12745,5731],{"class":915},[228,12747,5286],{"class":234},[228,12749,5736],{"class":915},[228,12751,57],{"class":234},[228,12753,5741],{"class":915},[228,12755,5744],{"class":234},[228,12757,3290],{"class":915},[228,12759,5744],{"class":234},[228,12761,5751],{"class":915},[228,12763,12764,12766,12768,12770,12772,12774,12776,12778,12780,12782,12784,12786,12788,12790,12792,12794],{"class":230,"line":5408},[228,12765,5756],{"class":234},[228,12767,5759],{"class":915},[228,12769,57],{"class":234},[228,12771,735],{"class":5764},[228,12773,5767],{"class":915},[228,12775,5770],{"class":234},[228,12777,3290],{"class":252},[228,12779,5770],{"class":234},[228,12781,258],{"class":234},[228,12783,5779],{"class":234},[228,12785,940],{"class":252},[228,12787,5770],{"class":234},[228,12789,5786],{"class":915},[228,12791,5744],{"class":234},[228,12793,5086],{"class":915},[228,12795,5499],{"class":234},[228,12797,12798,12800,12803,12806,12809,12811],{"class":230,"line":5418},[228,12799,6027],{"class":5421},[228,12801,12802],{"class":915}," (",[228,12804,12805],{"class":234},"!",[228,12807,12808],{"class":915},"username) ",[228,12810,6107],{"class":5421},[228,12812,6792],{"class":234},[228,12814,12815],{"class":230,"line":5431},[228,12816,5405],{"emptyLinePlaceholder":5404},[228,12818,12819],{"class":230,"line":5442},[228,12820,12821],{"class":5272},"\u002F\u002F Read the user's saved state\n",[228,12823,12824,12826,12829,12831,12833,12835,12837,12840,12842,12844,12846,12848,12850,12852],{"class":230,"line":5463},[228,12825,5728],{"class":241},[228,12827,12828],{"class":915}," userState ",[228,12830,5286],{"class":234},[228,12832,5759],{"class":915},[228,12834,57],{"class":234},[228,12836,735],{"class":5764},[228,12838,12839],{"class":915},"(username",[228,12841,258],{"class":234},[228,12843,6095],{"class":234},[228,12845,940],{"class":252},[228,12847,238],{"class":234},[228,12849,6917],{"class":915},[228,12851,6708],{"class":234},[228,12853,5428],{"class":234},[228,12855,12856,12859,12861],{"class":230,"line":5469},[228,12857,12858],{"class":5263},"    workOrderId",[228,12860,247],{"class":234},[228,12862,12863],{"class":234}," null,\n",[228,12865,12866,12869,12871],{"class":230,"line":5479},[228,12867,12868],{"class":5263},"    stepIndex",[228,12870,247],{"class":234},[228,12872,12873],{"class":573}," 0\n",[228,12875,12876],{"class":230,"line":5485},[228,12877,12878],{"class":234},"};\n",[228,12880,12881],{"class":230,"line":5502},[228,12882,5405],{"emptyLinePlaceholder":5404},[228,12884,12885,12888,12891,12893,12896],{"class":230,"line":5508},[228,12886,12887],{"class":5421},"switch",[228,12889,12890],{"class":915}," (p",[228,12892,57],{"class":234},[228,12894,12895],{"class":915},"action) ",[228,12897,5059],{"class":234},[228,12899,12900,12903,12905,12907,12909],{"class":230,"line":5513},[228,12901,12902],{"class":5421},"    case",[228,12904,6095],{"class":234},[228,12906,9350],{"class":252},[228,12908,238],{"class":234},[228,12910,12911],{"class":234},":\n",[228,12913,12914,12917,12919,12922,12924,12927,12929,12931,12933,12935],{"class":230,"line":5522},[228,12915,12916],{"class":915},"        userState",[228,12918,57],{"class":234},[228,12920,12921],{"class":915},"stepIndex ",[228,12923,5286],{"class":234},[228,12925,12926],{"class":915}," p",[228,12928,57],{"class":234},[228,12930,12921],{"class":915},[228,12932,6724],{"class":234},[228,12934,6602],{"class":573},[228,12936,5499],{"class":234},[228,12938,12939,12942,12944,12946,12948,12950,12952,12954,12956,12958,12960,12962],{"class":230,"line":5527},[228,12940,12941],{"class":915},"        global",[228,12943,57],{"class":234},[228,12945,5673],{"class":5764},[228,12947,12839],{"class":915},[228,12949,258],{"class":234},[228,12951,6894],{"class":915},[228,12953,258],{"class":234},[228,12955,6095],{"class":234},[228,12957,940],{"class":252},[228,12959,238],{"class":234},[228,12961,5786],{"class":915},[228,12963,5499],{"class":234},[228,12965,12966,12968],{"class":230,"line":5536},[228,12967,5445],{"class":5421},[228,12969,6792],{"class":234},[228,12971,12972],{"class":230,"line":5579},[228,12973,5405],{"emptyLinePlaceholder":5404},[228,12975,12976,12978,12980,12982,12984],{"class":230,"line":5612},[228,12977,12902],{"class":5421},[228,12979,6095],{"class":234},[228,12981,9354],{"class":252},[228,12983,238],{"class":234},[228,12985,12911],{"class":234},[228,12987,12988,12991,12993,12995,12997],{"class":230,"line":7033},[228,12989,12990],{"class":915},"        msg",[228,12992,57],{"class":234},[228,12994,6567],{"class":915},[228,12996,5286],{"class":234},[228,12998,5428],{"class":234},[228,13000,13002,13005,13007,13009,13011,13013],{"class":230,"line":13001},28,[228,13003,13004],{"class":5263},"            workOrderId",[228,13006,247],{"class":234},[228,13008,6894],{"class":915},[228,13010,57],{"class":234},[228,13012,6932],{"class":915},[228,13014,5078],{"class":234},[228,13016,13018,13021,13023,13025,13027,13029,13031],{"class":230,"line":13017},29,[228,13019,13020],{"class":5263},"            stepIndex",[228,13022,247],{"class":234},[228,13024,6894],{"class":915},[228,13026,57],{"class":234},[228,13028,12921],{"class":915},[228,13030,6724],{"class":234},[228,13032,12873],{"class":573},[228,13034,13036],{"class":230,"line":13035},30,[228,13037,13038],{"class":234},"        };\n",[228,13040,13042,13044,13046],{"class":230,"line":13041},31,[228,13043,5445],{"class":5421},[228,13045,5736],{"class":915},[228,13047,5499],{"class":234},[228,13049,13051],{"class":230,"line":13050},32,[228,13052,5405],{"emptyLinePlaceholder":5404},[228,13054,13056,13059],{"class":230,"line":13055},33,[228,13057,13058],{"class":5421},"    default",[228,13060,12911],{"class":234},[228,13062,13064,13066],{"class":230,"line":13063},34,[228,13065,5445],{"class":5421},[228,13067,6792],{"class":234},[228,13069,13071],{"class":230,"line":13070},35,[228,13072,5145],{"class":234},[147,13074,13075],{"start":5081},[70,13076,13077,13078,13080],{},"Wire the \"Work Instruction Widget\" output into this node, and wire the node's output back into the widget so the ",[96,13079,9354],{}," reply can jump it to the saved step.",[12,13082,13083,13084,5202,13087,13090,13091,13093,13094,13096,13097,13099],{},"Look at the store key: ",[96,13085,13086],{},"global.get(username, ...)",[96,13088,13089],{},"global.set(username, ...)",". The operator's own username is the storage key, so two operators at the same station never overwrite each other, their progress lives under different keys, and because that key is now sourced from ",[96,13092,197],{}," rather than a shared global, it's always the username of whoever's browser actually sent this particular ",[96,13095,9350],{}," or ",[96,13098,9354],{}," message.",[12,13101,13102],{},"Deploy, walk halfway through an operation, then reload the page. It reopens where you left off, because the step is filed under your name.",[59,13104,13106],{"id":13105},"completing-the-operation-as-the-logged-in-user","Completing the Operation as the Logged-In User",[12,13108,13109,13110,13113],{},"When the operator completes the final instruction, the widget sends ",[96,13111,13112],{},"{ action: \"complete_operation\" }",". The flow looks up the operator's stored work order and builds the payload that will be sent to the API.",[147,13115,13116,13124,13139],{},[70,13117,5235,13118,13120,13121,13123],{},[45,13119,6494],{}," node and connect it to the ",[45,13122,9363],{}," actions link.",[70,13125,5235,13126,5816,13128,13131,13132,13135,13136,57],{},[45,13127,12887],{},[45,13129,13130],{},"Route by Action"," and route messages where ",[96,13133,13134],{},"msg.payload.action"," equals ",[96,13137,13138],{},"complete_operation",[70,13140,5235,13141,5816,13143,13146],{},[45,13142,845],{},[45,13144,13145],{},"Build Complete Payload"," and paste in the following code.",[219,13148,13150],{"className":5719,"code":13149,"language":5721,"meta":224,"style":224},"const username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n\nif (!username) {\n    node.warn('No logged-in user found — cannot complete operation');\n    return null;\n}\n\nconst stored = global.get(username, 'persistent') || {};\nconst workOrderId = stored.workOrderId || null;\n\nmsg.payload = { workOrderId };\nreturn msg;\n",[96,13151,13152,13174,13208,13212,13224,13247,13254,13258,13262,13293,13314,13318,13334],{"__ignoreMap":224},[228,13153,13154,13156,13158,13160,13162,13164,13166,13168,13170,13172],{"class":230,"line":231},[228,13155,5728],{"class":241},[228,13157,5731],{"class":915},[228,13159,5286],{"class":234},[228,13161,5736],{"class":915},[228,13163,57],{"class":234},[228,13165,5741],{"class":915},[228,13167,5744],{"class":234},[228,13169,3290],{"class":915},[228,13171,5744],{"class":234},[228,13173,5751],{"class":915},[228,13175,13176,13178,13180,13182,13184,13186,13188,13190,13192,13194,13196,13198,13200,13202,13204,13206],{"class":230,"line":5062},[228,13177,5756],{"class":234},[228,13179,5759],{"class":915},[228,13181,57],{"class":234},[228,13183,735],{"class":5764},[228,13185,5767],{"class":915},[228,13187,5770],{"class":234},[228,13189,3290],{"class":252},[228,13191,5770],{"class":234},[228,13193,258],{"class":234},[228,13195,5779],{"class":234},[228,13197,940],{"class":252},[228,13199,5770],{"class":234},[228,13201,5786],{"class":915},[228,13203,5744],{"class":234},[228,13205,5086],{"class":915},[228,13207,5499],{"class":234},[228,13209,13210],{"class":230,"line":5081},[228,13211,5405],{"emptyLinePlaceholder":5404},[228,13213,13214,13216,13218,13220,13222],{"class":230,"line":4978},[228,13215,6027],{"class":5421},[228,13217,12802],{"class":915},[228,13219,12805],{"class":234},[228,13221,12808],{"class":915},[228,13223,5059],{"class":234},[228,13225,13226,13229,13231,13234,13236,13238,13241,13243,13245],{"class":230,"line":5112},[228,13227,13228],{"class":915},"    node",[228,13230,57],{"class":234},[228,13232,13233],{"class":5764},"warn",[228,13235,5767],{"class":5263},[228,13237,5770],{"class":234},[228,13239,13240],{"class":252},"No logged-in user found — cannot complete operation",[228,13242,5770],{"class":234},[228,13244,5786],{"class":5263},[228,13246,5499],{"class":234},[228,13248,13249,13252],{"class":230,"line":5127},[228,13250,13251],{"class":5421},"    return",[228,13253,6792],{"class":234},[228,13255,13256],{"class":230,"line":5142},[228,13257,5145],{"class":234},[228,13259,13260],{"class":230,"line":5382},[228,13261,5405],{"emptyLinePlaceholder":5404},[228,13263,13264,13266,13269,13271,13273,13275,13277,13279,13281,13283,13285,13287,13289,13291],{"class":230,"line":5392},[228,13265,5728],{"class":241},[228,13267,13268],{"class":915}," stored ",[228,13270,5286],{"class":234},[228,13272,5759],{"class":915},[228,13274,57],{"class":234},[228,13276,735],{"class":5764},[228,13278,12839],{"class":915},[228,13280,258],{"class":234},[228,13282,5779],{"class":234},[228,13284,940],{"class":252},[228,13286,5770],{"class":234},[228,13288,6917],{"class":915},[228,13290,6708],{"class":234},[228,13292,6922],{"class":234},[228,13294,13295,13297,13300,13302,13305,13307,13310,13312],{"class":230,"line":5401},[228,13296,5728],{"class":241},[228,13298,13299],{"class":915}," workOrderId ",[228,13301,5286],{"class":234},[228,13303,13304],{"class":915}," stored",[228,13306,57],{"class":234},[228,13308,13309],{"class":915},"workOrderId ",[228,13311,6708],{"class":234},[228,13313,6792],{"class":234},[228,13315,13316],{"class":230,"line":5408},[228,13317,5405],{"emptyLinePlaceholder":5404},[228,13319,13320,13322,13324,13326,13328,13330,13332],{"class":230,"line":5418},[228,13321,6058],{"class":915},[228,13323,57],{"class":234},[228,13325,6567],{"class":915},[228,13327,5286],{"class":234},[228,13329,5448],{"class":234},[228,13331,13299],{"class":915},[228,13333,12878],{"class":234},[228,13335,13336,13338,13340],{"class":230,"line":5431},[228,13337,6107],{"class":5421},[228,13339,5736],{"class":915},[228,13341,5499],{"class":234},[147,13343,13344,13363],{"start":4978},[70,13345,6116,13346,6451,13348,5824,13350,13353,13354,13356,13357,13360,13361,5872],{},[45,13347,5008],{},[45,13349,6454],{},[45,13351,13352],{},"POST",", configure ",[45,13355,6129],{}," authentication using your access token, and set the URL to ",[96,13358,13359],{},"https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders\u002Fcomplete",". Replace ",[96,13362,5871],{},[70,13364,5235,13365,13367,13368,5824,13370,13372,13373,13375],{},[45,13366,5669],{}," node that sets ",[96,13369,5823],{},[96,13371,4836],{},", then connect it to a ",[45,13374,6487],{}," node. This will be used in the next step to reset the operator's state and navigate the operator back to the Home page.",[12,13377,13378],{},"Because the payload is built from the logged-in operator's stored state, keyed off that same operator's per-message identity, the API always completes the correct work order, even when multiple operators are using the dashboard at the same time.",[59,13380,13382],{"id":13381},"reporting-a-defect-as-the-logged-in-operator","Reporting a Defect as the Logged-In Operator",[12,13384,13385,13386,13388],{},"If an operator encounters a defect, they can report it from the ",[45,13387,9363],{},". The report is automatically linked to the work order they're currently performing, so there's no need to enter a work order ID manually.",[12,13390,4916,13391,13393,13394,13397],{},[45,13392,4861],{}," button sends ",[96,13395,13396],{},"{ action: \"Report Issue\" }",". Use that action to open the report form.",[147,13399,13400,13410,13420,13434],{},[70,13401,5235,13402,5816,13404,13407,13408,13123],{},[45,13403,6494],{},[45,13405,13406],{},"Widget Action In"," and connect it to the ",[45,13409,9363],{},[70,13411,5235,13412,5816,13414,13131,13416,13135,13418,57],{},[45,13413,12887],{},[45,13415,13130],{},[96,13417,13134],{},[96,13419,4861],{},[70,13421,5235,13422,13367,13424,5824,13426,13372,13428,13430,13431,13433],{},[45,13423,5669],{},[96,13425,5823],{},[96,13427,4861],{},[45,13429,115],{}," node to navigate to the ",[45,13432,4861],{}," page.",[70,13435,5235,13436,5816,13438,13441,13442,13444,13445,13470,13473],{},[45,13437,109],{},[45,13439,13440],{},"Report Issue Form"," to the ",[45,13443,4861],{}," group with four required fields:",[67,13446,13447,13453,13458,13464],{},[70,13448,13449,13452],{},[45,13450,13451],{},"Issue Type"," (dropdown)",[70,13454,13455,13452],{},[45,13456,13457],{},"Severity",[70,13459,13460,13463],{},[45,13461,13462],{},"Affected Part"," (text)",[70,13465,13466,13469],{},[45,13467,13468],{},"Description"," (multiline)",[13471,13472],"br",{},"Populate the dropdown fields with the issue types and severity levels used in your application.",[12,13475,13476,13480],{},[21,13477],{"alt":13478,"src":13479},"Screenshot: Report Issue form fields showing the Issue Type, Severity, Affected Part, and Description inputs","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fform-elements.png",[26,13481,13482],{},"The Report Issue form collects the defect details before submitting them against the current work order.",[12,13484,13485,13489],{},[21,13486],{"alt":13487,"src":13488},"Screenshot: Configuring the dropdown options for the Issue Type and Severity fields in the ui-form node","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fform-dropdown.png",[26,13490,13491],{},"Configure the Issue Type and Severity dropdowns with the options used in your application.",[147,13493,13494],{"start":5112},[70,13495,5235,13496,5816,13498,13146],{},[45,13497,845],{},[45,13499,13500],{},"Prepare Defect Payload",[219,13502,13505],{"className":5719,"code":13503,"language":5721,"meta":13504,"style":224},"const p = msg.payload || {};\n\nconst username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n\nif (!username) {\n    node.warn('No logged-in user found — cannot report defect');\n    return null;\n}\n\nconst stored = global.get(username, 'persistent') || {};\nconst workOrderId = stored.workOrderId || null;\n\nconst issueType = p.type;\nconst severity = p.severity;\nconst affectedPart = p['affected-part'];\nconst description = p.description || null;\n\nif (!workOrderId || !issueType || !severity || !affectedPart) {\n    node.warn('Missing required defect fields — defect not sent');\n    return null;\n}\n\nmsg.payload = {\n    workOrderId,\n    issueType,\n    severity,\n    affectedPart,\n    description\n};\n\nreturn msg;\n","id=\"vbv4m6\"",[96,13506,13507,13525,13529,13551,13585,13589,13601,13622,13628,13632,13636,13666,13684,13688,13705,13723,13746,13766,13770,13804,13825,13831,13835,13839,13851,13857,13864,13871,13878,13883,13887,13891],{"__ignoreMap":224},[228,13508,13509,13511,13513,13515,13517,13519,13521,13523],{"class":230,"line":231},[228,13510,5728],{"class":241},[228,13512,12708],{"class":915},[228,13514,5286],{"class":234},[228,13516,5736],{"class":915},[228,13518,57],{"class":234},[228,13520,6567],{"class":915},[228,13522,6708],{"class":234},[228,13524,6922],{"class":234},[228,13526,13527],{"class":230,"line":5062},[228,13528,5405],{"emptyLinePlaceholder":5404},[228,13530,13531,13533,13535,13537,13539,13541,13543,13545,13547,13549],{"class":230,"line":5081},[228,13532,5728],{"class":241},[228,13534,5731],{"class":915},[228,13536,5286],{"class":234},[228,13538,5736],{"class":915},[228,13540,57],{"class":234},[228,13542,5741],{"class":915},[228,13544,5744],{"class":234},[228,13546,3290],{"class":915},[228,13548,5744],{"class":234},[228,13550,5751],{"class":915},[228,13552,13553,13555,13557,13559,13561,13563,13565,13567,13569,13571,13573,13575,13577,13579,13581,13583],{"class":230,"line":4978},[228,13554,5756],{"class":234},[228,13556,5759],{"class":915},[228,13558,57],{"class":234},[228,13560,735],{"class":5764},[228,13562,5767],{"class":915},[228,13564,5770],{"class":234},[228,13566,3290],{"class":252},[228,13568,5770],{"class":234},[228,13570,258],{"class":234},[228,13572,5779],{"class":234},[228,13574,940],{"class":252},[228,13576,5770],{"class":234},[228,13578,5786],{"class":915},[228,13580,5744],{"class":234},[228,13582,5086],{"class":915},[228,13584,5499],{"class":234},[228,13586,13587],{"class":230,"line":5112},[228,13588,5405],{"emptyLinePlaceholder":5404},[228,13590,13591,13593,13595,13597,13599],{"class":230,"line":5127},[228,13592,6027],{"class":5421},[228,13594,12802],{"class":915},[228,13596,12805],{"class":234},[228,13598,12808],{"class":915},[228,13600,5059],{"class":234},[228,13602,13603,13605,13607,13609,13611,13613,13616,13618,13620],{"class":230,"line":5142},[228,13604,13228],{"class":915},[228,13606,57],{"class":234},[228,13608,13233],{"class":5764},[228,13610,5767],{"class":5263},[228,13612,5770],{"class":234},[228,13614,13615],{"class":252},"No logged-in user found — cannot report defect",[228,13617,5770],{"class":234},[228,13619,5786],{"class":5263},[228,13621,5499],{"class":234},[228,13623,13624,13626],{"class":230,"line":5382},[228,13625,13251],{"class":5421},[228,13627,6792],{"class":234},[228,13629,13630],{"class":230,"line":5392},[228,13631,5145],{"class":234},[228,13633,13634],{"class":230,"line":5401},[228,13635,5405],{"emptyLinePlaceholder":5404},[228,13637,13638,13640,13642,13644,13646,13648,13650,13652,13654,13656,13658,13660,13662,13664],{"class":230,"line":5408},[228,13639,5728],{"class":241},[228,13641,13268],{"class":915},[228,13643,5286],{"class":234},[228,13645,5759],{"class":915},[228,13647,57],{"class":234},[228,13649,735],{"class":5764},[228,13651,12839],{"class":915},[228,13653,258],{"class":234},[228,13655,5779],{"class":234},[228,13657,940],{"class":252},[228,13659,5770],{"class":234},[228,13661,6917],{"class":915},[228,13663,6708],{"class":234},[228,13665,6922],{"class":234},[228,13667,13668,13670,13672,13674,13676,13678,13680,13682],{"class":230,"line":5418},[228,13669,5728],{"class":241},[228,13671,13299],{"class":915},[228,13673,5286],{"class":234},[228,13675,13304],{"class":915},[228,13677,57],{"class":234},[228,13679,13309],{"class":915},[228,13681,6708],{"class":234},[228,13683,6792],{"class":234},[228,13685,13686],{"class":230,"line":5431},[228,13687,5405],{"emptyLinePlaceholder":5404},[228,13689,13690,13692,13695,13697,13699,13701,13703],{"class":230,"line":5442},[228,13691,5728],{"class":241},[228,13693,13694],{"class":915}," issueType ",[228,13696,5286],{"class":234},[228,13698,12926],{"class":915},[228,13700,57],{"class":234},[228,13702,263],{"class":915},[228,13704,5499],{"class":234},[228,13706,13707,13709,13712,13714,13716,13718,13721],{"class":230,"line":5463},[228,13708,5728],{"class":241},[228,13710,13711],{"class":915}," severity ",[228,13713,5286],{"class":234},[228,13715,12926],{"class":915},[228,13717,57],{"class":234},[228,13719,13720],{"class":915},"severity",[228,13722,5499],{"class":234},[228,13724,13725,13727,13730,13732,13735,13737,13740,13742,13744],{"class":230,"line":5469},[228,13726,5728],{"class":241},[228,13728,13729],{"class":915}," affectedPart ",[228,13731,5286],{"class":234},[228,13733,13734],{"class":915}," p[",[228,13736,5770],{"class":234},[228,13738,13739],{"class":252},"affected-part",[228,13741,5770],{"class":234},[228,13743,3467],{"class":915},[228,13745,5499],{"class":234},[228,13747,13748,13750,13753,13755,13757,13759,13762,13764],{"class":230,"line":5479},[228,13749,5728],{"class":241},[228,13751,13752],{"class":915}," description ",[228,13754,5286],{"class":234},[228,13756,12926],{"class":915},[228,13758,57],{"class":234},[228,13760,13761],{"class":915},"description ",[228,13763,6708],{"class":234},[228,13765,6792],{"class":234},[228,13767,13768],{"class":230,"line":5485},[228,13769,5405],{"emptyLinePlaceholder":5404},[228,13771,13772,13774,13776,13778,13780,13782,13785,13788,13790,13792,13795,13797,13799,13802],{"class":230,"line":5502},[228,13773,6027],{"class":5421},[228,13775,12802],{"class":915},[228,13777,12805],{"class":234},[228,13779,13309],{"class":915},[228,13781,6708],{"class":234},[228,13783,13784],{"class":234}," !",[228,13786,13787],{"class":915},"issueType ",[228,13789,6708],{"class":234},[228,13791,13784],{"class":234},[228,13793,13794],{"class":915},"severity ",[228,13796,6708],{"class":234},[228,13798,13784],{"class":234},[228,13800,13801],{"class":915},"affectedPart) ",[228,13803,5059],{"class":234},[228,13805,13806,13808,13810,13812,13814,13816,13819,13821,13823],{"class":230,"line":5508},[228,13807,13228],{"class":915},[228,13809,57],{"class":234},[228,13811,13233],{"class":5764},[228,13813,5767],{"class":5263},[228,13815,5770],{"class":234},[228,13817,13818],{"class":252},"Missing required defect fields — defect not sent",[228,13820,5770],{"class":234},[228,13822,5786],{"class":5263},[228,13824,5499],{"class":234},[228,13826,13827,13829],{"class":230,"line":5513},[228,13828,13251],{"class":5421},[228,13830,6792],{"class":234},[228,13832,13833],{"class":230,"line":5522},[228,13834,5145],{"class":234},[228,13836,13837],{"class":230,"line":5527},[228,13838,5405],{"emptyLinePlaceholder":5404},[228,13840,13841,13843,13845,13847,13849],{"class":230,"line":5536},[228,13842,6058],{"class":915},[228,13844,57],{"class":234},[228,13846,6567],{"class":915},[228,13848,5286],{"class":234},[228,13850,5428],{"class":234},[228,13852,13853,13855],{"class":230,"line":5579},[228,13854,12858],{"class":915},[228,13856,5078],{"class":234},[228,13858,13859,13862],{"class":230,"line":5612},[228,13860,13861],{"class":915},"    issueType",[228,13863,5078],{"class":234},[228,13865,13866,13869],{"class":230,"line":7033},[228,13867,13868],{"class":915},"    severity",[228,13870,5078],{"class":234},[228,13872,13873,13876],{"class":230,"line":13001},[228,13874,13875],{"class":915},"    affectedPart",[228,13877,5078],{"class":234},[228,13879,13880],{"class":230,"line":13017},[228,13881,13882],{"class":915},"    description\n",[228,13884,13885],{"class":230,"line":13035},[228,13886,12878],{"class":234},[228,13888,13889],{"class":230,"line":13041},[228,13890,5405],{"emptyLinePlaceholder":5404},[228,13892,13893,13895,13897],{"class":230,"line":13050},[228,13894,6107],{"class":5421},[228,13896,5736],{"class":915},[228,13898,5499],{"class":234},[147,13900,13901,13920],{"start":5127},[70,13902,6116,13903,6451,13905,5824,13907,13353,13909,13356,13911,13360,13914,13916,13917,13919],{},[45,13904,5008],{},[45,13906,6454],{},[45,13908,13352],{},[45,13910,6129],{},[96,13912,13913],{},"https:\u002F\u002Fyour-instance.flowfuse.cloud\u002Fworkorders\u002Fdefect",[96,13915,5871],{}," with your own FlowFuse instance URL, then connect the request to a ",[45,13918,6487],{}," node so the flow continues to the reset step.",[70,13921,5235,13922,4910,13924,13927,13928,13930,13931,13933],{},[45,13923,112],{},[45,13925,13926],{},"Back to Work Instructions"," to the same group and connect it to a ",[45,13929,115],{}," node that navigates back to the ",[45,13932,4819],{}," page. Since the operator's progress is stored against their username, they return to the same instruction they left.",[12,13935,13936,13940],{},[21,13937],{"alt":13938,"src":13939},"Screenshot: Completed Report Issue page showing the defect reporting form and Back to Work Instructions button","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Freport-issue.png",[26,13941,13942],{},"The completed Report Issue page where operators can submit a defect or return to the work instructions.",[12,13944,13945],{},"The work order ID is retrieved from the logged-in operator's stored state, ensuring every defect report is associated with the correct work order, and the lookup key for that state again comes from this message's own client data, not a value that could have been overwritten by someone else's login in the meantime.",[59,13947,13949],{"id":13948},"clearing-state-when-work-ends","Clearing State When Work Ends",[12,13951,13952,13953,13955],{},"When an operation is completed or a defect is reported, clear the operator's saved progress so the next work order starts from ",[45,13954,9343],{}," instead of resuming a finished one.",[147,13957,13958,13974,13986],{},[70,13959,5235,13960,5816,13962,13407,13965,13967,13968,5202,13970,13973],{},[45,13961,6494],{},[45,13963,13964],{},"Complete \u002F Defect Result In",[45,13966,6487],{}," nodes from the ",[45,13969,9376],{},[45,13971,13972],{},"Report Defect"," flows.",[70,13975,5235,13976,13978,13979,13135,13982,13985],{},[45,13977,12887],{}," node that checks ",[96,13980,13981],{},"msg.statusCode",[96,13983,13984],{},"200",", so the state is only cleared after a successful API response.",[70,13987,5235,13988,5816,13990,13146],{},[45,13989,845],{},[45,13991,13992],{},"Clear User Step State",[219,13994,13997],{"className":5719,"code":13995,"language":5721,"meta":13996,"style":224},"const username = msg._client?.user?.username\n    || global.get('user', 'persistent')?.username;\n\nif (!username) return null;\n\nglobal.set(username, {}, 'persistent');\n\nmsg.payload = \"Home\";\nreturn msg;\n","id=\"6ej1v5\"",[96,13998,13999,14021,14055,14059,14073,14077,14103,14107,14125],{"__ignoreMap":224},[228,14000,14001,14003,14005,14007,14009,14011,14013,14015,14017,14019],{"class":230,"line":231},[228,14002,5728],{"class":241},[228,14004,5731],{"class":915},[228,14006,5286],{"class":234},[228,14008,5736],{"class":915},[228,14010,57],{"class":234},[228,14012,5741],{"class":915},[228,14014,5744],{"class":234},[228,14016,3290],{"class":915},[228,14018,5744],{"class":234},[228,14020,5751],{"class":915},[228,14022,14023,14025,14027,14029,14031,14033,14035,14037,14039,14041,14043,14045,14047,14049,14051,14053],{"class":230,"line":5062},[228,14024,5756],{"class":234},[228,14026,5759],{"class":915},[228,14028,57],{"class":234},[228,14030,735],{"class":5764},[228,14032,5767],{"class":915},[228,14034,5770],{"class":234},[228,14036,3290],{"class":252},[228,14038,5770],{"class":234},[228,14040,258],{"class":234},[228,14042,5779],{"class":234},[228,14044,940],{"class":252},[228,14046,5770],{"class":234},[228,14048,5786],{"class":915},[228,14050,5744],{"class":234},[228,14052,5086],{"class":915},[228,14054,5499],{"class":234},[228,14056,14057],{"class":230,"line":5081},[228,14058,5405],{"emptyLinePlaceholder":5404},[228,14060,14061,14063,14065,14067,14069,14071],{"class":230,"line":4978},[228,14062,6027],{"class":5421},[228,14064,12802],{"class":915},[228,14066,12805],{"class":234},[228,14068,12808],{"class":915},[228,14070,6107],{"class":5421},[228,14072,6792],{"class":234},[228,14074,14075],{"class":230,"line":5112},[228,14076,5405],{"emptyLinePlaceholder":5404},[228,14078,14079,14082,14084,14086,14088,14090,14093,14095,14097,14099,14101],{"class":230,"line":5127},[228,14080,14081],{"class":915},"global",[228,14083,57],{"class":234},[228,14085,5673],{"class":5764},[228,14087,12839],{"class":915},[228,14089,258],{"class":234},[228,14091,14092],{"class":234}," {},",[228,14094,5779],{"class":234},[228,14096,940],{"class":252},[228,14098,5770],{"class":234},[228,14100,5786],{"class":915},[228,14102,5499],{"class":234},[228,14104,14105],{"class":230,"line":5142},[228,14106,5405],{"emptyLinePlaceholder":5404},[228,14108,14109,14111,14113,14115,14117,14119,14121,14123],{"class":230,"line":5382},[228,14110,6058],{"class":915},[228,14112,57],{"class":234},[228,14114,6567],{"class":915},[228,14116,5286],{"class":234},[228,14118,6095],{"class":234},[228,14120,4836],{"class":252},[228,14122,238],{"class":234},[228,14124,5499],{"class":234},[228,14126,14127,14129,14131],{"class":230,"line":5392},[228,14128,6107],{"class":5421},[228,14130,5736],{"class":915},[228,14132,5499],{"class":234},[147,14134,14135],{"start":4978},[70,14136,14137,14138,14140,14141,13433],{},"Connect the function node to a ",[45,14139,115],{}," node to navigate the operator back to the ",[45,14142,4836],{},[12,14144,14145],{},"Because the state is stored and cleared by username, and that username is read from the message that carried the successful API response rather than a shared global, resetting one operator's progress never affects anyone else, even if a second operator has logged in on another screen in between.",[12,14147,14148],{},"Deploy the flow and open the dashboard. After signing in, operators see only the work orders assigned to them. If they leave and return, they resume from the same instruction. Once they complete the operation or report a defect, their progress is cleared and they're returned to the Home page, ready for the next work order.",[59,14150,14152],{"id":14151},"where-to-go-next","Where to Go Next",[12,14154,14155,14156,103,14158,5188,14160,14162],{},"You've built a personalized digital work instructions application that knows who the operator is, what work they're assigned, and where they left off, correctly, even when several operators are on the dashboard at once. Replacing the simulator with a real ERP or MES is simply a matter of pointing the HTTP Request nodes to your production ",[96,14157,717],{},[96,14159,2018],{},[96,14161,1366],{}," endpoints.",[12,14164,14165,14166,57],{},"From there, you can extend the application with production history, quality tracking, role-based experiences, and OEE dashboards, all powered by the same operator identity. To see how FlowFuse fits into modern automotive manufacturing, explore the ",[53,14167,14169],{"href":14168},"\u002Findustries\u002Fautomotive\u002F","Automotive solutions page",[299,14171,14172],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":224,"searchDepth":4978,"depth":4978,"links":14174},[14175,14176,14177,14178,14179,14180,14181,14182,14183,14187,14188,14189,14190,14191,14192,14193,14194],{"id":61,"depth":5062,"text":62},{"id":141,"depth":5062,"text":142},{"id":201,"depth":5062,"text":202},{"id":4798,"depth":5062,"text":4799},{"id":4928,"depth":5062,"text":4929},{"id":5015,"depth":5062,"text":5016},{"id":5220,"depth":5062,"text":5221},{"id":5636,"depth":5062,"text":5637},{"id":5795,"depth":5062,"text":5796,"children":14184},[14185,14186],{"id":5803,"depth":5081,"text":5804},{"id":5843,"depth":5081,"text":5844},{"id":6174,"depth":5062,"text":6175},{"id":6508,"depth":5062,"text":6509},{"id":9305,"depth":5062,"text":9306},{"id":9332,"depth":5062,"text":9333},{"id":13105,"depth":5062,"text":13106},{"id":13381,"depth":5062,"text":13382},{"id":13948,"depth":5062,"text":13949},{"id":14151,"depth":5062,"text":14152},{"type":14196,"title":14197,"description":14198},"contact","Want to connect this to your real ERP or MES?","Talk to our team about integrating digital work instructions with your production systems, adding full traceability, and rolling this out across your shop floor.","2026-07-24","Learn how to build digital work instructions with FlowFuse. Create personalized operator apps with work orders, guided steps, defect reporting, and traceability.","md","\u002Fblog\u002F2026\u002F07\u002Fimages\u002Fdigital-instructions-dashboard-flowfuse.png",null,{"excerpt":14205},{"type":9,"value":14206},[14207],[12,14208,14],{},"\u002Fblog\u002F2026\u002F07\u002Fdigital-work-instruction",{"title":5,"description":14200},{"loc":14209},"blog\u002F2026\u002F07\u002Fdigital-work-instruction","Give every operator their own work instructions, progress, and production history.",[14215],"flowfuse","Build a FlowFuse digital work instructions application that authenticates each operator, loads only their assigned work orders, guides them step by step with per-operator progress tracking, and lets them report defects, all tied to their logged-in identity.","LntzRIkUrkvx2uDUnZNUGjwQ5GzR31n9CwCabjUIaZo",[],1785868307550]