# What is Busroot?&#x20;

Busroot is a **dedicated manufacturing performance platform** with the goal of providing a set of key manufacturing KPIs, out of the box. These metrics and insights are presented via a modern, web-based interface.

<figure><img src="/files/0KgLrPWJ5CazEOkobJsT" alt=""><figcaption></figcaption></figure>

The aggregated information produced by Busroot serves as the single source of truth for both real-time and historical activity on the shop floor for data-driven decision making.

Busroot is also the perfect tool to inform other reporting that relies on accurate shop-floor context (such as predictive maintenance and AI-based automation).

Busroot directly connects machines via a wide range of supported methods. It is hardware agnostic, allowing for any IoT sensor, PLC or data acquisition unit to provide data into the platform.

Busroot has 100% API coverage for all inputs and outputs.

### Who is Busroot for? <a href="#who-is-busroot-for" id="who-is-busroot-for"></a>

Busroot is for any manufacturer looking to increase production throughput, reduce downtime and improve energy efficiency using a standardised approach to data collection, management and visualisation.


# Concepts and Architecture

Busroot is able to measure the performance of both discrete and continuous manufacturing process by monitoring activity at a workstation level. Within Busroot, all workstations and machines are referred to as 'Stations'.&#x20;

At its core, Busroot has a data processing loop that continually combines real-time data from stations with contextual information regarding the manufacturing operation and processes being executed.

This loop runs every minute, on the minute, for each station in the account. The result is a materialized object encapsulating all activities and metrics for that station, for that specific 1 minute window of time. These objects serve as the single-source of truth for manufacturing performance, and are known as a 'station windows'.

These station windows, aggregated in various ways, are what primarily drive the interfaces and visualisations provided by Busroot.&#x20;

{% @mermaid/diagram content="graph LR
RealTime(Real-time Station Data) --> Busroot
Context(Manufacturing Context) --> Busroot
Busroot(Busroot Data Processor) --> StationWindows
StationWindows(Station Windows) --> API
API --> UI" %}

### Real-time Data (Station Signals)

The event data captured from each station is standardised, regardless of machine or process type. We call these events 'Station Signals':

| Signal                    | Definition                                                                                                                                             |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Production Cycle Complete | Production has completed for single unit, or batch of units.                                                                                           |
| Productive Status         | A binary value indicating that the station is actively engaged in the manufacturing process, or not (i.e. it's idle).                                  |
| Line Speed                | A arbitrary process speed, normally used on stations where the flow speed is more applicable than unit count (i.e. continuous manufacturing processes) |
| Energy Consumed           | The electrical energy, in kWh, consumed. Can be an absolute, or total value (i.e a meter reading).                                                     |
| Error/Status Code         | Any error or status code emitted by the machine for the purpose of automatically tagging downtime.                                                     |

These signals can be captured from existing PLCs, IoT sensors, industrial data acquisition units (i.e. the Arduino Opta, our recommended hardware), or manually from shop floor operators via our tablet interface.

The universal, yet well defined, nature of these signals allows Busroot to be quickly applied to almost any manufacturing process, across entire organisations, using machines of any age or level of automation. This is the power of Busroot.

### Contextual Information

In order for Busroot to 'make sense' of the real-time data being received, it must have the contextual information behind each plant, shift, station, SKU and production & non-production schedule.

Busroot stores this context internally, but it can be managed either manually via the user interface, or automatically via 3rd party systems (i.e. ERP, MRP, MES, etc) using the API.

For detailed information regarding the contextual information, see the Configuration section.

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/twfY2GCUxz6rGhrkM4db" %}
[OEE & TEEP](/busroot/concepts-and-architecture/oee-and-teep)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/yQfqdVMgb79dC2Wh3qJI" %}
[Station Windows](/busroot/concepts-and-architecture/station-windows)
{% endcontent-ref %}


# OEE & TEEP

OEE (Overall Equipment Effectiveness) and TEEP (Total Effective Equipment Performance) are metrics used in manufacturing to understand actual performance vs total capacity.

The simple difference between the two is that OEE only considers planned production time, whereas TEEP broadens the measurement to consider all time (scheduled, unscheduled, maintenance and out-of-shift).

{% hint style="info" %}
**OEE** = Performance against expected capacity.\
**TEEP** = Performance against maximum theoretical capacity.
{% endhint %}

## Calculating OEE and TEEP

Busroot captures and manages all of the data required to calculate OEE and TEEP in real-time:

#### Contextual Information:

* Shift Patterns
* Non-Production / Maintenance Schedules
* Production Schedules
* SKU / Part Ideal Cycle Times

#### Real-time Data:

* Productivity / Utilisation Status
* Actual Production Count
* Reject Production Count

**OEE Availability** = Running Time / Scheduled Production Time

**OEE Performance** = Ideal Production Time (count x ideal cycle time) / Available Time

**OEE Quality** = Good Units / Total Units

Busroot calculates and provides OEE & TEEP metrics in the Station Window API response: [Broken mention](broken://pages/a0bb8226ca8d1ca05d9aa399bc16c67005d591f7)


# Station Windows

These records are a summary of all activity that occurred for a single station during 1 specific minute.

#### They are a convenient summary of all real-time and contextual data for each station in 1 minute slices.&#x20;

#### Station Window Schema

| Field                            | Format    | Description                                                                                                      |
| -------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------- |
| account\_id                      | string    | Unique key for the customer account.                                                                             |
| station\_code                    | string    | Unique within account identifier for the station.                                                                |
| window\_start\_at                | datetime  | The time this window starts at, will always be a whole minute.                                                   |
| window\_end\_at                  | datetime  | The time this window ends at, will always be a whole minute.                                                     |
| total\_time                      | number    | Total number of ms in this window. Will always be 60,000.                                                        |
| shift\_time                      | number    | Number of ms inside a shift.                                                                                     |
| scheduled\_production\_time      | number    | Number of ms inside a production schedule. Outside of a shift, will always be 0.                                 |
| scheduled\_non\_production\_time | number    | Number of ms inside a non-production schedule. Outside of a shift, will always be 0.                             |
| productive\_time                 | number    | Number of ms this station was productive.                                                                        |
| issue\_time                      | number    | Number of ms this station was experiencing an issue.                                                             |
| issue\_reason\_codes             | string\[] | The reason codes provided by the customer during this window.                                                    |
| issue\_ids                       | number\[] | The issue IDs active during this window.                                                                         |
| line\_speed\_avg                 | number    | The average line speed during this window.                                                                       |
| line\_speed\_target\_avg         | number    | The average target line speed during this window.                                                                |
| rssi\_avg                        | number    | The average wifi signal strength during this window.                                                             |
| production\_good\_count          | number    | The number of good production units completed during this window.                                                |
| production\_bad\_count           | number    | The number of bad production units completed during this window.                                                 |
| error\_codes                     | string\[] | The error codes recorded during this window.                                                                     |
| schedule\_ids                    | number\[] | The schedule IDs active during this window.                                                                      |
| cycle\_time\_avg                 | number    | The average cycle time during this window.                                                                       |
| is\_alive                        | boolean   | An indication that any signal was received during this window.                                                   |
| electrical\_volts\_avg           | number    | The average electrical voltage recorded during this window.                                                      |
| electrical\_amps\_avg            | number    | The average electrical current recorded during this window.                                                      |
| electrical\_hz\_avg              | number    | The average electrical AC frequency recorded during this window.                                                 |
| electrical\_pf\_avg              | number    | The average electrical power factor recorded during this window.                                                 |
| electrical\_kwh                  | number    | The total electrical energy recorded during this window in kWh.                                                  |
| created\_at                      | datetime  | The time this record was first created.                                                                          |
| updated\_at                      | datetime  | The time this record was last updated.                                                                           |
| status\_code                     | string    | The status code active during this window.                                                                       |
| sku\_code                        | string    | The SKU code for any active production schedule during this window.                                              |
| sku\_group\_code                 | string    | The SKU group code for any active production schedule during this window.                                        |
| non\_production\_reason\_codes   | string\[] | The reason code any active non-production schedule during this window.                                           |
| electrical\_price                | number    | The total cost of the electrical consumption during this window.                                                 |
| electrical\_price\_currency      | number    | The currency of the electrical cost.                                                                             |
| electrical\_co2                  | number    | Total CO2 consumed for the electricity used during this window.                                                  |
| downtime\_cost                   | number    | The total cost of the downtime during this window.                                                               |
| production\_ideal\_count         | number    | The number of production units that, according to the cycle time, should have been completed during this window. |

### Future Time

It can be requested via the API that station windows for future time are returned. Future time windows can be used to determine if a time is in shift or not.


# Installation

## Busroot Installation Guide

This guide simplifies your Busroot installation process while allowing double-checking at critical steps. Follow each section to ensure your Arduino Opta DAU devices are installed and transmitting data successfully.

***

#### 1. Hardware Setup <a href="#id-1.-hardware-setup" id="id-1.-hardware-setup"></a>

#### 1.1. Power & Connection for the Arduino Opta <a href="#id-1.1.-power-and-connection-for-the-arduino-opta" id="id-1.1.-power-and-connection-for-the-arduino-opta"></a>

* Supply 12–24V DC via the dedicated +/- pins (top left). Do not connect Modbus pins (A(-), B(+)) to power.
* Maximum power consumption is 2.2W.
* Use pins I1–I6 (top side) for digital DC signals (up to 24V).
* Use pins I7 & I8 for analog signals (0–10V), ideal for line speed or similar.
* Double check that power is only connected to the correct DC input pins.
* Verify pin connections with your signal sources (e.g., Andon lights, actuators, optical sensors).
* Photograph each connected machine’s wiring for later verification.
* Note: Relays on the bottom are unused for Busroot.

#### 1.2. Wiring Check for 3-phase energy meter <a href="#id-1.2.-wiring-check-for-3-phase-energy-meter" id="id-1.2.-wiring-check-for-3-phase-energy-meter"></a>

* If connecting an energy meter (3-phase):
  * Hold 'E' to enter configuration (passcode 1000).
  * Address must be unique (001 if only one device).
  * Baud rate: 19.2k.
  * Photograph wiring, baud screen, and address.

**1.3. More information on recommended hardware**

For Arduino Opta details: <https://docs.output.industries/recommended-hardware/arduino-opta>

For Energy monitors: <https://docs.output.industries/recommended-hardware/energy-monitors>

***

#### 2. Connectivity & Device Verification <a href="#id-2.-connectivity-and-device-verification" id="id-2.-connectivity-and-device-verification"></a>

* Device ships pre-configured for WiFi or will use accompanying Blues wireless for opta.
* Arduino Opta (DAU-Data Acquisition unit) uses MQTT (ports 1883, 1885), destination:
* eu-west-2-1.busroot.com (18.135.102.39)
* eu-west-2-2.busroot.com (3.9.14.134)
* LED Codes:
  * Flashing Orange: Loading/Configuring
  * Red (5 quick): WiFi issue
  * Red (2 slow): MQTT/Internet issue
  * Green: Connected to WiFi

#### Firewall <a href="#firewall" id="firewall"></a>

The Firewall information should be completed by the IT team in your [work order form documentation](https://docs.google.com/spreadsheets/d/1wfQ3NxDRbffC_IMJkT-pnzBC0__nH_bHE3SmhnPAuvI/edit?usp=drive_link).

#### Device white-listing <a href="#device-white-listing" id="device-white-listing"></a>

In the case of device white-listing, the Busroot customer team can supply the MAC addresses if required for you IT team

#### Security of devices <a href="#security-of-devices" id="security-of-devices"></a>

Device is transmission only and there is no interface to access. Each device will have a unique password.

#### <mark style="color:red;">**2.1. If trouble-shooting installation - Double-Check:**</mark> <a href="#id-2.1.-if-trouble-shooting-installation-double-check" id="id-2.1.-if-trouble-shooting-installation-double-check"></a>

* Correct WiFi SSID and password (watch for typos/autocorrect changes, particularly capitalisation).
* Confirm last four digits of device ID printed on the Opta matches what's recorded.
* Confirm SSID and Password
* Confirm frequency : 2.4ghz or 5ghz **(Must be 2.4 for Opta to work)**
* Confirm security type **(Must support WPA2 with PSK)**
* Confirm signal strength in the area next to each machine (must be over -80dB)
* Confirm if MAC whitelisting is required. Usually by IT team.
* Confirm if firewall is blocking access on port 1885 **(if so, must be opened by you IT support)**

***

#### 3. The Work Order Form <a href="#id-3.-the-work-order-form" id="id-3.-the-work-order-form"></a>

Document machines/processes for monitoring during installation

* Complete the Installation Work Order Form. Request a copy from the Busroot team.
* Information required:
  * Which machine(s) or process(es) you want to monitor.
  * Signals you want to track (utilisation, production count, line speed, etc.).
  * Power supply details (is 24V DC available?).
  * Tips: Photograph cabinets and controls, check for space and power in your cabinet, and collect or photograph relevant schematics.
* IMPORTANT: Check and confirm your WiFi Frequency is 2.4ghz **(if it's 5ghz please contact <support@output.industries>)**
* Check WiFi signal strength next to each machine:
  * Android: [WiFi Analyser](https://play.google.com/store/apps/details?id=abdelrahman.wifianalyzerpro\&hl=en)
  * iOS: [WiFiman](https://apps.apple.com/us/app/ubiquiti-wifiman/id1385561119)
* Confirm with your IT team if whitelisting or firewall adjustments are required (Busroot can supply MAC addresses if needed).
* If you require Busroot or a partner to handle installation, arrange accordingly.

***

#### 4. Customer Self-Configure Arduino Opta and Devices *(optional)* <a href="#id-4.2.-customer-self-configure-arduino-opta-and-devices-optional" id="id-4.2.-customer-self-configure-arduino-opta-and-devices-optional"></a>

* This stage is only necessary if agreed with Busroot support team.
* Use an Android tablet with full charge or a laptop with Chrome.
* [Instructions to follow our here.](https://docs.output.industries/recommended-hardware/arduino-opta/configuration)
  * Open Busroot account (admin view) in one browser tab.
  * In another tab, open the [Busroot Programming Tool](https://outputindustries.gitlab.io/busroot-webdfu/).
    * In Busroot (admin > Devices), confirm you have the four-digit device ID.
* Follow on-screen instructions to program each device.
  * Double-check: Device IDs match on physical device and account platform before programming; Modbus meters set to correct address (001 as default).


# Recommended Hardware

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/tyMVE06VUKTj1wyRjRA7" %}
[Arduino Opta](/technical-onboarding/recommended-hardware/arduino-opta)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/Xrx88MOZdgK2CkqRW0th" %}
[Android Tablet](/technical-onboarding/recommended-hardware/android-tablet)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/oCUofvePQumbSgFUU8vv" %}
[Energy Monitors](/technical-onboarding/recommended-hardware/energy-monitors)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/nNn4bgwitCFmaxGbjc4h" %}
[Fire TV Stick](/technical-onboarding/recommended-hardware/fire-tv-stick)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/jdfiKe3EX8wS3qRG05pS" %}
[Diagnostic Device](/technical-onboarding/recommended-hardware/diagnostic-device)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/LiQ7agO5WE1JeGCVvC84" %}
[Compressed Air Monitoring](/technical-onboarding/recommended-hardware/compressed-air-monitoring)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/Ay5h7p4ZXKdJzXMKIDU6" %}
[ATEX Compliance](/technical-onboarding/recommended-hardware/atex-compliance)
{% endcontent-ref %}


# Arduino Opta

<figure><img src="/files/nqrf4QklrVYr0j96qH8S" alt=""><figcaption><p>The Arduino Opta micro PLC with WiFi connectivity. </p></figcaption></figure>

### Overview

Arduino Opta® is a secure, easy-to-use micro PLC with Industrial IoT capabilities. Designed in partnership with leading relay manufacturer Finder®.

When programmed with Busroot's DAU (data acquisition unit) code, the Arduino Opta becomes a simple and reliable way to communicate shop-floor signals directly into the Busroot platform.

### Setup

The device must be supplied with 12-24V DC, via the +/- pins marked on the top left of the unit, and will not consume more than 2.2W of power. Please note, the pins marked A(-) and B(+) are for Modbus only, and should not be connected to power.

Pins I1 to I6 on the top side should be used to input DC signals up to 24v. Pins I7 and I8 are specifically for analog signals between 0 and 10v. The 4 relays on the bottom side are not used.

Each of the top 8 pins can be used to capture HIGH/LOW signals from the machine or system being monitored.

The device is shipped pre-configured to connect to WiFi and relay data back to Busroot.

Once setup, please inform your Busroot account manager (or email <support@output.industries>) which details on the device ID (printed on front), the connected machine and pin usage.

### Connectivity

By default the DAU will send data via WiFi over port 1883 and 1885 (MQTT). The destination of this MQTT traffic will be `eu-west-2-1.busroot.com (IP: 18.135.102.39)` or `eu-west-2-2.busroot.com (IP: 3.9.14.134)`

### LED Codes

Flashing Orange = Loading / Waiting for Configuration

Red (5 Quick) = WiFi Issue

Red (2 Slow) = MQTT/Internet Issue

### Minimum Requirements

* 2.4 GHz WiFi Only
* WPA2 with Pre-Shared Key (PSK)
* Minimum -80dB RSSI in area of equipment
* Internet access available on port 1883 and 1885

### Specifications

| Description                 | Value                     |
| --------------------------- | ------------------------- |
| Supply Voltage              | 12 to 24V                 |
| Operating Temperature Range | -20 to 50C                |
| Protection degree rating    | IP20                      |
| Power consumption (24V)     | 2.2W Max                  |
| Input impedance             | 8.9 kΩ                    |
| Pollution degree            | 2 conforming to IEC 61010 |


# Configuration

### What you need before you start

* Laptop or Android tablet
* USB-C cable
* Chrome Browser

### Flashing Device

Normally devices will be shipped pre-flashed with the latest firmware. If required, or instructed by the output.industries, use the following instructions to flash the Opta with the latest firmware.

1. Connect Opta device to computer using USB-C to USB-C cable.
2. Visit '<https://outputindustries.gitlab.io/busroot-webdfu/>' **on Chrome browser**.
3. Double-press the 'Reset' button on Opta using a pin or pen. The green LED should pulse slowly.
4. Enter the WiFi SSID and WiFi Password into the respective fields.
5. Copy the device ID and access token into the respective fields
6. Now click the  'Connect' button to connect the browser to the Opta (The device name ends with 'Bootloader').
7. Click "pair" pair on the pop-up window to connect the Opta device to the browser.
8. Press 'Download' and wait for it to finish.

### Configuring Device

1. Visit <https://www.serialterminal.com/index.html> on Chrome (other browsers won't work)
2. Single-press the 'Reset' button on the Opta.
3. Press the 'Connect' button on the browser and select the 'Arduino' device listed.
4. Paste your config token into the input bar and press the 'Send' button.
5. You should see confirmation of the config used and the device attempting to connect to the network.


# Cellular Connectivity

This page describes how to use the Blues Wireless for PLC module with the Arduino Opta device.

<figure><img src="/files/qmz5ROZePUJAqz52crWs" alt=""><figcaption></figcaption></figure>

### <https://dev.blues.io/blog/announcing-blues-opta-expansion/>

### Connections

The Blues device must be connected with its own 24v power supply.

The Opta connects to the Blues expansion with a standard AUX connector (it’s at easy as connecting two LEGO pieces), and the Opta uses that connection to communicate with the expansion’s Notecard via I2C.

### Arduino Opta Configuration

The Arduino Opta must be configured to communicate via the Blues device. This is done by selecting the correct option in the 'Configuration Mode'.

<figure><img src="/files/BfyHkNHyrhsHjdHNNsLs" alt=""><figcaption></figcaption></figure>

### External Antenna

Must be a multi-band antenna with a Male SMA connector. Connect to 'MAIN' connector.

{% embed url="<https://uk.rs-online.com/web/p/multi-band-antennas/1248876>" %}

### Troubleshooting

1. Hold down 'TEST' button on Blues device for 10 seconds to reset.
2. Wait 10 seconds
3. Press 'RESET' button on Opta.


# Signals

### 'Production Complete' Signal

Each pin can be pulsed to indicate when a production cycle has been completed. A pin can be pulsed up to 5 times per second, quicker than this may result in pulses being missed.

The device will communicate a pulse count for each pin every 5 seconds.

An example scenario would be the control signal for an exit gate actuator, or an optical sensor detecting parts exiting the manufacturing process.

### 'Productive Time' Signal

Each pin can also be set according to whether the system or process is actively producing products or adding value to the final product, aka Productive vs Non-productive time.

It does not matter if the pin is pulled high or low for either case, the meaning is defined after in the Busroot platform.

The device will communicate the state of each pin every 5 seconds.

An example scenario would be a CNC machine being in its home position to indicate it is not active, or a door sensor on a spray booth.

### 'Line Speed' Signal

Pins I7 and I8 can be used to capture analog signals related to the speed of a process related to the machine being monitored.

The voltage range should be 0v to +10v.

An example scenario would be the control voltage of a motor driver for a conveyor belt, or the output of a motion sensor such as a rotary encoder (analog output).&#x20;

### Multiple Signals

Each pin can be used independently to capture either 'production complete' or 'productive time' signals. This also gives the flexibility to use a single device to capture data from multiple machines, processes or systems.


# Android Tablet

Tablet devices supplied by OI are Lenovo M10 gen3 10”

Some devices will be delivered ready to use or may require some basic setup. You will be informed by OI which phase/s of setup will be required for your tablet.

#### Configure WiFi

1. Turn on tablet, wait for loading sequence to finish
2. Lenovo lock screen will appear, swipe up to unlock

<figure><img src="/files/h4UJ11Cb8fP2921rs6c3" alt="" width="408"><figcaption></figcaption></figure>

3. Black screen will be displayed with 'Waiting for Network Connection...'                                            Swipe inwards from the left of the screen to open menu

<figure><img src="/files/lL3BnR59Ug80T79c3hO1" alt="" width="418"><figcaption></figcaption></figure>

4. Select 'Settings'

<figure><img src="/files/oIg5MPmUo6NCrLVyIloz" alt="" width="420"><figcaption></figcaption></figure>

5. Select 'Device Management'

<figure><img src="/files/kHWXQk2rWy79ODBrPcKM" alt="" width="422"><figcaption></figcaption></figure>

6. Scroll to end of menu and select 'WiFi Settings'

<figure><img src="/files/6xvmMDUgeLl7ASD9ewUc" alt="" width="421"><figcaption></figcaption></figure>

7. Select WiFi network, enter security details and save.

<figure><img src="/files/4035KA2KG5JmEIJmpaIS" alt="" width="423"><figcaption></figcaption></figure>

8. Once WiFi is connected, swipe inwards from left or right of screen to exit all menus. Busroot login screen should be displayed now tablet is connected to network. Enter Access Code supplied by OI to continue.

<figure><img src="/files/tfZ17ELHKrEIDNuHW713" alt="" width="422"><figcaption></figcaption></figure>


# Energy Monitors

##

<figure><img src="/files/UnFv4ZIU5f0XjlLRi9b4" alt="Typical Opta + Energy Meter Setup"><figcaption><p>Typical Opta + Energy Meter Setup for Busroot</p></figcaption></figure>

## Typical Energy Monitoring Installations

Below are some common setups that cover most Energy Monitoring requirements. For full data sheets and purchasing links see the sub-page for each device.

Hardware sourced through OI has a 10% handling charge added.

<table><thead><tr><th>Capacity (Amps)</th><th align="center">Number of Phases</th><th width="221">Hardware Required</th><th width="167">Price (exc. VAT)</th></tr></thead><tbody><tr><td>100</td><td align="center">1</td><td>RS Pro 2369293</td><td>£66.00</td></tr><tr><td>100</td><td align="center">3</td><td>RS Pro 2369297</td><td>£176.47</td></tr><tr><td>4000</td><td align="center">3</td><td>C Gavazzi 2247709<br>+ Rogowski Coils 224405</td><td>£166.18<br>£465.83</td></tr></tbody></table>

Note: Prices don't include Arduino OPTA devices which are also required. However up to 6 monitors can be connected to 1 OPTA device.


# 1 Phase < 100A

<figure><img src="/files/Q0cua4yOF91pdcHCJddF" alt=""><figcaption></figcaption></figure>

User Manual:&#x20;

{% file src="/files/JaNBTm9ZXxUiaBnt9D0k" %}

Datasheet:&#x20;

{% file src="/files/ZMlv96UeLOoVR3CsToVJ" %}

Purchase link:

{% embed url="<https://uk.rs-online.com/web/p/current-transformers/2224405?gb=s>" %}


# 3 Phase < 100A

<figure><img src="/files/0zeY8jB95Ff7SjLtpQ0a" alt=""><figcaption></figcaption></figure>

### Device Configuration

1. Hold down 'E' button to enter configuration mode. Pass code is 1000 by default.

<figure><img src="/files/kVAnXqGiAKjwDfEEbH8Z" alt=""><figcaption></figcaption></figure>

2. Set the address of the device. Must be less than 16 and unique compared to other devices connected to the same Opta DAU. If there is only 1 energy meter connected to an Arduino, it can be left as 001. If  a second is connected you will need to go into the menu (in the picture above) and set it to 002.

<figure><img src="/files/lFVEzBssctFAqRS1Xfiy" alt=""><figcaption></figcaption></figure>

3. Set Baud Rate to 19.2k

<figure><img src="/files/TPsGIholXyuoBB3w0Rsr" alt=""><figcaption></figcaption></figure>

### Documentation

User Manual:&#x20;

{% file src="/files/nCgcrhtAXGWi42Ohgdw9" %}

Datasheet:&#x20;

{% file src="/files/XRFN1ltShsGOtCAWEqMV" %}

Purchase link:

{% embed url="<https://uk.rs-online.com/web/p/energy-meters/2369297?gb=s&searchId=4ed501f2-f33b-4f2d-8706-3b7da2029cfe>" %}

Example Installs:

<figure><img src="/files/Tuxd3KWBaEBYTYwHb0uI" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/lO4lDQ7uCRBVv58dL2h0" alt=""><figcaption></figcaption></figure>


# 3 Phase < 4000A

This setup consists of 3 components:

* The 'Carlo Gavazzi EM210' energy meter with Rogowski Coils
* The 'Finder Arduino Opta' data collection unit
* The 'Blues Wireless for Opta' wireless communication unit (optional)

#### Power Supply

Both the Opta and the Blues devices must be powered with 24v DC.

The energy meter is powered from the mains supply being monitored. Please refer to the manual to understand the wiring for different number of phases.

#### Communication

The Opta and the Blues devices communicate via a built in connection. Care should be taken to ensure the two units are firmly pushed together.

The energy meter and Opta communicate over an RS485 interface. This should be wired during installation according to the pdf manual at the end of this page.

For EM210+Opta, connect A to B and B to A.

#### Rogowski Coils

Each coil should be wired into the energy meter according to the diagram on the device.

The coils can then be opened and place around each of the phases to be monitored.

<figure><img src="/files/k76qN3Z35jJpsemgo89R" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/X6HFB20wXfQovMQcVjVX" alt=""><figcaption></figcaption></figure>

#### Energy Meter Parameters

Once installed and powered on the meter needs to be set to the following parameters:

* SYS should be 3P
* bAud should be 19,2
* SEnSOr should be roG

The instructions on how to navigate the menu and set parameters can be found in the manual below under Menu Map and Parameter Menus. The default password to enter the parameter menu is 0.

Manual:

<https://www.gavazziautomation.com/fileadmin/images/PIM/MANUALS/ENG/EM210_IM.pdf>

Datasheet:

<https://www.gavazzionline.com/pdf/em210ds.pdf>

Purchase links:

{% embed url="<https://uk.rs-online.com/web/p/energy-meters/2238048>" %}

{% embed url="<https://uk.rs-online.com/web/p/current-transformers/2224405?gb=s>" %}


# Shelly Pro EM

<figure><img src="/files/J3HTh14bxIOy9fyb982A" alt=""><figcaption></figcaption></figure>

Available with 50A and 120A clamps/CTs.

## Installation

<mark style="background-color:red;">Note: During installation please ensure that all arrows on the clamps are matching the direction of the energy flow to be measured.</mark>

<https://shellystore.co.uk/wp-content/uploads/2023/09/Shelly-Pro-EM-50A-Printed-user-guide-English-Deutsch-Italiano-Espanol-Portugues-Francais.pdf>

## Configuration

1. The device will start in AP mode (WiFi light is blue). Connect to the device's WiFi from your laptop or mobile device.
2. Navigate to <http://192.168.33.1> on your device's browser.
3. Set up WiFi to connect to your local network and disable AP mode.

<figure><img src="/files/p3A6mlljgZ6ThJzQPh0h" alt=""><figcaption></figcaption></figure>

4. Set up MQTT to broadcast data to Busroot. (Ensure generic status update is enabled)
5. Restart the device.
6. WiFi light should change to green.

<figure><img src="/files/HXrAtkifaGL1rNfLrKm6" alt=""><figcaption></figcaption></figure>


# Fire TV Stick

<figure><img src="/files/kNniukeFNgiU48nCA4ea" alt="" width="188"><figcaption></figcaption></figure>

Setup Instructions

1. As per normal device instructions:
   * &#x20;Unpackage device and connect to TV via HDMI
   * (Optional but recommended) Connect to device via the app.
   * Connect to Wi-Fi
   * Disable Screensaver: Settings > Display > Screensaver > Never
2. In App Store, download 'Silk Browser' aka 'Internet' app.
3. Navigate to '<https://eu-west-2-2.busroot.com/auth/login/accesscode>'
4. Input the access code provided to you by the OI team.
5. Use the Busroot menu to access the dashboard you wish to display.

Troubleshooting

* If entire dashboard won't fit, ensure TV display settings are set to fit screen.
* To allow more precise alignment of the dashboard, set Cursor and Scrolling Speed to slow.  Settings > Applications > Silk Browser > Cursor Speed
* Use 'Menu' button on remote to show/hide address bar.


# Diagnostic Device

<figure><img src="/files/XU2hrX0SFQqjR9BdGPOw" alt=""><figcaption></figcaption></figure>

The tablet device works offline and does not need to be connect to WiFi or internet.

## Instructions

* Open application "Serial USB Terminal"
* Connect the tablet to the Opta via a USB-C to USB-C cable.
* If there is a pop up asking about connecting the device to the app, confirm yes.

<figure><img src="/files/PLA4IpIPvHtsfdiHIIRJ" alt=""><figcaption></figcaption></figure>

* Press the connect icon in the top right:

<figure><img src="/files/a5SbjPlIY9dNCqzQPAB1" alt=""><figcaption></figcaption></figure>

* Opta device logs will now be displayed in the main terminal window.

{% embed url="<https://www.loom.com/share/47f8ce0258c24f9d9a2d43dd44f8069c?sid=1b850ed2-ba9c-4773-80d8-e290e8a819db>" %}


# Compressed Air Monitoring

Understanding the usage of compressed air within certain manufacturing processes can be critical to determining the performance and efficiency of that operation.

When integrating machines that use compressed air as part of their process, we have 3 methods of acquiring data signals:

### Method 1: Compressed Air Actuation

By monitoring the signal to the pneumatic valve, we are able to determine when compressed air is being commanded by the PLC and therefore the productive status of the machine.

By using the typical flow rate at each value, we can estimate the amount of compressed air used.

When using this option, we recommend it is used in conjunction with method 3.

Pros: Simple to implement.

Cons: The amount of compressed air used can only be approximated using this method.

What's required: It is normally quite straightforward to find the actuation signal inside the control cabinet of the machine, however a electrical schematic can be helpful in this process. No additional hardware is required for this option.

### Method 2: Flow Rate

It is possible to measure the flow of compressed air through the machine using accurate and dedicated metering devices (e.g. <https://www.ifm.com/gb/en/product/SD5500>).

Pros: Detailed information on the amount of air consumed at short, detailed time intervals.

Cons: More effort is required to implement compressed air meters on each machine.

What's required: If not already in the machine, a compressed air meter is required for each machine being monitored in this way. The typical flow rate and fitting type used is required to determine the correct compressed air meter to use.

### Method 3: Compressor Energy Consumption

By using an energy meter on the compressor itself, we are able to determine when it is running and the exact amount of energy consumed when providing the compressed air.

Pros: Information on exact amount of energy consumed in the deliver of compressed air to assets.

Cons: The compressor is normally shared between several machine and, because of the air receiver tank, its operation does not relate exactly to when a downstream machine is consuming air. Therefore does not give exact information on machine productivity.

What's required: A [standard energy meter](/recommended-hardware/energy-monitors) can be used for this option. The maximum current draw and number of phases used by the machine is required to determine the correct energy meter to use.


# ATEX Compliance

<figure><img src="/files/bwALofTdUGGD8OY9xi0P" alt=""><figcaption></figcaption></figure>

Some of our customers operate in hazardous environments where explosive atmospheres may be present (for example, facilities handling flammable gases, vapors, or dust). In such environments, equipment must comply with the **ATEX Directive** (European Union standards for equipment intended for use in potentially explosive atmospheres).

### What ATEX Means

The ATEX Directive (2014/34/EU) defines requirements to ensure that electrical and mechanical equipment used in explosive atmospheres will not become an ignition source. Compliance is mandatory for equipment used in these environments within the European Economic Area (EEA).

By using ATEX-certified solutions, manufacturers can safely collect and transmit shop-floor data without compromising plant safety.

### Our Approach

Our data collection devices are based on programmable logic controllers (PLCs), repurposed exclusively for data capture and wireless communication over Wi-Fi. To achieve ATEX compliance, we integrate our system into **fully certified ATEX enclosures**.

* **ATEX enclosure:** The enclosure itself is certified to the appropriate ATEX category and zone classification.
* **Component integration:** All device components, including the PLC and wireless modules, are mounted securely within the enclosure.
* **Ingress protection:** Enclosures are sealed to prevent the ingress of dust or gas, ensuring safe operation in hazardous areas.
* **No modification of enclosure integrity:** We ensure that cable glands, connectors, and mounting methods preserve the original ATEX certification of the enclosure.

This approach allows customers to benefit from our data collection devices in hazardous environments without additional certification processes.

### What Customers Need to Know

* **Certification:** The ATEX certification applies to the enclosure and assembly as supplied by us.
* **Installation:** Devices must be installed according to the enclosure manufacturer’s guidelines and in compliance with ATEX zoning requirements.
* **Operation:** The unit is designed for data collection only. It does not control actuators, motors, or other equipment that could generate ignition sources.
* **Maintenance:** Any opening of the enclosure (for service or inspection) must be performed by qualified personnel in a safe environment and in accordance with ATEX regulations.

### Summary

By housing our devices in ATEX-compliant enclosures, we provide a reliable solution for safe data collection in explosive atmospheres. This enables manufacturers to gain valuable insights from shop-floor operations while meeting strict safety and regulatory standards.

### Datasheet

{% file src="/files/1PXtlDPZvw5fJQHmrXCb" %}


# Integration

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/yoWYPTPeshyDBi18C8L4" %}
[MQTT](/technical-onboarding/integration/mqtt)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/73nlrSRjPyEGyfjM0LUA" %}
[HTTP API Reference](/technical-onboarding/integration/http-api-reference)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/EpbgLku5V6CCOYdX6wEb" %}
[Data Warehouse Access](/technical-onboarding/integration/data-warehouse-access)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/GO9EkTFSNvOsWKm6EjA7" %}
[Bulk Data Export](/technical-onboarding/integration/bulk-data-export)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/1vt4lXv2XxsFMMsafQYz" %}
[Node-RED Nodes](/technical-onboarding/integration/node-red-nodes)
{% endcontent-ref %}


# MQTT

## Station Signals

Real-time data from stations is collected over [MQTT](https://mqtt.org/), an open-source, lightweight messaging protocol designed for IoT.

The specific types of data accepted by Busroot are called 'Signals'. The following signals are currently supported:

| Signal Key/Field                                                            | Description                                                                                                                                        |
| --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p>production\_complete\_good</p><p>production\_complete (alias)</p><p></p> | The number of new (good) production units created.                                                                                                 |
| <p>production\_count\_good</p><p>production\_count (alias)</p>              | The **running count** of new (good) production units created. (i.e. the number of new units is this count minus the previously received count)     |
| production\_complete\_bad                                                   | The number of new bad/reject production units created.                                                                                             |
| production\_count\_bad                                                      | The **running count** of new bad/reject production units created. (i.e. the number of new units is this count minus the previously received count) |
| productive                                                                  | A binary value indicating if the station is currently engaged in production.                                                                       |
| electrical\_kwh                                                             | The total cumulative amount of kWh consumed. This is typically from a meter reading.                                                               |
| electrical\_kwh\_interval                                                   | The amount of kWh consumed since the last data point.                                                                                              |
| rssi                                                                        | The signal strength of the IoT device.                                                                                                             |

These signals are accepted as a JSON string published to an MQTT topic for the station. e.g.

```
MQTT Topic: busroot/v2/[Account ID]/signals/[Station Code]

Payload:
{
  "production_count_good": 12.4,
  "electrical_kwh": 15774.45
}
```

## MQTT Access

In order for IoT device to communicate with the Busroot MQTT broker, they must use valid credentials consisting of a `Device ID` and `Access Token`.

The `Device ID` is made up of the account ID followed by a `/` and a unique value for that device.

When using these credentials with the MQTT broker, a username, password and client ID must be provided as follows:

| MQTT Field | Value                                   |
| ---------- | --------------------------------------- |
| Username   | `Device ID`                             |
| Password   | `Access Token`                          |
| Client ID  | `Device ID` + `/` + `[optional string]` |

After MQTT authentication, the device is connected but can only publish and subscribe to specific topics:

Busroot Signals Topic: `busroot/v1/` + `Device ID`\
Raw Data Topic: `busroot/v1/dau/` + `Device ID`

Data published to the Busroot Signals topic will be processed directly by Busroot according to the signals mentioned at the top of this page.

Data published to the topic starting with `busroot/v1/dau/` will not be processed by Busroot. The purpose of this topic is to allow raw data to be sent from the device and processed in a second stage (e.g. using Node-RED) which will then re-publish that data to the Busroot Signals topic.

## Registering Devices

<figure><img src="/files/hEQcJU49RdsVLFjBWs6j" alt=""><figcaption></figcaption></figure>

### New Device

The 'Add New' button will create a new device with a unique `Device ID` and `Access Token`.

### Removing Access for a Device

When it is required that a device no longer be able to send data to Busroot, the device ID should be deleted from Busroot. This will cause that device to be immediately disconnected from the MQTT broker.


# HTTP API Reference

*See menu dropdown and select relevant API*


# Account

## GET /account

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/account":{"get":{"tags":["Account"],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"stationCountLimit":{"type":["number","null"]},"electricalPricePerKwh":{"type":["number","null"]},"electricalCo2PerKwh":{"type":["number","null"]},"currency":{"type":["string","null"]},"enableLostProductionCost":{"type":["boolean","null"]},"dashboardConfig":{"type":["object","null"],"additionalProperties":{}},"redshiftPassword":{"type":["string","null"]},"uploadTransforms":{"type":["string","null"]},"defaultAutoEndOnQuantityComplete":{"type":["boolean","null"]},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]},"cursors":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"timestamp":{"type":"number"},"value":{"type":"string"},"valueAgo":{"type":"string"}},"required":["type","timestamp","value","valueAgo"]}},"redshiftConfig":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"number"},"username":{"type":"string"}},"required":["host","port","username"]}},"required":["id","domain"]}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /account

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/account":{"post":{"tags":["Account"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enableLostProductionCost":{"type":"boolean","default":false},"currency":{"type":["string","null"],"enum":["GBP","USD","EUR",null]},"electricalPricePerKwh":{"type":["number","null"],"minimum":0,"exclusiveMaximum":1000},"electricalCo2PerKwh":{"type":["number","null"],"minimum":0,"exclusiveMaximum":1000},"dashboardConfig":{"type":["string","null"]},"resetRedshiftPassword":{"type":"boolean"},"uploadTransforms":{"type":"string"},"defaultAutoEndOnQuantityComplete":{"type":"boolean","default":false}}}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"stationCountLimit":{"type":["number","null"]},"electricalPricePerKwh":{"type":["number","null"]},"electricalCo2PerKwh":{"type":["number","null"]},"currency":{"type":["string","null"]},"enableLostProductionCost":{"type":["boolean","null"]},"dashboardConfig":{"type":["object","null"],"additionalProperties":{}},"redshiftPassword":{"type":["string","null"]},"uploadTransforms":{"type":["string","null"]},"defaultAutoEndOnQuantityComplete":{"type":["boolean","null"]},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]}},"required":["id","domain"]}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# Device

## GET /device

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/device":{"get":{"tags":["Device"],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"id":{"type":"string"},"accessToken":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["accountId","id","accessToken"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /device

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/device":{"post":{"tags":["Device"],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","properties":{"accountId":{"type":"string"},"id":{"type":"string"},"accessToken":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["accountId","id","accessToken"]}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## DELETE /device/{id}

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/device/{id}":{"delete":{"tags":["Device"],"parameters":[{"in":"path","name":"id","schema":{"type":"string","minLength":1},"required":true},{"in":"query","name":"accessToken","schema":{"type":"string"},"required":true}],"responses":{"204":{"description":"204 No Content"},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# Downtime

## GET /issue

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/issue":{"get":{"tags":["Downtime"],"parameters":[{"in":"query","name":"stationcodes","description":"Comma-separated list of Station Codes.","schema":{"type":"string","description":"Comma-separated list of Station Codes."}},{"in":"query","name":"rangecode","schema":{"type":"string"}},{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1}},{"in":"query","name":"id","schema":{"type":"integer","minimum":0}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":0,"maximum":1000}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"type":{"type":"string","enum":["stop","slow","manual","stop_utilisation"]},"stationCode":{"type":"string"},"startAt":{"type":"string"},"endAt":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"startNotifiedAt":{"type":"string"},"endNotifiedAt":{"type":"string"},"accountId":{"type":"string"},"excludedAt":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"downtimeId":{"type":"number"},"type":{"type":"string","enum":["acknowledge","estimate","escalate","cause","exclude"]},"userId":{"type":"number"},"estimateEndAt":{"type":"string"},"notifiedAt":{"type":"string"},"causeCode":{"type":"string"},"accountId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"operatorInitials":{"type":"string"},"userEmail":{"type":"string"}},"required":["id","downtimeId","type","accountId","createdAt","updatedAt"]}},"isAcknowledged":{"type":"boolean"},"isEstimated":{"type":"boolean"},"isEscalated":{"type":"boolean"},"hasCause":{"type":"boolean"},"causeCode":{"type":"string"},"estimateEndAt":{"type":"string"},"ragStatus":{"type":"string","enum":["#cc3311","#ee7733","#009988","#33bbee","#CCCCCC"]},"statusText":{"type":"string"},"stationName":{"type":"string"},"causeBreadcrumb":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"description":{"type":"string"},"parentReasonCode":{"type":["string","null"]},"type":{"type":"array","items":{"type":"string","enum":["downtime","non-production"]}}},"required":["code","description","type"]}},"startAtTimestamp":{"type":"number"},"endAtTimestamp":{"type":"number"},"duration":{"type":"number"},"durationFormatted":{"type":"string"},"skuCode":{"type":"string"},"skuName":{"type":"string"},"isOngoing":{"type":"boolean"}},"required":["id","type","stationCode","startAt","createdAt","updatedAt","accountId","events","isAcknowledged","isEstimated","isEscalated","hasCause","ragStatus","statusText","causeBreadcrumb","startAtTimestamp","isOngoing"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /issue

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/issue":{"post":{"tags":["Downtime"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["stop","slow","manual","stop_utilisation"]},"stationCode":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)$","minLength":1,"maxLength":32},"startAt":{"type":"string","format":"date-time"},"endAt":{"type":"string","format":"date-time"}},"required":["type","stationCode","startAt"]}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"type":{"type":"string","enum":["stop","slow","manual","stop_utilisation"]},"stationCode":{"type":"string"},"startAt":{"type":"string"},"endAt":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"startNotifiedAt":{"type":"string"},"endNotifiedAt":{"type":"string"},"accountId":{"type":"string"},"excludedAt":{"type":"string"}},"required":["id","type","stationCode","startAt","createdAt","updatedAt","accountId"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## GET /downtime/ongoing

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/downtime/ongoing":{"get":{"tags":["Downtime"],"parameters":[{"in":"query","name":"stationcodes","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"type":{"type":"string","enum":["stop","slow","manual","stop_utilisation"]},"stationCode":{"type":"string"},"startAt":{"type":"string"},"endAt":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"startNotifiedAt":{"type":"string"},"endNotifiedAt":{"type":"string"},"accountId":{"type":"string"},"excludedAt":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"downtimeId":{"type":"number"},"type":{"type":"string","enum":["acknowledge","estimate","escalate","cause","exclude"]},"userId":{"type":"number"},"estimateEndAt":{"type":"string"},"notifiedAt":{"type":"string"},"causeCode":{"type":"string"},"accountId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"operatorInitials":{"type":"string"},"userEmail":{"type":"string"}},"required":["id","downtimeId","type","accountId","createdAt","updatedAt"]}},"isAcknowledged":{"type":"boolean"},"isEstimated":{"type":"boolean"},"isEscalated":{"type":"boolean"},"hasCause":{"type":"boolean"},"causeCode":{"type":"string"},"estimateEndAt":{"type":"string"},"ragStatus":{"type":"string","enum":["#cc3311","#ee7733","#009988","#33bbee","#CCCCCC"]},"statusText":{"type":"string"},"stationName":{"type":"string"},"causeBreadcrumb":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"description":{"type":"string"},"parentReasonCode":{"type":["string","null"]},"type":{"type":"array","items":{"type":"string","enum":["downtime","non-production"]}}},"required":["code","description","type"]}},"startAtTimestamp":{"type":"number"},"endAtTimestamp":{"type":"number"},"duration":{"type":"number"},"durationFormatted":{"type":"string"},"skuCode":{"type":"string"},"skuName":{"type":"string"},"isOngoing":{"type":"boolean"}},"required":["id","type","stationCode","startAt","createdAt","updatedAt","accountId","events","isAcknowledged","isEstimated","isEscalated","hasCause","ragStatus","statusText","causeBreadcrumb","startAtTimestamp","isOngoing"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## GET /downtime/unreported-downtime/count

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/downtime/unreported-downtime/count":{"get":{"tags":["Downtime"],"parameters":[{"in":"query","name":"stationcodes","schema":{"type":"string"},"required":true},{"in":"query","name":"rangecode","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"stationCode":{"type":"string"},"count":{"type":"number"}},"required":["stationCode","count"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /downtime/{id}/event

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/downtime/{id}/event":{"post":{"tags":["Downtime"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer","minimum":0},"required":true}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["acknowledge","estimate","escalate","cause","exclude"]},"estimatedTime":{"type":"number","minimum":0},"causeCode":{"type":"string","minLength":1},"operator":{"type":"string"}},"required":["type"]}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"}},"required":["isSuccess"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## GET /downtime

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/downtime":{"get":{"tags":["Downtime"],"parameters":[{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1},"required":true},{"in":"query","name":"rangecode","schema":{"type":"string"},"required":true},{"in":"query","name":"aggregatewindow","schema":{"type":"string"}},{"in":"query","name":"stationcodes","description":"Comma-separated list of Station Codes.","schema":{"type":"string","description":"Comma-separated list of Station Codes."}},{"in":"query","name":"skucodes","description":"Comma-separated list of SKU Codes.","schema":{"type":"string","description":"Comma-separated list of SKU Codes."}},{"in":"query","name":"includefuture","schema":{"type":"string","minLength":1}},{"in":"query","name":"inshiftaverages","schema":{"type":"boolean"}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"stationCode":{"type":"string"},"stationName":{"type":"string"},"stationGroupCode":{"type":"string"},"stationGroupName":{"type":"string"},"reliabilityData":{"type":"object","properties":{"runningsCount":{"type":"number"},"stopsCount":{"type":"number"},"totalRunningTime":{"type":"number"},"totalStoppedTime":{"type":"number"}},"required":["runningsCount","stopsCount","totalRunningTime","totalStoppedTime"]},"cycleTimeAnalysis":{"type":"object","properties":{"avg":{"type":"number"},"min":{"type":"number"},"max":{"type":"number"},"quantity":{"type":"number"},"default":{"type":"number"},"stations":{"type":"array","items":{"type":"object","properties":{"stationCode":{"type":"string"},"stationName":{"type":"string"},"avg":{"type":"number"},"min":{"type":"number"},"max":{"type":"number"},"quantity":{"type":"number"}},"required":["stationCode","stationName","avg","min","max","quantity"]}}},"required":["avg","min","max","quantity","stations"]},"oee":{"type":"object","properties":{"scheduleMs":{"type":"number","description":"The number of milliseconds spent on any schedule."},"scheduleLossMs":{"type":"number","description":"The number of milliseconds lost to unscheduled time in shift."},"schedulePerc":{"type":"number","description":"The ratio of scheduled to unscheduled time."},"productionScheduleMs":{"type":"number","description":"The number of milliseconds spent in a production schedule."},"productionScheduleLossMs":{"type":"number","description":"The number of milliseconds lost to non-production schedules."},"productionSchedulePerc":{"type":"number","description":"The ratio of production to non-production scheduled time."},"availabilityMs":{"type":"number","description":"The number of milliseconds spent running."},"availabilityLossMs":{"type":"number","description":"The number of milliseconds spend stopped."},"availabilityPerc":{"type":"number","description":"The ratio of running to stopped time aka OEE Availability."},"performanceMs":{"type":"number","description":"The number of milliseconds spend producing under ideal circumstances (production count * ideal cycle time)."},"performanceLossMs":{"type":"number","description":"The number of milliseconds lost to under-production vs ideal cycle times."},"performancePerc":{"type":"number","description":"OEE Performance."},"goodQualityCount":{"type":"number","description":"The number of good quality units produced."},"goodQualityLossCount":{"type":"number","description":"The number of bad quality units produced."},"goodQualityPerc":{"type":"number","description":"The ratio of good units to bad units aka OEE Quality."},"scheduledNonProduction":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"description":{"type":"string"},"duration":{"type":"number"},"cost":{"type":"number"},"percent":{"type":"number"},"energy":{"type":"number"},"energyCost":{"type":"number"}},"required":["code","description","duration","cost","percent","energy","energyCost"]}},"stops":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"description":{"type":"string"},"duration":{"type":"number"},"cost":{"type":"number"},"percent":{"type":"number"},"energy":{"type":"number"},"energyCost":{"type":"number"}},"required":["code","description","duration","cost","percent","energy","energyCost"]}},"oee":{"type":"number"}},"required":["scheduleMs","scheduleLossMs","schedulePerc","productionScheduleMs","productionScheduleLossMs","productionSchedulePerc","availabilityMs","availabilityLossMs","availabilityPerc","performanceMs","performanceLossMs","performancePerc","goodQualityCount","goodQualityLossCount","goodQualityPerc","scheduledNonProduction","stops","oee"]},"nominal":{"type":"object","properties":{"electricalPowerNominalKw":{"type":"number"}},"required":["electricalPowerNominalKw"]},"downtimes":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["stop","slow","manual","stop_utilisation"]},"stationCode":{"type":"string"},"reasonCode":{"type":"string"},"startTimestamp":{"type":"number"},"endTimestamp":{"type":"number"},"range":{"type":"object","properties":{"from":{"type":"number"},"to":{"type":"number"},"duration":{"type":"number"},"fromIso":{"type":"string"},"toIso":{"type":"string"},"durationFormatted":{"type":"string"}},"required":["from","to","duration","fromIso","toIso","durationFormatted"]}},"required":["type","stationCode","startTimestamp","range"]}}},"required":["stationCode","stationName","stationGroupCode","stationGroupName","reliabilityData","oee","nominal","downtimes"]}},"range":{"type":"object","properties":{"from":{"type":"number"},"to":{"type":"number"},"duration":{"type":"number"},"fromIso":{"type":"string"},"toIso":{"type":"string"},"durationFormatted":{"type":"string"}},"required":["from","to","duration","fromIso","toIso","durationFormatted"]}},"required":["isSuccess","results","range"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# Plant

## GET /plant

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/plant":{"get":{"tags":["Plant"],"parameters":[{"in":"query","name":"stationcodes","description":"Comma-separated list of Station Codes.","schema":{"type":"string","description":"Comma-separated list of Station Codes."}},{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"timezone":{"type":"string"},"now":{"type":"string"},"stationGroups":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"plantCode":{"type":"string"},"allowScheduleStationFlexibility":{"type":"boolean"},"shiftPatternId":{"type":"number"},"allowQuickScheduleStart":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["code","name","plantCode","allowScheduleStationFlexibility"]}},"dayStartHour":{"type":"number"}},"required":["code","name","timezone","now","stationGroups","dayStartHour"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /plant

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/plant":{"post":{"tags":["Plant"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","pattern":"^[a-z0-9\\-]*$","minLength":3,"maxLength":55,"description":"Plant Code: The unique code for this plant."},"name":{"type":"string","minLength":3,"maxLength":55,"description":"Plant Name: The display name for this plant."},"dayStartHour":{"type":"number","minimum":0,"maximum":24,"description":"Start Hour for Day: The normal time this plant starts for the day. When running 24 hours a day, this time will be considered the start and end when reporting by day."},"timezone":{"type":"string","enum":["UTC","Africa/Abidjan","Africa/Accra","Africa/Addis_Ababa","Africa/Algiers","Africa/Asmara","Africa/Asmera","Africa/Bamako","Africa/Bangui","Africa/Banjul","Africa/Bissau","Africa/Blantyre","Africa/Brazzaville","Africa/Bujumbura","Africa/Cairo","Africa/Casablanca","Africa/Ceuta","Africa/Conakry","Africa/Dakar","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Douala","Africa/El_Aaiun","Africa/Freetown","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Kigali","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Lome","Africa/Luanda","Africa/Lubumbashi","Africa/Lusaka","Africa/Malabo","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Africa/Mogadishu","Africa/Monrovia","Africa/Nairobi","Africa/Ndjamena","Africa/Niamey","Africa/Nouakchott","Africa/Ouagadougou","Africa/Porto-Novo","Africa/Sao_Tome","Africa/Timbuktu","Africa/Tripoli","Africa/Tunis","Africa/Windhoek","America/Adak","America/Anchorage","America/Anguilla","America/Antigua","America/Araguaina","America/Argentina/Buenos_Aires","America/Argentina/Catamarca","America/Argentina/ComodRivadavia","America/Argentina/Cordoba","America/Argentina/Jujuy","America/Argentina/La_Rioja","America/Argentina/Mendoza","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Aruba","America/Asuncion","America/Atikokan","America/Atka","America/Bahia","America/Bahia_Banderas","America/Barbados","America/Belem","America/Belize","America/Blanc-Sablon","America/Boa_Vista","America/Bogota","America/Boise","America/Buenos_Aires","America/Cambridge_Bay","America/Campo_Grande","America/Cancun","America/Caracas","America/Catamarca","America/Cayenne","America/Cayman","America/Chicago","America/Chihuahua","America/Ciudad_Juarez","America/Coral_Harbour","America/Cordoba","America/Costa_Rica","America/Coyhaique","America/Creston","America/Cuiaba","America/Curacao","America/Danmarkshavn","America/Dawson","America/Dawson_Creek","America/Denver","America/Detroit","America/Dominica","America/Edmonton","America/Eirunepe","America/El_Salvador","America/Ensenada","America/Fort_Nelson","America/Fort_Wayne","America/Fortaleza","America/Glace_Bay","America/Godthab","America/Goose_Bay","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guatemala","America/Guayaquil","America/Guyana","America/Halifax","America/Havana","America/Hermosillo","America/Indiana/Indianapolis","America/Indiana/Knox","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Tell_City","America/Indiana/Vevay","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indianapolis","America/Inuvik","America/Iqaluit","America/Jamaica","America/Jujuy","America/Juneau","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Knox_IN","America/Kralendijk","America/La_Paz","America/Lima","America/Los_Angeles","America/Louisville","America/Lower_Princes","America/Maceio","America/Managua","America/Manaus","America/Marigot","America/Martinique","America/Matamoros","America/Mazatlan","America/Mendoza","America/Menominee","America/Merida","America/Metlakatla","America/Mexico_City","America/Miquelon","America/Moncton","America/Monterrey","America/Montevideo","America/Montreal","America/Montserrat","America/Nassau","America/New_York","America/Nipigon","America/Nome","America/Noronha","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Nuuk","America/Ojinaga","America/Panama","America/Pangnirtung","America/Paramaribo","America/Phoenix","America/Port-au-Prince","America/Port_of_Spain","America/Porto_Acre","America/Porto_Velho","America/Puerto_Rico","America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet","America/Recife","America/Regina","America/Resolute","America/Rio_Branco","America/Rosario","America/Santa_Isabel","America/Santarem","America/Santiago","America/Santo_Domingo","America/Sao_Paulo","America/Scoresbysund","America/Shiprock","America/Sitka","America/St_Barthelemy","America/St_Johns","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Swift_Current","America/Tegucigalpa","America/Thule","America/Thunder_Bay","America/Tijuana","America/Toronto","America/Tortola","America/Vancouver","America/Virgin","America/Whitehorse","America/Winnipeg","America/Yakutat","America/Yellowknife","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie","Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer","Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen","Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad","Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku","Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek","Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan","Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca","Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai","Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Harbin","Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong","Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta","Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka","Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Katmandu","Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao","Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila","Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak","Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda","Asia/Rangoon","Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran","Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ujung_Pandang","Asia/Ulaanbaatar","Asia/Ulan_Bator","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg","Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda","Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe","Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira","Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena","Atlantic/Stanley","Australia/ACT","Australia/Adelaide","Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra","Australia/Currie","Australia/Darwin","Australia/Eucla","Australia/Hobart","Australia/LHI","Australia/Lindeman","Australia/Lord_Howe","Australia/Melbourne","Australia/NSW","Australia/North","Australia/Perth","Australia/Queensland","Australia/South","Australia/Sydney","Australia/Tasmania","Australia/Victoria","Australia/West","Australia/Yancowinna","Brazil/Acre","Brazil/DeNoronha","Brazil/East","Brazil/West","Canada/Atlantic","Canada/Central","Canada/Eastern","Canada/Mountain","Canada/Newfoundland","Canada/Pacific","Canada/Saskatchewan","Canada/Yukon","Chile/Continental","Chile/EasterIsland","Europe/Amsterdam","Europe/Andorra","Europe/Astrakhan","Europe/Athens","Europe/Belfast","Europe/Belgrade","Europe/Berlin","Europe/Bratislava","Europe/Brussels","Europe/Bucharest","Europe/Budapest","Europe/Busingen","Europe/Chisinau","Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar","Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man","Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad","Europe/Kiev","Europe/Kirov","Europe/Kyiv","Europe/Lisbon","Europe/Ljubljana","Europe/London","Europe/Luxembourg","Europe/Madrid","Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino","Europe/Sarajevo","Europe/Saratov","Europe/Simferopol","Europe/Skopje","Europe/Sofia","Europe/Stockholm","Europe/Tallinn","Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Vilnius","Europe/Volgograd","Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye","Europe/Zurich","Indian/Antananarivo","Indian/Chagos","Indian/Christmas","Indian/Cocos","Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives","Indian/Mauritius","Indian/Mayotte","Indian/Reunion","Mexico/BajaNorte","Mexico/BajaSur","Mexico/General","Pacific/Apia","Pacific/Auckland","Pacific/Bougainville","Pacific/Chatham","Pacific/Chuuk","Pacific/Easter","Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos","Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam","Pacific/Honolulu","Pacific/Johnston","Pacific/Kanton","Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro","Pacific/Marquesas","Pacific/Midway","Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea","Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn","Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby","Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa","Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu","Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap","US/Alaska","US/Aleutian","US/Arizona","US/Central","US/East-Indiana","US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan","US/Mountain","US/Pacific","US/Samoa"],"description":"Timezone: The timezone the plant operates in."}},"required":["code","name"]}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"timezone":{"type":"string"},"now":{"type":"string"},"stationGroups":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"plantCode":{"type":"string"},"allowScheduleStationFlexibility":{"type":"boolean"},"shiftPatternId":{"type":"number"},"allowQuickScheduleStart":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["code","name","plantCode","allowScheduleStationFlexibility"]}},"dayStartHour":{"type":"number"}},"required":["code","name","timezone","now","stationGroups","dayStartHour"]}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /plant/archive

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/plant/archive":{"post":{"tags":["Plant"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"plantCode":{"type":"string","pattern":"^[a-z0-9\\-]*$","minLength":3,"maxLength":55,"description":"Plant Code: The unique code for this plant."}},"required":["plantCode"]}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","properties":{"code":{"type":["string","null"]}},"required":["code"]}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# Production

## GET /production

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/production":{"get":{"tags":["Production"],"parameters":[{"in":"query","name":"rangecode","schema":{"type":"string"},"required":true},{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1},"required":true},{"in":"query","name":"stationcodes","description":"Comma-separated list of Station Codes.","schema":{"type":"string","description":"Comma-separated list of Station Codes."}},{"in":"query","name":"skucodes","description":"Comma-separated list of SKU Codes.","schema":{"type":"string","description":"Comma-separated list of SKU Codes."}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"stationCode":{"type":"string"},"stationName":{"type":"string"},"skuCode":{"type":"string"},"skuName":{"type":"string"},"skuValue":{"type":"number"},"skuGroupCode":{"type":"string"},"skuGroupName":{"type":"string"},"effectiveCycleTime":{"type":"number"},"workOrderReference":{"type":"string"},"scheduleId":{"type":"number"},"quantityGood":{"type":"number"},"quantityBad":{"type":"number"},"lastUnitAt":{"type":"string"},"lastUnitAtTimestamp":{"type":"number"},"accountId":{"type":"string"},"operatorInitials":{"type":"string"},"type":{"type":"string","enum":["manual","timeseries","from-speed"]}},"required":["stationCode","stationName","quantityGood","quantityBad","lastUnitAt","lastUnitAtTimestamp","accountId"]}},"range":{"type":"object","properties":{"from":{"type":"number"},"to":{"type":"number"},"duration":{"type":"number"},"fromIso":{"type":"string"},"toIso":{"type":"string"},"durationFormatted":{"type":"string"}},"required":["from","to","duration","fromIso","toIso","durationFormatted"]}},"required":["isSuccess","results","range"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## GET /production/station

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/production/station":{"get":{"tags":["Production"],"parameters":[{"in":"query","name":"rangecode","schema":{"type":"string"},"required":true},{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1},"required":true},{"in":"query","name":"stationcodes","description":"Comma-separated list of Station Codes.","schema":{"type":"string","description":"Comma-separated list of Station Codes."}},{"in":"query","name":"skucodes","description":"Comma-separated list of SKU Codes.","schema":{"type":"string","description":"Comma-separated list of SKU Codes."}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"stationCode":{"type":"string"},"stationName":{"type":"string"},"skuCode":{"type":"string"},"skuName":{"type":"string"},"skuValue":{"type":"number"},"skuGroupCode":{"type":"string"},"skuGroupName":{"type":"string"},"effectiveCycleTime":{"type":"number"},"workOrderReference":{"type":"string"},"scheduleId":{"type":"number"},"quantityGood":{"type":"number"},"quantityBad":{"type":"number"},"lastUnitAt":{"type":"string"},"lastUnitAtTimestamp":{"type":"number"},"accountId":{"type":"string"},"operatorInitials":{"type":"string"},"type":{"type":"string","enum":["manual","timeseries","from-speed"]}},"required":["stationCode","stationName","quantityGood","quantityBad","lastUnitAt","lastUnitAtTimestamp","accountId"]}},"range":{"type":"object","properties":{"from":{"type":"number"},"to":{"type":"number"},"duration":{"type":"number"},"fromIso":{"type":"string"},"toIso":{"type":"string"},"durationFormatted":{"type":"string"}},"required":["from","to","duration","fromIso","toIso","durationFormatted"]},"rangeCode":{"type":"string"}},"required":["isSuccess","results","range","rangeCode"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## GET /production/sku

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/production/sku":{"get":{"tags":["Production"],"parameters":[{"in":"query","name":"rangecode","schema":{"type":"string"},"required":true},{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1},"required":true},{"in":"query","name":"stationcodes","description":"Comma-separated list of Station Codes.","schema":{"type":"string","description":"Comma-separated list of Station Codes."}},{"in":"query","name":"skucodes","description":"Comma-separated list of SKU Codes.","schema":{"type":"string","description":"Comma-separated list of SKU Codes."}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"stationCode":{"type":"string"},"stationName":{"type":"string"},"skuCode":{"type":"string"},"skuName":{"type":"string"},"skuValue":{"type":"number"},"skuGroupCode":{"type":"string"},"skuGroupName":{"type":"string"},"effectiveCycleTime":{"type":"number"},"workOrderReference":{"type":"string"},"scheduleId":{"type":"number"},"quantityGood":{"type":"number"},"quantityBad":{"type":"number"},"lastUnitAt":{"type":"string"},"lastUnitAtTimestamp":{"type":"number"},"accountId":{"type":"string"},"operatorInitials":{"type":"string"},"type":{"type":"string","enum":["manual","timeseries","from-speed"]}},"required":["stationCode","stationName","quantityGood","quantityBad","lastUnitAt","lastUnitAtTimestamp","accountId"]}},"range":{"type":"object","properties":{"from":{"type":"number"},"to":{"type":"number"},"duration":{"type":"number"},"fromIso":{"type":"string"},"toIso":{"type":"string"},"durationFormatted":{"type":"string"}},"required":["from","to","duration","fromIso","toIso","durationFormatted"]},"rangeCode":{"type":"string"}},"required":["isSuccess","results","range","rangeCode"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## GET /production/manual

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/production/manual":{"get":{"tags":["Production"],"parameters":[{"in":"query","name":"stationcodes","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"stationCode":{"type":"string"},"stationName":{"type":"string"},"skuCode":{"type":"string"},"skuName":{"type":"string"},"skuValue":{"type":"number"},"skuGroupCode":{"type":"string"},"skuGroupName":{"type":"string"},"effectiveCycleTime":{"type":"number"},"workOrderReference":{"type":"string"},"scheduleId":{"type":"number"},"quantityGood":{"type":"number"},"quantityBad":{"type":"number"},"lastUnitAt":{"type":"string"},"lastUnitAtTimestamp":{"type":"number"},"accountId":{"type":"string"},"operatorInitials":{"type":"string"},"type":{"type":"string","enum":["manual","timeseries","from-speed"]}},"required":["stationCode","stationName","quantityGood","quantityBad","lastUnitAt","lastUnitAtTimestamp","accountId"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /production/manual

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/production/manual":{"post":{"tags":["Production"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"stationCode":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)$","minLength":1,"maxLength":32},"stationName":{"type":"string","minLength":1},"skuCode":{"type":"string","pattern":"^([a-zA-Z0-9.\\\\/-]+)$","minLength":1,"maxLength":32},"skuName":{"type":"string","minLength":1},"skuGroupCode":{"type":"string","pattern":"^([a-zA-Z0-9.\\\\/-]+)$","minLength":1,"maxLength":32},"skuGroupName":{"type":"string","minLength":1},"effectiveCycleTime":{"type":"integer","minimum":0},"workOrderReference":{"type":"string","minLength":1},"scheduleId":{"type":"integer","exclusiveMinimum":0},"quantityGood":{"type":"integer","minimum":0},"quantityBad":{"type":"integer","minimum":0},"lastUnitAt":{"type":"string","format":"date-time"},"lastUnitAtTimestamp":{"type":"integer","minimum":0},"operatorInitials":{"type":"string","minLength":1}},"required":["stationCode"]}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"}},"required":["isSuccess"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## DELETE /production/manual/{id}

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/production/manual/{id}":{"delete":{"tags":["Production"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer","minimum":0},"required":true}],"responses":{"204":{"description":"204 No Content"},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## GET /production/aggregatewindow

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/production/aggregatewindow":{"get":{"tags":["Production"],"parameters":[{"in":"query","name":"rangecode","schema":{"type":"string"},"required":true},{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1},"required":true},{"in":"query","name":"stationcodes","description":"Comma-separated list of Station Codes.","schema":{"type":"string","description":"Comma-separated list of Station Codes."}},{"in":"query","name":"skucodes","description":"Comma-separated list of SKU Codes.","schema":{"type":"string","description":"Comma-separated list of SKU Codes."}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"windowStart":{"type":"string"},"windowStartIso":{"type":"string"},"quantity":{"type":"number"}},"required":["windowStart","windowStartIso","quantity"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# Reason

## GET /reason

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/reason":{"get":{"tags":["Reason"],"parameters":[{"in":"query","name":"codes","schema":{"type":"string"}},{"in":"query","name":"type","schema":{"type":"string","enum":["downtime","non-production"]}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"description":{"type":"string"},"parentReasonCode":{"type":["string","null"]},"type":{"type":"array","items":{"type":"string","enum":["downtime","non-production"]}}},"required":["code","description","type"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /reason

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/reason":{"post":{"tags":["Reason"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","minLength":1,"maxLength":50},"description":{"type":"string","minLength":1,"maxLength":50},"parentReasonCode":{"type":["string","null"],"minLength":1,"maxLength":50},"type":{"type":"array","items":{"type":"string","enum":["downtime","non-production"]}}},"required":["code","description","type"]}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","properties":{"accountId":{"type":"string"},"code":{"type":"string"},"description":{"type":"string"},"parentReasonCode":{"type":["string","null"]},"type":{"type":"array","items":{"type":"string","enum":["downtime","non-production"]}},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["code","description","type"]}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## DELETE /reason/{code}

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/reason/{code}":{"delete":{"tags":["Reason"],"parameters":[{"in":"path","name":"code","schema":{"type":"string","minLength":1,"maxLength":50},"required":true}],"responses":{"204":{"description":"204 No Content"},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# Schedule

## GET /schedule

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/schedule":{"get":{"tags":["Schedule"],"parameters":[{"in":"query","name":"rangecode","schema":{"type":"string"},"required":true},{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1}},{"in":"query","name":"stationcodes","description":"Comma-separated list of Station Codes.","schema":{"type":"string","description":"Comma-separated list of Station Codes."}},{"in":"query","name":"scheduleids","description":"Comma-separated list of Schedule IDs.","schema":{"type":"string","description":"Comma-separated list of Schedule IDs."}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"stationCode":{"type":"string"},"stationName":{"type":"string"},"accountId":{"type":"string"},"plannedStartAt":{"type":"string"},"plannedStartAtTimestamp":{"type":"number"},"plannedEndAt":{"type":"string"},"plannedEndAtTimestamp":{"type":"number"},"workOrderReference":{"type":"string"},"plannedDuration":{"type":"number"},"plannedQuantity":{"type":"number"},"nonProductionReasonCode":{"type":"string"},"nonProductionReasonDescription":{"type":"string"},"skuCode":{"type":"string"},"skuName":{"type":"string"},"skuValue":{"type":"number"},"batchSize":{"type":"number"},"autoEndOnQuantityComplete":{"type":"boolean"},"cycleTime":{"type":"number"},"unitsPerMinute":{"type":"number"},"unitsPerHour":{"type":"number"},"lineSpeedTarget":{"type":"number"},"effectiveCycleTime":{"type":"number"},"effectiveUnitsPerMinute":{"type":"number"},"effectiveUnitsPerHour":{"type":"number"},"effectiveLineSpeedTarget":{"type":"number"},"effectiveBatchSize":{"type":"number"},"effectiveMinimumCycleTime":{"type":"number"},"deletedAt":{"type":"string"},"actualStartAt":{"type":"string"},"actualStartAtTimestamp":{"type":"number"},"actualEndAt":{"type":"string"},"actualEndAtTimestamp":{"type":"number"},"quantityGood":{"type":"number"},"quantityBad":{"type":"number"},"skuGroupCode":{"type":"string"},"skuGroupName":{"type":"string"},"extendShift":{"type":"boolean"},"downtimeDurationThresholdMultiplier":{"type":"number"},"isStarted":{"type":"boolean"},"isEnded":{"type":"boolean"},"allowScheduleCutShort":{"type":"boolean"},"idealQuantity":{"type":"number"},"performanceModeFrom":{"type":"string","enum":["schedule","sku","station","none"]},"logs":{"type":"array","items":{"type":"string"}},"priorityAt":{"type":"string"}},"required":["id","stationCode","accountId","plannedStartAt","plannedStartAtTimestamp","isStarted","isEnded"]}},"range":{"type":"object","properties":{"from":{"type":"number"},"to":{"type":"number"},"duration":{"type":"number"},"fromIso":{"type":"string"},"toIso":{"type":"string"},"durationFormatted":{"type":"string"}},"required":["from","to","duration","fromIso","toIso","durationFormatted"]}},"required":["isSuccess","results","range"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /schedule

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/schedule":{"post":{"tags":["Schedule"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0},"stationCode":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)$","minLength":1,"maxLength":32},"plannedStartAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"plannedEndAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}]},"plannedQuantity":{"type":["number","null"]},"skuCode":{"type":["string","null"],"pattern":"^([a-zA-Z0-9.\\\\/-]+)$","minLength":1,"maxLength":32},"workOrderReference":{"type":["string","null"]},"nonProductionReasonCode":{"type":["string","null"],"minLength":1,"maxLength":50},"calculatedQuantity":{"type":"number"},"calculatedEndAt":{"type":"string","format":"date-time"},"predictedQuantity":{"type":"number"},"predictedEndAt":{"type":"string","format":"date-time"},"lastPredictedAt":{"type":"string","format":"date-time"},"deletedAt":{"type":"string","format":"date-time"},"actualStartAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}]},"actualEndAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}]},"skuGroupCode":{"type":["string","null"],"pattern":"^([a-zA-Z0-9.\\\\/-]+)$","minLength":1,"maxLength":32},"cycleTime":{"type":["integer","null"],"exclusiveMinimum":0,"maximum":43200000},"extendShift":{"type":"boolean"},"orderType":{"type":"string","enum":["quantity","endTime","quantityEndTime","continuous"]},"unitsPerMinute":{"type":["integer","null"],"exclusiveMinimum":0},"unitsPerHour":{"type":["integer","null"],"exclusiveMinimum":0},"lineSpeedTarget":{"type":["integer","null"],"exclusiveMinimum":0},"batchSize":{"type":["number","null"],"exclusiveMinimum":0,"exclusiveMaximum":99999},"priorityAt":{"type":["string","null"]},"autoEndOnQuantityComplete":{"type":["boolean","null"]},"skuName":{"type":"string"}}}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","properties":{"id":{"type":"number"},"stationCode":{"type":"string"},"plannedStartAt":{"type":"string"},"plannedEndAt":{"type":"string"},"plannedQuantity":{"type":"number"},"skuCode":{"type":"string"},"nonProductionReasonCode":{"type":"string"},"workOrderReference":{"type":"string"},"calculatedQuantity":{"type":"number"},"calculatedEndAt":{"type":"string"},"predictedQuantity":{"type":"number"},"predictedEndAt":{"type":"string"},"lastPredictedAt":{"type":"string"},"deletedAt":{"type":"string"},"accountId":{"type":"string"},"actualStartAt":{"type":"string"},"actualEndAt":{"type":"string"},"skuGroupCode":{"type":"string"},"cycleTime":{"type":"number"},"unitsPerMinute":{"type":"number"},"unitsPerHour":{"type":"number"},"lineSpeedTarget":{"type":"number"},"batchSize":{"type":"number"},"extendShift":{"type":"boolean"},"priorityAt":{"type":"string"},"autoEndOnQuantityComplete":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","stationCode","plannedStartAt","accountId"]}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## GET /schedule/workorder

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/schedule/workorder":{"get":{"tags":["Schedule"],"parameters":[{"in":"query","name":"stationcodes","description":"Comma-separated list of Station Codes.","schema":{"type":"string","description":"Comma-separated list of Station Codes."}},{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1}},{"in":"query","name":"skucodes","description":"Comma-separated list of SKU Codes.","schema":{"type":"string","description":"Comma-separated list of SKU Codes."}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"stationCode":{"type":"string"},"stationName":{"type":"string"},"accountId":{"type":"string"},"plannedStartAt":{"type":"string"},"plannedStartAtTimestamp":{"type":"number"},"plannedEndAt":{"type":"string"},"plannedEndAtTimestamp":{"type":"number"},"workOrderReference":{"type":"string"},"plannedDuration":{"type":"number"},"plannedQuantity":{"type":"number"},"nonProductionReasonCode":{"type":"string"},"nonProductionReasonDescription":{"type":"string"},"skuCode":{"type":"string"},"skuName":{"type":"string"},"skuValue":{"type":"number"},"batchSize":{"type":"number"},"autoEndOnQuantityComplete":{"type":"boolean"},"cycleTime":{"type":"number"},"unitsPerMinute":{"type":"number"},"unitsPerHour":{"type":"number"},"lineSpeedTarget":{"type":"number"},"effectiveCycleTime":{"type":"number"},"effectiveUnitsPerMinute":{"type":"number"},"effectiveUnitsPerHour":{"type":"number"},"effectiveLineSpeedTarget":{"type":"number"},"effectiveBatchSize":{"type":"number"},"effectiveMinimumCycleTime":{"type":"number"},"deletedAt":{"type":"string"},"actualStartAt":{"type":"string"},"actualStartAtTimestamp":{"type":"number"},"actualEndAt":{"type":"string"},"actualEndAtTimestamp":{"type":"number"},"quantityGood":{"type":"number"},"quantityBad":{"type":"number"},"skuGroupCode":{"type":"string"},"skuGroupName":{"type":"string"},"extendShift":{"type":"boolean"},"downtimeDurationThresholdMultiplier":{"type":"number"},"isStarted":{"type":"boolean"},"isEnded":{"type":"boolean"},"allowScheduleCutShort":{"type":"boolean"},"idealQuantity":{"type":"number"},"performanceModeFrom":{"type":"string","enum":["schedule","sku","station","none"]},"logs":{"type":"array","items":{"type":"string"}},"priorityAt":{"type":"string"}},"required":["id","stationCode","accountId","plannedStartAt","plannedStartAtTimestamp","quantityGood","quantityBad","isStarted","isEnded"]}}}}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /schedule/{id}/cutshort

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/schedule/{id}/cutshort":{"post":{"tags":["Schedule"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer","exclusiveMinimum":0},"required":true}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"}},"required":["isSuccess"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## DELETE /schedule/{id}

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/schedule/{id}":{"delete":{"tags":["Schedule"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer","exclusiveMinimum":0},"required":true}],"responses":{"204":{"description":"204 No Content"},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# Shift

## GET /shift-pattern

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/shift-pattern":{"get":{"tags":["Shift"],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"title":{"type":"string"},"id":{"type":"number"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"code":{"type":"string"},"duration":{"type":"number"},"startHour":{"type":"number"},"endHour":{"type":"number"},"shifts":{"type":"array","items":{"type":"object","properties":{"shiftId":{"type":"number"},"startHour":{"type":"number"},"duration":{"type":"number"},"shiftName":{"type":"string"},"shiftPatternId":{"type":"number"},"weekDay":{"type":"string"}},"required":["shiftId","startHour","duration","shiftPatternId","weekDay"]}}},"required":["accountId","title","id","code","duration","startHour","endHour","shifts"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## DELETE /shift-pattern/{id}

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/shift-pattern/{id}":{"delete":{"tags":["Shift"],"parameters":[{"in":"path","name":"id","schema":{"type":"integer","minimum":0},"required":true}],"responses":{"204":{"description":"204 No Content"},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /shift

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/shift":{"post":{"tags":["Shift"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"shiftPatternId":{"type":"integer","minimum":0},"title":{"type":"string","minLength":1},"shifts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":0},"name":{"type":"string"},"startHour":{"type":"number","minimum":0},"duration":{"type":"number","minimum":0},"shiftPatternId":{"type":"integer","minimum":0},"weekDay":{"type":"string"}},"required":["startHour","duration","weekDay"]},"minItems":1},"deleteShifts":{"type":"array","items":{"type":"integer","minimum":0}}},"required":["title","shifts"]}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","properties":{"shifts":{"type":"array","items":{"type":"object","properties":{"shiftId":{"type":"number"},"startHour":{"type":"number"},"duration":{"type":"number"},"shiftName":{"type":"string"},"shiftPatternId":{"type":"number"},"weekDay":{"type":"string"}},"required":["shiftId","startHour","duration","shiftPatternId","weekDay"]}},"shiftPatternId":{"type":"number"}},"required":["shifts","shiftPatternId"]}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# SKU

## GET /sku

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/sku":{"get":{"tags":["SKU"],"parameters":[{"in":"query","name":"skucodes","description":"Comma-separated list of SKU Codes.","schema":{"type":"string","description":"Comma-separated list of SKU Codes."}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":0}},{"in":"query","name":"skip","schema":{"type":"integer","minimum":0}},{"in":"query","name":"searchtext","schema":{"type":"string"}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"cycleTime":{"type":["number","null"]},"specifications":{"type":["array","null"],"items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}},"instructionsUrl":{"type":["string","null"]},"lineSpeedTarget":{"type":["number","null"]},"downtimeDurationThresholdMultiplier":{"type":["number","null"]},"allowUseInQuickSchedule":{"type":["boolean","null"]},"unitsPerMinute":{"type":["number","null"]},"unitsPerHour":{"type":["number","null"]},"batchSize":{"type":["number","null"]},"value":{"type":["number","null"]},"minimumCycleTime":{"type":["number","null"]}},"required":["code","name"]}},"paging":{"type":"object","properties":{"totalElements":{"type":"number"}},"required":["totalElements"]}},"required":["isSuccess","results","paging"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /sku

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/sku":{"post":{"tags":["SKU"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","pattern":"^([a-zA-Z0-9.\\\\/-]+)$","minLength":1,"maxLength":32},"name":{"type":"string","minLength":1,"maxLength":128},"cycleTime":{"type":["number","null"]},"specifications":{"anyOf":[{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}}},{"type":"object","additionalProperties":{"type":"string"}},{"type":"null"}]},"instructionsUrl":{"type":["string","null"],"format":"uri"},"lineSpeedTarget":{"type":["number","null"],"minimum":1,"maximum":99999},"downtimeDurationThresholdMultiplier":{"type":["number","null"],"minimum":1,"maximum":999},"allowUseInQuickSchedule":{"type":"boolean","default":true},"unitsPerMinute":{"type":["number","null"],"exclusiveMinimum":0},"unitsPerHour":{"type":["number","null"],"exclusiveMinimum":0},"batchSize":{"type":["number","null"],"exclusiveMinimum":0,"exclusiveMaximum":99999},"value":{"type":["number","null"],"exclusiveMinimum":0,"exclusiveMaximum":99999},"minimumCycleTime":{"type":["integer","null"],"minimum":0,"maximum":43200000}},"required":["code","name"]}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"specifications":{"type":["string","null"]},"instructionsUrl":{"type":["string","null"]},"accountId":{"type":"string"},"downtimeDurationThresholdMultiplier":{"type":["number","null"]},"allowUseInQuickSchedule":{"type":["boolean","null"]},"cycleTime":{"type":["number","null"]},"lineSpeedTarget":{"type":["number","null"]},"unitsPerMinute":{"type":["number","null"]},"unitsPerHour":{"type":["number","null"]},"batchSize":{"type":["number","null"]},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]},"value":{"type":["number","null"]},"minimumCycleTime":{"type":["number","null"]}},"required":["code","name","accountId"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## DELETE /sku/{code}

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/sku/{code}":{"delete":{"tags":["SKU"],"parameters":[{"in":"path","name":"code","schema":{"type":"string","pattern":"^([a-zA-Z0-9.\\\\/-]+)$","minLength":1,"maxLength":32},"required":true}],"responses":{"204":{"description":"204 No Content"},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# SKU Group

## GET /sku-group

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/sku-group":{"get":{"tags":["SKU Group"],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"defaultCycleTime":{"type":"number"},"accountId":{"type":"string"},"skus":{"type":"array","items":{"type":"object","properties":{"skuCode":{"type":"string"},"productionMultiplier":{"type":"number"}},"required":["skuCode","productionMultiplier"]}}},"required":["code","name","accountId","skus"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /sku-group

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/sku-group":{"post":{"tags":["SKU Group"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"defaultCycleTime":{"type":"integer","exclusiveMinimum":0,"maximum":43200000},"name":{"type":"string","minLength":1,"maxLength":128},"skus":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","pattern":"^([a-zA-Z0-9.\\\\/-]+)$","minLength":1,"maxLength":32},"productionMultiplier":{"type":"number"}},"required":["code"]}},"code":{"type":"string","pattern":"^([a-zA-Z0-9.\\\\/-]+)$","minLength":1,"maxLength":32}},"required":["name","code"]}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"defaultCycleTime":{"type":"number"},"accountId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["code","name","accountId"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## GET /sku-group/{code}

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/sku-group/{code}":{"get":{"tags":["SKU Group"],"parameters":[{"in":"path","name":"code","schema":{"type":"string","pattern":"^([a-zA-Z0-9.\\\\/-]+)$","minLength":1,"maxLength":32},"required":true}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"defaultCycleTime":{"type":"number"},"accountId":{"type":"string"},"skus":{"type":"array","items":{"type":"object","properties":{"skuCode":{"type":"string"},"productionMultiplier":{"type":"number"}},"required":["skuCode","productionMultiplier"]}}},"required":["code","name","accountId","skus"]}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## DELETE /sku-group/{code}

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/sku-group/{code}":{"delete":{"tags":["SKU Group"],"parameters":[{"in":"path","name":"code","schema":{"type":"string","pattern":"^([a-zA-Z0-9.\\\\/-]+)$","minLength":1,"maxLength":32},"required":true}],"responses":{"204":{"description":"204 No Content"},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# Station

## GET /station

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/station":{"get":{"tags":["Station"],"parameters":[{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1}},{"in":"query","name":"stationcodes","description":"Comma-separated list of Station Codes.","schema":{"type":"string","description":"Comma-separated list of Station Codes."}},{"in":"query","name":"sortby","schema":{"type":"string","minLength":1}},{"in":"query","name":"modulevisibilityfilter","schema":{"type":"string","enum":["utilisation","electrical","line_speed"]}},{"in":"query","name":"skipcache","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"groupCode":{"type":["string","null"]},"groupName":{"type":["string","null"]},"allowScheduleStationFlexibility":{"type":["boolean","null"]},"plantCode":{"type":"string"},"timezone":{"type":"string"},"accountId":{"type":"string"},"currentOperatorInitials":{"type":["string","null"]},"cycleTime":{"type":["number","null"]},"unitsPerMinute":{"type":["number","null"]},"unitsPerHour":{"type":["number","null"]},"lineSpeedTarget":{"type":["number","null"]},"allowInterruptionMode":{"type":["boolean","null"]},"allowManualProduction":{"type":["boolean","null"]},"downtimeDetectionMode":{"type":"string","enum":["off","production","utilisation","line_speed"]},"utilisationDowntimeThreshold":{"type":["number","null"]},"slowDurationThreshold":{"type":["number","null"]},"electricalUsageStoppedThresholdKw":{"type":["number","null"]},"allowScheduleCutShort":{"type":["boolean","null"]},"productiveStatusMode":{"type":"string","enum":["productive_signal","electrical_usage","line_speed"]},"lineSpeedStoppedThreshold":{"type":["number","null"]},"shiftPatternId":{"type":["number","null"]},"productiveHoldOnTime":{"type":"number"},"minimumCycleTime":{"type":["number","null"]},"statusCode":{"type":["string","null"]},"statusCodeUpdatedAt":{"type":["string","null"]},"electricalPowerNominalKw":{"type":["number","null"]},"shiftPattern":{"type":"object","properties":{"accountId":{"type":"string"},"title":{"type":"string"},"id":{"type":"number"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"code":{"type":"string"},"duration":{"type":"number"},"startHour":{"type":"number"},"endHour":{"type":"number"},"shifts":{"type":"array","items":{"type":"object","properties":{"shiftId":{"type":"number"},"startHour":{"type":"number"},"duration":{"type":"number"},"shiftName":{"type":"string"},"shiftPatternId":{"type":"number"},"weekDay":{"type":"string"}},"required":["shiftId","startHour","duration","shiftPatternId","weekDay"]}}},"required":["accountId","title","id","code","duration","startHour","endHour","shifts"]},"shifts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"startHour":{"type":"number"},"duration":{"type":"number"},"accountId":{"type":"string"},"shiftPatternId":{"type":"number"},"weekDay":{"type":"string"}},"required":["id","name","startHour","duration","accountId","shiftPatternId","weekDay"]}},"currentShift":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"startHour":{"type":"number"},"duration":{"type":"number"},"accountId":{"type":"string"},"shiftPatternId":{"type":"number"},"weekDay":{"type":"string"}},"required":["id","name","startHour","duration","accountId","shiftPatternId","weekDay"]},"currentProductionSchedule":{"type":["object","null"],"properties":{"id":{"type":"number"},"stationCode":{"type":"string"},"plannedStartAt":{"type":"string"},"plannedEndAt":{"type":"string"},"plannedQuantity":{"type":"number"},"skuCode":{"type":"string"},"nonProductionReasonCode":{"type":"string"},"workOrderReference":{"type":"string"},"calculatedQuantity":{"type":"number"},"calculatedEndAt":{"type":"string"},"predictedQuantity":{"type":"number"},"predictedEndAt":{"type":"string"},"lastPredictedAt":{"type":"string"},"deletedAt":{"type":"string"},"accountId":{"type":"string"},"actualStartAt":{"type":"string"},"actualEndAt":{"type":"string"},"skuGroupCode":{"type":"string"},"unitsPerMinute":{"type":"number"},"unitsPerHour":{"type":"number"},"lineSpeedTarget":{"type":"number"},"batchSize":{"type":"number"},"extendShift":{"type":"boolean"},"priorityAt":{"type":"string"},"autoEndOnQuantityComplete":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"quantityGood":{"type":"number"},"quantityBad":{"type":"number"},"effectiveCycleTime":{"type":"number"},"effectiveLineSpeedTarget":{"type":"number"},"effectiveBatchSize":{"type":"number"},"skuName":{"type":"string"},"skuGroupName":{"type":"string"}},"required":["id","stationCode","plannedStartAt","accountId","quantityGood","quantityBad"]},"nextProductionSchedule":{"type":["object","null"],"properties":{"id":{"type":"number"},"stationCode":{"type":"string"},"plannedStartAt":{"type":"string"},"plannedEndAt":{"type":"string"},"plannedQuantity":{"type":"number"},"skuCode":{"type":"string"},"nonProductionReasonCode":{"type":"string"},"workOrderReference":{"type":"string"},"calculatedQuantity":{"type":"number"},"calculatedEndAt":{"type":"string"},"predictedQuantity":{"type":"number"},"predictedEndAt":{"type":"string"},"lastPredictedAt":{"type":"string"},"deletedAt":{"type":"string"},"accountId":{"type":"string"},"actualStartAt":{"type":"string"},"actualEndAt":{"type":"string"},"skuGroupCode":{"type":"string"},"unitsPerMinute":{"type":"number"},"unitsPerHour":{"type":"number"},"lineSpeedTarget":{"type":"number"},"batchSize":{"type":"number"},"extendShift":{"type":"boolean"},"priorityAt":{"type":"string"},"autoEndOnQuantityComplete":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"quantityGood":{"type":"number"},"quantityBad":{"type":"number"},"effectiveCycleTime":{"type":"number"},"effectiveLineSpeedTarget":{"type":"number"},"effectiveBatchSize":{"type":"number"},"skuName":{"type":"string"},"skuGroupName":{"type":"string"}},"required":["id","stationCode","plannedStartAt","accountId","quantityGood","quantityBad"]},"currentNonProductionSchedule":{"type":["object","null"],"properties":{"id":{"type":"number"},"stationCode":{"type":"string"},"plannedStartAt":{"type":"string"},"plannedEndAt":{"type":"string"},"plannedQuantity":{"type":"number"},"skuCode":{"type":"string"},"nonProductionReasonCode":{"type":"string"},"workOrderReference":{"type":"string"},"calculatedQuantity":{"type":"number"},"calculatedEndAt":{"type":"string"},"predictedQuantity":{"type":"number"},"predictedEndAt":{"type":"string"},"lastPredictedAt":{"type":"string"},"deletedAt":{"type":"string"},"accountId":{"type":"string"},"actualStartAt":{"type":"string"},"actualEndAt":{"type":"string"},"skuGroupCode":{"type":"string"},"unitsPerMinute":{"type":"number"},"unitsPerHour":{"type":"number"},"lineSpeedTarget":{"type":"number"},"batchSize":{"type":"number"},"extendShift":{"type":"boolean"},"priorityAt":{"type":"string"},"autoEndOnQuantityComplete":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"nonProductionReasonDescription":{"type":"string"}},"required":["id","stationCode","plannedStartAt","accountId"]},"currentStopReasonCode":{"type":["string","null"]},"stoppedSince":{"type":["number","null"]},"state":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"order":{"type":"number"},"color":{"type":"string"}},"required":["code","label","order","color"]},"idleCostPerMinute":{"type":["number","null"]},"moduleVisibility":{"type":["array","null"],"items":{"type":"string","enum":["utilisation","electrical","line_speed"]}},"cachedAt":{"type":["number","null"]},"allowQuickScheduleStart":{"type":["boolean","null"]},"speedScale":{"type":["number","null"]},"speedOffset":{"type":["number","null"]},"speedToProductionRatio":{"type":["number","null"]},"forceAllShiftTimeAsPlannedProduction":{"type":"boolean"},"lastStationWindow":{"type":["object","null"],"properties":{"accountId":{"type":"string","description":""},"stationCode":{"type":"string","description":"A code that uniquely identifies this station within this account."},"windowStartAt":{"type":"string","description":"The start time of this window in ISO 8601 format."},"windowEndAt":{"type":"string","description":"The end time of this window in ISO 8601 format."},"totalMs":{"type":"number","description":"The total number milliseconds covered by this window. Shortcut for windowEndAt - windowStartAt."},"shiftMs":{"type":"number","description":"The number of milliseconds that were in shift."},"scheduledProductionMs":{"type":"number","description":"The number of milliseconds that were scheduled production."},"scheduledNonProductionMs":{"type":"number","description":"The number of milliseconds that were scheduled non-production."},"productiveMs":{"type":"number","description":"The number of milliseconds that the station was in a productive state."},"downtimeMs":{"type":"number","description":"The number of milliseconds that the station was in downtime."},"downtimeSince":{"type":"string","description":"The time this downtime started, in ISO 8601 format."},"rssiAvg":{"type":"number","description":"The received signal strength of the wireless device. -70dBm to -80dBm is good. <-90dBm is bad."},"productionGoodCount":{"type":"number","description":"The number of good quality units produced."},"productionBadCount":{"type":"number","description":"The number of bad quality units produced."},"productionIdealCount":{"type":"number","description":"The number of production units that should have been produced according to the SKU/part's cycle-time. WITH consideration for downtime."},"productionTargetCount":{"type":"number","description":"The number of production units that should have been produced according to the SKU/part's cycle-time. WITHOUT consideration for downtime."},"speed":{"type":"number","description":"The average line speed. Line speed is an arbitrary value that relates to this station's manufacturing process. i.e. Motor RPM."},"isAlive":{"type":"boolean","description":"A boolean value indicating if any signal was recieved from this station. Useful for detemining if the device has been disconnected from the network."},"electricalVoltsAvg":{"type":"number","description":"The average voltage of the electrical supply."},"electricalAmpsAvg":{"type":"number","description":"The average current draw."},"electricalHzAvg":{"type":"number","description":"The average frequency of the electrical supply."},"electricalPfAvg":{"type":"number","description":"The average Power Factor."},"electricalKwAvg":{"type":"number","description":"The average power used."},"electricalKwh":{"type":"number","description":"The total energy consumed."},"statusCode":{"type":"string","description":""},"electricalCost":{"type":"number","description":"The cost of the electricity used."},"costCurrency":{"type":"string","description":"The currency of any costs."},"electricalCo2":{"type":"number","description":"The amount of CO2 associated with the electricity used."},"workOrderReference":{"type":"string","description":"The work order reference of the current schedule."},"lostProductionCostNonProduction":{"type":"number","description":"The cost of the time lost to scheduled non-production."},"lostProductionCostDowntime":{"type":"number","description":"The cost of the time lost to downtime."},"lostProductionCostSpeed":{"type":"number","description":"The cost of the shortfall units lost due to under performance."},"lostProductionCostQuality":{"type":"number","description":"The cost of the bad quality units produced."},"performanceModeFrom":{"type":"string","description":""},"performanceModeType":{"type":"string","description":""},"productionGoodValue":{"type":"number","description":"The value of the good quality units produced."},"productionBadValue":{"type":"number","description":"The value of the bad quality units produced."},"createdAt":{"type":"string","description":""},"updatedAt":{"type":"string","description":""},"stationName":{"type":"string","description":"The name of the station."},"scheduleIds":{"type":"array","items":{"type":"number"},"description":"The IDs of the schedules that ran."},"errorCodes":{"type":"array","items":{"type":"string"},"description":"The error codes that were flagged."},"downtimeIds":{"type":"array","items":{"type":"number"},"description":"The IDs of the downtimes that occured."},"downtimeReasonCodes":{"type":"array","items":{"type":"string"},"description":"The reason codes of the downtimes that occured."},"nonProductionReasonCodes":{"type":"array","items":{"type":"string"},"description":"The reason codes for the non-production schedules that ran."},"windowStartAtTimestamp":{"type":"number","description":"The start time of this window as a UNIX timestamp."},"windowEndAtTimestamp":{"type":"number","description":"The end time of this window as a UNIX timestamp."},"isFuture":{"type":"boolean","description":"A boolean value indicating if this is a placeholder station window for future time."},"skuName":{"type":"string","description":"The name of the SKU from the current schedule."},"skuCodes":{"type":"array","items":{"type":"string"},"description":"The code of the SKUs from the schedules that ran."},"skuGroupCodes":{"type":"array","items":{"type":"string"},"description":"The code of the SKU Groups from the schedules that ran."},"lostProductionCostTotal":{"type":"number","description":"The total cost of lost production output."},"productionTotalCount":{"type":"number","description":"The total number of units produced, both good and bad."},"productionRatePerHour":{"type":"number","description":"The average rate of production in units per hour."},"productionRatePerHourIdeal":{"type":"number","description":"The ideal rate of production in units per hour."},"productionMs":{"type":"number","description":"The number of milliseconds of actual production achieved (production count * ideal cycle time)."}},"required":["accountId","stationCode","windowStartAt","windowEndAt","totalMs","isAlive","stationName","windowStartAtTimestamp","windowEndAtTimestamp"]}},"required":["code","name","plantCode","timezone","accountId","downtimeDetectionMode","productiveStatusMode","productiveHoldOnTime","shifts","state","forceAllShiftTimeAsPlannedProduction"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /station

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/station":{"post":{"tags":["Station"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string"},"code":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":32},"groupCode":{"type":"string"},"shiftPatternId":{"type":["integer","null"],"exclusiveMinimum":0},"moduleVisibility":{"type":["array","null"],"items":{"type":"string","enum":["utilisation","electrical","line_speed"]}},"minimumCycleTime":{"type":["integer","null"],"minimum":0,"maximum":43200000},"speedScale":{"type":["number","null"],"minimum":-9999,"maximum":9999},"speedOffset":{"type":["number","null"],"minimum":-9999,"maximum":9999},"speedToProductionRatio":{"type":["number","null"],"minimum":0,"maximum":99999},"electricalPowerNominalKw":{"type":["number","null"],"minimum":0},"idleCostPerMinute":{"type":["number","null"],"minimum":0,"maximum":99999},"downtimeDetectionMode":{"type":"string","enum":["off","production","utilisation","line_speed"],"default":"utilisation"},"utilisationDowntimeThreshold":{"type":"integer","minimum":0},"slowDurationThreshold":{"type":["integer","null"],"minimum":0},"forceAllShiftTimeAsPlannedProduction":{"type":"boolean","default":true},"productiveStatusMode":{"type":"string","enum":["productive_signal","electrical_usage","line_speed"],"default":"productive_signal"},"electricalUsageStoppedThresholdKw":{"type":["number","null"],"minimum":0},"lineSpeedStoppedThreshold":{"type":["number","null"],"minimum":0},"productiveHoldOnTime":{"type":["integer","null"],"minimum":0,"maximum":86400000},"allowInterruptionMode":{"type":"boolean","default":false},"allowManualProduction":{"type":"boolean","default":false},"allowQuickScheduleStart":{"type":"boolean","default":false},"allowScheduleCutShort":{"type":"boolean","default":false},"currentOperatorInitials":{"type":["string","null"],"minLength":3,"maxLength":3},"statusCode":{"type":["string","null"]},"statusCodeUpdatedAt":{"type":["string","null"]},"cycleTime":{"type":["integer","null"],"exclusiveMinimum":0,"maximum":43200000},"unitsPerMinute":{"type":["integer","null"],"exclusiveMinimum":0},"unitsPerHour":{"type":["integer","null"],"exclusiveMinimum":0},"lineSpeedTarget":{"type":["number","null"],"exclusiveMinimum":0,"maximum":99999},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]},"archivedAt":{"type":["string","null"]}},"required":["code","name","groupCode"]}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"code":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":32},"groupCode":{"type":"string"},"shiftPatternId":{"type":["integer","null"],"exclusiveMinimum":0},"moduleVisibility":{"type":["array","null"],"items":{"type":"string","enum":["utilisation","electrical","line_speed"]}},"minimumCycleTime":{"type":["integer","null"],"minimum":0,"maximum":43200000},"speedScale":{"type":["number","null"],"minimum":-9999,"maximum":9999},"speedOffset":{"type":["number","null"],"minimum":-9999,"maximum":9999},"speedToProductionRatio":{"type":["number","null"],"minimum":0,"maximum":99999},"electricalPowerNominalKw":{"type":["number","null"],"minimum":0},"idleCostPerMinute":{"type":["number","null"],"minimum":0,"maximum":99999},"downtimeDetectionMode":{"type":"string","enum":["off","production","utilisation","line_speed"],"default":"utilisation"},"utilisationDowntimeThreshold":{"type":"integer","minimum":0},"slowDurationThreshold":{"type":["integer","null"],"minimum":0},"forceAllShiftTimeAsPlannedProduction":{"type":"boolean","default":true},"productiveStatusMode":{"type":"string","enum":["productive_signal","electrical_usage","line_speed"],"default":"productive_signal"},"electricalUsageStoppedThresholdKw":{"type":["number","null"],"minimum":0},"lineSpeedStoppedThreshold":{"type":["number","null"],"minimum":0},"productiveHoldOnTime":{"type":["integer","null"],"minimum":0,"maximum":86400000},"allowInterruptionMode":{"type":"boolean","default":false},"allowManualProduction":{"type":"boolean","default":false},"allowQuickScheduleStart":{"type":"boolean","default":false},"allowScheduleCutShort":{"type":"boolean","default":false},"currentOperatorInitials":{"type":["string","null"],"minLength":3,"maxLength":3},"statusCode":{"type":["string","null"]},"statusCodeUpdatedAt":{"type":["string","null"]},"cycleTime":{"type":["integer","null"],"exclusiveMinimum":0,"maximum":43200000},"unitsPerMinute":{"type":["integer","null"],"exclusiveMinimum":0},"unitsPerHour":{"type":["integer","null"],"exclusiveMinimum":0},"lineSpeedTarget":{"type":["number","null"],"exclusiveMinimum":0,"maximum":99999},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]},"archivedAt":{"type":["string","null"]}},"required":["accountId","code","name","groupCode","forceAllShiftTimeAsPlannedProduction"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## DELETE /station/{code}

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/station/{code}":{"delete":{"tags":["Station"],"parameters":[{"in":"path","name":"code","schema":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)$","minLength":1,"maxLength":32},"required":true}],"responses":{"204":{"description":"204 No Content"},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# Station Group

## GET /station-group

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/station-group":{"get":{"tags":["Station Group"],"parameters":[{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"plantCode":{"type":"string"},"accountId":{"type":"string"},"allowScheduleStationFlexibility":{"type":"boolean"},"shiftPatternId":{"type":"number"},"allowQuickScheduleStart":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"plantTimezone":{"type":"string"},"stations":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"code":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":32},"groupCode":{"type":"string"},"shiftPatternId":{"type":["integer","null"],"exclusiveMinimum":0},"moduleVisibility":{"type":["array","null"],"items":{"type":"string","enum":["utilisation","electrical","line_speed"]}},"minimumCycleTime":{"type":["integer","null"],"minimum":0,"maximum":43200000},"speedScale":{"type":["number","null"],"minimum":-9999,"maximum":9999},"speedOffset":{"type":["number","null"],"minimum":-9999,"maximum":9999},"speedToProductionRatio":{"type":["number","null"],"minimum":0,"maximum":99999},"electricalPowerNominalKw":{"type":["number","null"],"minimum":0},"idleCostPerMinute":{"type":["number","null"],"minimum":0,"maximum":99999},"downtimeDetectionMode":{"type":"string","enum":["off","production","utilisation","line_speed"],"default":"utilisation"},"utilisationDowntimeThreshold":{"type":"integer","minimum":0},"slowDurationThreshold":{"type":["integer","null"],"minimum":0},"forceAllShiftTimeAsPlannedProduction":{"type":"boolean","default":true},"productiveStatusMode":{"type":"string","enum":["productive_signal","electrical_usage","line_speed"],"default":"productive_signal"},"electricalUsageStoppedThresholdKw":{"type":["number","null"],"minimum":0},"lineSpeedStoppedThreshold":{"type":["number","null"],"minimum":0},"productiveHoldOnTime":{"type":["integer","null"],"minimum":0,"maximum":86400000},"allowInterruptionMode":{"type":"boolean","default":false},"allowManualProduction":{"type":"boolean","default":false},"allowQuickScheduleStart":{"type":"boolean","default":false},"allowScheduleCutShort":{"type":"boolean","default":false},"currentOperatorInitials":{"type":["string","null"],"minLength":3,"maxLength":3},"statusCode":{"type":["string","null"]},"statusCodeUpdatedAt":{"type":["string","null"]},"cycleTime":{"type":["integer","null"],"exclusiveMinimum":0,"maximum":43200000},"unitsPerMinute":{"type":["integer","null"],"exclusiveMinimum":0},"unitsPerHour":{"type":["integer","null"],"exclusiveMinimum":0},"lineSpeedTarget":{"type":["number","null"],"exclusiveMinimum":0,"maximum":99999},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]},"archivedAt":{"type":["string","null"]}},"required":["accountId","code","name","groupCode","forceAllShiftTimeAsPlannedProduction"]}},"shifts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"startHour":{"type":"number"},"duration":{"type":"number"},"accountId":{"type":"string"},"shiftPatternId":{"type":"number"},"weekDay":{"type":"string"}},"required":["id","name","startHour","duration","accountId","shiftPatternId","weekDay"]}}},"required":["code","name","plantCode","accountId","allowScheduleStationFlexibility","plantTimezone","stations","shifts"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /station-group

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/station-group":{"post":{"tags":["Station Group"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)$","minLength":1,"maxLength":32},"name":{"type":"string","minLength":1,"maxLength":32},"plantCode":{"type":"string","pattern":"^[a-z0-9\\-]*$","minLength":3,"maxLength":55,"description":"Plant Code: The unique code for this plant."},"allowScheduleStationFlexibility":{"type":"boolean","default":false},"shiftPatternId":{"type":"integer","exclusiveMinimum":0},"allowQuickScheduleStart":{"type":"boolean"}},"required":["code","name","plantCode","shiftPatternId"]}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"plantCode":{"type":"string"},"accountId":{"type":"string"},"allowScheduleStationFlexibility":{"type":"boolean"},"shiftPatternId":{"type":"number"},"allowQuickScheduleStart":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["code","name","plantCode","accountId","allowScheduleStationFlexibility"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## GET /station-group/{code}

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/station-group/{code}":{"get":{"tags":["Station Group"],"parameters":[{"in":"path","name":"code","schema":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)$","minLength":1,"maxLength":32},"required":true}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"plantCode":{"type":"string"},"accountId":{"type":"string"},"allowScheduleStationFlexibility":{"type":"boolean"},"shiftPatternId":{"type":"number"},"allowQuickScheduleStart":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"plantTimezone":{"type":"string"},"stations":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"code":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":32},"groupCode":{"type":"string"},"shiftPatternId":{"type":["integer","null"],"exclusiveMinimum":0},"moduleVisibility":{"type":["array","null"],"items":{"type":"string","enum":["utilisation","electrical","line_speed"]}},"minimumCycleTime":{"type":["integer","null"],"minimum":0,"maximum":43200000},"speedScale":{"type":["number","null"],"minimum":-9999,"maximum":9999},"speedOffset":{"type":["number","null"],"minimum":-9999,"maximum":9999},"speedToProductionRatio":{"type":["number","null"],"minimum":0,"maximum":99999},"electricalPowerNominalKw":{"type":["number","null"],"minimum":0},"idleCostPerMinute":{"type":["number","null"],"minimum":0,"maximum":99999},"downtimeDetectionMode":{"type":"string","enum":["off","production","utilisation","line_speed"],"default":"utilisation"},"utilisationDowntimeThreshold":{"type":"integer","minimum":0},"slowDurationThreshold":{"type":["integer","null"],"minimum":0},"forceAllShiftTimeAsPlannedProduction":{"type":"boolean","default":true},"productiveStatusMode":{"type":"string","enum":["productive_signal","electrical_usage","line_speed"],"default":"productive_signal"},"electricalUsageStoppedThresholdKw":{"type":["number","null"],"minimum":0},"lineSpeedStoppedThreshold":{"type":["number","null"],"minimum":0},"productiveHoldOnTime":{"type":["integer","null"],"minimum":0,"maximum":86400000},"allowInterruptionMode":{"type":"boolean","default":false},"allowManualProduction":{"type":"boolean","default":false},"allowQuickScheduleStart":{"type":"boolean","default":false},"allowScheduleCutShort":{"type":"boolean","default":false},"currentOperatorInitials":{"type":["string","null"],"minLength":3,"maxLength":3},"statusCode":{"type":["string","null"]},"statusCodeUpdatedAt":{"type":["string","null"]},"cycleTime":{"type":["integer","null"],"exclusiveMinimum":0,"maximum":43200000},"unitsPerMinute":{"type":["integer","null"],"exclusiveMinimum":0},"unitsPerHour":{"type":["integer","null"],"exclusiveMinimum":0},"lineSpeedTarget":{"type":["number","null"],"exclusiveMinimum":0,"maximum":99999},"createdAt":{"type":["string","null"]},"updatedAt":{"type":["string","null"]},"archivedAt":{"type":["string","null"]}},"required":["accountId","code","name","groupCode","forceAllShiftTimeAsPlannedProduction"]}},"shifts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"startHour":{"type":"number"},"duration":{"type":"number"},"accountId":{"type":"string"},"shiftPatternId":{"type":"number"},"weekDay":{"type":"string"}},"required":["id","name","startHour","duration","accountId","shiftPatternId","weekDay"]}}},"required":["code","name","plantCode","accountId","allowScheduleStationFlexibility","plantTimezone","stations","shifts"]}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## DELETE /station-group/{code}

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/station-group/{code}":{"delete":{"tags":["Station Group"],"parameters":[{"in":"path","name":"code","schema":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)$","minLength":1,"maxLength":32},"required":true}],"responses":{"204":{"description":"204 No Content"},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# Station Window

## GET /station-window

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}},"schemas":{"StationWindow":{"type":"object","properties":{"stationCode":{"type":"string","description":"A code that uniquely identifies this station within this account."},"windowStartAt":{"type":"string","description":"The start time of this window in ISO 8601 format."},"windowEndAt":{"type":"string","description":"The end time of this window in ISO 8601 format."},"totalMs":{"type":"number","description":"The total number milliseconds covered by this window. Shortcut for windowEndAt - windowStartAt."},"shiftMs":{"type":"number","description":"The number of milliseconds that were in shift."},"scheduledProductionMs":{"type":"number","description":"The number of milliseconds that were scheduled production."},"scheduledNonProductionMs":{"type":"number","description":"The number of milliseconds that were scheduled non-production."},"productiveMs":{"type":"number","description":"The number of milliseconds that the station was in a productive state."},"downtimeMs":{"type":"number","description":"The number of milliseconds that the station was in downtime."},"downtimeSince":{"type":"string","description":"The time this downtime started, in ISO 8601 format."},"rssiAvg":{"type":"number","description":"The received signal strength of the wireless device. -70dBm to -80dBm is good. <-90dBm is bad."},"productionGoodCount":{"type":"number","description":"The number of good quality units produced."},"productionBadCount":{"type":"number","description":"The number of bad quality units produced."},"productionIdealCount":{"type":"number","description":"The number of production units that should have been produced according to the SKU/part's cycle-time. WITH consideration for downtime."},"productionTargetCount":{"type":"number","description":"The number of production units that should have been produced according to the SKU/part's cycle-time. WITHOUT consideration for downtime."},"speed":{"type":"number","description":"The average line speed. Line speed is an arbitrary value that relates to this station's manufacturing process. i.e. Motor RPM."},"isAlive":{"type":"boolean","description":"A boolean value indicating if any signal was recieved from this station. Useful for detemining if the device has been disconnected from the network."},"electricalVoltsAvg":{"type":"number","description":"The average voltage of the electrical supply."},"electricalAmpsAvg":{"type":"number","description":"The average current draw."},"electricalHzAvg":{"type":"number","description":"The average frequency of the electrical supply."},"electricalPfAvg":{"type":"number","description":"The average Power Factor."},"electricalKwAvg":{"type":"number","description":"The average power used."},"electricalKwh":{"type":"number","description":"The total energy consumed."},"statusCode":{"type":"string","description":""},"electricalCost":{"type":"number","description":"The cost of the electricity used."},"costCurrency":{"type":"string","description":"The currency of any costs."},"electricalCo2":{"type":"number","description":"The amount of CO2 associated with the electricity used."},"workOrderReference":{"type":"string","description":"The work order reference of the current schedule."},"lostProductionCostNonProduction":{"type":"number","description":"The cost of the time lost to scheduled non-production."},"lostProductionCostDowntime":{"type":"number","description":"The cost of the time lost to downtime."},"lostProductionCostSpeed":{"type":"number","description":"The cost of the shortfall units lost due to under performance."},"lostProductionCostQuality":{"type":"number","description":"The cost of the bad quality units produced."},"performanceModeFrom":{"type":"string","description":""},"performanceModeType":{"type":"string","description":""},"productionGoodValue":{"type":"number","description":"The value of the good quality units produced."},"productionBadValue":{"type":"number","description":"The value of the bad quality units produced."},"stationName":{"type":"string","description":"The name of the station."},"scheduleIds":{"type":"array","items":{"type":"number"},"description":"The IDs of the schedules that ran."},"errorCodes":{"type":"array","items":{"type":"string"},"description":"The error codes that were flagged."},"downtimeIds":{"type":"array","items":{"type":"number"},"description":"The IDs of the downtimes that occured."},"downtimeReasonCodes":{"type":"array","items":{"type":"string"},"description":"The reason codes of the downtimes that occured."},"nonProductionReasonCodes":{"type":"array","items":{"type":"string"},"description":"The reason codes for the non-production schedules that ran."},"windowStartAtTimestamp":{"type":"number","description":"The start time of this window as a UNIX timestamp."},"windowEndAtTimestamp":{"type":"number","description":"The end time of this window as a UNIX timestamp."},"isFuture":{"type":"boolean","description":"A boolean value indicating if this is a placeholder station window for future time."},"skuName":{"type":"string","description":"The name of the SKU from the current schedule."},"skuCodes":{"type":"array","items":{"type":"string"},"description":"The code of the SKUs from the schedules that ran."},"skuGroupCodes":{"type":"array","items":{"type":"string"},"description":"The code of the SKU Groups from the schedules that ran."},"lostProductionCostTotal":{"type":"number","description":"The total cost of lost production output."},"productionTotalCount":{"type":"number","description":"The total number of units produced, both good and bad."},"productionRatePerHour":{"type":"number","description":"The average rate of production in units per hour."},"productionRatePerHourIdeal":{"type":"number","description":"The ideal rate of production in units per hour."},"productionMs":{"type":"number","description":"The number of milliseconds of actual production achieved (production count * ideal cycle time)."},"nonProductionReasonNames":{"type":"array","items":{"type":"string"}}},"required":["windowStartAt","windowEndAt","totalMs","isAlive","windowStartAtTimestamp","windowEndAtTimestamp"]}}},"paths":{"/station-window":{"get":{"tags":["Station Window"],"parameters":[{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1},"required":true},{"in":"query","name":"rangecode","schema":{"type":"string"},"required":true},{"in":"query","name":"aggregatewindow","schema":{"type":"string"}},{"in":"query","name":"stationcodes","description":"Comma-separated list of Station Codes.","schema":{"type":"string","description":"Comma-separated list of Station Codes."}},{"in":"query","name":"skucodes","description":"Comma-separated list of SKU Codes.","schema":{"type":"string","description":"Comma-separated list of SKU Codes."}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"stationCode":{"type":"string"},"stationName":{"type":"string"},"stationGroupCode":{"type":"string"},"stationGroupName":{"type":"string"},"windows":{"type":"array","items":{"$ref":"#/components/schemas/StationWindow"}},"reliabilityData":{"type":"object","properties":{"runningsCount":{"type":"number"},"stopsCount":{"type":"number"},"totalRunningTime":{"type":"number"},"totalStoppedTime":{"type":"number"}},"required":["runningsCount","stopsCount","totalRunningTime","totalStoppedTime"]},"cycleTimeAnalysis":{"type":"object","properties":{"avg":{"type":"number"},"min":{"type":"number"},"max":{"type":"number"},"quantity":{"type":"number"},"default":{"type":"number"},"stations":{"type":"array","items":{"type":"object","properties":{"stationCode":{"type":"string"},"stationName":{"type":"string"},"avg":{"type":"number"},"min":{"type":"number"},"max":{"type":"number"},"quantity":{"type":"number"}},"required":["stationCode","stationName","avg","min","max","quantity"]}}},"required":["avg","min","max","quantity","stations"]},"oee":{"type":"object","properties":{"scheduleMs":{"type":"number","description":"The number of milliseconds spent on any schedule."},"scheduleLossMs":{"type":"number","description":"The number of milliseconds lost to unscheduled time in shift."},"schedulePerc":{"type":"number","description":"The ratio of scheduled to unscheduled time."},"productionScheduleMs":{"type":"number","description":"The number of milliseconds spent in a production schedule."},"productionScheduleLossMs":{"type":"number","description":"The number of milliseconds lost to non-production schedules."},"productionSchedulePerc":{"type":"number","description":"The ratio of production to non-production scheduled time."},"availabilityMs":{"type":"number","description":"The number of milliseconds spent running."},"availabilityLossMs":{"type":"number","description":"The number of milliseconds spend stopped."},"availabilityPerc":{"type":"number","description":"The ratio of running to stopped time aka OEE Availability."},"performanceMs":{"type":"number","description":"The number of milliseconds spend producing under ideal circumstances (production count * ideal cycle time)."},"performanceLossMs":{"type":"number","description":"The number of milliseconds lost to under-production vs ideal cycle times."},"performancePerc":{"type":"number","description":"OEE Performance."},"goodQualityCount":{"type":"number","description":"The number of good quality units produced."},"goodQualityLossCount":{"type":"number","description":"The number of bad quality units produced."},"goodQualityPerc":{"type":"number","description":"The ratio of good units to bad units aka OEE Quality."},"scheduledNonProduction":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"description":{"type":"string"},"duration":{"type":"number"},"cost":{"type":"number"},"percent":{"type":"number"},"energy":{"type":"number"},"energyCost":{"type":"number"}},"required":["code","description","duration","cost","percent","energy","energyCost"]}},"stops":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"description":{"type":"string"},"duration":{"type":"number"},"cost":{"type":"number"},"percent":{"type":"number"},"energy":{"type":"number"},"energyCost":{"type":"number"}},"required":["code","description","duration","cost","percent","energy","energyCost"]}},"oee":{"type":"number"}},"required":["scheduleMs","scheduleLossMs","schedulePerc","productionScheduleMs","productionScheduleLossMs","productionSchedulePerc","availabilityMs","availabilityLossMs","availabilityPerc","performanceMs","performanceLossMs","performancePerc","goodQualityCount","goodQualityLossCount","goodQualityPerc","scheduledNonProduction","stops","oee"]},"nominal":{"type":"object","properties":{"electricalPowerNominalKw":{"type":"number"}},"required":["electricalPowerNominalKw"]}},"required":["stationCode","stationName","stationGroupCode","stationGroupName","windows","reliabilityData","oee","nominal"]}},"range":{"type":"object","properties":{"from":{"type":"number"},"to":{"type":"number"},"duration":{"type":"number"},"fromIso":{"type":"string"},"toIso":{"type":"string"},"durationFormatted":{"type":"string"}},"required":["from","to","duration","fromIso","toIso","durationFormatted"]}},"required":["isSuccess","results","range"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## GET /station-window/sku

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}},"schemas":{"StationWindow":{"type":"object","properties":{"stationCode":{"type":"string","description":"A code that uniquely identifies this station within this account."},"windowStartAt":{"type":"string","description":"The start time of this window in ISO 8601 format."},"windowEndAt":{"type":"string","description":"The end time of this window in ISO 8601 format."},"totalMs":{"type":"number","description":"The total number milliseconds covered by this window. Shortcut for windowEndAt - windowStartAt."},"shiftMs":{"type":"number","description":"The number of milliseconds that were in shift."},"scheduledProductionMs":{"type":"number","description":"The number of milliseconds that were scheduled production."},"scheduledNonProductionMs":{"type":"number","description":"The number of milliseconds that were scheduled non-production."},"productiveMs":{"type":"number","description":"The number of milliseconds that the station was in a productive state."},"downtimeMs":{"type":"number","description":"The number of milliseconds that the station was in downtime."},"downtimeSince":{"type":"string","description":"The time this downtime started, in ISO 8601 format."},"rssiAvg":{"type":"number","description":"The received signal strength of the wireless device. -70dBm to -80dBm is good. <-90dBm is bad."},"productionGoodCount":{"type":"number","description":"The number of good quality units produced."},"productionBadCount":{"type":"number","description":"The number of bad quality units produced."},"productionIdealCount":{"type":"number","description":"The number of production units that should have been produced according to the SKU/part's cycle-time. WITH consideration for downtime."},"productionTargetCount":{"type":"number","description":"The number of production units that should have been produced according to the SKU/part's cycle-time. WITHOUT consideration for downtime."},"speed":{"type":"number","description":"The average line speed. Line speed is an arbitrary value that relates to this station's manufacturing process. i.e. Motor RPM."},"isAlive":{"type":"boolean","description":"A boolean value indicating if any signal was recieved from this station. Useful for detemining if the device has been disconnected from the network."},"electricalVoltsAvg":{"type":"number","description":"The average voltage of the electrical supply."},"electricalAmpsAvg":{"type":"number","description":"The average current draw."},"electricalHzAvg":{"type":"number","description":"The average frequency of the electrical supply."},"electricalPfAvg":{"type":"number","description":"The average Power Factor."},"electricalKwAvg":{"type":"number","description":"The average power used."},"electricalKwh":{"type":"number","description":"The total energy consumed."},"statusCode":{"type":"string","description":""},"electricalCost":{"type":"number","description":"The cost of the electricity used."},"costCurrency":{"type":"string","description":"The currency of any costs."},"electricalCo2":{"type":"number","description":"The amount of CO2 associated with the electricity used."},"workOrderReference":{"type":"string","description":"The work order reference of the current schedule."},"lostProductionCostNonProduction":{"type":"number","description":"The cost of the time lost to scheduled non-production."},"lostProductionCostDowntime":{"type":"number","description":"The cost of the time lost to downtime."},"lostProductionCostSpeed":{"type":"number","description":"The cost of the shortfall units lost due to under performance."},"lostProductionCostQuality":{"type":"number","description":"The cost of the bad quality units produced."},"performanceModeFrom":{"type":"string","description":""},"performanceModeType":{"type":"string","description":""},"productionGoodValue":{"type":"number","description":"The value of the good quality units produced."},"productionBadValue":{"type":"number","description":"The value of the bad quality units produced."},"stationName":{"type":"string","description":"The name of the station."},"scheduleIds":{"type":"array","items":{"type":"number"},"description":"The IDs of the schedules that ran."},"errorCodes":{"type":"array","items":{"type":"string"},"description":"The error codes that were flagged."},"downtimeIds":{"type":"array","items":{"type":"number"},"description":"The IDs of the downtimes that occured."},"downtimeReasonCodes":{"type":"array","items":{"type":"string"},"description":"The reason codes of the downtimes that occured."},"nonProductionReasonCodes":{"type":"array","items":{"type":"string"},"description":"The reason codes for the non-production schedules that ran."},"windowStartAtTimestamp":{"type":"number","description":"The start time of this window as a UNIX timestamp."},"windowEndAtTimestamp":{"type":"number","description":"The end time of this window as a UNIX timestamp."},"isFuture":{"type":"boolean","description":"A boolean value indicating if this is a placeholder station window for future time."},"skuName":{"type":"string","description":"The name of the SKU from the current schedule."},"skuCodes":{"type":"array","items":{"type":"string"},"description":"The code of the SKUs from the schedules that ran."},"skuGroupCodes":{"type":"array","items":{"type":"string"},"description":"The code of the SKU Groups from the schedules that ran."},"lostProductionCostTotal":{"type":"number","description":"The total cost of lost production output."},"productionTotalCount":{"type":"number","description":"The total number of units produced, both good and bad."},"productionRatePerHour":{"type":"number","description":"The average rate of production in units per hour."},"productionRatePerHourIdeal":{"type":"number","description":"The ideal rate of production in units per hour."},"productionMs":{"type":"number","description":"The number of milliseconds of actual production achieved (production count * ideal cycle time)."},"nonProductionReasonNames":{"type":"array","items":{"type":"string"}}},"required":["windowStartAt","windowEndAt","totalMs","isAlive","windowStartAtTimestamp","windowEndAtTimestamp"]}}},"paths":{"/station-window/sku":{"get":{"tags":["Station Window"],"parameters":[{"in":"query","name":"plantcode","schema":{"type":"string","minLength":1},"required":true},{"in":"query","name":"rangecode","schema":{"type":"string"},"required":true},{"in":"query","name":"stationcodes","description":"Comma-separated list of Station Codes.","schema":{"type":"string","description":"Comma-separated list of Station Codes."}}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"skuCode":{"type":"string"},"skuName":{"type":"string"},"windows":{"type":"array","items":{"$ref":"#/components/schemas/StationWindow"}},"cycleTimeAnalysis":{"type":"object","properties":{"avg":{"type":"number"},"min":{"type":"number"},"max":{"type":"number"},"quantity":{"type":"number"},"default":{"type":"number"},"stations":{"type":"array","items":{"type":"object","properties":{"stationCode":{"type":"string"},"stationName":{"type":"string"},"avg":{"type":"number"},"min":{"type":"number"},"max":{"type":"number"},"quantity":{"type":"number"}},"required":["stationCode","stationName","avg","min","max","quantity"]}}},"required":["avg","min","max","quantity","stations"]}},"required":["skuCode","windows"]}},"range":{"type":"object","properties":{"from":{"type":"number"},"to":{"type":"number"},"duration":{"type":"number"},"fromIso":{"type":"string"},"toIso":{"type":"string"},"durationFormatted":{"type":"string"}},"required":["from","to","duration","fromIso","toIso","durationFormatted"]}},"required":["isSuccess","results","range"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# User

## GET /admin/user

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/admin/user":{"get":{"tags":["User"],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"email":{"type":"string"},"userRole":{"type":"string","enum":["customer","oi","blocked","partner"]},"accounts":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["member","admin","blocked"]},"accountId":{"type":"string"},"domain":{"type":"string"}},"required":["role","accountId","domain"]}}},"required":["id","email","userRole","accounts"]}}},"required":["isSuccess","results"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## POST /admin/user

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/admin/user":{"post":{"tags":["User"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","minLength":1},"role":{"type":"string","enum":["member","admin","blocked"]}},"required":["email","role"]}}}},"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","properties":{"userId":{"type":"number"},"role":{"type":"string"},"accountId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["userId","role","accountId"]}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```

## GET /admin/user/{email}

>

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"servers":[{"url":"https://demo.busroot.com/api","description":"Busroot Demo"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-KEY"}}},"paths":{"/admin/user/{email}":{"get":{"tags":["User"],"parameters":[{"in":"path","name":"email","schema":{"type":"string","format":"email","minLength":1},"required":true}],"responses":{"200":{"description":"200 OK","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean"},"result":{"type":"object","properties":{"id":{"type":"number"},"email":{"type":"string"},"userRole":{"type":"string","enum":["customer","oi","blocked","partner"]},"accounts":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["member","admin","blocked"]},"accountId":{"type":"string"},"domain":{"type":"string"}},"required":["role","accountId","domain"]}}},"required":["id","email","userRole","accounts"]}},"required":["isSuccess","result"]}}}},"400":{"description":"Bad Request - The server could not process the request due to invalid input, missing required parameters, or malformed syntax.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"invalidInput"},"errorMessage":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"issue":{"type":"string"}},"required":["field","issue"]}}},"required":["isSuccess","errorCode"]}}}},"401":{"description":"Unauthorized - Authentication is missing or invalid. Ensure you provide a valid token or credentials to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"unauthorizedUser"}},"required":["isSuccess","errorCode"]}}}},"403":{"description":"Forbidden - You are authenticated but do not have permission to perform this action. Contact the administrator if you believe this is an error.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"forbidden"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"409":{"description":"Conflict - The request could not be completed due to a conflict with the current state of the resource, such as a duplicate record or a versioning issue.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"conflict"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}},"500":{"description":"Internal Server Error - An unexpected error occurred on the server. Please try again later or contact support if the issue persists.","content":{"application/json":{"schema":{"type":"object","properties":{"isSuccess":{"type":"boolean","default":false},"errorCode":{"type":"string","default":"internalServerError"},"errorMessage":{"type":"string"}},"required":["isSuccess","errorCode","errorMessage"]}}}}}}}}}
```


# Models

## The StationWindow object

```json
{"openapi":"3.1.0","info":{"title":"Busroot HTTP APIs","version":"1.0.0"},"components":{"schemas":{"StationWindow":{"type":"object","properties":{"stationCode":{"type":"string","description":"A code that uniquely identifies this station within this account."},"windowStartAt":{"type":"string","description":"The start time of this window in ISO 8601 format."},"windowEndAt":{"type":"string","description":"The end time of this window in ISO 8601 format."},"totalMs":{"type":"number","description":"The total number milliseconds covered by this window. Shortcut for windowEndAt - windowStartAt."},"shiftMs":{"type":"number","description":"The number of milliseconds that were in shift."},"scheduledProductionMs":{"type":"number","description":"The number of milliseconds that were scheduled production."},"scheduledNonProductionMs":{"type":"number","description":"The number of milliseconds that were scheduled non-production."},"productiveMs":{"type":"number","description":"The number of milliseconds that the station was in a productive state."},"downtimeMs":{"type":"number","description":"The number of milliseconds that the station was in downtime."},"downtimeSince":{"type":"string","description":"The time this downtime started, in ISO 8601 format."},"rssiAvg":{"type":"number","description":"The received signal strength of the wireless device. -70dBm to -80dBm is good. <-90dBm is bad."},"productionGoodCount":{"type":"number","description":"The number of good quality units produced."},"productionBadCount":{"type":"number","description":"The number of bad quality units produced."},"productionIdealCount":{"type":"number","description":"The number of production units that should have been produced according to the SKU/part's cycle-time. WITH consideration for downtime."},"productionTargetCount":{"type":"number","description":"The number of production units that should have been produced according to the SKU/part's cycle-time. WITHOUT consideration for downtime."},"speed":{"type":"number","description":"The average line speed. Line speed is an arbitrary value that relates to this station's manufacturing process. i.e. Motor RPM."},"isAlive":{"type":"boolean","description":"A boolean value indicating if any signal was recieved from this station. Useful for detemining if the device has been disconnected from the network."},"electricalVoltsAvg":{"type":"number","description":"The average voltage of the electrical supply."},"electricalAmpsAvg":{"type":"number","description":"The average current draw."},"electricalHzAvg":{"type":"number","description":"The average frequency of the electrical supply."},"electricalPfAvg":{"type":"number","description":"The average Power Factor."},"electricalKwAvg":{"type":"number","description":"The average power used."},"electricalKwh":{"type":"number","description":"The total energy consumed."},"statusCode":{"type":"string","description":""},"electricalCost":{"type":"number","description":"The cost of the electricity used."},"costCurrency":{"type":"string","description":"The currency of any costs."},"electricalCo2":{"type":"number","description":"The amount of CO2 associated with the electricity used."},"workOrderReference":{"type":"string","description":"The work order reference of the current schedule."},"lostProductionCostNonProduction":{"type":"number","description":"The cost of the time lost to scheduled non-production."},"lostProductionCostDowntime":{"type":"number","description":"The cost of the time lost to downtime."},"lostProductionCostSpeed":{"type":"number","description":"The cost of the shortfall units lost due to under performance."},"lostProductionCostQuality":{"type":"number","description":"The cost of the bad quality units produced."},"performanceModeFrom":{"type":"string","description":""},"performanceModeType":{"type":"string","description":""},"productionGoodValue":{"type":"number","description":"The value of the good quality units produced."},"productionBadValue":{"type":"number","description":"The value of the bad quality units produced."},"stationName":{"type":"string","description":"The name of the station."},"scheduleIds":{"type":"array","items":{"type":"number"},"description":"The IDs of the schedules that ran."},"errorCodes":{"type":"array","items":{"type":"string"},"description":"The error codes that were flagged."},"downtimeIds":{"type":"array","items":{"type":"number"},"description":"The IDs of the downtimes that occured."},"downtimeReasonCodes":{"type":"array","items":{"type":"string"},"description":"The reason codes of the downtimes that occured."},"nonProductionReasonCodes":{"type":"array","items":{"type":"string"},"description":"The reason codes for the non-production schedules that ran."},"windowStartAtTimestamp":{"type":"number","description":"The start time of this window as a UNIX timestamp."},"windowEndAtTimestamp":{"type":"number","description":"The end time of this window as a UNIX timestamp."},"isFuture":{"type":"boolean","description":"A boolean value indicating if this is a placeholder station window for future time."},"skuName":{"type":"string","description":"The name of the SKU from the current schedule."},"skuCodes":{"type":"array","items":{"type":"string"},"description":"The code of the SKUs from the schedules that ran."},"skuGroupCodes":{"type":"array","items":{"type":"string"},"description":"The code of the SKU Groups from the schedules that ran."},"lostProductionCostTotal":{"type":"number","description":"The total cost of lost production output."},"productionTotalCount":{"type":"number","description":"The total number of units produced, both good and bad."},"productionRatePerHour":{"type":"number","description":"The average rate of production in units per hour."},"productionRatePerHourIdeal":{"type":"number","description":"The ideal rate of production in units per hour."},"productionMs":{"type":"number","description":"The number of milliseconds of actual production achieved (production count * ideal cycle time)."},"nonProductionReasonNames":{"type":"array","items":{"type":"string"}}},"required":["windowStartAt","windowEndAt","totalMs","isAlive","windowStartAtTimestamp","windowEndAtTimestamp"]}}}}
```


# Data Warehouse Access

Busroot provides direct access to processed data via Redshift, a data warehouse system from AWS.

Data is synced from Busroot to Redshift in real-time meaning that you have complete access to live and historical data without limitation on frequency or quantity of data accessed.

Data warehouse access is included in your pricing for typical usage. If your data consumption grows to very high levels, and dedicated resources are required, we'll reach out to discuss this.

To connect your Busroot account to BI tool of choice go to your Account in the Busroot menu and scroll down to 'Data Warehouse Access'...

Once connected the reports available will be the Station Windows table, for an overview and full description of each field see [Station Windows](/getting-started/concepts-and-architecture/station-windows).

<figure><img src="/files/pEgTRYPkyanjmSNFStbs" alt=""><figcaption><p>Please note the details above are just an example</p></figcaption></figure>


# PowerBI Access

<figure><img src="/files/u3BJETiL2tvR1nOjiNAZ" alt=""><figcaption></figcaption></figure>

{% embed url="<https://learn.microsoft.com/en-us/power-query/connectors/amazon-redshift>" %}


# Grafana Access

<https://grafana.com/grafana/plugins/grafana-redshift-datasource/>


# Bulk Data Export


# CSV Download


# S3 Sync


# Node-RED Nodes

### Hosting

### Busroot Nodes

#### Event Triggers

#### Signals In


# Microsoft SSO

Instructions for IT department in TST to setup Microsoft SSO:

* Busroot Application (client) ID: xxxxxxxxxxxxxxxxxxxx *(available on request)*
* Redirect / callback URL: [https://eu-west-2-2.busroot.com](https://eu-west-2-2.busroot.com/)
* Permissions/scopes requested: user.read (Microsoft Graph delegated)

To grant the Busroot App permission inside Entra, your IT team will need to provide their tenant ID and use a URL template like:

[https://login.microsoftonline.com/{TENANT\_ID}/v2.0/adminconsent](https://login.microsoftonline.com/%7BTENANT_ID%7D/v2.0/adminconsent)?client\_id=c9e7f8a9-14e8-46e2-94c0-aa5f27676d4c\&redirect\_uri=https%3A%2F%[2Feu-west-2-2.busroot.com](http://2feu-west-2-2.busroot.com/)\&scope=user.read


# Privacy & Security

### 1. Solution overview <a href="#id-1-solution-overview" id="id-1-solution-overview"></a>

**Name of solution and vendor**

* Solution: Busroot.​
* Vendor: Private limited company registered in England and Wales (company registration and VAT numbers available on request).​

**Purpose of the solution**

* Busroot is a software platform dedicated to improving manufacturing performance and efficiency by transforming raw shop-floor data into standardised, actionable insights.​
* It measures workstation-level performance (called “Stations”) for both discrete and continuous processes, providing real-time metrics, quantified inefficiencies, root-cause insights, and support for corrective and automated actions.​

**Type of solution**

* Multi-tenant, browser-based SaaS hosted in AWS.​

**Subscription / licence model**

* Annual subscription (contract term 1 year), invoiced either monthly or annually.​

**Business processes supported**

* Real-time visibility of manufacturing performance and losses.​
* Quantification of inefficiencies in monetary terms and tracing of root causes at station, shift, plant, and SKU level.​
* Review, approval and automation of corrective actions and continuous improvement workflows.​

**Criticality of processed information**

* Busroot processes operational manufacturing signals and contextual production data; availability and integrity of this data are important for production planning, performance management, and continuous improvement.​

***

### 2. Ownership and access <a href="#id-2-ownership-and-access" id="id-2-ownership-and-access"></a>

**Business / project owner**

* To be completed by the customer (e.g., Operations, Manufacturing Excellence, or IT).​

**Technical implementation and administration**

* Vendor provides implementation support; day‑to‑day administration (config, user management, integrations) is usually handled by the customer’s operations/IT teams.​

**Who needs access and roles**

* Typical roles:
  * Admin: manages configuration, stations, integrations, access, and global settings.​
  * Member: views dashboards and reports with scoped access to plants/lines and limited configuration capabilities.​

**Is access limited and password protected?**

* Users authenticate with their work email; passwordless login links and Microsoft SSO are supported.​
* Access is role-based and limited to authorised users; environment and infrastructure access requires Multi‑Factor Authentication (MFA).​

***

### 3. IT and technical requirements <a href="#id-3-it-and-technical-requirements" id="id-3-it-and-technical-requirements"></a>

**Hardware (where applicable)**

* Data Acquisition Units (DAUs): Arduino Opta (Model AFX000002) devices connected to equipment.​
* DAUs require Wi‑Fi with low bandwidth (< 1 MB/min per device) and outbound MQTT over port 1883 only.​
* Optional peripherals: energy monitors, tablets for operator input, large TV screens for visualisation.​

**Software (client requirements)**

* Modern web browser; Busroot supports Chrome and Safari.​

**Infrastructure / networking**

* Web app: customer must allow outbound HTTPS (TCP 443) to Busroot’s domain(s).​
* Data ingestion: customer must allow outbound MQTT (TCP 1883) from DAUs to the vendor’s MQTT endpoint (IP/host details provided during onboarding).​

**Architecture and data flow (high level)**

* DAUs send machine/production signals via MQTT to the cloud.​
* Every minute, Busroot combines real-time station data with contextual information (plant, shift, station, SKU, schedules) and materialises “station windows” representing all metrics for that 1‑minute interval.​
* Aggregations of station windows drive dashboards, reports and alerts.​

**Hosting and network security**

* Busroot is hosted in AWS data centres; for this deployment, UK regions are used.​
* Network security uses AWS Security Groups and Network ACLs in place of traditional firewalls, configured on least‑privilege principles.​
* Audit and security logs are centrally collected via AWS CloudTrail and CloudWatch Logs.​

***

### 4. Identity and access control <a href="#id-4-identity-and-access-control" id="id-4-identity-and-access-control"></a>

**User account and role management**

* Users sign in via work email; magic link (passwordless) or Microsoft SSO may be used.​
* Role-based access: “Admin” and “Member” roles, with granular scoping to plants/lines where required.​

**Permissions and access enforcement**

* Access to production systems is controlled via role-based access control (RBAC), ensuring only authorised personnel can modify production configuration and data.​
* Least‑privilege is applied to system and infrastructure accounts.​

**Single Sign-On (SSO) and Multi‑Factor Authentication (MFA)**

* SSO: Microsoft SSO is supported for Busroot user authentication.​
* MFA:
  * MFA is enforced for remote access to corporate infrastructure via Tailscale.​
  * MFA is required for administrative/root-level access to infrastructure.​
  * MFA is required for access to corporate email accounts used in support and administration.​

***

### 5. Data management <a href="#id-5-data-management" id="id-5-data-management"></a>

**Types of data collected and processed**

* Real-time shop‑floor signals (e.g., machine states, cycles, counts, downtime events) per station.​
* Contextual configuration: plants, shifts, stations, SKUs, production and non‑production schedules.​
* Aggregated performance metrics (“station windows”) computed every minute per station.​
* No Personally Identifiable Information (PII) of EU citizens is required or processed.​

**Data transfer between systems**

* Contextual data (e.g., SKUs, schedules, orders) can be managed via UI or synchronised via APIs from ERP/MRP/MES and other third‑party systems.​

**Data storage (location and provider)**

* Data is stored in AWS (UK region for this deployment), using services such as Amazon RDS/PostgreSQL, EBS, and S3.​
* All data stored in AWS is encrypted at rest using AWS server-side encryption options (e.g., SSE‑S3/SSE‑KMS).​

**Data stored within customer systems**

* Customers may maintain their own copies of configuration and production data in ERP/MES/BI systems; Busroot does not dictate customer-side storage.​

**Data minimisation**

* Only signals connected during installation and configuration are collected; these correspond to relevant production and manual processes.​

**Data retention and deletion**

* Databases use WAL and snapshot backups, allowing roll‑back and recovery to previous points in time.​
* A formal secure deletion process exists, with confirmation reports describing date, time, actor, and data deleted, including checksum-based verification of completeness.​

**Encryption at rest and in transit**

* At rest: all data in AWS is encrypted at rest via AWS-native encryption mechanisms.​
* In transit: client and API communication uses HTTPS/TLS; MQTT connections are restricted to required ports and secured per AWS and network standards.​

**Secure protocols and OS hardening**

* Operating system baselines are hardened to expose only required ports, protocols and services, with antivirus, file integrity monitoring, and logging enabled.​

***

### 6. Data lifecycle and protection <a href="#id-6-data-lifecycle-and-protection" id="id-6-data-lifecycle-and-protection"></a>

**Data transfer from customer to vendor**

* Real-time equipment signals are sent from DAUs to Busroot via MQTT.​
* Contextual master data (plants, SKUs, schedules, orders) is created via UI or synchronised via secure APIs over HTTPS.​

**Storage, protection, disposal on platform**

* Data is stored in encrypted AWS services with access controls, logging, and least‑privilege IAM policies.​
* Secure deletion is supported with auditable confirmation reports.​

**Log retention**

* Security and audit logs are centrally stored in AWS CloudTrail/CloudWatch, with retention periods configured for regulatory and contractual needs.​

**Vendor access to data**

* Support engineers may access customer environments and data for onboarding, troubleshooting and optimisation, under least‑privilege, logged access.​
* Customers have full access to the data points configured during installation; certain signals may be filtered in calibration (e.g., minimum cycle‑time thresholds).​

***

### 7. Security risk and impact <a href="#id-7-security-risk-and-impact" id="id-7-security-risk-and-impact"></a>

**Impact of unauthorised disclosure**

* Unauthorised disclosure could expose sensitive operational data (production rates, downtimes, product mixes).​
* In such an event, the customer is notified promptly with incident details; monitoring tools are in place to detect anomalous data access.​

**Impact of data modification or destruction**

* Data modification or loss could impact KPI calculations, historical benchmarking, and decision‑making.​
* Databases employ WAL and snapshot backups supporting roll‑back to earlier points; restoration procedures mitigate impact.​

**Impact of service or data unavailability**

* Disruption could reduce real‑time visibility of performance but does not directly control equipment.​
* Hosting can be rapidly redeployed to alternative environments using backups should there be prolonged disruption.​

***

### 8. Updates, monitoring, and logs <a href="#id-8-updates-monitoring-and-logs" id="id-8-updates-monitoring-and-logs"></a>

**Known vulnerabilities and management**

* Security threat detection systems (signature, list, behaviour-based) are regularly updated across infrastructure components, with continuous monitoring of emerging threats.​

**Patching and updates**

* Regular patching of:
  * Operating systems (servers, workstations, laptops).​
  * Applications (browsers, productivity tools, communication tools, databases, collaboration tools, endpoint security).​
  * Servers, network devices, and web applications.​

**Routine maintenance / configuration tasks for customers**

* No specific recurring maintenance is required by customers beyond keeping local networks and devices functional and patching corporate endpoints.​

**Security monitoring and log aggregation**

* A SIEM system aggregates, correlates and analyses logs from network devices, servers, applications and cloud services for real‑time monitoring and alerting.​
* Audit logs are centrally stored, regularly reviewed, and integrated with automated monitoring for anomaly detection.​

***

### 9. Compliance and standards <a href="#id-9-compliance-and-standards" id="id-9-compliance-and-standards"></a>

**PII processing**

* Busroot does not process PII of EU citizens for its intended manufacturing performance use.​

**Global privacy laws**

* The solution is designed and operated to comply with applicable global privacy laws such as GDPR and similar frameworks.​

**Security standards (ISO, SOC, etc.)**

* The company is actively preparing for ISO 27001 verification with the support of a specialised security and compliance provider.​
* Preparation includes automated compliance monitoring, continuous monitoring, documentation management, and support for audits.​

**Ongoing compliance**

* Security policies and the ISMS are reviewed at least annually and on significant changes (infrastructure, systems, services).​

***

### 10. Integration and connectivity <a href="#id-10-integration-and-connectivity" id="id-10-integration-and-connectivity"></a>

**Supported integrations**

* Busroot exposes HTTP APIs over HTTPS for integration with ERP/MRP/MES and other systems.​

**Authentication and security for integrations**

* Integrations use scoped API keys served over HTTPS; keys are used for both authentication and authorisation.​

**Credential storage and management**

* API keys are stored in secure PostgreSQL databases and can be revoked or set to expire.​
* Keys are scoped to limit access to only the resources required by the application/integration.​

***

### 11. Secure development practices <a href="#id-11-secure-development-practices" id="id-11-secure-development-practices"></a>

**Secure SDLC**

* The company follows industry-standard secure development practices aligned with OWASP SAMM and ISO 27034, including governance, design, implementation, and verification activities.​

**Code review and security testing**

* Automated static source code analysis tools are integrated into the CI/CD pipeline to detect security defects before production.​
* Manual code reviews by senior technical staff complement automated analysis.​
* Regular vulnerability scans are performed at network, OS, application, database, and web application levels.​

**Third-party testing and assessments**

* Third-party penetration tests and security assessments are performed on the application and network, especially around major releases and significant changes.​
* Red-team style exercises may be conducted based on risk profile, regulatory requirements, and infrastructure changes.​
* Management reviews audit and penetration-test remediation plans regularly as part of security governance.​

**SBOM and third‑party components**

* A Software Bill of Materials (SBOM) is maintained, and vulnerabilities in components are automatically monitored.​
* Third‑party providers are subject to annual security reviews/audits and contractual security clauses (confidentiality, data protection, incident response, audit rights, etc.).​

***

### 12. Security operations <a href="#id-12-security-operations" id="id-12-security-operations"></a>

**Threat monitoring**

* Endpoint protection includes behavioural detection capabilities.​
* Threat detection systems (signatures, lists, behaviour) are updated regularly, with continuous monitoring of emerging threats.​

**Alerting and defect detection**

* SIEM and logging provide real‑time alerts for critical events.​
* Both automated and manual source-code analysis are used to detect security defects prior to production.​

**Incident response and SLA**

* A documented incident response plan covers identification, containment, eradication, recovery, communication, and post‑incident documentation.​
* Incident response plans are tested at least annually (e.g., tabletop exercises, simulations) with improvements fed back into the plan.​
* The company conducts annual reviews of security controls and the information supply chain, including all third‑party dependencies.​

***

### 13. Vendor personnel security <a href="#id-13-vendor-personnel-security" id="id-13-vendor-personnel-security"></a>

**Background checks**

* Pre‑employment checks include employment and education verification, conducted under applicable laws and handled confidentially.​

**Employment agreements and policies**

* Employment contracts require adherence to information governance and security policies, and must be signed before access to facilities and systems is granted.​

**Security awareness**

* Information security awareness is maintained through periodic communications, reminders, and updates rather than a heavy formal training programme.​

**Offboarding**

* Offboarding includes disabling SaaS accounts, revoking credentials and tokens, rotating shared passwords, recovering or remotely wiping company devices, and recording access removal to avoid orphaned accounts.​

***

### 14. Exit strategy and offboarding <a href="#id-14-exit-strategy-and-offboarding" id="id-14-exit-strategy-and-offboarding"></a>

**Data handling on contract termination**

* On contract end, data is deleted according to contractual retention and deletion commitments using the secure deletion process.​
* Confirmation reports documenting secure deletion are available upon request.​

**Data export and certificates**

* Customers can obtain final data exports (via UI/API) and, on request, documentation/certificates confirming secure deletion.​

**Post‑exit support**

* Limited post‑exit support may be provided for final exports and self‑service migration, subject to contract.​

***

### 15. Physical and cloud infrastructure security <a href="#id-15-physical-and-cloud-infrastructure-security" id="id-15-physical-and-cloud-infrastructure-security"></a>

**Data centre locations**

* Data is hosted in AWS data centres, currently in UK regions for this deployment.​

**Physical security measures**

* Physical security is provided by AWS data centres (access control, surveillance, environmental controls) consistent with AWS certifications; Busroot relies on these controls as part of its shared‑responsibility model.​

**Certifications**

* AWS data centres hold industry certifications such as ISO 27001 and SOC reports; the vendor is preparing for ISO 27001 for its own ISMS.​

***

### 16. AI / ML capabilities <a href="#id-16-ai--ml-capabilities" id="id-16-ai--ml-capabilities"></a>

**Use of AI / ML**

* The Busroot solution does not currently use or expose Artificial Intelligence or Machine Learning capabilities (such as predictive analytics, chatbots, or automated decisioning) for customer data.​


# Release Notes


# 2026


# Week 2 | 2026

### **Featured Update: Custom time ranges**&#x20;

* Select Custom in the range type to enable the custom range button.
* Clicking the button opens a modal window, allowing you to choose a custom range of up to 35 days.

<figure><img src="/files/HjLeOEvSVWJNEezlDt3n" alt=""><figcaption></figcaption></figure>

### **Featured Update: Bulk delete schedules**&#x20;

* Select bulk delete and check boxes next to each schedule will appear.&#x20;

<figure><img src="/files/u4psDJUeABSw73ndnhFp" alt=""><figcaption></figcaption></figure>

### **Improved Accuracy:** Pulse Chart - Asset Utilisation

* Asset Utilisation (Colour Range) has been improved, so the total percentage more accurately reflects the legend.
* Non-production time is now calculated as utilised and reflected in the % to the right of each station chart.&#x20;

### **Improved Accuracy:** OEE Analysis&#x20;

* Production units recorded outside of a production schedule will no longer be included in OEE Analysis.
* In the situation a station has 0% Scheduled Time, this will be displayed as 100% OEE in the table to align with the chart.


# Week 6 | 2026

### **Featured Update: Edit Parts Per Cycle**

* "Edit PPC on tablet" is accessible if the feature flag is enabled in the station settings.
* This allows the operator to change the quantity they will produce for the next cycle only. The PPC will revert to the standard quantity after the cycle.

### **Featured Update: Next Schedule on Tablet** &#x20;

* As standard, the operator can view the next schedule on the tablet.
* Tapping the grey box will dropdown and display the scheduling information for the upcoming schedule.&#x20;

<figure><img src="/files/0DG1rvAkcTtV71oZU9QR" alt=""><figcaption></figcaption></figure>

### **Improved Accuracy:** New look Cockpit

* The updated cockpit design, includes the addition of the "Next Schedule" display.&#x20;
* There are also quick select buttons on the left to go straight to setting up a new schedule or view the operator tablet.&#x20;

<figure><img src="/files/w2OW7O9NrWA8waMnzb1F" alt=""><figcaption></figcaption></figure>

### Improved Accuracy: New look Reasons Management&#x20;

• Reasons management now allows you to view the parent reasons with the individual reasons below using dropdown functionality.

<figure><img src="/files/UwCDDH7xqOTqoSYisPZJ" alt=""><figcaption></figcaption></figure>


# Week 8 | 2026

### **Featured Update: Note Functionality**&#x20;

* Operators can now add notes directly on the tablet. These notes will be visible to other operators using the same station.
* Soon, notes will also be accessible in Busroot for review and analysis, we’ll let you know once that’s ready.

<figure><img src="/files/Kg07GzqzSbfN8dqdUqLe" alt=""><figcaption></figcaption></figure>

* As a desktop user, you can also add notes to stations using the quick-select button in the Cockpit.&#x20;

<figure><img src="/files/ZUOM2j87bXfLGZ6EkIgl" alt=""><figcaption></figcaption></figure>

### **Featured Update:** Select timing format

* You are now able to select how durations are displayed in Busroot.&#x20;
* Available by going to the Admin section > Account > Formatting units.

<figure><img src="/files/QOcWXI4Llw87td8uRSDA" alt=""><figcaption></figcaption></figure>

### **Featured Update: Read only user** &#x20;

* We’re introducing a new user type called ‘Read Only’.
* This role allows users to view everything in Busroot, including the admin area, but they won’t be able to change or add any information or settings.
* New members will automatically receive this access level when they log into Busroot for the first time.

### **Scheduling Improvement:** &#x20;

* Similar to production schedules, operators can now start non-production schedules themselves using the tablet.
* This option can be enabled when uploading a non-production schedule.


# Week 10 | 2026

### **Featured Update: Note Functionality 2.0**

* Following on from our last update and being able to add notes. you can now view a history of notes in Busroot.&#x20;
* Busroot will always show the most recent note.
* &#x20;You can hide notes. Deleting a note will revert back to an old note.

<figure><img src="/files/oJHKN2jyr9CKdlosNh69" alt=""><figcaption></figcaption></figure>

### **Featured Update:** New user - Supervisor&#x20;

* Now available in the Admin > User page of Busroot&#x20;
* A supervisor has the ability to:&#x20;
  * Add, edit and upload schedules&#x20;
  * Edit downtime reasons&#x20;
  * Add and edit notes&#x20;

### **Featured Improvement: See reasons in the Cockpit** &#x20;

* When viewing the Cockpit and a station is stopped. The reason for the stoppage (when entered) will be visible to you.&#x20;
* You can also click on the reason and it will take you to the reason so you can understand the duration of the stoppage.&#x20;

<figure><img src="/files/ge6x7nEFgCA3JkLJeN30" alt=""><figcaption></figcaption></figure>


# Week 13 | 2026

#### Featured Improvement: Reject Production on tablet

* Now available on the tablet, operators can classify production units as either\
  'Good' or 'Bad' (reject)
* This enables Quality in your OEE calculation
* Controlled by a new station-level feature flag: "Allow Reject Production" — can be enabled per station so only relevant stations show the option

<figure><img src="/files/DVbH6Vm0YpKadKTsrhDN" alt=""><figcaption></figcaption></figure>

#### Featured Improvement: Production Correction on tablet

* Updated correction for both Manual and Timeseries production counts directly from the tablet
* The 'Undo' button has been removed and replaced with a dedicated 'Correct Production Count' screen
* Production history is now always visible when a schedule is running
* Negative corrections are clamped so quantities can never go below zero
* Controlled by a new account-level setting: "Allow Production Correction" (on by default)

<figure><img src="/files/oJywSdEqwk4lv7lOP2e9" alt=""><figcaption></figcaption></figure>


# Week 15 | 2026

#### Featured Improvement: Drag & Drop on Gantt Chart

* **Drag to move** — grab a schedule and slide it left or right to change when it starts
* **Resize** — drag the start or end edge of a schedule to adjust its duration
* **Edit restrictions** — running schedules have their start time locked; completed schedules cannot be edited
* **Colour legend** — a legend above the chart shows what each bar colour means
* **Order type badges** — each production schedule shows its type (FQ, FE, FQE, C) and start/end mode (ASE, AS, AE, M)
* **Hover for details** — in the schedule detail header, hover over start or end times to see all times. Hover over order type or start/end mode badges to see their full descriptions
* **Continuous schedules** — now extend to the right edge of the visible time range

**Note** - Exact behaviour varies by schedule type. For full details see [here](/scheduling/gantt)

<figure><img src="/files/aXCVPd8HqOPi2XyC2c0h" alt=""><figcaption></figcaption></figure>


# Week 17 | 2026

#### Featured improvement: **Target Quantity on Ad-Hoc Schedules**&#x20;

Operators can now set a target quantity when creating ad-hoc production schedules from the tablet, unlocking the added features available on planned schedules. This enables:

* **Real-time progress tracking** — see live completion percentage and\
  units remaining during ad-hoc runs (eg. Cockpit)
* **Production forecasting** — estimated completion times are now\
  available for ad-hoc schedules, just as they are for planned orders (eg. Production Progress Dashboard)

<figure><img src="/files/nGqLuNR8MLZBcnFTuSi7" alt=""><figcaption></figcaption></figure>

#### General Updates:

* **Utilisation Improvements** — Utilisation in the Hierarchy Explorer has been broken down into clearly defined columns — Total Considered Time, Productive Time, and Utilisation % — with hover tooltips explaining what each value represents and how it is calculated. The Pulse Chart also now includes a new hover tooltip.
* **Trend Viewer — Asset Utilisation** — The Asset Utilisation metric now reports in productive time (in the chosen Duration Format eg. Mins or Hours, Mins) instead of percentage. Utilisation % is now included as a standard summary metric across all Trend Viewer metrics.
* **Configurable Week Start Day per Plant** — Each plant can now have its own week start day, so weekly reports and date ranges align with your actual production week.
* **Station Filtering on Analysis Pages** — Cycle time analysis, production by SKU, and production by work order reference pages now support filtering by group and individual stations.
* **Date Range Filtering on Station Notes** — Station notes can now be filtered by date range, with CSV exports respecting the selected period.

<br>


# Week 19 | 2026

<figure><img src="/files/oCFyiRgnkajRskRfs8gw" alt=""><figcaption></figcaption></figure>

#### Featured Improvements - Gantt Chart

* **Drag and drop between stations** — schedules can now be moved between stations via drag and drop. This is controlled by an account-level feature flag.                        &#x20;
* **Station filtering** — filter the Gantt view by station and station group    &#x20;
* **Station grouping** — stations are now sorted by group with clear definition between groups.
* **Improved Ranges** — Each view Day, Week & Month has been updated to allow easier distribution of schedules when dragging. Week now shows 7 days without the need to scroll.
* **Shift overlay** — shift patterns are now displayed on the timeline, giving a clear indication of when schedules will be actively worked on. If a schedule spans outside of shift hours it will bridge over to the next working period.

<figure><img src="/files/iBtLVGl23d3vOWmEsRB5" alt=""><figcaption></figcaption></figure>

#### General Improvements&#x20;

* **Expanded metric tooltips** — hover-over information now available on all metrics in Pulse and Trend charts
* **Cockpit** — unreported downtime indicator. Each station now shows whether it has unreported downtime,  displayed above station notes                                                                                                                                            &#x20;
* **Cockpit** — Refreshed layout by station with station group accordions now collapsed by default for a  cleaner view&#x20;

#### Bug Fixes

* Gantt chart — running fixed-quantity schedule bars now extend past their ideal end time to reflect   actual progress                                    &#x20;
* Gantt chart — improved hover-over speed and smoother dragging of short duration schedules
* Gantt chart — day start hour alignment corrected
* Gantt chart — fixed double pop-up when deleting a schedule                                            &#x20;
* Gantt chart — day alignment issues resolved
* Schedule quantities now supported up to 10 million
* Cockpit — progress bar correctly displays ∞ for continuous schedules                                   &#x20;
* Trend viewer — fill rendering fixed                                                                     &#x20;
* Trend viewer — utilisation target now based on scheduled production only
* Trend viewer — on relative time ranges no longer shows a trailing incomplete bucket
* ISO week calculation now uses start time

<br>

<br>


# Week 20 | 2026

<figure><img src="/files/3b9SMeSgkKJEUMnOJTmO" alt=""><figcaption></figcaption></figure>

#### Featured Improvement - Hierarchy Explorer

* **Month range** — a new monthly time range option is now available
* **Download as CSV** — export hierarchy data as a CSV file

#### General Improvements

**Reasons**

* Include/exclude allowlisting — reasons can now be included or excluded at the plant, station group, and station level. Lower levels can re-add items excluded at a higher level, giving more specific control over which reasons are available at each station.

**Gantt Chart**

* Enhanced tooltips — tooltips now show the actual end time alongside all time variations (planned, ideal, actual)
* Improved end label logic — schedule end labels are now more accurate and contextual
* Legend layout — the legend now fits onto a single row for a cleaner view
* Remembered date/time setting — your selected date and time format is now preserved between sessions

**Cockpit**

* Station Group status priority — adjusted the order of priority for station status indicators to better reflect operational importance

#### Bug Fixes

* Trend Viewer — tooltip no longer shows utilised time greater than the window duration
* Gantt chart — fixed an issue where skipping through the timeline caused API requests to stack up
* Gantt chart — resolved a rendering fill issue
* Reasons — fixed missing allowlist on reason filtering
* Schedule upload — rounding no longer incorrectly sets PPH to zero


# Week 24 | 2026

#### New Features

<figure><img src="/files/WmpZRUh7AnqLn1ftAjQz" alt=""><figcaption></figcaption></figure>

**Schedule Capacity**

A forward-looking weekly view showing how much of each station's available shift time has been scheduled. Helps planners identify under- or over-scheduled stations before\
the week begins.

* Per-day breakdown — each cell shows Prod, Non-Prod, No Schedule, and Used Capacity %, colour-coded red/green by threshold (75–105% = healthy)
* Grouped & aggregated — stations grouped by station group with summed totals; weekly total column; today's column highlighted
* CSV export — download the full grid for offline analysis

<figure><img src="/files/xcSFeiXih0E3wJ4o96oB" alt=""><figcaption></figcaption></figure>

**Work Order Search** (Schedule List & Gantt)

A new search mode on both the Schedule List and Gantt pages lets users find schedules by work order reference instead of navigating by date filters — useful for quickly locating a specific order across a wide time range.

* Toggle between modes — a "Use Filters / Search" toggle switches between the standard date/plant/station filters and a free-text work order search, with debounced input (min. 3 characters)
* Works on both views — available on both the Schedule List table and the Gantt chart, with results limited to 250 schedules

#### Improvements

* &#x20; **Operator Tablet**
  * PPC Override — Parts-per-cycle can now be set before the schedule starts on ad-hoc schedules.
  * Station Details on Reason Screen — The station code and header now appear on the provide-a-reason screen.
* **Device Description** — Devices now support a description field, with long text wrapping correctly.

#### Bug Fixes

* &#x20; Utilisation Downtime Threshold — Fixed a bug where the downtime threshold could not be set to 0.

\ <br>


# Week 28 | 2026

This release introduces three new features: Schedule Capacity planning, Manual Downtime logging, and Reason Trends analysis. It also brings enhancements to the Trend Viewer, Pulse Chart, and Operator Tablet.

#### New Features

**Manual Downtime**

Operators can now log downtime manually from the tablet, with a mandatory reason. This is useful for stations where downtime is determined by an operator rather than an automatic signal, or where a machine is still running but under investigation. While a manual downtime is active, all production and utilisation recording is blocked to keep reporting accurate. Rollout is controlled per account via a feature flag.

<figure><img src="/files/QgTsNuImEPRE0iWAPO8Q" alt=""><figcaption></figcaption></figure>

**Schedule Capacity**&#x20;

A new page that shows whether stations are under or over-scheduled at a glance. Accessible from the main menu, it provides a weekly overview with colour-coded capacity cells and CSV export. This feature is currently in development and may be refined based on feedback.

<figure><img src="/files/50Qzzl93QMQ07PtLX0Dw" alt=""><figcaption></figcaption></figure>

**Reason Trends**

A new charting capability in the Trend Viewer for analysing Downtime and Non-Production reasons over time. Includes filtering by individual reason, with searchable tree-select for easy navigation.

<figure><img src="/files/AH3wevgxzoCAqOvwp9yX" alt=""><figcaption></figcaption></figure>

#### Improvements

**Work Order Search** — The Gantt Chart and Schedule List now support searching by work order reference. Toggle between filter mode and search mode to quickly find schedules by their work order ref.

**Trend Viewer**

* Grouped metrics — Metrics are now organised in a searchable tree-select dropdown with icons on group headings, making it easier to find the right metric
* OEE enhancements — Updated OEE metric display and axis labelling
* Station selection limit — Selection is now limited to 5 stations, with a clear message explaining the limit

**Pulse Chart**

* Grouped metrics — The metrics menu now uses a tree-select dropdown, consistent with the Trend Viewer
* Sidebar guide — Removed an outdated reference to retrospective scheduling

**Operator Tablet**

* Station list legend — Added colour indicators to the station list for quick visual reference
* Unreported downtime icon — Re-instated the unreported downtime indicator on the tablet
* Station details on reason screen — Station information is now shown when providing a downtime reason
* PPC Override for Ad-Hoc schedules — Ad-hoc schedules now support parts-per-cycle override
* Header styling — Standardised font sizes, spacing, and border radius across tablet headers

**Trend Viewer & Pulse Chart**

* Multi-select — Replaced the close button with a clearer "clear selection" action in metric dropdowns

**Production by Schedule**

* Back button — Added a back button to return to the Schedule List with filters preserved

**Downtime Analysis**

* Percentage bars — The downtime analysis treetable now displays percentage bars for easier visual comparison

**Station & SKU Naming**

* Station Code and Name — Now displayed consistently across all areas of the platform
* SKU Code and Name — Now displayed consistently across all areas of the platform

**Schedule Upload**

* Error messages — Clearer, more descriptive error messages when uploading schedules fails

**Bug Fixes**

* Pulse Chart tooltip — Fixed the tooltip extending off the edge of the screen
* Reason deletion — The system now falls back to the reason code when a reason is deleted, preventing display errors


# Week 30 | 2026

This release introduces a new Production Entries page, improvements to the Scheduling experience, and refinements across the Trend Viewer and Operator Tablet. Several data accuracy fixes are also included.

#### New Features

**Production Entries** — New page providing granular, entry-level detail for production data — including timestamps and type information for every recorded entry. Filter by station, time range, SKU, or work order reference, and export the results to CSV.\
Replaces the previous per-schedule production view with a more flexible way to find and review production data.

<figure><img src="/files/Jabfn82fvSvPJOuc7sVo" alt=""><figcaption></figcaption></figure>

#### Improvements

**Scheduling**

* Schedule Entry page — Redesigned scheduling landing page with tabs for Gantt, List, and Capacity views, plus quick-access buttons to create new schedules.

**Schedule Capacity**

* Gantt chart links — Cells in the Schedule Capacity table now link directly to the corresponding Gantt chart view.
* Menu location — Schedule Capacity has moved under the Scheduling section in the main navigation.

**Trend Viewer**

* Totals row and column — The trend table now includes a totals row and column for at-a-glance analysis.
* Stacked station headers — When viewing multiple stations, column headers are stacked for clarity; the CSV export includes full station and metric headers.
* Full reason breadcrumb — Reason names now show the full parent-to-child path for easier identification.

**OEE Analysis**

* Reasons chart — The reasons breakdown in OEE Analysis now matches the style and behaviour of the Downtime Analysis chart, including percentage bars.

**Gantt Chart**

* Auto-apply filters — Filter changes on the Gantt Chart now apply immediately without needing to press an Update button.

**Reason Management**

* Orphaned child reasons — Reason selectors now surface child reasons whose parent was excluded, preventing them from being silently hidden. Adding a parent reason on admin forms automatically includes its children.
* Include/Exclude lists — The "Move All" button has been repositioned to the top for easier access, and description text clarifies the purpose of each list.

**Operator Tablet**

* Station list — Visual updates to the station list screen layout and information density.

**Other**

* SKU code on hover — Hovering over an SKU in the Overview page now displays its code.
* Relative date ranges — Relative time ranges now correctly align to your plant's configured day start hour and week start day.
* Performance — Improved page load times for data-heavy views through better request throttling and caching.

**Bug Fixes**

* Pulse Chart — disconnected stations — Disconnected stations now correctly display as purple (disconnected) rather than red (downtime).
* OEE Analysis chart clipping — Fixed an issue where data could be cut off at the edge of the OEE Analysis chart.
* Page loading — Pages now wait for account data to fully load before displaying, preventing momentary blank content.


# Week 32 | 2026

**Granular control, downtime accountability, and faster analysis**

This release introduces per-station feature configuration, mandatory downtime notes, and significant performance improvements across analysis pages.

### New Features

<figure><img src="/files/3CGlF6W8ZxDbMPQEo22l" alt=""><figcaption></figcaption></figure>

**Quality Analysis**

Bad production can now carry a quality reason, giving visibility into why units were rejected. A new quality reason type sits alongside downtime and non-production in the existing reasons admin.

* Quality Analysis page — reason-breadcrumb drill-down with Bad Count and Cost columns, SKU filter, and CSV export. Mirrors the Downtime Analysis layout.
* Tablet — optional quality-reason picker when an operator enters bad quantity.
* Signals — bad\_production\_reason field applies to the bad count in the same message.
* Production Entries — new Bad Quality column-group toggle showing the reason per row, plus a Bad Reason column in the CSV export.

**Granular feature configuration**

Features like manual production, manual downtime, production correction, and schedule flexibility can now be configured independently at the **plant, station group, or station level** — not just account-wide. A station inherits its plant's setting unless overridden, giving you precise control over which capabilities are available where.

**What this means in practice:** you could enable manual downtime for one production line while keeping it off for the rest of the plant, without affecting any other feature.

**Mandatory downtime notes**

Downtime reasons can now be flagged to **require a note**. When an operator assigns that reason — on the tablet, on the web, or via the SDK — they must provide a free-text explanation before the assignment is accepted. Notes appear on the Downtime List, in the detail view, and in CSV exports.

**Task availability windows**

Cron-based Tasks gain an **"Available Before Deadline"** setting. Instead of appearing for the entire period between fires, a Task now only shows on the tablet once the lead time begins — reducing clutter and directing operator attention to Tasks that are actually due.

**Station Notes history on the tablet**

Tapping the note in the station header now opens a **history of the last 5 notes**, giving operators quick context on what's happened at the station without leaving the production screen. The "Add Note" button works as before.

**Long-range date searches**

**3-month, 6-month, and 12-month** relative date ranges are now available across OEE, Trend, Hierarchy Explorer, Production views, Cycle Time Analysis, and Downtime Analysis. Combined with the performance improvements in this release, you can now analyse up to a full year of data directly within Busroot — making it far easier to spot seasonal patterns, long-term trends, and year-on-year comparisons.

### Improvements

**Energy metering support**

Plant- and group-level energy meters can now be modelled as dedicated meter stations, with energy computed automatically and kept separate from production views.

**Cycle Time Analysis loads up to 24× faster**

Queries that identify which stations ran a given SKU over a year now resolve in under a second, down from around 12 seconds. The detail page also carries your filters forward when drilling in, so you no longer lose your selection.

**Faster Weekly Report**

The Weekly Report now loads each tab on demand and fetches station and SKU data in single requests, noticeably reducing page load times on accounts with many stations.

**Persistent data cache**

Aggregated station data is now cached durably across deploys and server restarts. Previously, wide-range queries (e.g. a full quarter) could be slow after a deploy while the cache rebuilt. That penalty is now eliminated — cached results survive and are shared across all servers.

**Long reason descriptions no longer break tables**

Downtime and OEE Analysis tables now truncate over-long reason descriptions so the numeric columns stay visible and aligned, regardless of reason name length.

**Tasks wording and admin**

"Outstanding" tasks are now labelled **"Pending"** on the tablet and Cockpit. The manifest editor now shows all account settings with their defaults, making it easier to discover and toggle options.

### Bug fixes

**Cycle Time spec and parts-per-cycle**

The Cycle Time spec value now correctly accounts for parts-per-cycle, and production rows with no PPC configured are no longer incorrectly excluded from analysis.

**Trend and Pulse chart alignment**

Daily and weekly time windows on Trend and Pulse views now align correctly with your plant's production day and week boundaries, rather than snapping to UTC midnight. The week-aggregation tooltip also no longer cuts off data.

**Filters applying before you press Apply**

The metric and reason dropdowns on the Trend Viewer, and the status filter on Task History, now correctly wait for the Apply button instead of triggering immediately when changed.

**Schedule upload preview**

Fixed duplicate columns and incorrect row striping in the spreadsheet upload preview when importing schedules.


# Onboarding

Here’s what you can expect at the start of our onboarding journey:&#x20;

#### 1. Hardware Delivery:

To ensure a smooth delivery, please confirm if this is the best address for us to send your hardware?

Additionally, to make setup effortless, we’ll pre-program your devices. If you could share your WiFi details (SSID and password), that would be fantastic.

#### 2. Meet Your Customer Success Team:

We’d love to introduce you to your dedicated customer success contact and answer any questions you might have. We know your time is valuable, so please feel free to book a quick introductory call at your convenience using this link: \[Schedule a call here]

We’re looking forward to working with you and making sure everything goes smoothly. If you have any questions in the meantime, just let us know!

#### 3. Busroot Platform Login: <a href="#id-4.1.-busroot-platform-login" id="id-4.1.-busroot-platform-login"></a>

To login into your Busroot account, use this URL: <https://eu-west-2-2.busroot.com/>

Enter your work email address. No password needed. You will receive an email with a link. Clicking on the link in the email, will open access to your Busroot account. Please let the Busroot support team know when you have done this and they will change your status to 'Admin'.

All members of your team will need to login using this method.

## &#x20;<a href="#id-4.2.-customer-self-configure-arduino-opta-and-devices-optional" id="id-4.2.-customer-self-configure-arduino-opta-and-devices-optional"></a>

## USEFUL LINKS  <a href="#id-4.2.-customer-self-configure-arduino-opta-and-devices-optional" id="id-4.2.-customer-self-configure-arduino-opta-and-devices-optional"></a>

[Quick Start ](https://app.gitbook.com/o/DgUFFwUMxkB8m5u037NR/s/i2TlO4PocWIzMF8TVNsQ/~/edit/~/changes/243/platform-onboarding/quick-start)

[Onboarding FAQs](https://app.gitbook.com/o/DgUFFwUMxkB8m5u037NR/s/i2TlO4PocWIzMF8TVNsQ/~/edit/~/changes/243/platform-onboarding/faqs/onboarding-faqs)


# Quick Start

If you have access to your Busroot account please follow these steps to begin the setup of your Busroot account.&#x20;

Please contact <support@output.industries> to have a new account set up for you.

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/sRGElIvtNyRqUyCuuhq5" %}
[First Step Account Setup](/platform-onboarding/quick-start/first-step-account-setup)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/6WYu1qusZueu2ixk79hP" %}
[Asset Utilisation + Downtime Detection](/platform-onboarding/quick-start/asset-utilisation-+-downtime-detection)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/QextOMpFcrTtYeTYQEej" %}
[Production Tracking + Downtime Detection](/platform-onboarding/quick-start/production-tracking-+-downtime-detection)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/qNeHpBjplzJog5obYI3t" %}
[Energy Monitoring + Downtime Detection](/platform-onboarding/quick-start/energy-monitoring-+-downtime-detection)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/JsrgPw9vJadrzIh1d2pP" %}
[Production progress chart + Downtime detection](/platform-onboarding/quick-start/production-progress-chart-+-downtime-detection)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/1RovdLQzCbJZdSgqBTZE" %}
[Operator Tablet](/platform-onboarding/quick-start/operator-tablet)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/UuIbh2SfWgknlAcECJ6U" %}
[Scheduling](/platform-onboarding/quick-start/scheduling)
{% endcontent-ref %}


# First Step Account Setup

First Step Account Setup

Under ADMIN in your Busroot Menu please follow these steps to setup your account, these steps are required for all types of monitoring and downtime detection.

PLANT&#x20;

1. Name your plant&#x20;
2. Set your timezone (Europe/London for GMT) <br>

SHIFT PATTERNS

1. Setup one or multiple shift patterns depending on when your stations are operating. Shift patterns can be created to match the way your shop floor operates on a daily basis. They can be set at Station group or Station level to allow for individual operating hours.

To create a shift pattern select Shift Patterns in the main menu and click ‘Add New Shift Pattern’

1. Enter the pattern title - this will be used to set the pattern for a Station or Station Group
2. Simply left click on the day and start hour where you want to add a shift.
3. Slide the white adjusters at each end to precisely change the start or end in 5 minute increments
4. Create as many sections throughout the day as needed, to account for shift breaks or change overs.
5. To add a shift that crosses from one day to another, extend the section up to 00:00 on the first day. Then simply start from 00:00 on the next day as required. Busroot will count this as a continuous shift.
6. Right click on a section to remove it from the chart.
7. Click Save to add the shift pattern.
8. Once saved, from the list view, Shift Patterns can be either Edited or Deleted as required

Once added, patterns will be available<br>

STATION&#x20;

1. Name your station&#x20;
2. Assign each station to a group (you can setup groups in Station Groups)&#x20;
3. Select the shift pattern for each station&#x20;
4. (optional) set an idle time value (£ per min)

REASONS

1. You will see a set of generic downtime and non-production reasons. You can edit/delete/add to this list to customise for your operations. <br>

NOTIFICATION PREFERENCES

1. Select emails you would like to receive if stoppages occur and/or daily downtime summary emails&#x20;

For more information click on a link below:&#x20;

[Stations](https://docs.output.industries/configuration/stations)

[Plants](https://docs.output.industries/configuration/plants)

[Issue Reasons](https://docs.output.industries/configuration/issue-reasons)

[Notification Preferences ](https://docs.output.industries/archive/workflows/daily-email-summaries)

[Downtime Analysis](https://docs.output.industries/features/downtime-analysis)

[Lost Production Cost Analysis](https://docs.output.industries/features/lost-production-cost-analysis)

<br>


# Asset Utilisation + Downtime Detection

Under ADMIN in your Busroot Menu please follow these steps to setup your account to monitor asset utilisation and downtime detection:&#x20;

STATION

1. Set Productive Status Mode to Explicit Productive signal
2. Set Downtime Detection to Utilisation Monitoring&#x20;
3. Assign a time (in minutes) you want downtime to be counted after each stoppage <br>

SCHEDULING

1. In order to monitor downtime a schedule needs to be running for each station. Following the steps in the Scheduling section, add a ‘Continuous’ type schedule. To understand the best way to schedule for your operations please go the Scheduling


# Production Tracking + Downtime Detection

Under ADMIN in your Busroot Menu please follow these steps to setup your account to monitor production tracking in your account: <br>

Assuming you have completed all setup steps for asset utilisation and downtime detection <br>

STATION&#x20;

1. Set the Performance Mode to how you want to track production&#x20;
2. Set a Performance Target for the station. This will only be used if there is not a performance target set at SKU level.&#x20;
3. Set a minimum cycle time (optional)&#x20;
4. If you are monitoring line speed; please contact the Busroot team to assist in the calibration.
5. Under productive Status mode select line speed&#x20;
6. Set a Line speed stopped threshold (in minutes)&#x20;
7. Set the Downtime Detection mode to Production Cycle Monitoring<br>

SKU

1. Add your SKU’s. Either individually or upload a file directly to Busroot&#x20;
2. Key information to include is:&#x20;
3. SKU Code&#x20;
4. SKU name&#x20;
5. SKU Performance target&#x20;
6. Batch size (optional)&#x20;
7. Downtime duration threshold multiplier <br>

SCHEDULING

1. In order to monitor downtime a schedule needs to be running for each station. Following the steps in the Scheduling section, add a ‘Continuous’ type schedule. To understand the best way to schedule for your operations please go the Scheduling.<br>

For more information click on a link below:&#x20;

[Production Tracking ](https://docs.output.industries/features/production-tracking)

[SKUs](https://docs.output.industries/configuration/skus)

[Lost Production Cost Analysis ](https://docs.output.industries/features/lost-production-cost-analysis)

[Cycle Time Analysis](https://docs.output.industries/features/cycle-time-analysis)

[OEE Analysis](https://docs.output.industries/features/oee-analysis)

<br>


# Energy Monitoring + Downtime Detection

Under ADMIN in your Busroot Menu please follow these steps to setup your account to monitor energy monitoring in your account:&#x20;

ACCOUNT&#x20;

1. Set a price per kWh
2. Set a CO2 amount if available&#x20;

STATION

1. If you would like to view energy usage to monitor utilisation and downtime set the productive status mode as Electrical usage.&#x20;
2. Set your station stopped threshold (kW)
3. Set Downtime Detection Mode to utilisation monitoring.&#x20;
4. Under Visibility select only energy and this will be reflected in the Asset Utilisation and Pulse Chart pages in your account. <br>

SCHEDULING

1. In order to monitor downtime a schedule needs to be running for each station. Following the steps in the Scheduling section, add a ‘Continuous’ type schedule. To understand the best way to schedule your operations please go Scheduling.<br>

For more information click on a link below:&#x20;

[Energy Monitoring](https://docs.output.industries/features/energy-monitoring)

<br>


# Production progress chart + Downtime detection

Under ADMIN in your Busroot Menu please follow these steps to setup your Production Progress Chart on a large format screen:&#x20;

You need to have completed the Production Tracking setup and be using schedules to benefit from this feature in Busroot:&#x20;

TABLET ACCESS CODES

1. On the Tablet Access codes page click the button to ‘Add New’ device.&#x20;
2. Use this link on your TV <https://eu-west-2-2.busroot.com/auth/login/accesscode>, and use the code created in Busroot to access your account.&#x20;
3. On the TV then select The Production Progress page&#x20;

ACCOUNT&#x20;

1. Select how you would like to view the stations under the Production Progress dashboard section&#x20;
2. Select if you want to see the live speed of the line. This is optional.&#x20;
3. Also optional is to hide stations that are not running or planned to run.&#x20;

For more information click on a link below:&#x20;

[Shop Floor LFDs](https://docs.output.industries/features/shop-floor-lfds)

[Production Progress Forecasting](https://docs.output.industries/archive/workflows/production-progress-forecasting)

<br>


# Operator Tablet

You will need to have access to your Busroot account and the tablet you are setting up.&#x20;

THE TABLET&#x20;

1. When you turn on the device you may be asked for a two separate PIN.
2. If you are asked for a Kiosk PIN it is 0845.&#x20;
3. If you are asked for the WIFi Pin it is 3745.<br>

TABLET ACCESS CODES

1. On the Tablet Access codes page click the button to ‘Add New’ device.&#x20;
2. You only need to create one access code which can be used for all of your tablets.&#x20;

THE TABLET&#x20;

1. Use this link on your tablet  <https://eu-west-2-2.busroot.com/auth/login/tablet>, and use the code created in Busroot to access your account.&#x20;

STATION

1. If your tablet operators will be counting production manually with the tablet. Please check the box ‘Allow Manual Production’.&#x20;

For more information click on a link below:&#x20;

[Operator Interface](https://docs.output.industries/features/operator-interface)

<br>


# Scheduling

Under SCHEDULING in your Busroot Menu please follow these steps to start scheduling:&#x20;

#### ADD PROD. SCHEDULE&#x20;

1. To manually enter a schedule click ‘Add New’.&#x20;
2. You will need to select the following to setup a schedule&#x20;
3. Station&#x20;
4. SKU type
5. Individual SKU&#x20;
6. Work order ref&#x20;
7. Planned start time&#x20;
8. Actual start (at a set time or by the operator using a tablet)&#x20;
9. Order type&#x20;
10. Depending on selection, also quantity and/or time
11. If you want to set non-production schedules you can select the tab to enter schedules

#### UPLOADING A CSV WITH MULTIPLE SCHEDULES

4. You can also upload a CSV or XLSX of a group of schedules. If you send your sheet to the Busroot team they will configure Busroot to extract the required information. With this system there are two points to be aware of:
5. If the station is not in Busroot, no schedules for that station will be uploaded.&#x20;
6. If the SKU does not exist in Busroot one will automatically be setup. <br>

For more information click on a link below:&#x20;

[Scheduling ](https://docs.output.industries/features/scheduling)

[OEE Analysis](https://docs.output.industries/features/oee-analysis)

[Adhoc Production Tracking](https://docs.output.industries/archive/workflows/adhoc-production-tracking)

<br>


# FAQs

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/HJyzWKRJFkfyKilORxh9" %}
[Calibration FAQs](/platform-onboarding/faqs/calibration-faqs)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/V8vEKPkcOYXf0BjP30RA" %}
[Energy Monitoring FAQs](/platform-onboarding/faqs/energy-monitoring-faqs)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/LAQbQja4Gkbzypv7GBhj" %}
[General Issues FAQs](/platform-onboarding/faqs/general-issues-faqs)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/27lbklROGws6ckVGfAfH" %}
[Installation FAQs](/platform-onboarding/faqs/installation-faqs)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/pvDVJU4KGzgXcRG5sLxd" %}
[IT FAQs](/platform-onboarding/faqs/it-faqs)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/vdUNMgnh4tPNguNoG90x" %}
[Large Format Displays FAQs](/platform-onboarding/faqs/large-format-displays-faqs)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/rSPoVIA9cF3Gh9GR5GLj" %}
[Onboarding FAQs](/platform-onboarding/faqs/onboarding-faqs)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/WsPf7TnWo2G6ElS44HD0" %}
[Scheduling FAQs](/platform-onboarding/faqs/scheduling-faqs)
{% endcontent-ref %}

{% content-ref url="/spaces/i2TlO4PocWIzMF8TVNsQ/pages/DljvgTxzHCwdHGxORd46" %}
[Tablet FAQs](/platform-onboarding/faqs/tablet-faqs)
{% endcontent-ref %}


# Calibration FAQs

### <mark style="color:$primary;">What is the Work Order form?</mark>

As part of the installation for Busroot we have a work order (attached) form that needs to be completed during the installation.\
This form provides us with the information we need to connect the signals to the right settings in your Busroot account.\
The top row in the sheet is an example of the information we need and I've highlighted the next two rows for the two machines you will install.

### <mark style="color:$primary;">We have installed a new sensor on a station. Can you please let me know if it’s working?</mark>

For this you will need to update the work order form and share this with the Busroot team to make the updates and let you know if it is working as you want.

### <mark style="color:$primary;">What does purple mean in the heatmap?</mark>

Purple means the machine is not connected to the internet. This can happen in short blips, as we all experience with WiFi occasionally.\
The machine could be switched off so the Busroot hardware is not receiving power to send any signals.

### <mark style="color:$primary;">What does hold on time mean?</mark>

Hold on time was introduced for customers with manual welders. To provide an accurate and fair view of the time the manual welders are productive. We use a signal that is connected to the trigger of the welder. The hold on time is the time we assume the manual welder is welding once the trigger has been pressed. Each time the trigger is pressed the 5 minutes is reset to zero. The hold on time can be set to whatever is required and can be found in the Station management, under the Admin menu.

### <mark style="color:$primary;">When is Slow Production triggered and how can I stop it?</mark>

Slow is specific to line speed. So, if you are tracking your production using the line speed productive signal, the slow is a feature. Slow Production is flagged when the speed drops below 80% of your target line speed. This is currently a locked feature, but is something that we will make optional in the future.

### <mark style="color:$primary;">What does cycle time override mean?</mark>

The override allows you to enter an alternative cycle time to what is already associated with the SKU (in your SKU management). This override is only valid for the particular schedule you are setting up.

### <mark style="color:$primary;">Why is one of the stations showing “Out Of Shift”, is this related to the shift patterns?</mark>

You can view shifts by (morning, evening, night). If you go to Shifts in the Admin menu. You will see a shift pattern named 'ALL SHIFTS'. You can click edit to see how it is set up and adjust as you require.

### <mark style="color:$primary;">Busroot is not recording the amount produced correctly I have checked all settings in the system, it looks like it is recording things but just slow and not accurate. Why?</mark>

This could be a WiFi or WiFi strength issue. If the signal strength has been weaker, it means Busroot will not receive regular data updates (every 5 seconds).\
This is not related to any access settings because that would've blocked the signal completely.

### <mark style="color:$primary;">On the SKU setting it was showing 6 in the cycle time. What does this mean?</mark>

If more than one signal is received in this 6 minute set period, Busroot will only count one unit. This allows filtering of signals during the setup process for example.

### <mark style="color:$primary;">Downtime notifications keep showing when the machine is running?</mark>

Check your thresholds set in station management, in the Admin section of the Busroot menu.

### <mark style="color:$primary;">Can I set the Utilisation downtime threshold to 4.5 minutes, as an example?</mark>

You cannot, Busroot works in whole minute increments. So you would need to choose either 4 or 5 minutes.


# Energy Monitoring FAQs

### <mark style="color:$primary;">From a technical perspective the kWh monitoring in Busroot. Is it the device's actual power demand in kW or is it calculated based on Amps and Voltage?</mark>

The device is monitoring Active Energy Consumed in kWh - so it's the actual power demand.


# General Issues FAQs

### <mark style="color:$primary;">Busroot appears to be down? All tablets are connected to the internet but we’re unable to enter any builds or select work orders and we’re unable to access Busroot on our laptops either.</mark> <mark style="color:$primary;">Is there an outage at your end you’re aware of or is it an issue at our end?</mark>

It sounds like this could be an outage which is extremely rare in Busroot’s history. Can you please contact the support team immediately to report the issue which will launch an immediate investigation into the cause. When doing this please share the time the issue began and any eroor messages you've received.

### <mark style="color:$primary;">Busroot is not sending a link when trying to login?</mark>

Is there anything else you can tell us to help diagnose the problem? We've listed some areas for you to check so the Busroot Support team can rule out common causes:

* Have you noticed this issue only from this morning?
* Is this happening for all users?
* Have there been any major updates to your IT system or email provider?
* The emails aren't diverting straight to a spam folder?
* Have you tried clicking on a previously sent Busroot access link?

### <mark style="color:$primary;">How do I let you know about an issue or problem with Busroot</mark>

Please email your contact at Busroot and include <support@output.industries>. With as much detail as possible and include any images, videos or documents you have been trying to upload. This will help us understand the problem you are experiencing and how best to test the issue to resolve any issue.


# Installation FAQs

### <mark style="color:$primary;">Do you have a minute to go through the work order together and complete this?</mark>

The work order from is the easiest way to translate the installation information to the Busroot team to connect the signals to your account:

The key information required:

* Which machine(s) or process(es) you want to monitor.
* Signals you want to track (utilisation, production count, line speed, etc.).
* Power supply details (is 24V DC available?).
* Tips: If you are unsure Photograph cabinets and controls, check for space and power in your cabinet, and collect or photograph relevant schematics.

IMPORTANT:

* Check and confirm your WiFi Frequency is 2.4ghz (if it's 5ghz please contact <support@output.industries>)
* Check WiFi signal strength next to each machine:
* Android: WiFi Analyser
* iOS: WiFiman
* Confirm with your IT team if whitelisting or firewall adjustments are required (Busroot can supply MAC addresses if needed).

### <mark style="color:$primary;">Can you provide a guide as to what the different colour light patterns mean on the Arduino Opta during the installation and the next steps to troubleshoot, reset or test WiFi connection etc</mark>.

You first need to observe the light pattern for at least 60 seconds as this will inform us what the issue is. It is always best to make a video of this to send to the Busroot team Below is a guide the

* Flashing Orange = Loading / Waiting for Configuration
* Red (5 Quick) = WiFi Issue
* Red (2 Slow) = MQTT/Internet Issue

### <mark style="color:$primary;">I have put power on the correct pins and we now have a flashing red led, why?</mark>

The light is flashing red because the device is not configured to your WiFi.\
To setup the device to your WiFi please [<mark style="color:blue;">follow these instructions.</mark>](https://app.gitbook.com/o/DgUFFwUMxkB8m5u037NR/s/i2TlO4PocWIzMF8TVNsQ/~/edit/~/changes/243/technical-onboarding/recommended-hardware/arduino-opta/cellular-connectivity)\
If you will also connect an energy monitor here are the instructions to [<mark style="color:blue;">3 phase <100A</mark>](https://app.gitbook.com/o/DgUFFwUMxkB8m5u037NR/s/i2TlO4PocWIzMF8TVNsQ/~/edit/~/changes/243/technical-onboarding/recommended-hardware/energy-monitors/3-phase-less-than-100a) and here is a link to [<mark style="color:blue;">3 phase <400A</mark>](https://app.gitbook.com/o/DgUFFwUMxkB8m5u037NR/s/i2TlO4PocWIzMF8TVNsQ/~/edit/~/changes/243/technical-onboarding/recommended-hardware/energy-monitors/3-phase-less-than-4000a) depending on which you will use

### <mark style="color:$primary;">My IT team have asked me how often signals are sent from the device to the cloud?</mark>

1 data packet every 5 seconds. Data packet is no more than 512 bytes

### <mark style="color:$primary;">We have to change the WiFi on our Arduino Opta's. How do we do this?</mark>

Please share an updated work order form. If you can send a short video of the Arduino device (for at least 60 seconds as the light pattern will help us diagnose the issue). There should be lights flashing on the device. So the video will help us understand if the setup is correct. We can then investigate to see if we are receiving a signal and if we are, we will connect it to your Busroot account.

\
**Flashing the Device**\
We will need you to flash the Arduino device as we have discovered an issue occurred when pre-programming the device before they were shipped to you. We apologise, however we do have steps in place to perform this yourself.&#x20;

\
[<mark style="color:blue;">If you click on this link and follow the steps for Flashing the device</mark>](https://app.gitbook.com/o/DgUFFwUMxkB8m5u037NR/s/i2TlO4PocWIzMF8TVNsQ/~/edit/~/changes/243/technical-onboarding/recommended-hardware/arduino-opta/configuration)

\
The best way to follow these steps is by using an Android phone or tablet with a USB-C to USB-C cable.\
You will need to have the WiFi SSID and password to hand. Along with the (full) Device ID that is on the front of the Arduino.\
Finally the Access code, which can be generated by you. This can be created in the Admin > Devices page in Busroot. Please use the Access token field NOT the ID.\
If successful the light will start flashing green.&#x20;

### <mark style="color:$primary;">I don't think the Blues device is working correctly, what should I do?</mark>

To restart the Blues device please follow these instructions:

* Completely power cycle it - turning it off, disconnecting it entirely from its power source to drain all electricity, and then turning it back on
* Confirm it's getting power
* Confirm there are flashing lights on the blues device.


# IT FAQs

### <mark style="color:$primary;">Where can I find MQTT data?</mark>&#x20;

Busroot MQTT data [<mark style="color:blue;">see MQTT information page.</mark>](https://app.gitbook.com/o/DgUFFwUMxkB8m5u037NR/s/i2TlO4PocWIzMF8TVNsQ/~/edit/~/changes/243/technical-onboarding/integration/mqtt)\
The details for the MQTT server that will receive the data (tags) from Ignition can be available when requested directly with the Busroot support team.\
You will need to configure this in the 'MQTT Transmission' module of Ignition. A video guide can be found in this link.\
For the transmitter, please use the Tag Provider and Tag Path you think is best. We can always adjust that later if we aren't getting the data we think we should.

### <mark style="color:$primary;">What information do I need to provide for an ERP Integration request?</mark>&#x20;

To begin connecting your ERP system with Busroot, we’ll need some initial details to review the integration from a technical perspective. This will allow us to review the documentation first. API documentation for your ERP system. Field mapping details - which fields in your system correspond to the data we need in Busroot. The data we need is:

* Station code/name
* Work order reference
* SKU code
* Start time
* Quantity
* End time (optional) Once reviewed, we’ll also need access credentials to connect and test the data exchange. This information will help our technical team assess the integration requirements and confirm compatibility before proceeding.

### <mark style="color:$primary;">I'm having Integration issues or questions</mark>

These are reviewed on a case-by-case basis. Please contact the Busroot Support team

### <mark style="color:$primary;">IT have asked me how often signals are sent from the device to the cloud?</mark>

1 data packet every 5 seconds. Data packet is no more than 512 bytes

### <mark style="color:$primary;">I would like to have an API mainly for displaying production progress realtime</mark>

You can view Busroot API’s in this link. We would ask that you contact the Busroot support team to ensure you have the correct key.&#x20;

### <mark style="color:$primary;">How can we connect signals direct from the PLC?</mark>

There is an option to avoid being limited to the inputs. It's possible to send codes and statuses to Busroot over MQTT.\
Can you confirm you have a way to send data over MQTT? This would typically be done using something like Kepware or Node-RED (i.e. with the OPC-UA plugin).\
This is something you would need to be capable of setting up yourselves. \
If this is possible from your side we can prepare the credentials and instructions for the tool you intend to use.


# Large Format Displays FAQs

### <mark style="color:$primary;">How do I setup and scale Busroot screen on remote displays, like a TV?</mark>

TABLET ACCESS CODES\
In Admin > Tablet Access codes page click the button to ‘Add New’ device.

THE TV\
Use this link on your TV <https://eu-west-2-2.busroot.com/auth/login/accesscode>, and use the code created in Busroot to access your account.\
This way (rather than using your login) means it will not ever logout of Busroot.

### <mark style="color:$primary;">Here is the link to the Fire Stick:</mark>

[<mark style="color:blue;">See instructions to set up a Fire Stick for large screen displays.</mark>](https://app.gitbook.com/o/DgUFFwUMxkB8m5u037NR/s/i2TlO4PocWIzMF8TVNsQ/~/edit/~/changes/243/technical-onboarding/recommended-hardware/fire-tv-stick)

### <mark style="color:$primary;">The TV screens we are using require us to keep entering login details to view Busroot.</mark> <mark style="color:$primary;">The screens are connected to machines that are plugged straight into the TVs and are only set up to display the Busroot page in the browser. All other URLs are blocked.</mark>&#x20;

The way to access Busroot on a TV screen is by using the Busroot URL and then entering the access code. <https://eu-west-2-2.busroot.com/auth/login/accesscode>\
Access code:  \[you can find this in the Admin section under access code].

If you have set up the TV using the emailed login link, this is only valid for 30 days, which for security reasons cannot be altered.

The solution shared doesn't have a reset date so that should no longer be an issue with the access URL and code.


# Onboarding FAQs

### <mark style="color:$primary;">I can’t login to Busroot using my work email</mark>

Is there anything else you can tell us to help diagnose the problem? I've listed some areas for you to check so the Busroot Support team can rule out common causes:\
\- Have you noticed this issue only from this morning?\
\- Is this happening for all users?\
\- Have there been any major updates to your IT system or email provider?\
\- The emails aren't diverting straight to a spam folder?\
\- Have you tried clicking on a previously sent Busroot access link?

### <mark style="color:$primary;">The wider team are starting to log in to Busroot. Do you have a list of the differences for Admin's and Member's?</mark>

Regarding the levels of access depending on User type, they are the same apart from Admin is able to access these additional menu items:

* User
* Tablet Access Codes
* Devices
* API Keys

### <mark style="color:$primary;">Assigning SKU’s to stations (not visible to all stations)</mark>&#x20;

If you want SKU’s to only be visible for certain stations this is possible in Busroot. You can do this by going to Admin > SKU, selecting a SKU and editing that SKU. Select the ‘Station Restrictions’ tab. Here you will see and be able to select the Station Groups and Stations you only want that SKU to be available for selection on.

### <mark style="color:$primary;">What’s the purpose of SKU Groups?</mark>

SKU Groups are for when there is machinery that has two sides operating as part of their production process. Side A is producing one product and side B is producing a different product. Busroot allows you to setup a SKU Group with these two products so you count each product separately.\
It can also be used in a situation where a single sided or armed machine produces two different parts during a single CNC (for example) program.

### <mark style="color:$primary;">How do Batch Counts work?</mark>

For SKUs that are produced in batches, this will multiply the count received from the OPTA device or tablet to give the total unit count.\
For example, if the gate opens and you are going to polish 5 items at once. The sensor will register one, but you would want the batch size to be 5, so Busroot will count 5.

### <mark style="color:$primary;">How do I add new user?</mark>

A new user just needs to login to Busroot using this link: <https://eu-west-2-2.busroot.com/>. They will then receive a link to their work email. There is no way to add users manually.

### <mark style="color:$primary;">How do I rename stations and is it ok to do this myself?</mark>

Yes, you can change Station names yourself. You can do this in Admin > Station, select your station and edit. You cannot change the code of the station but the name you are welcome to change.\
Once an entry with a code (for Stations and SKU’s) has been entered and you want to change a code the only way to do this is to delete the entry and create a new one with the code you want.

### <mark style="color:$primary;">Could you tell me where I input the production Output Values please?</mark>

You can do this at a station level by going to Admin > Station, selecting your station and then the Downtime tab. Here you can add an Idle time value at a station level.\
To add a value at SKU level go to Admin > SKU, select your SKU and then the Production tab. Here you can add value for the SKU.

### <mark style="color:$primary;">Can I hide parts of Busroot that I'm not using or won't need?</mark>

All areas of Busroot are available as standard to our customers. It is not currently possible to hide/remove areas of Busroot.

### <mark style="color:$primary;">Can I change the code for a plant, SKU or station once I've set it up?</mark>

No, you will need to delete the item and re-enter the information you would like.

### <mark style="color:$primary;">What is the running time in the OEE chart?</mark>

Running time accounts for the time the machine has been running in shifts on the day you are looking at. If there is an ongoing downtime issue this will be counted as running time (up until the end of the current shift) or until the issue is resolved. In which case it will be converted to downtime. Ongoing issues will not be counted in OEE


# Scheduling FAQs

### <mark style="color:$primary;">I’m having trouble uploading a schedule</mark>

If you are unable to upload a schedule. to Busroot please follow any specific instructions the notifications provide. They should highlight the specific area that you need to check and potentially format correctly. Alternatively, send the schedule you are uploading to your Busroot contact and we will resolve the issue.

### <mark style="color:$primary;">We didn’t process a schedule originally planned for yesterday and have scheduled it (as part of an upload today).</mark>

In this instance you would need to edit the Planned Start of the existing schedule that did not occur yesterday. If you do not complete a schedule and upload again with a new Planned Start date, they will both remain.\
Only if the Station, SKU and Planned Start match then a schedule wouldn't be duplicated.

### <mark style="color:$primary;">Not all schedules are appearing in the schedule list after I’ve uploaded a sheet?</mark>

The reason this would occur is for two reasons:

1. There is missing or incorrect information in the scheduled upload. The format for the upload must be precise for each schedule to be successfully uploaded to Busroot.
2. The schedules you cannot see are planned in the future (more than one day), in this case if you check the Gantt chart and the date of the schedule you should see the schedule.

### <mark style="color:$primary;">When I'm in the Schedules list, and click on the menu next to an entry what does the prioritise option do?</mark>

In dynamic operations where plans can change at short notice, certain schedules may need to be completed urgently. Priority can be assigned without the need to edit the planned start time.\
Clicking the ‘Prioritise’ button in Schedule Management will move the schedule to the top of the operator interface and highlighted in brighter green, clearly indicating which should be started next. If more than one schedule is prioritised for the same station they will be ordered by planned start. If no longer required priority can be removed by clicking ‘Remove Priority’ and the schedule will be returned to order by Planned Start time.

### <mark style="color:$primary;">There are double entries for work order numbers in some schedules. I deleted the schedules and tried re-uploading them and they won’t upload now.</mark>

Busroot will allow multiple schedules with the same work order number. This is so you can track work orders with more than one SKU.&#x20;

You can not undelete (after deleting) schedules in Busroot. You should be able to upload schedules in this instance with the correct data updated.

### <mark style="color:$primary;">I want to request data for a specific period of time?</mark>

Let the Busroot support team know the specific time period and the metrics you would like and they can process this request for you.

### <mark style="color:$primary;">I have tried to enter scheduling data in Busroot but nothing appears.</mark>

The issue could be that the 'Actual Start' is set to Planned. In this case the schedules will appear in the Gantt Chart but not in the Production by WO Ref. page because it hadn't actually run and no production was recorded.\
It’s likely when creating the schedule the Actual Start was set to 'When Started by Operator'. It should be set to 'Start and End when Planned', and the schedule should appear on the correct date in the Production by WO Ref page.

### <mark style="color:$primary;">I have set up a schedule and SKU costs but we seem to have lost counts on one station. Busroot is not reporting the correct number of units that I know have been produced on the production line. What is wrong?</mark>

The reason could be that the production count was less in Busroot because there was a Minimum Cycle Time of X seconds applied in the SKU settings.\
A Minimum Cycle Time is only really necessary for SKUs with much longer cycle times, for example when a setup process needs to be filtered from the production units. \
We would suggest changing this setting to zero, so no units will be missed, also reset the system so it has recounted production for today.

### <mark style="color:$primary;">We have a work order that isn’t showing an end date/time and isn’t progressing on the production progress chart to show operators performance. One station is displaying time remaining and is showing that the team are XX units behind the target, but another station doesn’t have that time remaining? Why is that?</mark>

If you have two almost identical SKU's. If you've selected one without a performance target this would cause the issue you've flagged.

### <mark style="color:$primary;">Can I add downtime Reasons if there is no schedule setup (on a Saturday - out of shift)?</mark>

Currently in Busroot you would need a schedule running at the time to add downtime Reasons in realtime.\
If you add a schedule after Saturday to see the data retrospectively in Busroot select 'Extend Shift' when creating the schedule to display the production data in Busroot.

### <mark style="color:$primary;">What are the key fields that identifie the record schedule when scheduling?</mark> <mark style="color:$primary;">Why does one Work Order number have multiple entries?</mark>

If the Station, SKU and Planned Start match then a schedule wouldn't be duplicated.The Work Order Ref isn't the unique identifier (incase you're wondering) because it can be used by companies to assign production from multiple separate schedules to one work order number (see Production by WO Ref. page).

### <mark style="color:$primary;">When you create a CSV of schedules to upload to Busroot, do you need to include the current ones that are in Busroot and add any additional or just upload new schedules?</mark>

Busroot will update any existing entries and add new schedules. It will not duplicate schedules that have the exact same information for Station, SKU and Planned Start.

### <mark style="color:$primary;">How long do schedules stay in schedules after completion and when they appear. And also these questions for the production progress chart.</mark>

Completed schedules disappear after 3 days in the schedule list\
Schedules appear in the production progress chart 24 hours before planned start time

### <mark style="color:$primary;">What does 'cut the schedule short' mean in station management?</mark>

If you have a work order setup to produce 1000 units and half way through the production you need to stop the manufacturing and prioritise an urgent order that has just come in. If you enable and select to cut the initial work order short it will end the work order and mark as complete to where the production got to, for example let's say 600 products were produced.\
Busroot will then automatically create a new work order with the same work order reference for the remaining 400 products that still need to be completed.\
This allows you to prioritise the urgent job and still know that you can return to the interrupted job when you have the opportunity.


# Tablet FAQs

### <mark style="color:$primary;">How do I set up the tablet when I receive it?</mark>&#x20;

Here are the instructions to setup the tablet:

* When you turn on the device you may be asked for two separate PINs.
* If you are asked for a Kiosk PIN it is 0845.
* If you are asked for the WIFi Pin it is 3745.

TABLET ACCESS CODES On the Admin > Tablet Access codes page click the button to ‘Add New’ device.

THE TABLET Use this link on your tablet <https://eu-west-2-2.busroot.com/auth/login/tablet>, and use the code created in Busroot to access your account. It is a similar process to set up the TVs. Using this link on the TV: <https://eu-west-2-2.busroot.com/auth/login/accesscode>, and creating an access code also in Admin > Tablet Access codes. This way (rather than using your login) means it will not ever logout of Busroot.

### <mark style="color:$primary;">Due to our Wi-Fi network being changed the tablets are no longer connected to the internet. In order to connect them to our new network we need to access the settings and cannot do this without the 'Kiosk Pin'. We understand you may not be able to provide us access</mark>

[<mark style="color:blue;">See ‘Setting up the Tablet’.</mark>](https://app.gitbook.com/o/DgUFFwUMxkB8m5u037NR/s/i2TlO4PocWIzMF8TVNsQ/~/edit/~/changes/243/platform-onboarding/quick-start/operator-tablet)

### <mark style="color:$primary;">We have our own tablets and want to use them. Would they just be connecting to an external website? Are there any requirements documented so we can review them?</mark>

This is possible Please contact the Busroot support team to understand how to set this up.

### <mark style="color:$primary;">How can we adjust the size of the font and improve visibility on the operators tablets?</mark>

Regarding the font size. You are able to adjust this in the Kiosk settings.

* Swipe inwards from the left of the screen.
* Select 'Settings' (top of the list)
* Select 'Web Zoom and Scaling' (3rd on the list)
* Select 'Set Font Size'
* Set required size (150% seems to work ok)
* Swipe in from the left to exit all menus and return to the tablet interface. Please note, we have noticed this doesn't work as well if the tablets are in landscape orientation though. The larger font means there's less room to enter the quantity and also have the submit button available, so there is most likely a need to scroll. It will be something you and the operators will need to play around with to find the right fit.

### <mark style="color:$primary;">What are the 3 initials for operators to complete</mark>

As you rightly point out the reason for 3 initials allows the space to differentiate between operators. Some of our customers solve this by asking their operators to use an 'x' as the third initial if it is not needed.\
We are actually making some updates to the tablet interface this weekend, and while adding only two initials will not be an option. It will no longer be mandatory to add initials at all.

### <mark style="color:$primary;">One of our tablets is displaying an error message and we can’t seem to navigate past it. We’ve tried resetting the tablet but it has not helped. Can you help?</mark>

Please send a screenshot of the error to the Busroot team to investigate the issue further. Can you also please include the following information:

* When did you first notice the issue?
* Is it isolated to one tablet/station?
* Can you confirm the WiFi signal in the area is strong?

### <mark style="color:$primary;">If downtime is never given a reason on a tablet, is it removed from the tablet at some point?</mark>

Yes, it will removed from the tablet after 72 hours. It will still remain in the Busroot platform.

### <mark style="color:$primary;">Will the tablet notifications ever stop increasing, or eventually be removed?</mark>

Yes, downtime notifcations will removed from the tablet after 72 hours. It will still remain in the Busroot platform. Notifications will also be removed if you exceed 50 unanswered notifications on one station. At this point everytime a new period of downtime is added, the oldest one will be removed.

### <mark style="color:$primary;">How do you sleep the tablet? The screens are always on which is not needed.</mark>&#x20;

On the tablet go to Settings > Kiosk Mode (PLUS) > Disable Power Button > Off

### <mark style="color:$primary;">How do the notifications work when receiving alerts for downtime issues?</mark>&#x20;

You will receive one email at the start of the downtime and one at the end. The notification will not tell you the reason that has been inputted by the operator.&#x20;

### <mark style="color:$primary;">How do non-production schedules work on the tablet. What does the operator need to know and do?</mark>&#x20;

This is what it will look like on the tablet, and the operator can click on the non-production schedule (in blue) to start it early if they want to.

One thing to be aware of. The Non-production schedule will start and end at the planned times. So, it will override a running production schedule.

<figure><img src="/files/tPgoK8DTlzlYtpPA7KoU" alt=""><figcaption></figcaption></figure>

### <mark style="color:$primary;">If there is an update to Busroot which effects the tablets how can I update the tablets? Is it best to restart the tablets?</mark>&#x20;

Restarting the tablets will work.

Alternatively, you can swipe in from the left of the tablet screen (if you are using Busroot sourced tablets with Kiosk) to open fully kiosk menu. Below settings, there's an option called 'go to start URL'. Selecting this will also update Busroot. &#x20;

### <mark style="color:$primary;">How do I setup the tablet so it opens directly on the Busroot login page?</mark>&#x20;

If you would prefer to bypass the desktop shortcut and go straight to the Busroot Login screen.

This can be set by going to Settings > Kiosk Mode (Plus) (screenshot 1) > Enable Kiosk Mode (screenshot 2)

But it does use a pin to be able to exit this mode, its set to 1234 by default

<div><figure><img src="/files/VXe126fZZ9JNoZGGCnH1" alt=""><figcaption></figcaption></figure> <figure><img src="/files/wcxdJ1iSz90gK6N15xJK" alt=""><figcaption></figcaption></figure></div>


# Cockpit

#### **Overview:**

The Cockpit in Busroot is a central, real-time dashboard designed for operational managers, supervisors, and shop-floor staff. It provides a unified view of current machine performance, production status, and efficiency indicators across the factory floor. The Cockpit helps users instantly identify issues, monitor output, and track trends for better, data-driven decision-making. Its value lies in enabling rapid responses to downtime and ensuring optimal productivity by making critical manufacturing metrics visible at a glance.

#### **Use Cases:**

* **Production Supervisor:** Needs to monitor all machines live to detect stoppages and react quickly to issues, ensuring shift targets are met.
* **Quality Engineer:** Wants instant feedback on performance dips to investigate causes and limit defective output during a shift.
* **Operations Manager:** Uses Cockpit analytics to spot recurring downtime, review productivity, and optimise staffing or maintenance schedules.

#### **Functionality:**

* **Live Monitoring Panel:** Shows real-time status of every machine or station, indicating output, active/inactive states, and any detected faults.
* **Progress Charts:** Visual graphs updating constantly with current totals, progress towards targets, and historical trends by day, shift, or line.
* **OEE Metrics:** Overall Equipment Effectiveness is calculated and visualised for instant performance benchmarking. Includes asset utilisation, downtime causes, and line speed monitoring controls.
* **Filtering/Grouping:** Users can group or filter views by station, product/SKU, line, or shift for targeted analysis.

#### **Data Setup:**

* Ensure all stations and machines are registered in the system.
* Input plant details, stations, SKU's and shifts under Admin > Management.

#### **Key Formulas:**

* Live performance metrics often use direct output counters and "actual vs. target" calculations.
* Ensure cycle time and line speed targets are configured for each SKU/station.

## ANALYSING THE COCKPIT

Highlighted in green is an example of a station that is running. *Capping 2* is displaying an active schedule. With the scheduling information and real-time progress displayed and progress bar sitting alongside.&#x20;

Below, you can see the information for the next schedule that is planned.&#x20;

To the right of that are the production metrics for the last 60 minutes.&#x20;

Finally, in the top right corner you have quick select buttons to take you to different pages of Busroot.&#x20;

<figure><img src="/files/xalJ0Zqf29lVFESEI6in" alt=""><figcaption></figcaption></figure>

As a desktop user, you can also add notes to stations using the quick-select button in the Cockpit. This will be visible to the tablet operator on that station. They are also able to add notes, that will be visible to you.&#x20;

<figure><img src="/files/wTr6td18tV9jOX0B8Oqj" alt=""><figcaption></figcaption></figure>


# Production Progress

#### **Overview:**

The Production Progress page in Busroot provides a live, visual snapshot of how current production schedules are progressing against set targets. Designed for shop floor operators and production managers, it enables real-time monitoring of output at each station. Immediate visibility helps keep teams on track, spot delays, and quickly address issues to maximise productivity and schedule adherence. The value is in delivering up-to-date information that supports timely, data-driven shop floor decisions.

#### **Use Cases:**

* **Operator:** Wants to see if their current job is ahead or behind target and how much work remains in the shift.
* **Production Manager:** Needs to monitor all open schedules across stations, spot bottlenecks, and adjust resource allocation in real time.
* **Supervisor:** Uses the page to quickly review daily performance during stand-up meetings or changeovers to keep everyone aligned.

#### **Functionality:**

* **Schedule List:** Shows all running and upcoming production schedules, ranked by planned start time (or alphabetically). Schedules update in real time and can be filtered by status.
* **Progress Chart:** Visual graph displays quantity completed versus target for each schedule, highlights if production is on-track/behind, and provides estimated time remaining.
* **Manual & Automatic Entry:** Units produced can be captured automatically from the machine or manually entered via operator tablets.
* **Schedule Controls:** Allows operators or managers to start, stop, or complete schedules, trigger progress updates, and refine performance targets on the fly.
* **Visibility Rules:** Only schedules with a set quantity/end time show on this page; ongoing (continuous) schedules are excluded. Completed or ended schedules are displayed briefly before being cleared from the board.
* **Prerequisites:** Requires setup of station schedules, performance targets for SKUs, and configuration of the relevant tablets/displays. Data accuracy depends on correct schedule input and timely manual or automatic updates.

#### **Data Setup:**

* Add SKUs and SKU groups with cycle time and line speed values via Admin > Management > SKU.
* Establish production schedules, assigning SKUs and targets.
* Configure manual or automated unit entry on operator tablets or machine integrations.

#### **Key Formulas:**

* Progress % = (Units Completed / Target Units) × 100
* Estimated time remaining = (Target - Completed) × Cycle Time (seconds)

<figure><img src="/files/z3VUmO2InXP9W1kmMMKN" alt=""><figcaption></figcaption></figure>


# OEE Analysis

#### **Overview:**

The OEE (Overall Equipment Effectiveness) Analysis page in Busroot provides a comprehensive view of how well manufacturing equipment and processes perform compared to their maximum potential. It is designed for production managers, engineers, and operations leaders who need actionable insight into availability, performance, and quality losses in real time. The main problem it solves is making historically hidden production losses transparent, enabling users to identify, quantify, and address inefficiencies and boost manufacturing productivity.

#### **Use Cases:**

* **Continuous Improvement Leader:** Reviews shifts, days, or stations with the lowest OEE scores to focus improvement efforts and drive lean initiatives.
* **Maintenance Planner:** Uses OEE loss breakdown (downtime, performance, quality) to identify where planned maintenance or upgrades will yield the most benefit.
* **Line Supervisor:** Monitors daily OEE trends to react quickly when any KPI falls below threshold and ensure targets are met.

#### **Functionality:**

* **OEE Dashboard/Chart:** Visualises overall OEE and its three core components: availability, performance, and quality. Each breakdown is shown as a percentage and absolute loss.
* **Filtering/Breakdown:** Data can be filtered by plant, station group, or individual station level. Further breakdown includes schedule loss, maintenance loss, and unplanned downtime loss.
* **Inputs:** Requires production schedules, downtime thresholds, and output counts for both good and bad parts. Targets and cycle times per SKU should be up to date for accuracy.
* **Loss Categorisation:** Separately shows losses from equipment not scheduled (schedule loss) and planned non-production (e.g., maintenance).
* **No Setup Required:** OEE calculation is automatic, using existing schedules and production data. Access to full functionality may depend on user permissions and accurate setup of scheduling and devices.
* **Trends and Comparison:** Enables users to compare OEE trends over time and across machines, identifying recurring issues or opportunities.
* **Limits/Prerequisites:** Data accuracy relies on properly configured cycle times, schedules, and downtime thresholds. OEE only considers time when production is planned, excluding planned maintenance and out-of-shift times.

#### **Data Setup:**

* Make sure machines and downtime reason codes are fully configured.
* Input correct shift schedules, production targets, and loss categories.

#### **Formula:**

* OEE = Availability × Performance × Quality, where:
  * Availability = (Run Time / Planned Production Time)
  * Performance = (Total Pieces × Ideal Cycle Time) / Run Time
  * Quality = Good Pieces / Total Pieces

#### OEE ANALYSIS

<figure><img src="/files/EoCUjnvqKfRq9mJj074W" alt=""><figcaption></figcaption></figure>

*Scroll down to see*&#x20;

#### OEE ANALYSIS BREAKDOWN

<figure><img src="/files/hOrrDY4PW3tkAANppzno" alt=""><figcaption></figcaption></figure>


# Trend Viewer

#### **Overview:**

The Trend Viewer in Busroot is a powerful analytics dashboard that enables users to visualise and compare key production and efficiency parameters over time. Designed for production managers, engineers, and continuous improvement teams, it delivers deeper insights by visualising trends across shifts, products, machines, and energy consumption. The main value is helping users uncover performance patterns, root causes of losses, and opportunities for sustained gains.

#### **Use Cases:**

* **Production Manager:** Tracks daily, weekly, or shift-by-shift output trends to spot long-term improvements or recurring problems.
* **Sustainability Lead:** Analyses correlations between energy use and productivity over selectable periods to drive greener operations.
* **Process Engineer:** Compares machine or line performance before and after changes to quantify impact and guide best practices.

#### **Functionality:**

* **Metric Selector:** Choose key variables (output, cycle time, energy, downtime, OEE, and more) to plot trend lines for cross-comparison.
* **Time Range Controls:** Select and filter into specific timeframes - shifts, days, weeks, or custom periods for granular analysis.
* **Breakdown and Filters:** Filter by line, SKU, shift, work order, and more; layer multiple series for side-by-side comparison.
* **Chart View:** Graphs visualising the data; highlight intervals of underperformance or spikes for root cause investigation.
* **Short Interval Control:** Review production in small time windows (e.g., 15-min blocks) for rapid intervention and detailed breakdown.
* **Limits/Prerequisites:** Accurate trends depend on complete, correctly timestamped data across devices and processes.

#### **Data Setup:**

* Validate time stamping and completeness of device data for each KPI (cycle time, downtime, output, etc.).
* Devices and production lines should be accurately mapped to their data source.

#### **Key Formulas:**

* Time-series data is plotted, often using moving averages or interval groupings.

#### TREND VIEWER - SELECTING A METRIC

<figure><img src="/files/CraRncFv92giznjsY3H7" alt=""><figcaption></figcaption></figure>

#### TREND VIEWER - VIEWING THE DATA

<figure><img src="/files/3DTePv5qixwQJc77KG7i" alt=""><figcaption></figcaption></figure>


# Total Production Count

The total number of units produced (good and bad). Target is the ideal production count.


# Production Rate (per Hour)

The average rate of production in units per hour.


# Downtime

The total amount of downtime in minutes.


# Asset Utilisation

The percentage of in-shift time an asset is productive vs non-productive.


# OEE

The OEE as a percentage.


# Good Production Count

The total number of good units produced.


# Bad/Reject Production Count

The total number of bad or reject units produced.


# Energy Consumed

The amount of energy consumed by the station in kWh.


# Average Power

The average amount of power used by the station in kW. Target is the nominal power usage.


# Energy per Unit

The amount of energy consumed by the station, per unit of production output, in kWh.


# Quality

The percentage of good production vs bad.


# Wasted Energy

The amount of energy consumed when a production schedule is not running.


# Power Usage vs Nominal

The percentage of power used vs the nominal power for the station.


# Total Downtime

The total amount of downtime in seconds.


# Hierarchy Explorer

#### **Overview:**

The Hierarchy Explorer in Busroot allows users to visualise and manage the structural relationships within a manufacturing environment - including plants, stations, station groups, and SKUs. It is designed for system administrators, data managers, and operations leaders who need to understand, track, and reconfigure the organisation's manufacturing assets and production lines. This tool delivers clarity over the plant structure, enabling streamlined reporting, quick reconfiguration, and enhanced governance of roles and responsibilities.

<figure><img src="/files/BjZ1RFNrHZtJxvc07juu" alt=""><figcaption></figcaption></figure>

#### **Use Cases:**

* **System Administrator:** Needs to set up a new manufacturing site in Busroot, define station groups, and ensure correct reporting structures.
* **Production Manager:** Wants to filter production or performance data by lines or areas for targeted analysis.
* **Maintenance Planner:** Uses asset and station group information to schedule planned maintenance activities at the right asset level.

#### **Functionality:**

* **Plant/Station:** Visual interface for navigating between plants, station groups, and individual stations. Expand/collapse drop downs to drill down.
* **SKU Management:** View, add, and edit SKUs, assign them to schedules, or group them for batch/process tracking.
* **Group/Filter:** Organise and filter data by plant, group, or station for reporting and management.
* **Prerequisites:** Sufficient admin rights are required to make structural changes; configuration accuracy is essential for reliable reporting and downstream analytics.

#### **Data Setup:**

* Add all plants, stations, and station groups under the Admin section.

#### **Key Considerations:**

* Correct grouping ensures data rolls up properly to plant and operation-level analytics.

## GLOSSARY

### Scheduling <a href="#scheduling" id="scheduling"></a>

* **Total Time** - The total amount of time in the range you are looking at.
* **In Shift Time** - The amount of time this station has spent inside a shift.
* **Scheduled Non Production Time** - Periods where the station was intentionally scheduled not to operate, such as during maintenance or planned downtime.
* **Scheduled Production Time** - The amount of time this station has spent running a production schedule.

### Production <a href="#production" id="production"></a>

* **Scheduled Production Time** - The amount of time this station has spent running a production schedule.
* **Production Count** - The total number of units produced during the selected time range.

### Stops <a href="#stops" id="stops"></a>

* **Stops Count** - The total number of stops.
* **Total Downtime** - The total time for all stops
* **MTBF** - Mean Time Between Failures is a key reliability metric, the average time between system or component failures during operation.
* **MTTR** - Mean Time to Repair is a core maintenance metric that measures the average time it takes to repair a system or component and restore it to full functionality after a failure.
* **Downtime Cost** - The lost opportunity cost of the downtime in £.

### Energy (kWh) <a href="#energy-kwh" id="energy-kwh"></a>

* **Total Energy** - Total energy consumed. The chart icon links to the Energy chart for the selected time range and group or station.
* **Energy / Production Hour** - Amount of energy consumed per hour of production.
* **Energy / Unit** - Amount of energy consumed per unit of production.

### Energy (£) <a href="#energy-gbp" id="energy-gbp"></a>

* **Total Energy (£)** - Total energy consumed during the period in £.
* **Energy (£) / Production Hour** - Amount of energy consumed per hour of production in £.
* **Energy (£) / Unit** - Amount of energy consumed per unit of production in £.




---

[Next Page](/llms-full.txt/1)

