# Kanoa Docs > Help documentation to help you get started with the Kanoa MES framework Every page is available as Markdown by appending `.md` to its URL. The full documentation in a single file is at https://kanoa-software.netlify.app/llms-full.txt. ## Introduction - [Welcome](https://kanoa-software.netlify.app/index.md): Kanoa MES is a modular Manufacturing Execution System built on and for Inductive Automation’s Ignition platform. - [What Is Kanoa MES](https://kanoa-software.netlify.app/getting-started/introduction.md): Kanoa MES is a modular Manufacturing Execution System built on Inductive Automation’s Ignition platform and is delivered as a combination of... - [Why Kanoa](https://kanoa-software.netlify.app/getting-started/why-kanoa.md): Kanoa follows a platform-first philosophy and inherits many of the 'unlimited, server-based' advantages that make Ignition so attractive: - [Architectures](https://kanoa-software.netlify.app/architecture.md): Choosing the right architecture is one of the more important decisions in your MES implementation. - [System Requirements](https://kanoa-software.netlify.app/getting-started/system-requirements.md): Kanoa MES is installed as a module on an Ignition Gateway. Data is stored in Microsoft SQL Server. - [Installation and Deployment](https://kanoa-software.netlify.app/getting-started/installation.md): Watch Installing Kanoa Tutorial - [Prepare Ignition Gateway](https://kanoa-software.netlify.app/getting-started/installation/prepare-gateway.md): Kanoa MES requires an Ignition Gateway with the Perspective module available. - [Configure the Database Connection](https://kanoa-software.netlify.app/getting-started/installation/configure-database.md): Kanoa MES uses a Microsoft SQL Server database connection named kanoaCore. This connection is required. - [Configure the Tag Provider](https://kanoa-software.netlify.app/getting-started/installation/configure-tags.md): Kanoa MES uses a dedicated tag provider named Kanoa to keep Kanoa MES tags separate from other tags in your Gateway. - [Install Modules](https://kanoa-software.netlify.app/getting-started/installation/install-modules.md): Kanoa MES is a single module that contains licensed features for ops, quality, maintenance, trace and inventory. - [Applying a License](https://kanoa-software.netlify.app/getting-started/installation/apply-license.md): The kanoaMES module is fully functional without a license and works on the same two hour trial license as Ignition. - [Configure Redundancy](https://kanoa-software.netlify.app/getting-started/installation/configure-redundancy.md): Kanoa MES can run on a redundant pair of Ignition Gateways. Ignition handles the failover, and the Backup Gateway - [Other Recommended Settings](https://kanoa-software.netlify.app/getting-started/installation/other.md): Every implementation is different — some sites have a couple of production lines, others have hundreds. You may only make one product or thousands. Regardless, here are some settings we recommend starting with. ## MES Features - [MES Features](https://kanoa-software.netlify.app/mes-features.md) - [Navigation](https://kanoa-software.netlify.app/configuration/navigation.md): The navigation options available to a user can be modified through the application in the navigation configuration screen. - [Users](https://kanoa-software.netlify.app/configuration/users.md): Ignition provides a wealth of user security management choices, - [Language Support](https://kanoa-software.netlify.app/configuration/language-support.md): The Kanoa MES framework supports several different language modes. To switch languages, click the settings icon at the top right to open the language menu and click on the language of your choice. - [Dashboards & Marquees](https://kanoa-software.netlify.app/dashboards.md) - [Operations](https://kanoa-software.netlify.app/operations.md): Understand how your plant is performing and where to focus continuous improvement efforts. - [Assets](https://kanoa-software.netlify.app/kanoa-ops/assets.md) - [Data Interface Tag](https://kanoa-software.netlify.app/kanoa-ops/assets/assetOEEInfo.md): Watch Connecting To Data Tutorial - [Custom Attributes](https://kanoa-software.netlify.app/kanoa-ops/assets/custom-attributes.md): Custom Attributes store static properties for an asset (and can also be set for material items). They can be set in the asset configuration screen or through scripting. - [Modes](https://kanoa-software.netlify.app/kanoa-ops/assets/modes.md): A mode defines the intended operation of an asset. The mode is typically set by the schedule or manually set by the operator, but can also be set via - [Counters](https://kanoa-software.netlify.app/kanoa-ops/assets/counters.md): Counters are the entry point for bringing production counts into Kanoa MES. - [States](https://kanoa-software.netlify.app/kanoa-ops/assets/states.md): While Modes represent what an asset is supposed to be doing, states show what the asset says it was actually doing. - [Materials](https://kanoa-software.netlify.app/kanoa-ops/materials.md) - [Item States](https://kanoa-software.netlify.app/kanoa-ops/items/item-states.md): Item states provides the ability to link counts with configurable states. This can be used by operators to code scrap reasons or when connected directly to a plc, - [Production Rates](https://kanoa-software.netlify.app/kanoa-ops/items/item-rates.md): The Production Rates tab provides a method for linking which items (products) can be produced on which assets. The Item asset linker popup - [Order Management](https://kanoa-software.netlify.app/kanoa-ops/order-management.md): Whether you call them Production Orders, Manufacturing Orders, Work Orders, or Batch Tickets, this screen provides you with the ability to view, create and edit - [Scheduling Operations](https://kanoa-software.netlify.app/kanoa-ops/schedule-operations.md): Watch Scheduling Operations Tutorial - [Shifts](https://kanoa-software.netlify.app/kanoa-ops/shifts.md): Watch Scheduling Shifts Tutorial - [OLE / POLE Labor Effectiveness Analysis](https://kanoa-software.netlify.app/kanoa-ops/ole-pole-analysis.md): OEE tells you how well an asset performed, what fraction of its scheduled time it was actually running, at what rate, making good product. It doesn't tell you anything about the people running it. - [Dynamic Attributes](https://kanoa-software.netlify.app/kanoa-ops/dynamic-attributes.md): Dynamic Attributes track changing or dynamic properties for an asset. Dynamic attribute data is stored as events with timestamps, and you can save and retrieve dynamic attribute data for a given point-in-time. - [Measures](https://kanoa-software.netlify.app/kanoa-ops/measures.md): The Measures feature allows you to capture, aggregate, and statistically analyze process measurements at scale. Rather than storing every raw sample, measurements are collected over a configurable window — by count or by duration — and summarized into a single database record that preserves key statistical properties. - [Performance Events](https://kanoa-software.netlify.app/kanoa-ops/performance.md): Performance Events let you record and explain why an asset ran slower than expected during a given period. - [Operator Station](https://kanoa-software.netlify.app/kanoa-ops/asset-operation.md): Watch Starting Production Tutorial - [Analysis](https://kanoa-software.netlify.app/kanoa-ops/analysis.md) - [Downtime](https://kanoa-software.netlify.app/kanoa-ops-analysis/downtime.md): We've provided a ready made downtime analysis page for you in the KanoaOPS project. As with every other part of the kanoaMES application, - [OEE](https://kanoa-software.netlify.app/kanoa-ops-analysis/oee.md): Overall Equipment Effectiveness identifies the percentage of manufacturing time that is truly productive. - [Production Counts](https://kanoa-software.netlify.app/kanoa-ops-analysis/productionCounts.md): The Production Count chart tracks the amount of infeed, outfeed and waste being generated by an asset. - [Reliability KPI's](https://kanoa-software.netlify.app/kanoa-ops-analysis/reliabilityKPI.md): OEE may be an important indicator of how well your plants are performing, but if your assets spend most of the time idling, in maintenance or changover, - [Run Chart](https://kanoa-software.netlify.app/kanoa-ops-analysis/runChart.md): The Run Chart is a dynamic visualization tool designed to provide an at-a-glance overview of how production lines are operating versus their planned operations. - [Dashboards](https://kanoa-software.netlify.app/kanoa-ops-analysis/dashboards.md): In 2020 Inductive Automation released the perspective dashboard component. - [Marquees](https://kanoa-software.netlify.app/kanoa-ops-analysis/marquees.md): We call them Marquees, but you may know them as Andon or Visual Display Management systems. Whatever you call them, we have provided a rather simple method of providing a set of rotating dashboards to - [Run Review](https://kanoa-software.netlify.app/kanoa-ops-analysis/runReview.md): The Run Review screen provides both analytics and the ability for the production run data such as counts and downtime to be edited based on a user's roles. Users may view an asset's production runs within a specified time range, with filtering by mode enabled. Run Review data is only viewable when an OEE-enabled asset is selected, which usually would be a line asset. - [Summary](https://kanoa-software.netlify.app/kanoa-ops-analysis/summary.md): The Summary Report shows an overview of operational performance for selected assets or areas, consisting of OEE, utilization and downtime. - [Enterprise Overview](https://kanoa-software.netlify.app/kanoa-ops-analysis/enterpriseOverview.md): The Enterprise Overview page is designed to provide you with critical, at-a-glance information about the current mode, state of your assets, whether they are in production, faulted or idle. - [KPI Matrix](https://kanoa-software.netlify.app/kanoa-ops-analysis/kpi-matrix.md): The KPI Matrix functionality is a tool to provide insight to production KPIs. The user will have the ability to rapidly analyze the chosen KPIs from tag data. - [Kanoa Quality](https://kanoa-software.netlify.app/quality.md): Kanoa Quality is the Kanoa MES Solution for digital quality checks, compliance workflows, and statistical quality analysis. - [Check Sheets](https://kanoa-software.netlify.app/kanoa-quality/checkSheets.md): The Check Sheets configuration screen allows a user to manage all aspects of check sheet configuration. - [Attributes](https://kanoa-software.netlify.app/kanoa-quality/attributes.md): Whenever a check is to be compared against a specification that is dependent upon the asset, that check needs to reference an attribute. Any check type can have an attribute associated to it. Attributes and associated specifications can be configured in Quality > Configuration > Attributes. - [Item Sets](https://kanoa-software.netlify.app/kanoa-quality/itemSets.md): Product (Items) are naturally grouped in Item Classes. However it is possible that you may want to group a set of items that are in - [Entering Checks](https://kanoa-software.netlify.app/kanoa-quality/entering-checks.md): Check Sheets are automatically scheduled based on their triggers and activities on production lines, such as production runs, mode changes, and shift changes. - [Check Summary](https://kanoa-software.netlify.app/kanoa-quality/checkSummary.md): The Check Summary Report provides analysis tools for the status of check sheets. - [Quality Check Analysis & SPC](https://kanoa-software.netlify.app/kanoa-quality/checkDetails.md): The Check Details screen provides detailed analysis of check sheet checks.From here check item data can be charted, tabled, exported and undergo SPC analysis. - [Kanoa Trace](https://kanoa-software.netlify.app/kanoa-trace.md): Kanoa Trace is the Kanoa MES Solution for end-to-end traceability and genealogy tracking raw materials, work-in-progress, and finished goods throughout the manufacturing lifecycle, and generating trace graphs to support fast root-cause analysis, compliance, and reporting. - [Lot Management](https://kanoa-software.netlify.app/kanoa-trace/lot-management.md): Lot management refers to the process of organizing, tracking, and controlling batches of products or materials, known as 'lots' throughout their lifecycle in manufacturing, supply chain, and inventory management systems. A 'lot' typically represents a specific quantity of items produced or received at the same time, sharing the same production or manufacturing characteristics, such as batch number, expiration date, or production date. - [Lot Configuration](https://kanoa-software.netlify.app/kanoa-trace/lot-config.md): There are several aspects of Lot Management that can be configured... - [Maintenance Management](https://kanoa-software.netlify.app/kanoa-cmms.md): Kanoa Maintenance is an integrated maintenance management solution built directly into Kanoa MES, enabling teams to manage maintenance workflows alongside production, quality, and operational analytics. - [Work Order Creation & Scheduling](https://kanoa-software.netlify.app/kanoa-cmms/cmmsWorkOrderTemplate.md): Kanoa Maintenance uses a template-driven model for maintenance execution. Instead of directly creating individual work orders, users define work order templates that control how and when actual work orders are generated. - [Procedures](https://kanoa-software.netlify.app/kanoa-cmms/cmmsProcedure.md): Maintenance procedures define the step-by-step instructions technicians follow when executing maintenance work. - [Analytics](https://kanoa-software.netlify.app/kanoa-cmms/cmmsAnalytics.md): Kanoa Maintenance includes built-in KPI to provide a complete view of maintenance performance: - [Technician & Labor Tracking](https://kanoa-software.netlify.app/kanoa-cmms/cmmsWorkOrderTechnicians.md): Kanoa Maintenance work orders can now log multiple technicians against a single work order event, each with their own work type and time spent. This replaces the assumption that one work order event maps to one technician, and gives maintenance teams an accurate picture of who worked on what, and for how long. - [Inventory Management](https://kanoa-software.netlify.app/kanoa-inventory.md): Kanoa Inventory provides a complete set of functions for managing parts, stock levels, locations, suppliers, and bill of materials (BOM) across your asset hierarchy. All functions are available under the system.kanoa.inventory namespace. - [Setting up Inventory](https://kanoa-software.netlify.app/kanoa-inventory/inventory-config.md): Before adding parts, set up the reference data your catalog depends on. Navigate to Inventory → Configuration. The tabs across the top cover each reference type. - [Inventory Transactions](https://kanoa-software.netlify.app/kanoa-inventory/inventory-guide.md): Receiving Stock ## Reference - [Reference](https://kanoa-software.netlify.app/reference.md) - [Simulator](https://kanoa-software.netlify.app/configuration/simulator.md): Assets can be simulated using the assetSimulator tag UDT found in the Kanoa tag provider. You can create an instance for each asset you want to simulate and this will generate - [Tutorials](https://kanoa-software.netlify.app/tutorials.md): Installing & Initial Setup Tutorial - [Kanoa MES Accelerators](https://kanoa-software.netlify.app/accelerators.md): What is a Kanoa MES Accelerator? - [Operator Startup Checklist](https://kanoa-software.netlify.app/accelerators/startup-checklist.md): Kanoa MES Accelerator - [Machine Setpoints Interface](https://kanoa-software.netlify.app/accelerators/setpoints.md): Kanoa MES Accelerator - [Schedule Optimization](https://kanoa-software.netlify.app/accelerators/schedule-optimizer.md): Kanoa MES Accelerator - [Releases](https://kanoa-software.netlify.app/releases.md): This section contains release notes listing the changes that have been made in the current release cycle. it documents which resources have changed (modules, projects, tag UDTs) and contains information on how to implement on top of an existing install. - [KanoaMES v1.15](https://kanoa-software.netlify.app/releaseNotes/v1_15.md): Release Date - 8/7/26 - [KanoaMES v1.14](https://kanoa-software.netlify.app/releaseNotes/v1_14.md): Release Date - 2/23/26 - [KanoaMES v1.12](https://kanoa-software.netlify.app/releaseNotes/v1_12.md): Release Date - 11/18/25 - [KanoaMES v1.11](https://kanoa-software.netlify.app/releaseNotes/v1_11.md): Release Date - 7/12/25 - [KanoaMES v1.10](https://kanoa-software.netlify.app/releaseNotes/v1_10.md): Release Date - 3/16/25 - [KanoaMES v1.9](https://kanoa-software.netlify.app/releaseNotes/v1_9.md): Release Date - 2/1/25 - [KanoaMES v1.8](https://kanoa-software.netlify.app/releaseNotes/v1_8.md): Release Notes - [KanoaMES v1.7](https://kanoa-software.netlify.app/releaseNotes/v1_7.md): Release Notes - [KanoaMES v1.6](https://kanoa-software.netlify.app/releaseNotes/v1_6_0.md): Release Notes - [KanoaMES v1.5](https://kanoa-software.netlify.app/releaseNotes/v1_5.md): Release Notes - [KanoaMES v1.4](https://kanoa-software.netlify.app/releaseNotes/v1_4.md): Release Notes - [Breadcrumb](https://kanoa-software.netlify.app/components/kanoa/breadcrumb.md): The Breadcrumb component renders a hierarchical navigation path. It accepts a tree of nodes and tracks which prefix of that tree is currently selected, displaying it as a horizontal crumb trail. A trailing dropdown allows the user to navigate forward from the current position by selecting from the current node's children. Clicking any crumb in the trail navigates back to that level. - [Calendar](https://kanoa-software.netlify.app/components/kanoa/calendar.md): The Calendar component is an implementation of FullCalendar (version 7) as a Perspective component. It supports multiple calendar views, event display and interaction, drag-and-drop scheduling, and built-in popups for creating and editing events. Resource views (Columns and Timeline) let you lay events out per resource, such as a line, machine, or person. - [External Event Box](https://kanoa-software.netlify.app/components/kanoa/externalEventBox.md): The External Event Box is a container component that holds a list of event cards which can be dragged and dropped onto a Calendar component. When a card is dropped, the calendar's onEventReceived event fires with the dropped event's details. - [Node Chart](https://kanoa-software.netlify.app/components/kanoa/nodeChart.md): The Node Chart component allows users to organize and visualize data in the form of a diagram with nodes and edges. - [Toast Notifications](https://kanoa-software.netlify.app/components/kanoa/toast.md): Kanoa MES can show toast notifications on any Perspective page: short messages that slide in at the edge of the screen and close on their own. Toasts are powered by react-toastify and are shown from scripts using the system.kanoa.toast functions. Nothing needs to be placed on a view. Every Perspective page in every project can show toasts as soon as the module is installed. - [Kanoa API](https://kanoa-software.netlify.app/api-intro.md): Welcome to our api documentation. We provide over 850 system.kanoa functions that handle everything from configuring assets, materials, modes, state, - [Asset System Functions](https://kanoa-software.netlify.app/systemFunctions/apiAssetIntro.md): Provide system functions for the configuration and retrieval of assets - [system.kanoa.asset.addAsset(assetInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/addAsset.md): Add a new asset. All assetInfo keys are required - [system.kanoa.asset.addAssetAttribute(assetId, attrName, attrValue, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/addAssetAttribute.md): Adds an attribute value for the asset. If the assetAttribute already exists, it will update it. - [system.kanoa.asset.addAssetGroup(assetGroupName, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/addAssetGroup.md): Adds a new asset group. If the asset group already exists, it returns the assetGroupId - [system.kanoa.asset.addAssetTagUDTInstance(assetId)](https://kanoa-software.netlify.app/systemFunctions/asset/addAssetTagUDTInstance.md): Creates the assets tag folder structure and assetOEE UDT instance for the given asset - [system.kanoa.asset.addAssetType(assetTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/addAssetType.md): Adds a new asset type. All assetTypeInfo keys are required unless otherwise stated - [system.kanoa.asset.addCounter(assetId, counterName, counterTypeName, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/addCounter.md): Called by tagUDT assetOEE\Configuration\infeedCounterId etc. to initialize the counterId for storing the count value against. - [system.kanoa.asset.addCounterType(countTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/addCounterType.md): Adds a new counter type - [system.kanoa.asset.addCounterTag(counterId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/addCounterTag.md): Adds a counter tag. Tag is stored in a counter folder under the asset - [system.kanoa.asset.addMode(modeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/addMode.md): Adds a new mode. modeInfo keys are required. - [system.kanoa.asset.addState(stateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/addState.md): Adds a new state. All stateInfo keys are required - [system.kanoa.asset.addStateCategory(stateCategoryInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/addStateCategory.md): Adds a state category. All stateCategoryInfo keys are required. - [system.kanoa.asset.copyAsset(assetId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/copyAsset.md): Makes a copy of the asset. This will be an identical copy including all the child assets, links to modes, states, items and attributes - [system.kanoa.asset.deleteAssetAttribute(assetAttrId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/deleteAssetAttribute.md): Deletes an asset attribute value - [system.kanoa.asset.deleteAssetGroup(assetGroupId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/deleteAssetGroup.md): Deletes an asset group - [system.kanoa.asset.deleteAssets(assetId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/deleteAssets.md): Deletes the asset and all children underneath. Will only succeed if there is no historical data for any of the assets, otherwise need to use the - [system.kanoa.asset.deleteAssetsWithForce(assetId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/deleteAssetsWithForce.md): Stored procedure that will forceably delete an asset including child assets and any entries in mode, start, shift, and quality tables - [system.kanoa.asset.deleteAssetTagStructure(assetId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/deleteAssetTagStructure.md): Deletes the assetOEE UDT instance for the given asset - [system.kanoa.asset.deleteAssetType(assetTypeId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/deleteAssetType.md): Deletes the assetType and all assetTypes underneath. SQL Cascade should handle deleting children and constraint will prevent the deletion of assetTypes that are in use. - [system.kanoa.asset.deleteCounter(counterId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/deleteCounter.md): Deletes the counter. SQL will prevent deletion of this counter if it has been used - [system.kanoa.asset.deleteCounterType(counterTypeId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/deleteCounterType.md): Deletes the counterType. SQL will prevent deletion of this counterType if it has been used - [system.kanoa.asset.deleteMode(modeId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/deleteMode.md): Deletes a mode. If the mode has been used then the enabled property will be set to False - [system.kanoa.asset.deleteState(stateId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/deleteState.md): Delete an state. If the state has been used then the enabled property will be set to False - [system.kanoa.asset.deleteStateCategory(stateCategoryId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/deleteStateCategory.md): Deletes the stateCategory. SQL will prevent deletion of this stateCategory if it has been used - [system.kanoa.asset.enableAssetStateLink(stateAssetLinkId, enabled)](https://kanoa-software.netlify.app/systemFunctions/asset/enableAssetStateLink.md): Updates the stateAssetLink enabled state. If the state is disabled, the link will not be enabled. - [system.kanoa.asset.enableMode(modeId, enabled)](https://kanoa-software.netlify.app/systemFunctions/asset/enableMode.md): Sets the enabled state of a mode. If an asset mode link is also found for this mode, the link will be enabled or disabled - [system.kanoa.asset.enableModeAssetLink(modeAssetLinkId, enabled)](https://kanoa-software.netlify.app/systemFunctions/asset/enableModeAssetLink.md): Update the modeAssetLink enabled mode. If the mode is disabled, we will not update the link. The mode needs to be enabled first - [system.kanoa.asset.exportAsset(assetId)](https://kanoa-software.netlify.app/systemFunctions/asset/exportAsset.md): Exports all config info for the passed in assetId including all the child assets, links to modes, states, items and attributes - [system.kanoa.asset.getAssets(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getAssets.md): Returns assets filtered by the provided parameters. Parameter keys are optional. - [system.kanoa.asset.getAssetAttributes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getAssetAttributes.md): Returns asset attributes filtered by the provided parameters. The Dictionary keys are optional unless stated as being required. - [system.kanoa.asset.getClosestAncestorAttribute(assetPath, assetAttrName)](https://kanoa-software.netlify.app/systemFunctions/asset/getClosestAncestorAttribute.md): Returns the assetAttrValue in order of the asset path tree. Returns None if the assetAttrValue isn't found. - [system.kanoa.asset.getAssetGroups(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getAssetGroups.md): Returns assetGroups. Used for filtering assets and also for grouping asset states by. paramsDict keys are optional - [system.kanoa.asset.getAssetModes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getAssetModes.md): Returns linked asset modes filtered by the given parameters. paramsDict keys are optional. - [system.kanoa.asset.getAssetOEEThresholds(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getAssetOEEThresholds.md): Returns an assets oee threshold settings. These settings are stored in the asset custom attribute '_oeeThreshold' and are inheritable by lower assets. - [system.kanoa.asset.getAssetStates(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getAssetStates.md): Returns states are linked with assets filtered by the passed parameters. Parameter keys are optional. - [system.kanoa.asset.getAssetTagPath(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getAssetTagPath.md): Given an assetPath or assetId, this function will return the tag path to the assetOEE tag UDT - [system.kanoa.asset.getAssetTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getAssetTypes.md): Returns assetTypes. Parameter keys are optional - [system.kanoa.asset.getCounter(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getCounter.md): Returns the counter based on the passed parameters. Keys are optional - [system.kanoa.asset.getCounterType(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getCounterType.md): Returns the counter type filtered by the given parameters. ParamsDict keys are optional - [system.kanoa.asset.getCurrentModeInfo(assetPath)](https://kanoa-software.netlify.app/systemFunctions/asset/getCurrentModeInfo.md): Returns the current mode info for a given assetPath - [system.kanoa.asset.getCurrentStateInfo(assetPath)](https://kanoa-software.netlify.app/systemFunctions/asset/getCurrentStateInfo.md): Returns the current state info for a given assetPath - [system.kanoa.asset.getModes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getModes.md): Returns modes filtered by the given parameters. paramsDict keys are optional - [system.kanoa.asset.getModeSourceId(modeSourceName)](https://kanoa-software.netlify.app/systemFunctions/asset/getModeSourceId.md): Returns the modeSourceId for a given modeSourceName. Used to store info on who set the modeEvent i.e. Operator, schedule, plc, etc. - [system.kanoa.asset.getModeTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getModeTypes.md): Returns mode types based on the passed parameters. paramsDict keys are optional - [system.kanoa.asset.getOperationalAssets(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getOperationalAssets.md): Returns assets that have production data. Used to filter out assets that have been created but are not in use. paramsDict keys are optional. - [system.kanoa.asset.getParentAsset(assetTypeName, assetPath)](https://kanoa-software.netlify.app/systemFunctions/asset/getParentAsset.md): Returns the parent asset of the given type for the given asset - [system.kanoa.asset.getProcessTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getProcessTypes.md): Returns process types such as 'batch', 'discrete, 'continuous'. Parameter keys are optional. - [system.kanoa.asset.getSiteTimezoneOffset(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getSiteTimezoneOffset.md): Given an assetPath or assetId, this function will return the offset and timezone for the site. - [system.kanoa.asset.getStateCategory(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getStateCategory.md): Returns state category data. paramsDict keys are optional - [system.kanoa.asset.getStates(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getStates.md): Returns states for the given parameters. paramsDict keys are optional - [system.kanoa.asset.getStateType(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/asset/getStateType.md): Returns state type data based on the parameters passed. paramsDict keys are optional - [system.kanoa.asset.importAsset(exportInfo, userId, createModes, createStates, createItems)](https://kanoa-software.netlify.app/systemFunctions/asset/importAsset.md): Imports all asset configuration includes child assets, links to modes, states, items and attributes - [system.kanoa.asset.linkAssetModes(assetIdList, modeList, userId, modeCodeList)](https://kanoa-software.netlify.app/systemFunctions/asset/linkAssetModes.md): links modes with assets - [system.kanoa.asset.linkAssetStates(assetIdList, stateIdList, stateCodeList, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/linkAssetStates.md): Links a list of assetIds with a list of stateIds. If a list of stateCodes is also provided, they will also be linked to the stateIds. - [system.kanoa.asset.populateAssetHierarchy()](https://kanoa-software.netlify.app/systemFunctions/asset/populateAssetHierarchy.md): Calls stored procedure spPopulateAssetHierarchy to rebuild the assetHierarchy_MAT table - [system.kanoa.asset.setAssetModeCode(modeAssetLinkId, modeCode)](https://kanoa-software.netlify.app/systemFunctions/asset/setAssetModeCode.md): Updates the mode code for an asset/ mode combo - [system.kanoa.asset.setAssetStateLinkCode(stateAssetLinkId, stateCode, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/setAssetStateLinkCode.md): This functions updates the stateCode for an asset - [system.kanoa.asset.unlinkAssetMode(modeAssetLinkId)](https://kanoa-software.netlify.app/systemFunctions/asset/unlinkAssetMode.md): Unlinks a mode from an asset. Checks to see if this mode/asset combo has been stored in the modeEvent table and disables it if it has, otherwise deletes it - [system.kanoa.asset.unlinkAssetState(stateAssetLinkId)](https://kanoa-software.netlify.app/systemFunctions/asset/unlinkAssetState.md): Unlinks states from assets. If this state has been recorded in the stateEvent table against an asset, the link is disabled - [system.kanoa.asset.updateAsset(assetInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/updateAsset.md): Updates an asset. All assetInfo keys are required. - [system.kanoa.asset.updateAssetField(assetId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/updateAssetField.md): Updates the asset configuration field with the passed value for the assetId - [system.kanoa.asset.updateAssetStateLinkField(stateAssetLinkId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/updateAssetStateLinkField.md): Updates the asset state link field with the passed value for the stateAssetLinkId - [system.kanoa.asset.updateAssetModeField(modeAssetLinkId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/updateAssetModeField.md): Updates the field with the passed value for the assetModeLink - [system.kanoa.asset.updateAssetGroup(assetGroupName, assetGroupId, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/updateAssetGroup.md): Updates an asset group - [system.kanoa.asset.updateAssetType(assetTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/updateAssetType.md): Updates an asset type. All assetTypeInfo keys are required. - [system.kanoa.asset.updateCounter(countInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/updateCounter.md): Updates a counter. All countInfo keys are required - [system.kanoa.asset.updateMode(modeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/updateMode.md): This function updates the mode and also updates the enabled bit for any asset mode links in case the enabled mode has changed - [system.kanoa.asset.updateState(stateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/updateState.md): Update the state info for a given stateId. All stateInfo keys are required. Updates stateAssetLink table accordingly - [system.kanoa.asset.updateStateCategory(stateCategoryInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/updateStateCategory.md): Updates a stateCategory. All stateCategoryInfo keys are required. SQL Constraints will prevent duplicate state categories from being created - [system.kanoa.asset.updateStateField(stateId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/updateStateField.md): Updates the passed field value for the given stateId. If the field is enabled, we will also update the assetLink table enabled bit - [system.kanoa.asset.upsertAssetStateLinks(assetStateList, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/upsertAssetStateLinks.md): Updated function that does fast bulks inserts/updates for linking assets and states - [system.kanoa.asset.upsertAssetModeLinks(assetModeList, userId)](https://kanoa-software.netlify.app/systemFunctions/asset/upsertAssetModeLinks.md): Updated function that does fast bulks inserts/updates for linking assets and modes - [Attribute System Functions](https://kanoa-software.netlify.app/systemFunctions/apiAttributeIntro.md): Provide system functions for the configuration and retrieval of dynamic attributes. - [system.kanoa.attribute.addAttribute(attrInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/attribute/addAttribute.md): Adds a new attribute. If this attribute already exists it will return the existing attributeId - [system.kanoa.attribute.addAttributeAssetLink(attrAssetInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/attribute/addAttributeAssetLink.md): Adds a new attributeAssetLink - [system.kanoa.attribute.addAttributeEvent(attributeEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/attribute/addAttributeEvent.md): Adds an attribute event record - [system.kanoa.attribute.deleteAttribute(attributeId, userId)](https://kanoa-software.netlify.app/systemFunctions/attribute/deleteAttribute.md): Deletes an attribute. SQL foreign key constraints will prevent the deletion an attribute that is being used - [system.kanoa.attribute.deleteAttributeAssetLink(attributeAssetLinkId, userId)](https://kanoa-software.netlify.app/systemFunctions/attribute/deleteAttributeAssetLink.md): Deletes an attribute asset link. FK constraints will prevent the deletion of an attribute asset link that is being used. - [system.kanoa.attribute.deleteAttributeEvent(attributeEventId, userId)](https://kanoa-software.netlify.app/systemFunctions/attribute/deleteAttributeEvent.md): Deletes an attribute event record - [system.kanoa.attribute.getAttributeAssetLinks(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/attribute/getAttributeAssetLinks.md): Returns attribute asset links based on the passed parameters - [system.kanoa.attribute.getAttributeEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/attribute/getAttributeEvents.md): Returns attribute events for the given parameters - [system.kanoa.attribute.getAttributeEventTotals(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/attribute/getAttributeEventTotals.md): Returns attribute event totals for the given parameters. paramsDict keys are optional. - [system.kanoa.attribute.getAttributes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/attribute/getAttributes.md): Returns attribute based on the passed parameters - [system.kanoa.attribute.getPreviousAttributeEvent(assetId, attributeId, tStamp)](https://kanoa-software.netlify.app/systemFunctions/attribute/getPreviousAttributeEvent.md): This will return the attributeEvent record prior to the passed in timestamp - [system.kanoa.attribute.setAttributeAssetLinkFromTag(attrAssetInfo)](https://kanoa-software.netlify.app/systemFunctions/attribute/setAttributeAssetLinkFromTag.md): Check to see if the attribute exists and is linked to an asset. Called from the measure tag UDT - [system.kanoa.attribute.updateAttribute(attrInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/attribute/updateAttribute.md): Updates an attribute - [system.kanoa.attribute.updateAttributeAssetLink(attrInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/attribute/updateAttributeAssetLink.md): Updates an attributeAssetLink - [system.kanoa.attribute.updateAttributeEvent(attributeEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/attribute/updateAttributeEvent.md): Updates an attribute event record - [Maintenance System Functions](https://kanoa-software.netlify.app/systemFunctions/apiCMMSIntro.md): Provide system functions for the configuration and retrieval of Kanoa Maintenance. - [system.kanoa.cmms.addImage(procedureStepCheckId, imageName, imageType, imageDescription, imageBytes, thumbnail, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addImage.md): Inserts a new image record and associates it with a procedure step check. - [system.kanoa.cmms.addMaintenanceSubType(maintenanceSubTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addMaintenanceSubType.md): Adds a maintenance sub type. All maintenanceSubTypeInfo keys are required unless otherwise stated - [system.kanoa.cmms.addMaintenanceType(maintenanceTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addMaintenanceType.md): Adds a maintenance type. All maintenanceTypeInfo keys are required unless otherwise stated - [system.kanoa.cmms.addProcedure(procedureInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addProcedure.md): Creates a new maintenance procedure and assigns it to a procedure category. Call this function when defining a new repeatable maintenance or inspection workflow (e.g. "Weekly Conveyor Belt Inspection") that technicians will later execute step by step. - [system.kanoa.cmms.addProcedureCategory(procedureCategoryInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addProcedureCategory.md): Creates a new procedure category, used to organize and group related maintenance procedures within the CMMS module (e.g. "Electrical", "HVAC", "Conveyors"). Categories can be nested by supplying a parentId, allowing a hierarchical category tree; pass None for parentId to create a top-level category. - [system.kanoa.cmms.addProcedureStep(procedureStepInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addProcedureStep.md): Adds a single step to an existing procedure identified by procedureId. - [system.kanoa.cmms.addProcedureStepCheck(checkInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addProcedureStepCheck.md): Adds a check to an existing procedure step identified by procedureStepId. - [system.kanoa.cmms.addProcedureStepCheckEvent(checkEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addProcedureStepCheckEvent.md): Records an event/result for a procedure step check during a specific execution of a procedure � for example, the value a technician entered for a check, the status of that check (e.g. pass/fail/skipped), and any comment left alongside it. - [system.kanoa.cmms.addProcedureStepEvent(procedureStepEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addProcedureStepEvent.md): Adds a procedure step event, recording the outcome of a single step within a procedure execution (e.g. an operator marking a step as completed, logging time spent, or leaving a comment) and links it back to the parent work order event. - [system.kanoa.cmms.addWorkOrder(workOrderInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addWorkOrder.md): Creates a new work order record from the field values supplied in workOrderInfo and records userId for the audit trail (createdBy). - [system.kanoa.cmms.addWorkOrderAlertGroups(workOrderId, alertGroupIdList, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addWorkOrderAlertGroups.md): Links a work order to one or more alert groups so that members of those groups receive notifications related to the work order (e.g. status changes, overdue alerts, or completion notices, depending on how alert groups are configured elsewhere in the system). - [system.kanoa.cmms.addWorkOrderEvent(workOrderEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addWorkOrderEvent.md): Creates a new work order event, representing a single scheduled or requested occurrence of a work order being carried out on an asset (as opposed to the work order definition/schedule itself) � for example, a specific technician's maintenance visit to a specific pump on a specific date. - [system.kanoa.cmms.addWorkOrderEventTechnician(workOrderEventTechnicianInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addWorkOrderEventTechnician.md): Logs a technician (and the time they spent) against a specific work order event. This is how multiple technicians are recorded against the same work order event. Call this once per technician, each with their own durationMinutes and, optionally, workTypeId. - [system.kanoa.cmms.addWorkOrderEventImage(workOrderEventId, imageName, imageType, imageDescription, imageBytes, thumbnail, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addWorkOrderEventImage.md): Creates a new image record attached to a work order event, storing the full-resolution image bytes alongside an optional thumbnail, - [system.kanoa.cmms.addWorkOrderEventMetaData(workOrderEventMetaInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addWorkOrderEventMetaData.md): Adds a custom metadata value to a specific work order event. Metadata is stored as a name/value pair (metaDataName / metaDataValue) and is associated with the work order event via workOrderEventId � - [system.kanoa.cmms.addWorkOrderEventStatus(statusInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addWorkOrderEventStatus.md): Creates a new work order event status definition and returns the id of the newly created record. Call this when setting up a new status value that can be assigned to individual work order events during execution (for example, a technician check-in state distinct from the overall WorkOrderStatus of the work order). - [system.kanoa.cmms.addWorkOrderEventStatusCategory(statusCategoryInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addWorkOrderEventStatusCategory.md): Creates a new work order event status category record. Status categories are a grouping/classification layer above individual work-order-event statuses � - [system.kanoa.cmms.addWorkOrderPriority(priorityInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addWorkOrderPriority.md): Adds a new work order priority level to the system (e.g. "Low", "Medium", "High", "Emergency"). - [system.kanoa.cmms.addWorkOrderScheduleEvent(workOrderEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addWorkOrderScheduleEvent.md): Adds a single work order schedule event � a concrete, dated work order instance that has been generated from a recurring work order schedule (see setWorkOrderSchedule) or triggered by a condition-based rule. - [system.kanoa.cmms.addWorkOrderStatus(statusInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addWorkOrderStatus.md): Creates a new work order status code (e.g. "Open", "In Progress", "On Hold", "Closed") that can later be assigned to a work order. Call this when configuring the list of statuses a work order is allowed to move through, rather than when changing an individual work order's current status. - [system.kanoa.cmms.addWorkType(workTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/addWorkType.md): Adds a new work type to the system (e.g. "Design", "Repair") for classifying the kind of work a technician performed on a work order event, logged via addWorkOrderEventTechnician. - [system.kanoa.cmms.checkWorkOrderConditions()](https://kanoa-software.netlify.app/systemFunctions/cmms/checkWorkOrderConditions.md): Evaluates all active condition-based work order triggers to determine whether any of them have been satisfied and are ready to generate a new work order event. - [system.kanoa.cmms.checkWorkOrderSchedule()](https://kanoa-software.netlify.app/systemFunctions/cmms/checkWorkOrderSchedule.md): This function runs periodically to see if we are ready to generate a workOrder event based on schedule. - [system.kanoa.cmms.deleteImage(chkImageId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteImage.md): Deletes a procedure step check image record from the CMMS image table. - [system.kanoa.cmms.deleteMaintenanceSubType(maintenanceSubTypeId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteMaintenanceSubType.md): Deletes an existing maintenance sub type identified by maintenanceSubTypeId. Referential integrity is enforced at the database level: - [system.kanoa.cmms.deleteMaintenanceType(maintenanceTypeId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteMaintenanceType.md): Deletes an existing maintenance type identified by maintenanceTypeId. - [system.kanoa.cmms.deleteProcedure(procedureId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteProcedure.md): Deletes a procedure by id. Call this to permanently remove a procedure that is no longer needed, such as one created in error or superseded by a revised version. - [system.kanoa.cmms.deleteProcedureCategory(procedureCategoryId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteProcedureCategory.md): Deletes a procedure category by id. Use this to remove a category used to organize and classify procedures once it is no longer needed. The underlying SQL will prevent deletion if the category is still in use � for example, - [system.kanoa.cmms.deleteProcedureStep(procedureStepId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteProcedureStep.md): Deletes a single step from a procedure by id. Call this when a step was added in error or is no longer part of the correct procedure workflow. - [system.kanoa.cmms.deleteProcedureStepCheck(procedureStepCheckId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteProcedureStepCheck.md): Deletes a procedure step check by id. A procedure step check is typically a verification item (e.g. a pass/fail or measurement check) attached to a procedure step, and this function removes it when it was added in error or is no longer required. - [system.kanoa.cmms.deleteProcedureStepCheckEvent(procedureStepCheckEventId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteProcedureStepCheckEvent.md): Deletes a single procedure step check event record, identified by its ID, and records the deleting user for audit purposes. - [system.kanoa.cmms.deleteWorkOrder(workOrderId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkOrder.md): Deletes the work order identified by workOrderId, recording userId for the audit trail. - [system.kanoa.cmms.deleteWorkOrderAlertGroups(workOrderId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkOrderAlertGroups.md): Removes all alert group links currently associated with a work order. Use this when a work order's notification setup needs to be cleared out entirely � - [system.kanoa.cmms.deleteWorkOrderCondition(workOrderId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkOrderCondition.md): Deletes a condition-based trigger from a work order, permanently removing the association between the specified work order and the condition (e.g. a sensor threshold or counter rule) that would otherwise auto-generate future work orders. - [system.kanoa.cmms.deleteWorkOrderEvent(workOrderEventId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkOrderEvent.md): Deletes an existing work order event by id. This removes a single scheduled/requested occurrence of a work order (for example, one technician's specific maintenance visit), not the parent work order definition itself. - [system.kanoa.item.deleteWorkOrderEventImage(workOrderEventImageId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkOrderEventImage.md): Deletes a single image record from the cmms.workOrderEventImage table, identified by its workOrderEventImageId. - [system.kanoa.cmms.deleteWorkOrderEventMetaData(workOrderEventMetaDataId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkOrderEventMetaData.md): Deletes a single work order event metadata entry identified by workOrderEventMetaDataId. - [system.kanoa.cmms.deleteWorkOrderEventStatus(workOrderEventStatusId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkOrderEventStatus.md): Deletes a work order event status record identified by workOrderEventStatusId. - [system.kanoa.cmms.deleteWorkOrderEventStatusCategory(workOrderEventStatusCategoryId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkOrderEventStatusCategory.md): Deletes an existing work order event status category identified by workOrderEventStatusCategoryId. - [system.kanoa.cmms.deleteWorkOrderEventTechnician(workOrderEventTechnicianId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkOrderEventTechnician.md): Deletes a single technician entry from a work order event, identified by workOrderEventTechnicianId. This permanently removes that technician's logged time from the event. It does not affect any other technician entries logged against the same event. - [system.kanoa.cmms.deleteWorkOrderPriority(workOrderPriorityId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkOrderPriority.md): Deletes a work order priority from the system. The underlying SQL includes a referential-integrity guard: - [system.kanoa.cmms.deleteWorkOrderSchedule(workOrderId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkOrderSchedule.md): Deletes the recurring schedule attached to a work order, identified by workOrderId. - [system.kanoa.cmms.deleteWorkOrderStatus(workOrderStatusId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkOrderStatus.md): Deletes a work order status code from the system by its id. - [system.kanoa.cmms.deleteWorkType(workTypeId, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/deleteWorkType.md): Deletes a work type from the system. The underlying SQL includes a referential-integrity guard: - [system.kanoa.cmms.getConditions(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getConditions.md): Returns the available condition-based monitoring definitions � the reusable condition TYPES - [system.kanoa.cmms.getEnteredValueState(value, checkConfig)](https://kanoa-software.netlify.app/systemFunctions/cmms/getEnteredValueState.md): Evaluates a manually entered check value (for example, a meter reading or inspection check) against the check's configuration to determine which item state the value falls into. - [system.kanoa.cmms.getImage(chkImageId)](https://kanoa-software.netlify.app/systemFunctions/cmms/getImage.md): Retrieves the full-resolution image file associated with a given CMMS image record. Given a chkImageId, - [system.kanoa.cmms.getImageData(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getImageData.md): Returns a dataset of CMMS image records, filtered according to the keys supplied in paramsDict. - [system.kanoa.cmms.getImageThumbnail(chkImageId)](https://kanoa-software.netlify.app/systemFunctions/cmms/getImageThumbnail.md): Retrieves a resized, lower-resolution thumbnail version of the image associated with the given chkImageId. - [system.kanoa.cmms.getMaintenanceBacklogAging(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceBacklogAging.md): Returns open maintenance backlog aging filtered by the given parameters - [system.kanoa.cmms.getMaintenanceLaborHoursSummary(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceLaborHoursSummary.md): Returns labor hours summary for the given period: technician-logged hours, procedure step - [system.kanoa.cmms.getMaintenanceLaborHoursByTechnician(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceLaborHoursByTechnician.md): Returns technician-logged labor hours for the given period, grouped by technician. When - [system.kanoa.cmms.getMaintenanceLaborHoursByWorkOrder(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceLaborHoursByWorkOrder.md): Returns technician hours, procedure step hours, total duration (created/open through - [system.kanoa.cmms.getMaintenanceKPIByAsset(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceKPIByAsset.md): Returns maintenance KPI summary grouped by asset. When assetId is an area/site, includes every - [system.kanoa.cmms.getMaintenanceKPIByAssignedUser(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceKPIByAssignedUser.md): Returns maintenance KPI summary grouped by assigned user - [system.kanoa.cmms.getMaintenanceKPIByType(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceKPIByType.md): Returns maintenance KPI summary grouped by maintenance type - [system.kanoa.cmms.getMaintenanceKPIDailyTrend(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceKPIDailyTrend.md): Returns daily maintenance KPI trend filtered by the given parameters. When assetId is an - [system.kanoa.cmms.getMaintenanceKPISummary(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceKPISummary.md): Returns maintenance KPI summary filtered by the given parameters - [system.kanoa.cmms.getMaintenanceSubTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceSubTypes.md): Retrieves maintenance sub types configured in the system, such as "Bearing Replacement" or "Belt Replacement" under a parent maintenance type like "Mechanical". - [system.kanoa.cmms.getMaintenanceWorkflowChurn(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceWorkflowChurn.md): Returns work orders with workflow churn / reopen-like behavior - [system.kanoa.cmms.getPreventiveMaintenanceCompliance(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getPreventiveMaintenanceCompliance.md): Returns preventive maintenance compliance metrics for the given period - [system.kanoa.cmms.getMaintenanceMTBFByAsset(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceMTBFByAsset.md): Returns MTBF grouped by asset filtered by the given parameters - [system.kanoa.cmms.getMaintenanceMTBFSummary(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceMTBFSummary.md): Returns MTBF summary for the given period. When assetId is an area/site, includes every - [system.kanoa.cmms.getMaintenanceTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getMaintenanceTypes.md): Retrieves the top-level maintenance types configured in the system, such as "Corrective" or "Preventive". - [system.kanoa.cmms.getProcedureCategory(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getProcedureCategory.md): Retrieves procedure category records, optionally filtered by ID, name, path, or enabled status. - [system.kanoa.cmms.getProcedures(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getProcedures.md): Retrieves procedure records from the system, optionally filtered by ID, name, or enabled status. Use this to populate a list or dropdown of available maintenance procedures on a screen, or to look up a specific procedure's details before displaying its steps and checks. - [system.kanoa.cmms.getProcedureStepCheckEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getProcedureStepCheckEvents.md): Retrieves procedure step check event records - the individual check results captured when a procedure step check was actually performed during a work order's execution. - [system.kanoa.cmms.getProcedureStepChecks(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getProcedureStepChecks.md): Retrieves procedure step check definitions - the individual checks configured for a step within a procedure template, as opposed to the check events generated when those checks are actually performed. - [system.kanoa.cmms.getProcedureStepEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getProcedureStepEvents.md): Retrieves procedure step event records from the Kanoa CMMS system. Call this function when you need to look up the history of events (such as completions, state changes, or other logged activity) tied to one or more procedure steps, optionally scoped to a specific work order event. - [system.kanoa.cmms.getProcedureSteps(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getProcedureSteps.md): Retrieves the individual steps that make up one or more procedures in the Kanoa CMMS system. Use this function to populate a procedure's step list in a UI, to check which steps are required versus optional, or to filter down to the steps belonging to a particular procedure. - [system.kanoa.cmms.getScheduleTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getScheduleTypes.md): Looks up the schedule-trigger types available for work order schedules (e.g. distinguishing a time-based "Schedule" from a condition- or manual-triggered type). - [system.kanoa.cmms.getWorkOrderAlertGroups(workOrderId)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderAlertGroups.md): Retrieves the alert groups currently linked to a work order. Use this to check who (which groups) will be notified about a given work order � - [system.kanoa.cmms.getWorkOrderConditions(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderConditions.md): Returns workorder conditions. paramsDict keys are optional - [system.kanoa.cmms.getWorkOrderEventCheckStatus(workOrderEventId)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderEventCheckStatus.md): Returns the status of every procedure step and check associated with a given work order event. Each row in the returned dataset describes either a step or an individual check within a step, including whether it has been completed, its pass/fail result, and whether it is required. - [system.kanoa.cmms.getWorkOrderEventCount(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderEventCount.md): Returns a count of work order events matching the optional filter criteria supplied in paramsDict, without requiring the caller to fetch the full set of matching event records. - [system.kanoa.cmms.getWorkOrderEventImage(workOrderEventImageId)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderEventImage.md): Retrieves the full-resolution image bytes for a single work order event image record, identified by its workOrderEventImageId. - [system.kanoa.cmms.getWorkOrderEventImageData(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderEventImageData.md): Returns a filtered listing of work order event image metadata, optionally including the full image and/or thumbnail byte data, based on a single paramsDict of filter criteria. - [system.kanoa.cmms.getWorkOrderEventImageThumbnail(workOrderEventImageId)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderEventImageThumbnail.md): Retrieves only the thumbnail byte data for a single work order event image record, identified by its workOrderEventImageId. - [system.kanoa.cmms.getWorkOrderEventMetaData(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderEventMetaData.md): Returns work order event metadata records matching the supplied filter criteria. - [system.kanoa.cmms.getWorkOrderEventStatus(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderEventStatus.md): Retrieves work order event status records, optionally filtered by any combination of keys in paramsDict. - [system.kanoa.cmms.getWorkOrderEventStatusCategory(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderEventStatusCategory.md): Returns work order event status category records, optionally filtered by the criteria supplied in paramsDict. - [system.kanoa.cmms.getWorkOrderEventStatusChange(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderEventStatusChange.md): Returns work order status change information � a history of when a work order event transitioned from one status to another (for example, from Open to In Progress to Completed). - [system.kanoa.cmms.getWorkOrderEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderEvents.md): Retrieves work order events matching the optional filter criteria supplied in paramsDict. - [system.kanoa.cmms.getWorkOrderEventTechnicians(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderEventTechnicians.md): Retrieves the technicians logged against a work order event, and how long each one worked (durationMinutes), optionally filtered by id, work order event, or technician. - [system.kanoa.cmms.getWorkOrderPriorities(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderPriorities.md): Retrieves work order priorities configured in the system (e.g. "Low", "Medium", "High", "Emergency"), optionally filtered by id, name, or enabled status. - [system.kanoa.cmms.getWorkOrderSchedule(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderSchedule.md): Returns work order schedule records, optionally filtered using the keys supplied in paramsDict. - [system.kanoa.cmms.getWorkOrderStatus(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrderStatus.md): Retrieves work order status codes configured in the system (e.g. "Open", "In Progress", "On Hold", "Closed"). - [system.kanoa.cmms.getWorkOrders(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkOrders.md): Queries the CMMS work order table and returns the matching records as a dataset. - [system.kanoa.cmms.getWorkTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/cmms/getWorkTypes.md): Retrieves work types configured in the system, the kind of work a technician performed on a work order event (e.g. "Design", "Repair"), as logged via addWorkOrderEventTechnician. - [system.kanoa.cmms.processImage(filePath, procedureStepCheckId, chkImageId, imageName, imageType, imageDescription, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/processImage.md): Processes a raw image file from disk for storage in the CMMS. - [system.kanoa.cmms.processWorkOrderEventImage(filePath, workOrderEventId, workOrderEventImageId, imageName, imageType, imageDescription, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/processWorkOrderEventImage.md): Given the filesystem path to a raw uploaded image, this function converts the image to JPG format, generates a thumbnail, and stores both in the database as an image attached to a work order event. - [system.kanoa.cmms.rruleToDates(rruleStr, startDate, maxResults)](https://kanoa-software.netlify.app/systemFunctions/cmms/rruleToDates.md): Expands an RFC 5545 recurrence rule (RRULE) string into a concrete list of calendar dates, starting from a given date and capped at a maximum number of results. - [system.kanoa.cmms.setProcedureStepCheckSortOrder(procedureStepCheckId, sortOrder, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/setProcedureStepCheckSortOrder.md): Reorders a single procedure step check within its parent procedure step by assigning it a new sort order position. - [system.kanoa.cmms.setProcedureStepSortOrder(procedureStepId, sortOrder, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/setProcedureStepSortOrder.md): Reorders a single procedure step within its parent procedure by assigning it a new sort order position. - [system.kanoa.cmms.setWorkOrderCondition(workOrderConditionInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/setWorkOrderCondition.md): Creates or updates a condition-based trigger for a work order, linking a monitored counter (e.g. a vibration or temperature tag) to a condition definition so that crossing the configured threshold will auto-generate the work order. - [system.kanoa.cmms.setWorkOrderSchedule(workOrderInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/setWorkOrderSchedule.md): Creates a new recurring schedule for a work order from the values supplied in workOrderInfo. - [system.kanoa.cmms.updateImage(chkImageId, procedureStepCheckId, imageName, imageType, imageDescription, imageBytes, thumbnail, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateImage.md): Modifies an existing image record associated with a procedure step check. - [system.kanoa.cmms.updateMaintenanceSubType(maintenanceSubTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateMaintenanceSubType.md): Updates a maintenance sub type. All maintenanceSubTypeInfo keys are required unless otherwise stated - [system.kanoa.cmms.updateMaintenanceSubTypeField(maintenanceSubTypeId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateMaintenanceSubTypeField.md): Updates a single named field on an existing maintenance sub type record, identified by maintenanceSubTypeId. - [system.kanoa.cmms.updateMaintenanceType(maintenanceTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateMaintenanceType.md): Updates a maintenance type. All maintenanceTypeInfo keys are required unless otherwise stated - [system.kanoa.cmms.updateProcedure(procedureInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateProcedure.md): Updates an existing procedure's core details, including its name, category assignment, and enabled status. Call this function when a procedure needs to be renamed, re-categorized, or enabled/disabled, passing the procedureId of the record to update along with the userId performing the change for audit purposes. - [system.kanoa.cmms.updateProcedureCategory(procedureCategoryInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateProcedureCategory.md): Updates an existing procedure category's name, parent assignment, or enabled status. - [system.kanoa.cmms.updateProcedureField(procedureId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateProcedureField.md): Updates a single named field on an existing procedure record, identified by procedureId, without needing to supply the procedure's other fields. - [system.kanoa.cmms.updateProcedureStep(procedureStepInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateProcedureStep.md): Updates an existing procedure step definition, such as a step's name, description, sort order, or estimated duration. - [system.kanoa.cmms.updateProcedureStepCheck(checkInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateProcedureStepCheck.md): Updates an existing procedure step check � one of the individual verification items (a measurement, pass/fail check, or reading) attached to a procedure step. - [system.kanoa.cmms.updateProcedureStepCheckEvent(checkEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateProcedureStepCheckEvent.md): Updates an existing procedure step check event � the recorded result of a single check performed during a work order's execution of a procedure step, such as a logged value, pass/fail status, or comment. - [system.kanoa.cmms.updateProcedureStepEvent(procedureStepInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateProcedureStepEvent.md): Updates an existing procedure step event � the record of a single procedure step's execution within a work order, such as its completion status, actual time spent, or comment. - [system.kanoa.cmms.updateWorkOrder(workOrderInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrder.md): Updates an existing work order identified by workOrderId within workOrderInfo, using userId for the audit trail (changedBy). - [system.kanoa.cmms.updateWorkOrderConditionField(workOrderConditionId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderConditionField.md): Updates a single field on an existing work order condition, identified by workOrderConditionId, to the passed value. - [system.kanoa.cmms.updateWorkOrderEvent(workOrderEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderEvent.md): Updates an existing work order event, identified by the workOrderEventId key inside workOrderEventInfo. - [system.kanoa.cmms.updateWorkOrderEventMetaData(workOrderEventMetaInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderEventMetaData.md): Updates an existing work order event metadata entry identified by workOrderEventMetaDataId. - [system.kanoa.cmms.updateWorkOrderEventStatus(statusInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderEventStatus.md): Updates an existing work order event status record, replacing its field values with the contents of statusInfo. - [system.kanoa.cmms.updateWorkOrderEventStatusCategory(statusCategoryInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderEventStatusCategory.md): Updates an existing work order event status category identified by workOrderEventStatusCategoryId. - [system.kanoa.cmms.updateWorkOrderEventStatusField(workOrderEventStatusId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderEventStatusField.md): Updates a single named field on a work order event status record identified by workOrderEventStatusId. Call this for a targeted, single-column change (for example, toggling enabled or renaming a status) without having to resupply the entire status dictionary as required by updateWorkOrderEventStatus. - [system.kanoa.cmms.updateWorkOrderEventTechnician(workOrderEventTechnicianInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderEventTechnician.md): Updates an existing work order event technician entry's full record (technician, work order event, work type, and duration). - [system.kanoa.cmms.updateWorkOrderField(workOrderId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderField.md): Updates a single named field on an existing work order, identified by workOrderId, to the passed value. - [system.kanoa.cmms.updateWorkOrderPriority(priorityInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderPriority.md): Updates an existing work order priority's full record (name, enabled status, and sort order). - [system.kanoa.cmms.updateWorkOrderPriorityField(workOrderPriorityId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderPriorityField.md): Updates a single field on an existing work order priority record, identified by workOrderPriorityId, without requiring the full record to be supplied. - [system.kanoa.cmms.updateWorkOrderScheduleField(workOrderScheduleId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderScheduleField.md): Updates a single named field on an existing work order schedule, identified by workOrderScheduleId, to the supplied value. - [system.kanoa.cmms.updateWorkOrderStatus(statusInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderStatus.md): Updates an existing work order status code identified by workOrderStatusId. - [system.kanoa.cmms.updateWorkOrderStatusField(workOrderStatusId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkOrderStatusField.md): Updates a single named field on an existing work order status, identified by workOrderStatusId, without requiring the rest of the record's values to be resupplied. - [system.kanoa.cmms.updateWorkType(workTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkType.md): Updates an existing work type's full record (name, color, enabled status, and sort order). - [system.kanoa.cmms.updateWorkTypeField(workTypeId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/cmms/updateWorkTypeField.md): Updates a single field on an existing work type record, identified by workTypeId, without requiring the full record to be supplied. - [Config System Functions](https://kanoa-software.netlify.app/systemFunctions/apiConfigIntro.md): Provide system functions for the MES application configuration - [system.kanoa.config.deleteNavigationItem(id, userId)](https://kanoa-software.netlify.app/systemFunctions/config/deleteNavigationItem.md): Deletes a navigation menu item - [system.kanoa.config.clearNavigationHistory(self)](https://kanoa-software.netlify.app/systemFunctions/config/clearNavigationHistory.md): Clears the navigation history in session custom properties - [system.kanoa.config.addNavigationItem(navItemInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/config/addNavigationItem.md): Given a dictionary of information, adds a navigation menu item - [system.kanoa.config.getConfig(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/config/getConfig.md): Get the application configuration settings. paramsDict keys are optional. - [system.kanoa.config.getConfigType(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/config/getConfigType.md): Get the application configuration type settings. paramsDict keys are optional - [system.kanoa.config.getDBName(app)](https://kanoa-software.netlify.app/systemFunctions/config/getDBName.md): Get the database name source - [system.kanoa.config.getNavigation(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/config/getNavigation.md): Returns navigation menu items filtered by the given parameters: paramsDict keys are optional - [system.kanoa.config.getTagProvider(app)](https://kanoa-software.netlify.app/systemFunctions/config/getTagProvider.md): Get the tag provider name - [system.kanoa.config.saveConfig(configInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/config/saveConfig.md): Adds or updates the config information - [system.kanoa.config.updateNavigationItem(navItemInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/config/updateNavigationItem.md): Updates a navigation menu item - [Dashboard System Functions](https://kanoa-software.netlify.app/systemFunctions/apiDashboardIntro.md): Provide system functions for the configuration and retrieval of dashboards and marquees - [system.kanoa.dashboard.addBreakpoint(breakpointInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/addBreakpoint.md): Create a new breakpoint - [system.kanoa.dashboard.addDashboard(dashboardInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/addDashboard.md): Create a new dashboard. - [system.kanoa.dashboard.addDashboardWidget(widgetInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/addDashboardWidget.md): Adds a widget to a dashboards breakpoint - [system.kanoa.dashboard.addFolder(folderInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/addFolder.md): Create a new folder for storing dashboards - [system.kanoa.dashboard.addMarquee(marqueeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/addMarquee.md): Create a new marquee - [system.kanoa.dashboard.addMarqueeDashboard(marqueeDashboardInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/addMarqueeDashboard.md): Add a dashboard to a marquee - [system.kanoa.dashboard.addMarqueeDisplay(marqueeDisplayInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/addMarqueeDisplay.md): Adds a new display entry to the marqueeDisplay table - [system.kanoa.dashboard.addScreenDashboard(screenDashboardInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/addScreenDashboard.md): Creates a new screen dashboard record linking a dashboard to a screen. - [system.kanoa.dashboard.addUserDashboard(userDashboardInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/addUserDashboard.md): Adds a new user dashboard - [system.kanoa.dashboard.addWidget(widgetInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/addWidget.md): Create a new widget. - [system.kanoa.dashboard.addWidgetCategory(categoryInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/addWidgetCategory.md): Create a new widget category - [system.kanoa.dashboard.deleteDashboard(dashboardId, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/deleteDashboard.md): Deletes a dashboard. - [system.kanoa.dashboard.deleteFolder(folderId, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/deleteFolder.md): Delete a folder. - [system.kanoa.dashboard.deleteScreenDashboard(screenDashboardId, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/deleteScreenDashboard.md): Delete a screenDashboard. - [system.kanoa.dashboard.deleteUserDashboard(userDashboardId, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/deleteUserDashboard.md): Delete a userDashboard. - [system.kanoa.dashboard.deleteMarquee(marqueeId, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/deleteMarquee.md): Delete a marquee. - [system.kanoa.dashboard.deleteMarqueeDashboard(marqueeDashboardId, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/deleteMarqueeDashboard.md): Delete a marquee's dashboard. - [system.kanoa.dashboard.deleteMarqueeDisplay(marqueeDisplayId, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/deleteMarqueeDisplay.md): Delete a marquee display. - [system.kanoa.dashboard.deleteWidget(widgetId, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/deleteWidget.md): Deletes a widget - [system.kanoa.dashboard.exportDashboard(dashboardId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/exportDashboard.md): Exports dashboard information along with the widgets that it's constructed with - [system.kanoa.dashboard.exportWidget(widgetId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/exportWidget.md): Exports widgets - [system.kanoa.dashboard.getDashBoardInfo(dashboardId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getDashboardInfo.md): Get all dashboard info including breakpoints and widgets for the specified dashboardId - [system.kanoa.dashboard.getDashboards(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getDashboards.md): Get the dashboards requested dashboards. - [system.kanoa.dashboard.getBreakpoints(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getBreakpoints.md): Get breakpoints based on the paramsDict - [system.kanoa.dashboard.getDashboardWidgets(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getDashboardWidgets.md): Returns widgets based on the passed paramaters - [system.kanoa.dashboard.getFolders(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getFolders.md): Get dashboard folders filtered by the parameters. paramsDict keys are optional. - [system.kanoa.dashboard.getMarquees(paramsDict, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getMarquees.md): Returns marquees filtered by the passed parameters - [system.kanoa.dashboard.getMarqueeDashboards(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getMarqueeDashboards.md): Return marquee dashboards filtered by the passed parameters. paramsDict keys are optional. - [system.kanoa.dashboard.getMarqueeDisplay(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getMarqueeDisplay.md): Return the marquees for the requested display. - [system.kanoa.dashboard.getScreenDashboards(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getScreenDashboards.md): Get the dashboards associated with an asset and a screen (view) - [system.kanoa.dashboard.getUserDashboards(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getUserDashboards.md): Get the users default and favorite dashboards - [system.kanoa.dashboard.getWidgets(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getWidgets.md): Gets the requested widgets. Dictionary keys are optional. - [system.kanoa.dashboard.importDashboard(exportInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/importDashboard.md): Imports dashboard information along with the widgets that it's constructed with, and creates a new dashboard on the target system - [system.kanoa.dashboard.importWidget(exportInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/importWidget.md): Imports widget information along with its widget category - [system.kanoa.dashboard.getWidgetCategory(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getWidgetCategory.md): Gets the requested widget categories. paramDict keys are optional. - [system.kanoa.dashboard.getWidgetFilters(page, viewParams, sessionCustomProps, clientTZ)](https://kanoa-software.netlify.app/systemFunctions/dashboard/getWidgetFilters.md): This function will parse the widget view parameters and either grab the assetPath and date range from the global session properties or set them to the passed in values - [system.kanoa.dashboard.updateDashboard(dashboardInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/updateDashboard.md): Updates a dashboard. - [system.kanoa.dashboard.updateDashboardWidget(dashboardWidgetInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/updateDashboardWidget.md): Updates a dashboards widget - [system.kanoa.dashboard.updateMarqueeDashboard(marqueeDashboardInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/updateMarqueeDashboard.md): Update a marquee dashboard - [system.kanoa.dashboard.updateScreenDashboard(screenDashboardInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/updateScreenDashboard.md): Updates a screen dashboard - [system.kanoa.dashboard.updateUserDashboard(userDashboardInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/updateUserDashboard.md): Updates a user dashboard - [system.kanoa.dashboard.updateUserDashboardField(userDashboardId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/updateUserDashboardField.md): Updates the field with the passed value for the userDashboardId - [system.kanoa.dashboard.updateFolder(folderInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/updateFolder.md): Updates a folder - [system.kanoa.dashboard.updateMarquee(marqueeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/updateMarquee.md): Update a marquee - [system.kanoa.dashboard.updateWidget(widgetInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/dashboard/updateWidget.md): Updates a widget. - [Date System Functions](https://kanoa-software.netlify.app/systemFunctions/apiDateIntro.md): Provides a set of helper function for date time operations - [system.kanoa.date.getAssetTimeZoneInfo(assetPath)](https://kanoa-software.netlify.app/systemFunctions/date/getAssetTimeZoneInfo.md): Given an assetPath, this function will return the timezone - [system.kanoa.date.getClientOffsetMinsFromGateway(clientTZ, tStamp)](https://kanoa-software.netlify.app/systemFunctions/date/getClientOffsetMinsFromGateway.md): This function will return the timezone offset between the client and the gateway for the date passed in. - [system.kanoa.date.getDateRange(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/date/getDateRange.md): Returns predefined date ranges. If assetPath is provided, 'Current Run', 'Current Shift' and 'Previous Shift' dates can be returned - [system.kanoa.date.getTimezones()](https://kanoa-software.netlify.app/systemFunctions/date/getTimezones.md): Returns a list of dictionaries of timezone information, sorted alphabetically by name - [system.kanoa.date.getTimeZoneOffsetMins(timezone, tStamp)](https://kanoa-software.netlify.app/systemFunctions/date/getTimeZoneOffsetMins.md): Given a timezone and a timestamp, this function will return the timezone offset minutes from the database time - [system.kanoa.date.getTimezoneOffsets(timezones, startDate, endDate)](https://kanoa-software.netlify.app/systemFunctions/date/getTimezoneOffsets.md): Returns a dictionary of offset minutes for the start and end date for a given list of timezones i.e ['Pacific Standard Time'] - [Event System Functions](https://kanoa-software.netlify.app/systemFunctions/apiEventIntro.md): Provide system functions for the MES application event history - [system.kanoa.event.addCounterEvent(counterInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/event/addCounterEvent.md): Adds a counter value. This function supports itemStates, items and workorders. - [system.kanoa.event.addModeEvent(assetId, field, value, tStamp, modeSourceId, userId)](https://kanoa-software.netlify.app/systemFunctions/event/addModeEvent.md): Adds a new modeEvent record with a single value to the specified mode event table column such as modeCode, workOrderId, or itemId fields - [system.kanoa.event.addPerformanceEvent(performanceEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/event/addPerformanceEvent.md): Adds a new performance event - [system.kanoa.event.addProductionEvent(productionEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/event/addProductionEvent.md): Adds a new modeEvent record. . Similar to addModeEvent, but updates all fields. - [system.kanoa.event.addStateEvent(stateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/event/addStateEvent.md): Adds a stateEvent record. All stateInfo keys are required. - [system.kanoa.event.assetOperationChange(assetOperationInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/event/assetOperationChange.md): Call this function whenever the mode on an asset changes. Will set all child assets to the same mode if includeChildren is true - [system.kanoa.event.checkForDuplicateModeEvents(paramsDict, userId)](https://kanoa-software.netlify.app/systemFunctions/event/checkForDuplicateModeEvents.md): We should never have duplicate contiguous modeEvent entries that are the same mode, workorder, item, asset. - [system.kanoa.event.checkItemInfo(assetId, workOrderName, itemName, userId)](https://kanoa-software.netlify.app/systemFunctions/event/checkItemInfo.md): This function checks to see if this work order or item exists, and if not will create the workorder and item and add an item-asset link. - [system.kanoa.event.clearZeroedCountEvents(assetId, tStamp, userId)](https://kanoa-software.netlify.app/systemFunctions/event/clearZeroedCountEvents.md): We added a zero at the beginning of a run to prevent calculated counts from occurring, but now the run has ended or a shift change has occurred. - [system.kanoa.event.deleteCounterEvents(counterInfo)](https://kanoa-software.netlify.app/systemFunctions/event/deleteCounterEvents.md): Delete counts event based on the passed in counterInfo. - [system.kanoa.event.deleteModeEvent(modeEventId, userId)](https://kanoa-software.netlify.app/systemFunctions/event/deleteModeEvent.md): Deletes the mode event - [system.kanoa.event.deleteModeEvents(paramsDict, userId)](https://kanoa-software.netlify.app/systemFunctions/event/deleteModeEvents.md): Deletes modeEvent records for the given asset and date range - [system.kanoa.event.deletePerformanceEvent(performanceEventId, userId)](https://kanoa-software.netlify.app/systemFunctions/event/deletePerformanceEvent.md): Delete a performance event - [system.kanoa.event.deleteStateEvent(stateEventId, userId)](https://kanoa-software.netlify.app/systemFunctions/event/deleteStateEvent.md): Deletes a stateEvent record - [system.kanoa.event.deleteStateEvents(paramsDict, userId)](https://kanoa-software.netlify.app/systemFunctions/event/deleteStateEvents.md): Deletes stateEvent records for the given asset and date range - [system.kanoa.event.getAdjacentStateEvent(assetId, tStamp, ascending)](https://kanoa-software.netlify.app/systemFunctions/event/getAdjacentStateEvent.md): Gets the previous or next stateEvent entry for the assetId based on the tStamp passed and the direction to look i.e. ascending or 'descending - [system.kanoa.event.getAssetProductionEventsByShift(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getAssetPerformanceEventsByShift.md): Returns production data by shift filtered by the given parameters - [system.kanoa.event.getAssetProductionEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getAssetProductionEvents.md): Returns asset production data based on the given parameters - [system.kanoa.event.getAssetProductionEventsByDay(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getAssetProductionEventsByDay.md): Returns asset production data based on the given parameters, formatted with days as 'May-1' and hours in each mode - [system.kanoa.event.getAssetProductionEventsByShift(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getAssetProductionEventsByShift.md): Returns production data by shift filtered by the given parameters - [system.kanoa.event.getAssetProductionEventsSummary(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getAssetProductionEventsSummary.md): Returns summarized production event data filtered by the given parameters - [system.kanoa.event.getAssetStateEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getAssetStateEvents.md): Returns state data filtered by the given parameters - [system.kanoa.event.getAssetStateEventsByCategory(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getAssetStateEventsByCategory.md): Returns state event data filtered by the given parameters and grouped by category - [system.kanoa.event.getAssetStateEventsByInterval(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getAssetStateEventsByInterval.md): Returns asset state event by interval filtered by the given parameters. Returns asset name and state concatenated with time in seconds grouped by interval - [system.kanoa.event.getAssetStateEventsByItem(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getAssetStateEventsByItem.md): Returns state event data filtered by the given parameters and grouped by item - [system.kanoa.event.getAssetStateEventsByShift(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getAssetStateEventsByShift.md): Returns state event data filtered by the given parameters and grouped by shift - [system.kanoa.event.getAssetStateEventsByShiftSummary(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getAssetStateEventsByShiftSummary.md): Returns summarized state event data filtered by the given parameters and grouped by shift. - [system.kanoa.event.getAssetStateEventsSummary(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getAssetStateEventsSummary.md): Returns summary state event data filtered by the given parameters - [system.kanoa.event.getCounterEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getCounterEvent.md): Returns the counter events for the given params. All paramsDict keys are optional. - [system.kanoa.event.getCounterEventTotals(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getCounterEventTotals.md): Returns the total count for the given filters. Works best when providing an asset and date range. - [system.kanoa.event.getDowntimeData(assetId, startDate, endDate, durationSecs, showChanged)](https://kanoa-software.netlify.app/systemFunctions/event/getDowntimeData.md): Returns downtime data filtered by the given parameters - DEPRECATED BY getAssetStateEvents() - [system.kanoa.event.getDowntimeDataByCategory(assetId, startDate, endDate)](https://kanoa-software.netlify.app/systemFunctions/event/getDowntimeDataByCategory.md): Returns downtime data summarized by category - DEPRECATED BY getAssetStateEventsByCategory() - [system.kanoa.event.getDowntimeDataByInterval(assetId, startDate, endDate, interval, deviceUTCOffsetMins)](https://kanoa-software.netlify.app/systemFunctions/event/getDowntimeDataByInterval.md): Returns downtime data by interval filtered by the given parameters - DEPRECATED Replaced by getAssetStateEventsByInterval() - [system.kanoa.event.getDowntimeDataByShift(assetId, startDate, endDate)](https://kanoa-software.netlify.app/systemFunctions/event/getDowntimeDataByShift.md): Returns downtime data grouped by shift - DEPRECATED BY getAssetStateEventsByShift() - [system.kanoa.event.getDowntimeDataByShiftSummary(assetId, startDate, endDate)](https://kanoa-software.netlify.app/systemFunctions/event/getDowntimeDataByShiftSummary.md): Returns summarized downtime data by shift - DEPRECATED BY getAssetStateEventsByShiftSummary() - [system.kanoa.event.getDowntimeDataForReliability(assetId, startDate, endDate, durationSecs, showChanged)](https://kanoa-software.netlify.app/systemFunctions/event/getDowntimeDataForReliability.md): Returns downtime data for the reliability report filtered by the given parameters - [system.kanoa.event.getDowntimeDataSummary(assetId, startDate, endDate)](https://kanoa-software.netlify.app/systemFunctions/event/getDowntimeDataSummary.md): Returns summarized downtime data filtered by the given parameters - DEPRECATED BY getAssetStateEventSummary() - [system.kanoa.event.getModeEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getModeEvents.md): Returns mode events. paramsDict keys are optional - [system.kanoa.event.getOEEColors(paramsDict, oee, availability, performance, quality)](https://kanoa-software.netlify.app/systemFunctions/event/getOEEColors.md): Returns a dictionary of colors for oee, a, p and q based on the OEE thresholds set for the asset and the passed in oee values. - [system.kanoa.event.getOEEDataByInterval(assetId, startDate, endDate, interval)](https://kanoa-software.netlify.app/systemFunctions/event/getOEEDataByInterval.md): Returns OEE data by interval filtered by the given parameters - [system.kanoa.event.getOEEDataByIntervalByShift(assetId, startDate, endDate, interval)](https://kanoa-software.netlify.app/systemFunctions/event/getOEEDataByIntervalByShift.md): Returns OEE data by interval and shift filtered by the given parameters - [system.kanoa.event.getOEEDataSummary(assetId, startDate, endDate)](https://kanoa-software.netlify.app/systemFunctions/event/getOEEDataSummary.md): Returns summarized OEE data filtered by the given parameters. DEPRECATED. Replaced by getOEESummary() - [system.kanoa.event.getOEESummary(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getOEESummary.md): Returns summarized OEE data filtered by the given parameters - [system.kanoa.event.getPerformanceEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/event/getPerformanceEvents.md): Returns performance reason events - [system.kanoa.event.getPreviousModeEvent(assetId, tStamp)](https://kanoa-software.netlify.app/systemFunctions/event/getPreviousModeEvent.md): This will return the modeEvent table entry prior to the passed in timestamp - [system.kanoa.event.getPreviousStateEvent(assetId, tStamp)](https://kanoa-software.netlify.app/systemFunctions/event/getPreviousStateEvent.md): Gets the previous stateEvent entry for the assetId, tStamp passed - [system.kanoa.event.getProductionEventsForReliability(assetId, startDate, endDate, modeId)](https://kanoa-software.netlify.app/systemFunctions/event/getProductionEventsForReliability.md): Returns production data for the reliability report filtered by the given parameters - [system.kanoa.event.getStateEventById(stateEventId)](https://kanoa-software.netlify.app/systemFunctions/event/getStateEventById.md): Returns a stateEvent - [system.kanoa.event.getStateEventInfo(stateEventId, stateEventInfoName)](https://kanoa-software.netlify.app/systemFunctions/event/getStateEventInfo.md): Gets stateEventInfo. stateEventInfo stores additional custom information about a state - [system.kanoa.event.getStateEvents(assetId, startDate, endDate)](https://kanoa-software.netlify.app/systemFunctions/event/getStateEvents.md): Returns state data filtered by the given parameters - DEPRECATED BY getAssetStateEvents() - [system.kanoa.event.getStateEventSummary(assetId, startDate, endDate)](https://kanoa-software.netlify.app/systemFunctions/event/getStateEventSummary.md): Returns summarized state data filtered by the given parameters - DEPRECATED BY getAssetStateEventSummary() - [system.kanoa.event.getWorkOrderEventSummary(assetId, startDate, endDate, workOrderId)](https://kanoa-software.netlify.app/systemFunctions/event/getWorkOrderEventSummary.md): Returns summarized production data by workorder filtered by the given parameters - [system.kanoa.event.resetCountEvents(assetId, tStamp, userId)](https://kanoa-software.netlify.app/systemFunctions/event/resetCountEvents.md): Counts will calculate infeed, outfeed and waste if no counterEvents exists for a given time range. - [system.kanoa.event.updateCounterEvent(counterInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/event/updateCounterEvent.md): Updates a counter value. This function supports itemStates, items and workorders - [system.kanoa.event.updateModeEvent(field, value, modeSourceId, userId, modeEventId)](https://kanoa-software.netlify.app/systemFunctions/event/updateModeEvent.md): Updates any of the mode event table fields such as modeCode, workOrderId, or itemId fields - [system.kanoa.event.updatePerformanceEvent(performanceEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/event/updatePerformanceEvent.md): Update the performance event. Update Link table accordingly - [system.kanoa.event.updateProductionEvent(productionEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/event/updateProductionEvent.md): Updates a new modeEvent record. Similar to updateModeEvent, but updates all fields. - [system.kanoa.event.updateStateEvent(stateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/event/updateStateEvent.md): updates a stateEvent record - [system.kanoa.event.updateStateEventInfo(stateEventId, stateEventInfoName, value, userId)](https://kanoa-software.netlify.app/systemFunctions/event/updateStateEventInfo.md): Adds, updates or deletes an entry in the stateEventInfo table. Can be used to stored meta data about any stateEvent. - [system.kanoa.event.updateWorkOrderCount(counterId, assetId, value, workOrderName, userId)](https://kanoa-software.netlify.app/systemFunctions/event/updateWorkOrderCount.md): Allows the count to be updated for a work order after a work order has been completed. - [File System Functions](https://kanoa-software.netlify.app/systemFunctions/apiFileIntro.md): Provide a set of utility file management system functions. - [system.kanoa.file.deleteFile(filePath)](https://kanoa-software.netlify.app/systemFunctions/file/deleteFile.md): Given the path to a file, this function will delete it - [system.kanoa.file.filelist(folderPath)](https://kanoa-software.netlify.app/systemFunctions/file/filelist.md): Given a folder path, this function will return a list of files found. - [system.kanoa.file.findFiles(folderPath, extensions)](https://kanoa-software.netlify.app/systemFunctions/file/findFiles.md): Given a folder path, and a list of extensions, this function will return a list of files found - [system.kanoa.file.getGatewayFilePath(fileName)](https://kanoa-software.netlify.app/systemFunctions/file/getGatewayFilePath.md): Give the name of a file, this function returns the filepath to a temporary folder that can be used for image conversion processes. - [Image System Functions](https://kanoa-software.netlify.app/systemFunctions/apiImageIntro.md): Provide a set of utility image system functions. - [system.kanoa.image.convertImage(inputImagePath, outputImagePath, formatName)](https://kanoa-software.netlify.app/systemFunctions/image/convertImage.md): Converts an image into the format passed. - [system.kanoa.image.createThumbnail(imageBytes)](https://kanoa-software.netlify.app/systemFunctions/image/createThumbnail.md): Creates a thumbnail image of the passed in image. - [Inventory System Functions](https://kanoa-software.netlify.app/systemFunctions/apiInventoryIntro.md): Provide a set of inventory management system functions. - [system.kanoa.inventory.addAssetBomItem(bomInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addAssetBomItem.md): Adds a new Bill-of-Materials line item to a specific installed asset instance, or updates an existing one when assetBomId is supplied inside bomInfo. - [system.kanoa.inventory.addCostCenter(costCenterInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addCostCenter.md): Adds a new cost center record, used to associate inventory transactions and consumption with a specific budget or department. - [system.kanoa.inventory.addInventoryTransaction(inventoryTransactionInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addInventoryTransaction.md): Adds a new inventory transaction record, adjusting the on-hand inventory balance for the affected part and inventory asset (bin/location) by the given quantity. - [system.kanoa.inventory.addInventoryTransactionType(inventoryTransactionTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addInventoryTransactionType.md): Adds a new inventory transaction type record, defining a classification of inventory movement (e.g. Receipt, Issue, Transfer, Adjustment, Cycle Count) - [system.kanoa.inventory.addManufacturer(manufacturerInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addManufacturer.md): Adds a new manufacturer record, used elsewhere in the inventory module to associate parts with the company that produces them. - [system.kanoa.inventory.addModel(modelInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addModel.md): Adds a new model to the inventory catalog, or updates an existing one when modelId is included in modelInfo. - [system.kanoa.inventory.addModelBomItem(bomInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addModelBomItem.md): Adds a new Bill-of-Materials (BOM) line item to an equipment model, or updates an existing one when modelBomId is supplied inside bomInfo. - [system.kanoa.inventory.addPart(partInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addPart.md): Adds a new part record to the inventory master. This is the primary function for registering a new stock-keeping unit (SKU) - [system.kanoa.inventory.addPartCategory(partCategoryInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addPartCategory.md): Adds a new part category, used to classify inventory parts (e.g. Bearings, Filters, Gaskets) for filtering and reporting. - [system.kanoa.inventory.addPartInventoryBalance(partInventoryBalanceInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addPartInventoryBalance.md): Adds a new part inventory balance record for a given part and inventory asset (e.g. a warehouse, bin, or storeroom location). - [system.kanoa.inventory.addPartInventoryPolicy(partInventoryPolicyInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addPartInventoryPolicy.md): Adds a new part inventory policy record, defining the stocking and reorder rules for a part at a given inventory location. - [system.kanoa.inventory.addSupplier(supplierInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addSupplier.md): Adds a new supplier record to the inventory system. - [system.kanoa.inventory.addUnitOfMeasure(unitOfMeasureInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/addUnitOfMeasure.md): Creates a new unit of measure record in the Kanoa MES inventory module, such as "EA" (each), "FT" (feet), "GAL" (gallon), or "LB" (pound). - [system.kanoa.inventory.deleteAssetBomItem(assetBomId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deleteAssetBomItem.md): Deletes a single BOM line item from a specific installed asset instance, identified by assetBomId. - [system.kanoa.inventory.deleteCostCenter(costCenterId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deleteCostCenter.md): Deletes the cost center record identified by the passed costCenterId. - [system.kanoa.inventory.deleteInventoryTransaction(inventoryTransactionId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deleteInventoryTransaction.md): Deletes the inventory transaction identified by inventoryTransactionId. - [system.kanoa.inventory.deleteInventoryTransactionType(inventoryTransactionTypeId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deleteInventoryTransactionType.md): Deletes the inventory transaction type identified by inventoryTransactionTypeId. - [system.kanoa.inventory.deleteManufacturer(manufacturerId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deleteManufacturer.md): Deletes the manufacturer record identified by manufacturerId. - [system.kanoa.inventory.deleteModel(modelId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deleteModel.md): Deletes the model record identified by modelId. - [system.kanoa.inventory.deleteModelBomItem(modelBomId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deleteModelBomItem.md): Deletes a single BOM line item from a model's catalog-level Bill-of-Materials, identified by modelBomId. - [system.kanoa.inventory.deletePart(partId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deletePart.md): Deletes the part record identified by partId. - [system.kanoa.inventory.deletePartCategory(partCategoryId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deletePartCategory.md): Deletes the part category identified by partCategoryId. - [system.kanoa.inventory.deletePartInventoryBalance(partInventoryBalanceId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deletePartInventoryBalance.md): Deletes the part inventory balance record identified by partInventoryBalanceId. - [system.kanoa.inventory.deletePartInventoryPolicy(partInventoryPolicyId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deletePartInventoryPolicy.md): Deletes the part inventory policy identified by partInventoryPolicyId. - [system.kanoa.inventory.deleteSupplier(supplierId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deleteSupplier.md): Deletes the supplier record identified by the passed supplierId. - [system.kanoa.inventory.deleteUnitOfMeasure(uomId, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/deleteUnitOfMeasure.md): Deletes the unit of measure record identified by uomId from the Kanoa MES inventory module. - [system.kanoa.inventory.getAssetBom(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getAssetBom.md): Returns the fully flattened Bill-of-Materials for a specific installed asset instance, given its assetId inside paramsDict. - [system.kanoa.inventory.getCostCenters(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getCostCenters.md): Retrieves cost center records defined in the Kanoa MES inventory module. - [system.kanoa.inventory.getInventoryTransactions(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getInventoryTransactions.md): Returns inventory transaction records from [inv].[inventoryTransaction], optionally filtered by any combination of the fields in paramsDict. - [system.kanoa.inventory.getInventoryTransactionTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getInventoryTransactionTypes.md): Returns a list of inventory transaction types configured in the system, optionally filtered by the criteria provided in paramsDict. - [system.kanoa.inventory.getManufacturers(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getManufacturers.md): Returns manufacturer records from the inventory catalog. - [system.kanoa.inventory.getModelBom(modelId)](https://kanoa-software.netlify.app/systemFunctions/inventory/getModelBom.md): Returns the fully flattened Bill-of-Materials for an equipment model, given its modelId. - [system.kanoa.inventory.getModels(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getModels.md): Returns model records from the inventory catalog. A model represents a specific equipment/asset model made by a manufacturer, distinct from a Part. - [system.kanoa.inventory.getParts(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getParts.md): Returns inventory parts matching the given filter criteria. Pass an empty dictionary (or omit filter keys) to retrieve all parts, - [system.kanoa.inventory.getPartCategories(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getPartCategories.md): Returns part category records from the Kanoa MES inventory hierarchy, optionally narrowed down using the filter fields supplied in paramsDict. - [system.kanoa.inventory.getPartInventoryBalances(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getPartInventoryBalances.md): Returns part inventory balance records, optionally filtered by part, inventory asset, or a specific balance id. - [system.kanoa.inventory.getPartInventoryPolicies(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getPartInventoryPolicies.md): Returns part inventory policies matching the supplied filter criteria. - [system.kanoa.inventory.getPartInventoryStock(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getPartInventoryStock.md): Returns a combined view of part inventory balance and policy data for the inv.vwPartInventoryStocking view � a joined "stock" record per part/bin that merges on-hand and on-order quantities - [system.kanoa.inventory.getPartInventoryTotals(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getPartInventoryTotals.md): Returns aggregate part inventory totals (summary/rollup figures per part) filtered by part-level attributes such as - [system.kanoa.inventory.getPartsUsedByWorkOrderEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getPartsUsedByWorkOrderEvents.md): Returns parts-consumption history sourced from the [cms].[vwPartsUsedByWorkOrderEvent] view, reporting which parts were used against which work order events. - [system.kanoa.inventory.getSuppliers(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getSuppliers.md): Returns supplier records from the inventory system, optionally filtered by any combination of the fields in paramsDict. Passing an empty dictionary returns all suppliers. - [system.kanoa.inventory.getUnitOfMeasures(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/inventory/getUnitOfMeasures.md): Retrieves unit of measure records (for example "EA", "FT", "GAL", "LB") defined in the Kanoa MES inventory module. - [system.kanoa.inventory.issuePartToWorkOrderEvent(issueInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/issuePartToWorkOrderEvent.md): Issues (deducts) a quantity of a part from inventory and records the consumption against a CMMS work order event. - [system.kanoa.inventory.updateCostCenter(costCenterInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updateCostCenter.md): Updates an existing cost center record in the Kanoa MES inventory module. - [system.kanoa.inventory.updateCostCenterField(costCenterId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updateCostCenterField.md): Updates a single named column on a cost center record, identified by costCenterId, to the given value. - [system.kanoa.inventory.updateInventoryTransactionField(inventoryTransactionId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updateInventoryTransactionField.md): Updates a single named field on an existing inventory transaction to the given value. - [system.kanoa.inventory.updateInventoryTransactionType(inventoryTransactionTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updateInventoryTransactionType.md): Updates an existing inventory transaction type record identified by inventoryTransactionTypeId within the supplied inventoryTransactionTypeInfo dictionary. - [system.kanoa.inventory.updateInventoryTransactionTypeField(inventoryTransactionTypeId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updateInventoryTransactionTypeField.md): Updates a single named field on an inventory transaction type record identified by inventoryTransactionTypeId. - [system.kanoa.inventory.updateManufacturer(manufacturerInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updateManufacturer.md): Updates an existing manufacturer record. Pass a manufacturerInfo dict containing the manufacturerId - [system.kanoa.inventory.updateManufacturerField(manufacturerId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updateManufacturerField.md): Updates a single named field on a manufacturer record, identified by manufacturerId, to the supplied value. This is a targeted alternative to updateManufacturer for changing one column at a time. - [system.kanoa.inventory.updatePart(partInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updatePart.md): Updates an existing part record. Pass the part's id along with any of the updatable fields in partInfo (category, manufacturer reference, unit of measure, description, and the boolean handling flags) to overwrite the part's current values. - [system.kanoa.inventory.updatePartCategory(partCategoryInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updatePartCategory.md): Updates an existing part category record. Pass a partCategoryInfo dictionary containing the partCategoryId of the category to update along with any of the editable fields - [system.kanoa.inventory.updatePartCategoryField(partCategoryId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updatePartCategoryField.md): Updates a single named field on a part category record identified by partCategoryId. - [system.kanoa.inventory.updatePartField(partId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updatePartField.md): Updates a single named field on a part record for the given partId, without needing to supply the full part dictionary. - [system.kanoa.inventory.updatePartInventoryBalance(partInventoryBalanceInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updatePartInventoryBalance.md): Updates an existing part inventory balance record, which tracks the on-hand, on-order, and reserved quantities for a part at a specific inventory location (asset). - [system.kanoa.inventory.updatePartInventoryBalanceField(partInventoryBalanceId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updatePartInventoryBalanceField.md): Updates a single named field on a part inventory balance record identified by partInventoryBalanceId. - [system.kanoa.inventory.updatePartInventoryPolicy(partInventoryPolicyInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updatePartInventoryPolicy.md): Updates an existing part inventory policy record, identified by partInventoryPolicyId, with new stocking and reorder rule values. - [system.kanoa.inventory.updatePartInventoryPolicyField(partInventoryPolicyId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updatePartInventoryPolicyField.md): Updates a single named field on an existing part inventory policy record identified by partInventoryPolicyId. - [system.kanoa.inventory.updateSupplier(supplierInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updateSupplier.md): Updates an existing supplier record. - [system.kanoa.inventory.updateSupplierField(supplierId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updateSupplierField.md): Updates a single named field on the supplier identified by supplierId, setting it to value. - [system.kanoa.inventory.updateUnitOfMeasure(unitOfMeasureInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updateUnitOfMeasure.md): Updates an existing unit of measure record in the Kanoa MES inventory module. - [system.kanoa.inventory.updateUnitOfMeasureField(uomId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/inventory/updateUnitOfMeasureField.md): Updates a single named field on an existing unit of measure (UOM) record identified by uomId. - [Item System Functions](https://kanoa-software.netlify.app/systemFunctions/apiItemIntro.md): Provide system functions for the MES application items (materials) - [system.kanoa.item.addItem(itemInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/addItem.md): Adds an item. ItemInfo keys are required unless otherwise stated. - [system.kanoa.item.addItemAssetRate(rateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/addItemAssetRate.md): Adds the rateInfo to itemAssetRate table. All rateInfo keys are required. Entry in this table signifies that this item can be run on this asset - [system.kanoa.item.addItemAttribute(itemAttrInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/addItemAttribute.md): Adds an item attribute. itemAttrInfo keys are required. If the item attribute already exists, it will update it - [system.kanoa.item.addItemClass(itemClassInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/addItemClass.md): Adds a new item class. All itemClassInfo keys are required unless sotherwise stated. - [system.kanoa.item.addItemPeriod(periodInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/addItemPeriod.md): Adds the item period i.e 'Hours', 'Minutes'. All periodInfo keys are required. - [system.kanoa.item.addItemState(itemStateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/addItemState.md): Adds a new item state. All itemStateInfo keys are required unless otherwise stated. - [system.kanoa.item.addItemStateClass(itemStateClassInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/addItemStateClass.md): Adds a new item state class. itemStateClassInfo keys are required. - [system.kanoa.item.addItemUnit(itemUnitInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/addItemUnit.md): Adds a new item unit. itemUnitInfo keys are required. Checks if the itemUnit already exists. - [system.kanoa.item.checkItemClassPath(itemClassPath, userId)](https://kanoa-software.netlify.app/systemFunctions/item/checkItemClassPath.md): Checks if an itemClassPath exists and creates it if it doesn't exist. - [system.kanoa.item.checkItemState(itemStateName, itemStateClassId, itemStates, userId)](https://kanoa-software.netlify.app/systemFunctions/item/checkItemState.md): Checks if an item state exists in the passed itemStates dictionary and creates it if it doesn't - [system.kanoa.item.checkItemStateClassPath(itemStateClassPath, userId)](https://kanoa-software.netlify.app/systemFunctions/item/checkItemStateClassPath.md): checks if an itemStateClassPath exists and creates it if it doesn't - [system.kanoa.item.deleteItem(itemId, userId)](https://kanoa-software.netlify.app/systemFunctions/item/deleteItem.md): Deletes the item. Foreign key constraints will prevent deleting an item that has been used - [system.kanoa.item.deleteItemAssetRate(itemAssetRateId, userId)](https://kanoa-software.netlify.app/systemFunctions/item/deleteItemAssetRate.md): Deletes the item asset rate - [system.kanoa.item.deleteItemAssetRates(assetId, userId)](https://kanoa-software.netlify.app/systemFunctions/item/deleteItemAssetRates.md): Unlinks all items from this asset - [system.kanoa.item.deleteItemAttribute(itemAttrId, userId)](https://kanoa-software.netlify.app/systemFunctions/item/deleteItemAttribute.md): Deletes an item attribute - [system.kanoa.item.deleteItemClass(itemClassId, userId)](https://kanoa-software.netlify.app/systemFunctions/item/deleteItemClass.md): Deletes an item class - [system.kanoa.item.deleteItemPeriod(itemPeriodId, userId)](https://kanoa-software.netlify.app/systemFunctions/item/deleteItemPeriod.md): Deletes an item period - [system.kanoa.item.deleteItemState(itemStateId, userId)](https://kanoa-software.netlify.app/systemFunctions/item/deleteItemState.md): Delete an item state. If the item state has been used then the enabled property will be set to False - [system.kanoa.item.deleteItemStateClass(itemStateClassId, userId)](https://kanoa-software.netlify.app/systemFunctions/item/deleteItemStateClass.md): Deletes an item stateclass and any item states or item state classes underneath it - [system.kanoa.item.deleteItemUnit(itemUnitId, userId)](https://kanoa-software.netlify.app/systemFunctions/item/deleteItemUnit.md): Deletes an item unit - [system.kanoa.item.getAssetItems(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/item/getAssetItems.md): Returns items linked to assets for the given parameters. paramsDict keys are optional. Can be used to return assets that can produce items or items that can be produced by assets - [system.kanoa.item.getItems(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/item/getItems.md): Returns item info for given parameters. paramsDict keys are optional - [system.kanoa.item.getAssetItemStates(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/item/getAssetItemStates.md): Returns item states linked with assets for given parameters. paramsDict keys are optional. - [system.kanoa.item.getItemAttributes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/item/getItemAttributes.md): Returns item attribute data. paramsDict keys are optional - [system.kanoa.item.getItemClasses(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/item/getItemClasses.md): Returns itemClass info for given parameters. paramsDict keys are optional. - [system.kanoa.item.getItemPeriod(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/item/getItemPeriod.md): Return item periods for the given parameters. paramsDict keys are optional - [system.kanoa.item.getItemSource(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/item/getItemSource.md): Returns item source filtered by the given parameters. paramsDict keys are optional - [system.kanoa.item.getItemStates(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/item/getItemStates.md): Returns itemState info for given parameters. paramsDict keys are optional. - [system.kanoa.item.getItemStateClasses(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/item/getItemStateClasses.md): Returns item state class info for given parameters. paramsDict keys are optional. - [system.kanoa.item.getItemStateLinks(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/item/getItemStateLinks.md): Gets item state links. paramsDict keys are optional. - [system.kanoa.item.getItemUnits(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/item/getItemUnits.md): Returns item units. paramsDict keys are optional. - [system.kanoa.item.linkItemStates(linkInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/linkItemStates.md): Links assetIds with itemStateIds, itemStateClassIds, itemIds and itemClassIds. linkInfo keys are required - [system.kanoa.item.populateItemClassHierarchy()](https://kanoa-software.netlify.app/systemFunctions/item/populateItemClassHierarchy.md): Calls stored procedure spPopulateItemClassHierarchy to rebuild the itemClassHierarchy_MAT table - [system.kanoa.item.populateItemStateClassHierarchy()](https://kanoa-software.netlify.app/systemFunctions/item/populateItemStateClassHierarchy.md): Calls stored procedure spPopulateItemStateClassHierarchy to rebuild the itemStateClassHierarchy_MAT table - [system.kanoa.item.updateItem(itemInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/updateItem.md): Updates an item. ItemInfo keys are required unless otherwise stated. - [system.kanoa.item.updateItemAssetRate(rateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/updateItemAssetRate.md): Updates the rateInfo in the itemAssetRate table. All rateInfo keys are required. - [system.kanoa.item.updateItemAttribute(itemAttrInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/updateItemAttribute.md): Updates an item attribute. itemAttrInfo keys are required. - [system.kanoa.item.updateItemClass(itemClassInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/updateItemClass.md): Updates an item class. All itemClassInfo keys are required unless sotherwise stated. - [system.kanoa.item.updateItemField(itemId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/item/updateItemField.md): Updates an items field value - [system.kanoa.item.updateItemPeriod(periodInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/updateItemPeriod.md): Update the item period. All periodInfo keys are required. - [system.kanoa.item.updateItemState(itemStateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/updateItemState.md): Update the item state. All itemStateInfo keys are required unless otherwise stated - [system.kanoa.item.updateItemStateClass(itemStateClassInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/updateItemStateClass.md): Updates an item state class. itemStateClassInfo keys are required. - [system.kanoa.item.updateItemStateField(itemStateId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/item/updateItemStateField.md): Updates the passed field value for the given itemStateId. If the field is enabled, we will update the assetLink Table - [system.kanoa.item.updateItemUnit(itemUnitInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/item/updateItemUnit.md): Updates an item unit. itemUnitInfo keys are required. - [system.kanoa.item.unlinkItemState(itemStateLinkId, userId)](https://kanoa-software.netlify.app/systemFunctions/item/unlinkItemState.md): Deletes an itemstateLink - [Logger System Functions](https://kanoa-software.netlify.app/systemFunctions/apiLoggerIntro.md): Provide system functions for the MES application logging - [system.kanoa.logger.addLog(logInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/logger/addLog.md): Adds a new log record. All logInfo keys are required unless otherwsie stated - [system.kanoa.logger.addLogger(loggerInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/logger/addLogger.md): Create a new logger. All loggerInfo keys are required unless otherwise stated. - [system.kanoa.logger.deleteLogger(loggerId, userId)](https://kanoa-software.netlify.app/systemFunctions/logger/deleteLogger.md): Deletes a logger - [system.kanoa.logger.deleteLogs(logIds, userId)](https://kanoa-software.netlify.app/systemFunctions/logger/deleteLogs.md): Deletes logs - [system.kanoa.logger.getLoggers(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/logger/getLoggers.md): Returns logger configuration. paramsDict keys are optional. - [system.kanoa.logger.getLogs(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/logger/getLogs.md): Returns logs given the specified search parameters. paramsDict keys are optional. - [system.kanoa.logger.getLogType(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/logger/getLogType.md): Returns a log type. paramsDict keys are optional. Log Types indicate 'info', 'warning', 'error'. - [system.kanoa.logger.isLoggerEnabled(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/logger/isLoggerEnabled.md): Returns where a logger is enabled for a certain asset. paramsDict keys are required unless otherwise stated. - [system.kanoa.logger.updateLogger(loggerInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/logger/updateLogger.md): Updates a logger. All loggerInfo key are required unless otherwise stated. - [Lot System Functions](https://kanoa-software.netlify.app/systemFunctions/apiLotIntro.md): Provide system functions for the MES application Lot Tracking - [system.kanoa.lot.addLot(lotInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/addLot.md): Adds a lot - [system.kanoa.lot.addLotAttribute(lotAttributeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/addLotAttribute.md): Adds a lot attribute - [system.kanoa.lot.addLotEvent(lotEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/addLotEvent.md): Adds a lot event - [system.kanoa.lot.addLotOperation(lotOperationInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/addLotOperation.md): Adds a lot operation - [system.kanoa.lot.addLotOperationAttribute(lotOperationAttributeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/addLotOperationAttribute.md): Adds a lot operation attribute - [system.kanoa.lot.addLotOperationEvent(lotOperationEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/addLotOperationEvent.md): Adds a lot operation event - [system.kanoa.lot.addLotState(lotStateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/addLotState.md): Add a lot state. All lotStateInfo keys are required unless otherwise stated - [system.kanoa.lot.addLotStateReason(lotStateReasonInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/addLotStateReason.md): Adds a lot state reason to a lot state - [system.kanoa.lot.addRoute(routeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/addRoute.md): Add a route. A route can be associated with an itemId or an itemClassId - [system.kanoa.lot.addRouteEvent(routeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/addRouteEvent.md): Add a route event. A route event is the instance of a route created for a lot. - [system.kanoa.lot.addRouteStep(routeStepInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/addRouteStep.md): Add a route step to a route - [system.kanoa.lot.addRouteStepEvent(routeStepEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/addRouteStepEvent.md): Add a route step to a route event - [system.kanoa.lot.adjustLotEventQty(lotEventId, deltaQty, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/adjustLotEventQty.md): Adjust a lot events qty by the passed in deltaQty - [system.kanoa.lot.createRouteInstance(lotId, routeId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/createRouteInstance.md): Copies a route to the routeEvent table and links it with a lotId. This is the adjustable route to be used by the lot. - [system.kanoa.lot.deleteLot(lotId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/deleteLot.md): Deletes a lot. This function will also delete any lotOperationEvents and lotEvents asociated with this lotId - [system.kanoa.lot.deleteLotAttribute(lotAttributeId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/deleteLotAttribute.md): Deletes a lot attribute - [system.kanoa.lot.deleteLotEvent(lotEventId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/deleteLotEvent.md): Deletes a lot event - [system.kanoa.lot.deleteLotOperation(lotId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/deleteLotOperation.md): Deletes a lot Operation. This function will also delete any lotOperationEvents and lotEvents asociated with this lotId - [system.kanoa.lot.deleteLotOperationEvent(lotOperationEventId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/deleteLotOperationEvent.md): Deletes a lot operation event - [system.kanoa.lot.deleteLotState(lotStateId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/deleteLotState.md): Delete a lot state. If the state has been used then it is set to disabled - [system.kanoa.lot.deleteLotStateReason(lotStateReasonId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/deleteLotStateReason.md): Delete a lot state reason. If the state has been used then it is set to disabled - [system.kanoa.lot.deleteRoute(routeId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/deleteRoute.md): Deletes a route. - [system.kanoa.lot.deleteRouteEvent(routeEventId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/deleteRouteEvent.md): Deletes a route event. - [system.kanoa.lot.deleteRouteStep(routeStepId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/deleteRouteStep.md): The function deletes a route step from the mes.routeStep table. - [system.kanoa.lot.deleteRouteStepEvent(routeStepEventId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/deleteRouteStepEvent.md): Deletes a route step event. This function will reorder the step numbers after the step event is deleted. - [system.kanoa.lot.enableAssetLotStateLink(lotStateReasonAssetLinkId, enabled)](https://kanoa-software.netlify.app/systemFunctions/lot/enableAssetLotStateLink.md): Updates the lotStateReasonAssetLink enabled state. - [system.kanoa.lot.enableLotOperationAssetLink(lotOperationAssetLinkId, enabled)](https://kanoa-software.netlify.app/systemFunctions/lot/enableLotOperationAssetLink.md): Updates the lotOperationAssetLink enabled state. - [system.kanoa.lot.enableLotOperationItemLink(lotOperationItemLinkId, enabled)](https://kanoa-software.netlify.app/systemFunctions/lot/enableLotOperationItemLink.md): Updates the lotOperationItemLinkId enabled state - [system.kanoa.lot.executeLotOperation(lotOperationEventInfo, inputLotEvents, outputLotEvents, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/executeLotOperation.md): Creates or updates a lot operation event with input and output lot events - [system.kanoa.lot.getAssetLotStateReasons(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getAssetLotStateReasons.md): Returns lot state reasons associated with assets - [system.kanoa.lot.getLotActivity(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLotActivity.md): Returns lots along with quantities grouped by location (asset) and state, filtered by the given parameters - [system.kanoa.lot.getLotAttributes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLotAttributes.md): Returns lot attributes filtered by the given parameters - [system.kanoa.lot.getLotEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLotEvents.md): Returns lot events filtered by the given parameters. paramsDict keys are optional unless otherwise stated. - [system.kanoa.lot.getLotOperationAssetLinks(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLotOperationAssetLinks.md): Returns assets linked to lot operations - [system.kanoa.lot.getLotOperationAttributes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLotOperationAttributes.md): Returns lot operation attributes filtered by the given parameters. paramsDict keys are optional unless otherwise stated. - [system.kanoa.lot.getLotOperationEvent(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLotOperationEvent.md): Returns lot operation events filtered by the given parameters - [system.kanoa.lot.getLotOperationItemLinks(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLotOperationItemLinks.md): Returns assets linked to lot operations - [system.kanoa.lot.getLotOperations(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLotOperations.md): Returns lot operations - [system.kanoa.lot.getLotQty(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLotQty.md): Returns lots filtered by the given parameters. Lot quantity is summed from all lotEvents associated with a lot - [system.kanoa.lot.getLots(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLots.md): Returns lots filtered by the given parameters - [system.kanoa.lot.getLotsForLotOperationEvent(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLotsForLotOperationEvent.md): Returns lots along with their lotOperationEvents filtered by the given parameters - [system.kanoa.lot.getLotStateReasons(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLotStateReasons.md): Returns lot state reasons - [system.kanoa.lot.getLotStates(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getLotStates.md): Return lot states - [system.kanoa.lot.getRouteEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getRouteEvents.md): Returns routes events filtered by the given parameters. paramsDict keys are optional unless otherwise stated. - [system.kanoa.lot.getRoutes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getRoutes.md): Returns routes filtered by the given parameters. paramsDict keys are optional unless otherwise stated. - [system.kanoa.lot.getRouteSteps(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getRouteSteps.md): Get all route steps for the specified parameters - [system.kanoa.lot.getRouteStepEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/lot/getRouteStepEvents.md): Get all route step events for the specified parameters. paramsDict keys are optional unless otherwise stated. - [system.kanoa.lot.linkAssetLotStates(assetIdList, lotStateReasonIdList, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/linkAssetLotStates.md): Links a list of assetIds with a list of lotStateReasonIds - [system.kanoa.lot.linkLotOperationsAssets(assetIdList, lotOperationIdList, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/linkLotOperationsAssets.md): Links a list of assetIds with a list of lotOperationIds - [system.kanoa.lot.linkLotOperationsItems(itemIdList, itemClassIdList, lotOperationIdList, itemSourceId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/linkLotOperationsItems.md): Links a list of itemIds and itemClassIds with a list of lotOperationIds - [system.kanoa.lot.reorderRouteStepEvents(routesStepEvents, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/reorderRouteStepEvents.md): Given a dictionary of routeSteps, this function will update the step number for each step in the database - [system.kanoa.lot.reorderRouteSteps(routesSteps, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/reorderRouteSteps.md): Given a dictionary of routeSteps, this function will update the step number for each step in the database - [system.kanoa.lot.traceLot(lotId, depth)](https://kanoa-software.netlify.app/systemFunctions/lot/traceLot.md): Returns all lots events that are linked to the passed in lotId. - [system.kanoa.lot.unlinkAssetLotState(lotStateReasonAssetLinkId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/unlinkAssetLotState.md): Unlinks an asset with an lotState - [system.kanoa.lot.unlinkLotOperationAsset(lotOperationAssetLinkId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/unlinkLotOperationAsset.md): Unlinks an asset with a lot operation - [system.kanoa.lot.unlinkLotOperationItem(lotOperationItemLinkId, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/unlinkLotOperationItem.md): Unlinks an item with a lot operation - [system.kanoa.lot.updateLot(lotInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLot.md): Updates a lot - [system.kanoa.lot.updateLotAttribute(lotAttributeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLotAttribute.md): Updates a lot attribute - [system.kanoa.lot.updateLotEvent(lotEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLotEvent.md): Updates a lot event - [system.kanoa.lot.updateLotEventField(lotEventId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLotEventField.md): Updates the passed field value for the given lotEventId. If the field is enabled, we will update the lotEvent Table - [system.kanoa.lot.updateLotField(lotId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLotField.md): Updates the passed field value for the given lotId - [system.kanoa.lot.updateLotOperation(lotOperationInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLotOperation.md): Updates a lot operation - [system.kanoa.lot.updateLotOperationAttribute(lotOperationAttributeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLotOperationAttribute.md): Updates a lot operation attribute - [system.kanoa.lot.updateLotOperationEvent(lotOperationEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLotOperationEvent.md): Updates a lot operation event - [system.kanoa.lot.updateLotOperationField(lotOperationId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLotOperationField.md): Updates the passed field value for the given lotOperationId - [system.kanoa.lot.updateLotState(lotStateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLotState.md): Update the state info for a given stateId. All lotStateInfo keys are required unless otherwise stated. - [system.kanoa.lot.updateLotStateField(lotStateId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLotStateField.md): Updates the passed field value for the given lotStateId. If the field is enabled, we will update the assetLink Table - [system.kanoa.lot.updateLotStateReason(lotStateReasonInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLotStateReason.md): Update the lot state reason. Updates stateAssetLink table accordingly. All keys are required unless otherwise stated. - [system.kanoa.lot.updateLotStateReasonField(lotStateReasonId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateLotStateReasonField.md): Updates the passed field value for the given lotStateReasonId. If the field is enabled, we will update the assetLink Table - [system.kanoa.lot.updateRoute(routeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateRoute.md): Updates a route. A route can be associated with an itemId or an itemClassId - [system.kanoa.lot.updateRouteEvent(routeEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateRouteEvent.md): Updates a route event. Route events are instances of a route created for a lot - [system.kanoa.lot.updateRouteEventField(routeEventId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateRouteEventField.md): Updates the passed field value for the given routeId - [system.kanoa.lot.updateRouteField(routeId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateRouteField.md): Updates the passed field value for the given routeId - [system.kanoa.lot.updateRouteStep(routeStepInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateRouteStep.md): Updates a route step - [system.kanoa.lot.updateRouteStepEvent(routeStepEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateRouteStepEvent.md): Updates a route step event - [system.kanoa.lot.updateRouteStepEventField(routeStepEventId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateRouteStepEventField.md): Updates the passed field value for the given routeStepEventId - [system.kanoa.lot.updateRouteStepField(routeStepId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/lot/updateRouteStepField.md): Updates the passed field value for the given routeStepId - [Measures System Functions](https://kanoa-software.netlify.app/systemFunctions/apiMeasuresIntro.md): Provide system functions for the MES application Measures - [system.kanoa.measures.addMeasureTag(measureId, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/addMeasureTag.md): Adds a measure tag. Tag is stored in a measures folder under the asset - [system.kanoa.measures.getMeasureAggregations(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/measures/getMeasureAggregations.md): Returns measure aggregations. paramsDict keys are optional. - [system.kanoa.measures.addMeasureAggregation(measureAggregationInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/addMeasureAggregation.md): Adds a measure aggregation. All measureAggregationInfo keys are required. - [system.kanoa.measures.updateMeasureAggregation(measureAggregationInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/updateMeasureAggregation.md): Updates a measure aggregation. All measureAggregationInfo keys are required. - [system.kanoa.measures.deleteMeasureAggregation(measureAggregationId, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/deleteMeasureAggregation.md): Deletes a measure aggregation. SQL will prevent deletion if it has been used. - [system.kanoa.measures.getMeasureSourceTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/measures/getMeasureSourceTypes.md): Returns measure source types. paramsDict keys are optional. - [system.kanoa.measures.addMeasureSourceType(measureSourceTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/addMeasureSourceType.md): Adds a measure source type. All measureSourceTypeInfo keys are required unless otherwise stated. - [system.kanoa.measures.updateMeasureSourceType(measureSourceTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/updateMeasureSourceType.md): Updates a measure source type. All measureSourceTypeInfo keys are required. - [system.kanoa.measures.deleteMeasureSourceType(measureSourceTypeId, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/deleteMeasureSourceType.md): Deletes a measure source type. SQL will prevent deletion if it has been used. - [system.kanoa.measures.getMeasures(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/measures/getMeasures.md): Returns measures. paramsDict keys are optional. - [system.kanoa.measures.addMeasure(measureInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/addMeasure.md): Adds a measure. All measureInfo keys are required unless otherwise stated. - [system.kanoa.measures.updateMeasure(measureInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/updateMeasure.md): Updates a measure. All measureInfo keys are required unless otherwise stated - [system.kanoa.measures.deleteMeasure(measureId, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/deleteMeasure.md): Deletes a measure. SQL will prevent deletion if it has events. - [system.kanoa.measures.getMeasureEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/measures/getMeasureEvents.md): Returns measure events. paramsDict keys are optional. - [system.kanoa.measures.addMeasureEvent(measureEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/addMeasureEvent.md): Adds a measure event. measureId and tStamp are required; statistical columns are optional. - [system.kanoa.measures.updateMeasureEvent(measureEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/updateMeasureEvent.md): Updates a measure event. All measureEventInfo keys are required, unless otherwise stated - [system.kanoa.measures.deleteMeasureEvent(measureEventId, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/deleteMeasureEvent.md): Deletes a single measure event - [system.kanoa.measures.deleteMeasureEventsInRange(measureId, tStampStart, tStampEnd, userId)](https://kanoa-software.netlify.app/systemFunctions/measures/deleteMeasureEventsInRange.md): Deletes all events for a measure within a time range, inclusive. - [system.kanoa.measures.getMeasureSummary(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/measures/getMeasureSummary.md): Returns overall summary statistics per measure. - [system.kanoa.measures.getMeasureHourlyTrends(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/measures/getMeasureHourlyTrends.md): Returns measure statistics grouped by hour. - [system.kanoa.measures.getMeasureOutliers(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/measures/getMeasureOutliers.md): Returns events where measureValue falls outside N standard deviations of the mean. - [system.kanoa.measures.getMeasureValueDistribution(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/measures/getMeasureValueDistribution.md): Returns a frequency distribution of measureValue grouped into buckets. - [system.kanoa.measures.getMeasureRollingAverage(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/measures/getMeasureRollingAverage.md): Returns measureValue with a rolling average and rolling standard deviation over a sliding window. - [system.kanoa.measures.getMeasureSampleCountConsistency(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/measures/getMeasureSampleCountConsistency.md): Returns events flagged where sampleCount deviates significantly from the mean. - [system.kanoa.measures.getMeasureGapAnalysis(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/measures/getMeasureGapAnalysis.md): Returns the time gap between consecutive measure events, flagging gaps above a threshold. - [Operator System Functions](https://kanoa-software.netlify.app/systemFunctions/apiOperatorsIntro.md): Provide system functions for the MES application operators - [system.kanoa.operators.addCrew(crewInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/addCrew.md): Creates a new crew - [system.kanoa.operators.addCrewMember(crewMemberInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/addCrewMember.md): Adds a user to a crew as of startDate. Does not automatically close any other open membership - [system.kanoa.operators.addOperatorShiftAssignment(assignmentInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/addOperatorShiftAssignment.md): Assigns a single operator to a shift by inserting one sch.operatorShiftAssignment row. Use this for - [system.kanoa.operators.assignCrewToShift(crewAssignmentInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/assignCrewToShift.md): Assigns an entire crew to a shift by inserting one sch.operatorShiftAssignment row per user who was - [system.kanoa.operators.deleteCrew(crewId, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/deleteCrew.md): Deletes a crew. Cascades to sch.crewMember; sch.operatorShiftAssignment.crewId is set NULL on - [system.kanoa.operators.deleteCrewMember(crewMemberId, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/deleteCrewMember.md): Deletes a crew member. - [system.kanoa.operators.deleteOperatorSession(operatorAssetSessionId, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/deleteOperatorSession.md): Deletes an operator session - [system.kanoa.operators.deleteOperatorShiftAssignment(operatorShiftAssignmentId, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/deleteOperatorShiftAssignment.md): Deletes an operator shift assignment (individual or crew-generated) - [system.kanoa.operators.endOperatorShiftAssignment(operatorShiftAssignmentId, endDate, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/endOperatorShiftAssignment.md): Ends an operator shift assignment by setting its endDate - does not delete the assignment record. - [system.kanoa.operators.getCrewMembers(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/operators/getCrewMembers.md): Returns crew membership rows filtered by whichever keys are present in paramsDict - every key is optional - [system.kanoa.operators.getCrews(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/operators/getCrews.md): Returns crew rows filtered by whichever keys are present in paramsDict - every key is optional - [system.kanoa.operators.getOLEData(userId, assetId, startDate, endDate, attributionMode)](https://kanoa-software.netlify.app/systemFunctions/operators/getOLEData.md): Returns single-range OLE/POLE data for one user on one asset, or for every operator scheduled - [system.kanoa.operators.getOLEDataAsset(assetId, startDate, endDate)](https://kanoa-software.netlify.app/systemFunctions/operators/getOLEDataAsset.md): Returns single-range, whole-crew-combined OLE/POLE data for one asset (no operator breakdown). - [system.kanoa.operators.getOLEDataAssetByInterval(assetId, startDate, endDate, interval)](https://kanoa-software.netlify.app/systemFunctions/operators/getOLEDataAssetByInterval.md): Returns bucketed (Hour/Day/Week), whole-crew-combined OLE/POLE data for one asset (no operator breakdown) - [system.kanoa.operators.getOLEDataByInterval(userId, assetId, startDate, endDate, interval, attributionMode)](https://kanoa-software.netlify.app/systemFunctions/operators/getOLEDataByInterval.md): Returns bucketed (Hour/Day/Week) OLE/POLE data for one user on one asset, or for every operator - [system.kanoa.operators.getOLEDataByShift(userId, startDate, endDate, assetId, attributionMode)](https://kanoa-software.netlify.app/systemFunctions/operators/getOLEDataByShift.md): Returns one row per rostered shift (sch.operatorShiftAssignment/shiftBlock) overlapping the range - [system.kanoa.operators.getOLEOperatorAssetBreakdown(userId, assetId, startDate, endDate, attributionMode)](https://kanoa-software.netlify.app/systemFunctions/operators/getOLEOperatorAssetBreakdown.md): Breaks down one operator's OLE/POLE by individual asset (line) within a site/area - the leaderboard's - [system.kanoa.operators.getOLEOperatorLeaderboard(assetId, startDate, endDate, attributionMode)](https://kanoa-software.netlify.app/systemFunctions/operators/getOLEOperatorLeaderboard.md): Returns one row per operator who worked this asset in range, ranked by POLE - [system.kanoa.operators.getOperators(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/operators/getOperators.md): Returns operator session rows (mes.vwOperatorAssetSession), filtered by whichever keys are present in paramsDict - every key is optional - [system.kanoa.operators.getOperatorShiftAssignments(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/operators/getOperatorShiftAssignments.md): Returns operator shift assignment rows filtered by whichever keys are present in paramsDict - every key is optional - [system.kanoa.operators.operatorLogin(sessionInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/operatorLogin.md): Logs an operator into an asset by inserting an open mes.operatorAssetSession row. There is no separate operator identity - sessionInfo['userId'] is the sec.user being - [system.kanoa.operators.operatorLogout(sessionInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/operatorLogout.md): Logs an operator out of an asset by closing their open mes.operatorAssetSession row (the row where logoutTStamp IS NULL for this userId+assetId pair). There is no separate - [system.kanoa.operators.removeCrewMember(crewMemberId, endDate, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/removeCrewMember.md): Removes a user from a crew by closing their open membership row (endDate IS NULL) as of endDate - does not delete the historical membership record. - [system.kanoa.operators.updateCrew(crewInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/operators/updateCrew.md): Updates an existing crew - every key besides crewId is optional - [Order System Functions](https://kanoa-software.netlify.app/systemFunctions/apiOrderIntro.md): Provide system functions for the MES application production orders - [system.kanoa.order.addProductionOrder(woInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/order/addProductionOrder.md): Adds a new production order. All keys are required unless otherwise state - [system.kanoa.order.addProductionOrderMetaData(workOrderMetaInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/order/addProductionOrderMetaData.md): Adds a production order meta data value - [system.kanoa.order.addProductionOrderSource(orderSourceInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/order/addProductionOrderSource.md): Adds a new work order source - [system.kanoa.order.addProductionOrderState(orderStateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/order/addProductionOrderState.md): Adds a new production order state - [system.kanoa.order.deleteProductionOrder(workOrderId, userId)](https://kanoa-software.netlify.app/systemFunctions/order/deleteProductionOrder.md): Deletes a production order - [system.kanoa.order.deleteProductionOrderMetaData(workOrderMetaDataId, userId)](https://kanoa-software.netlify.app/systemFunctions/order/deleteProductionOrderMetaData.md): Deletes a production order meta data entry - [system.kanoa.order.deleteProductionOrderState(workOrderStatusId, userId)](https://kanoa-software.netlify.app/systemFunctions/order/deleteProductionOrderState.md): Deletes a production order state. States that are set as reservedBySystem cannot be deleted. - [system.kanoa.order.getProductionOrderMetaData(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/order/getProductionOrderMetaData.md): Returns production order metaData. paramsDict keys are optional. - [system.kanoa.order.getProductionOrders(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/order/getProductionOrders.md): Returns production orders linked to assets for given parameters. paramsDict keys are optional. - [system.kanoa.order.getProductionOrderSource(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/order/getProductionOrderSource.md): Returns production order source. paramsDict keys are optional. - [system.kanoa.order.getProductionOrderStates(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/order/getProductionOrderStates.md): Returns production order states - [system.kanoa.order.updateClientsProductionOrderChange()](https://kanoa-software.netlify.app/systemFunctions/order/updateClientsProductionOrderChange.md): We have a tag dataset kanoa/timers/getActiveOrdersTimer/data that holds released work orders. - [system.kanoa.order.updateProductionOrder(woInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/order/updateProductionOrder.md): Update a production order - [system.kanoa.order.updateProductionOrderField(workOrderId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/order/updateProductionOrderField.md): Update a production order field - [system.kanoa.order.updateProductionOrderMetaData(workOrderMetaInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/order/updateProductionOrderMetaData.md): Update a production order meta data entry - [system.kanoa.order.updateProductionOrderState(orderStateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/order/updateProductionOrderState.md): Update a production order state. States that are reservedBySystem cannot be updated - [system.kanoa.order.updateProductionOrderStateField(workOrderStatusId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/order/updateProductionOrderStateField.md): Updates the passed field value for the given workOrderStatusId. States that are reserved by system can only have their color changed. - [Performance State System Functions](https://kanoa-software.netlify.app/systemFunctions/apiPerformanceStateIntro.md): Provide system functions for the MES application performance states - [system.kanoa.performanceState.addPerformanceState(performanceStateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/performanceState/addPerformanceState.md): Adds a new performance state. All performanceStateInfo keys are required. - [system.kanoa.performanceState.addPerformanceStateClass(performanceStateClassInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/performanceState/addPerformanceStateClass.md): Adds a new performance state class. All performanceStateClassInfo keys are required. - [system.kanoa.performanceState.checkPerformanceState(performanceStateName, performanceStateClassId, performanceStates, userId)](https://kanoa-software.netlify.app/systemFunctions/performanceState/checkPerformanceState.md): Checks if an performanceState exists for the performanceStateClassId and creates it if it doesn't - [system.kanoa.performanceState.checkPerformanceStateClassPath(performanceStateClassPath, userId)](https://kanoa-software.netlify.app/systemFunctions/performanceState/checkPerformanceStateClassPath.md): Checks if an performanceStateClassPath exists and creates it if it doesn't - [system.kanoa.performanceState.deletePerformanceState(performanceStateId, userId)](https://kanoa-software.netlify.app/systemFunctions/performanceState/deletePerformanceState.md): Delete a performance state and any associated links to assets - [system.kanoa.performanceState.deletePerformanceStateClass(performanceStateClassId, userId)](https://kanoa-software.netlify.app/systemFunctions/performanceState/deletePerformanceStateClass.md): Deletes an item state class and any performance states or item state classes underneath it. - [system.kanoa.performanceState.getAssetPerformanceStates(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/performanceState/getAssetPerformanceStates.md): Returns performance states linked to assets filtered by the given parameters. paramsDict keys are optional. - [system.kanoa.performanceState.getPerformanceStateClasses(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/performanceState/getPerformanceStateClasses.md): Returns performanceStateClass info for given parameters. paramsict keys are optional. - [system.kanoa.performanceState.getPerformanceStateLinks(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/performanceState/getPerformanceStateLinks.md): Gets performance state links. paramsDict keys are optional. - [system.kanoa.performanceState.getPerformanceStates(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/performanceState/getPerformanceStates.md): Returns performance state info for given parameters. paramsDict keys are optional. - [system.kanoa.performanceState.linkPerformanceStates(linkInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/performanceState/linkPerformanceStates.md): Links assetIds with performanceStateIds, performanceStateClassIds, itemIds and itemClassIds. All linkInfo keys are required. - [system.kanoa.performanceState.unlinkPerformanceState(performanceStateLinkId, userId)](https://kanoa-software.netlify.app/systemFunctions/performanceState/unlinkPerformanceState.md): Deletes this performance state link - [system.kanoa.performanceState.updatePerformanceState(performanceStateInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/performanceState/updatePerformanceState.md): Update the performance state reason. All performanceStateInfo keys are required. - [system.kanoa.performanceState.updatePerformanceStateClass(performanceStateClassInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/performanceState/updatePerformanceStateClass.md): updates an performance state class. All performanceStateClassInfo keys are required. - [system.kanoa.performanceState.updatePerformanceStateField(performanceStateId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/performanceState/updatePerformanceStateField.md): Updates the passed field value for the given performanceStateId. If the field is enabled, we will update the assetLink Table (kanoaOPS) - [Quality System Functions](https://kanoa-software.netlify.app/systemFunctions/apiQualityIntro.md): Provide system functions for the MES application Quality Checks - [Quality Analysis System Functions](https://kanoa-software.netlify.app/systemFunctions/quality/apiQualityAnalysisIntro.md): Provides a set of analysis system functions for the QDS application - [system.kanoa.quality.analysis.getAttributeChartData(masterChkShtId, defectItemPath, startDate, endDate)](https://kanoa-software.netlify.app/systemFunctions/quality/analysis/getAttributeChartData.md): Supports the p/np/c/u attribute charts. Returns one row per check-sheet event with the defect/defective count and its sample size - both come off the same row, since - [system.kanoa.quality.analysis.getAvgChkItemEventsByRow(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/analysis/getAvgChkItemEventsByRow.md): Returns the averaged value for Check Sheet item event data for the given parameters with the check items in each row. paramsDict keys are optional unless otherwise stated. - [system.kanoa.analysis.getChkItemEventsByColumn(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/analysis/getChkItemEventsByColumn.md): Returns Check item event data for the given parameters with the check items in each column. paramsDict keys are optional unless otherwise stated. - [system.kanoa.analysis.getChkItemEventsByRow(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/analysis/getChkItemEventsByRow.md): Returns Check item event data for the given parameters with the check items in each row. paramsDict keys are optional unless otherwise stated. - [system.kanoa.quality.analysis.getContinuousChartData(masterChkShtId, chkItemPath, startDate, endDate, )](https://kanoa-software.netlify.app/systemFunctions/quality/analysis/getContinuousChartData.md): Wraps qds.spGetContinuousChartData - one row per event for a single continuous check item (individuals/xbar/xbars/precontrol), carrying the configured - [system.kanoa.analysis.getHistogramData(masterChkShtId, chkItemPath, startDate, endDate, minRange, maxRange, minValue, maxValue)](https://kanoa-software.netlify.app/systemFunctions/quality/analysis/getHistogramData.md): Returns check item event data formatted to build a process capability chart - [system.kanoa.quality.analysis.getMultiVariateChartData(masterChkShtId, chkItemPaths, startDate, endDate)](https://kanoa-software.netlify.app/systemFunctions/quality/analysis/getMultiVariateChartData.md): Wraps qds.spGetMultiVariateChartData - pivoted rows for a T2 chart: one row per observation, one column per requested chkItemPath. Column order in the returned - [system.kanoa.quality.analysis.getShiftHeatMap(paramsDict, category)](https://kanoa-software.netlify.app/systemFunctions/quality/analysis/getShiftHeatMap.md): Returns heat map data of check sheets by Shift for the parameters. paramsDict keys are optional unless otherwise stated. - [system.kanoa.quality.analysis.getSummary(paramsDict, category)](https://kanoa-software.netlify.app/systemFunctions/quality/analysis/getSummary.md): Returns summarized count of check sheets by state for the parameters passed. paramsDict keys are optional - [system.kanoa.analysis.queryChkItemEventData(masterChkShtId, chkItemPaths, startDate, endDate, minRange, maxRange)](https://kanoa-software.netlify.app/systemFunctions/quality/analysis/queryChkItemEventData.md): Returns check item event data formatted to display in the trend chart - [Quality Config System Functions](https://kanoa-software.netlify.app/systemFunctions/quality/apiQualityConfigIntro.md): Provides a set of configuration system functions for the QDS application - [system.kanoa.quality.config.addAlertGroup(grpInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/addAlertGroup.md): Adds a new alert group. All grpInfo keys are required. - [system.kanoa.quality.config.addAttribute(attrInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/addAttribute.md): Adds a new attribute. All attrInfo keys are required. If this attribute already exists, it returns the existing attributeId. - [system.kanoa.quality.config.addAttributeLink(chkItemId, attributeId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/addAttributeLink.md): Links the attributeId to the chkItemId. This check item now has access to a datasource (tag) and tolerance specs. - [system.kanoa.quality.config.addCheck(chkItemInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/addCheck.md): Add configuration for a check item. All chkItemInfo keys are required. - [system.kanoa.quality.config.addChkShtTrigger(triggerInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/addChkShtTrigger.md): Adds a check sheet trigger. All triggerInfo keys are required. - [system.kanoa.quality.config.addDataSource(attrInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/addDataSource.md): Adds a new attributeDataSource. All attrInfo keys are required. - [system.kanoa.quality.config.addDataType(dataTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/addDataType.md): Adds a new check item data type. All dataTypeInfo keys are required. - [system.kanoa.quality.config.addGroup(grpInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/addGroup.md): Adds a new check item group to the check sheet if it doesn't already exist. All grpInfo keys are required. - [system.kanoa.quality.config.addItemSet(itemSetInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/addItemSet.md): Adds an item set. All itemSetInfo are required. - [system.kanoa.quality.config.addTolerance(attrInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/addTolerance.md): Adds an attribute tolerance. All attrInfo keys are required. - [system.kanoa.quality.config.addUnit(unitInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/addUnit.md): Adds a new engineering unit. All unitInfo keys are required. - [system.kanoa.quality.config.checkTolerance(toleranceName, tolerances)](https://kanoa-software.netlify.app/systemFunctions/quality/config/checkTolerance.md): Checks a tolerance against a tolerance specification and returns whether the value set for the tolerance is valid - [system.kanoa.quality.config.deleteAlertGroup(alertGroupId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteAlertGroup.md): Deletes an new alert group. FK constraints will prevent us from deleting a check item group that is being used by a check item - [system.kanoa.quality.config.deleteAttribute(attributeId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteAttribute.md): Deletes an attribute. FK constraints will prevent us from deleting an attribute that is being used by a check item - [system.kanoa.quality.config.deleteAttributeLink(chkItemId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteAttributeLink.md): Deletes the attribute Id link for this check item if it exists - [system.kanoa.quality.config.deleteAttributeWithHistory(attributeId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteAttributeWithHistory.md): Deletes an attribute that has history by removing any event data associated with this attribute. - [system.kanoa.quality.config.deleteCheck(chkItemId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteCheck.md): Deletes a check. FK constraints will prevent us from deleting a check that is being used. - [system.kanoa.quality.config.deleteCheckWithHistory(chkItemId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteCheckWithHistory.md): Deletes a check item and any associated checkEvent data. - [system.kanoa.quality.config.deleteChkShtTrigger(chkShtTriggerId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteChkShtTrigger.md): Deletes a check sheet trigger. FK constraints prevent the deletion if trigger is being used. - [system.kanoa.quality.config.deleteDataSource(attributeDataSourceId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteDataSource.md): Deletes an attribute datasource. FK constraints will prevent the deletion of an attribute data source that is being used. - [system.kanoa.quality.config.deleteDataType(dataTypeId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteDataType.md): Deletes a check item data type. FK constraints will prevent us from deleting a data type that is being used. - [system.kanoa.quality.config.deleteGroup(chkItemGroupId, chkShtId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteGroup.md): Deletes a chkItem group. FK constraints will prevent the deletion of a check item group that is being used by a check item. - [system.kanoa.quality.config.deleteItemSet(itemSetId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteItemSet.md): Deletes an item set. FKs between the chkShtItemSetLink and itemsetLink tables will prevent the deletion of this itemSetLink if it is being used - [system.kanoa.quality.config.deleteTolerance(attributeToleranceId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteTolerance.md): Deletes an attribute tolerance. - [system.kanoa.quality.config.deleteTolerances(attribute, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteTolerances.md): Deletes all tolerances for an attribute. - [system.kanoa.quality.config.deleteUnit(engUnitId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/deleteUnit.md): Deletes an engineering unit. FK constraints will prevent the deletion of a unit that is being used by a check item - [system.kanoa.quality.config.duplicateCheck(chkItemId, chkItemName, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/duplicateCheck.md): Creates a copy of the passed in chkItemId with the passed in name for the new check item. - [system.kanoa.quality.config.getAlertGroups(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getAlertGroups.md): Returns alert groups. paramsDict keys are optional. - [system.kanoa.quality.config.getAttributes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getAttributes.md): Returns attribute based on the passed parameters. paramsDict keys are optional. - [system.kanoa.quality.config.getCheckItemStates(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getCheckItemStates.md): Returns check item states. paramsDict keys are optional. - [system.kanoa.quality.config.getCheckItemTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getCheckItemTypes.md): Returns check Item Types. paramsDict keys are optional. - [system.kanoa.quality.config.getChecks(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getChecks.md): Returns the check items for the given parameters. paramsDict keys are optional. - [system.kanoa.quality.config.getChkShtTriggers(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getChkShtTriggers.md): Returns all check sheets triggers that meet the passed criteria. paramsDict keys are optional. - [system.kanoa.quality.config.getDataSource(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getDataSource.md): Returns attribute datasources based on the passed parameters. paramsDict keys are optional. - [system.kanoa.quality.config.getDataTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getDataTypes.md): Returns chkItem data types. paramsDict keys are optional. - [system.kanoa.quality.config.getGroups(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getGroups.md): Returns chkItemGroups for the given parameters. paramsDict keys are optional. - [system.kanoa.quality.config.getItems(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getItems.md): Returns items with linked itemSets. Note if an item belongs to more than one item set, it will return multiple rows. paramsDict keys are optional. - [system.kanoa.quality.config.getItemSetLinks(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getItemSetLinks.md): Returns itemSetLinks for the given parameters. paramsDict keys are optional. - [system.kanoa.quality.config.getItemSets(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getItemSets.md): Returns itemSets for the given parameters. paramsDict keys are optional. - [system.kanoa.quality.config.getPickList(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getPickList.md): Returns pick list options. paramsDict keys are optional. - [system.kanoa.quality.config.getToleranceData(attributeId, assetId, itemId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getToleranceData.md): Tolerances can be associated with the item, itemSet, itemClass, all items, asset or any asset. We'll return hits ranked on the best fit. - [system.kanoa.quality.config.getTolerances(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getTolerances.md): Returns attribute tolerances based on the passed parameters. paramsDict keys are optional. - [system.kanoa.quality.config.getTriggerTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getTriggerTypes.md): Returns all check sheets triggers that meet the passed criteria. paramsDict keys are optional. - [system.kanoa.quality.config.getUnits(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/config/getUnits.md): Returns engineering units that meet the passed criteria. paramsDict keys are optional. - [system.kanoa.quality.config.linkItems(itemSetId, itemList, enabled, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/linkItems.md): Adds links between an item set and a list of items. - [system.kanoa.quality.config.unlinkItems(itemSetIdList, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/unlinkItems.md): Unlinks items from item sets. - [system.kanoa.quality.config.updateAlertGroup(grpInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/updateAlertGroup.md): Updates an alert group. All grpInfo keys are required. - [system.kanoa.quality.config.updateAttribute(attrInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/updateAttribute.md): Updates an attribute. All attrInfo keys are required. - [system.kanoa.quality.config.updateCheck(chkItemInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/updateCheck.md): Updates the configuration for a check item. All chkItemInfo keys are required. - [system.kanoa.quality.config.updateCheckField(field, value, chkItemId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/updateCheckField.md): Updates a check item field value. - [system.kanoa.quality.config.updateChkShtTrigger(triggerInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/updateChkShtTrigger.md): Updates a check sheet trigger. All triggerInfo keys are required. - [system.kanoa.quality.config.updateDataSource(attrInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/updateDataSource.md): Updates an attributeDataSource. All attrInfo keys are required. - [system.kanoa.quality.config.updateDataType(dataTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/updateDataType.md): Updates a check item data type. All dataTypeInfo keys are required. - [system.kanoa.quality.config.updateGroup(grpInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/updateGroup.md): Updates a check item group. All grpInfo keys are required. - [system.kanoa.quality.config.updateGroupField(field, value, chkItemGroupId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/updateGroupField.md): Updates a chkItem group field value. - [system.kanoa.quality.config.updateItemSet(itemSetInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/updateItemSet.md): Updates an item set. All itemSetInfo are required. - [system.kanoa.quality.config.updateTolerance(attrInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/updateTolerance.md): Updates an attribute tolerance. - [system.kanoa.quality.config.updateUnit(unitInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/config/updateUnit.md): Updates an engineering unit. All unitInfo keys are required. - [Quality Event System Functions](https://kanoa-software.netlify.app/systemFunctions/quality/apiQualityEventIntro.md): Provides a set of system functions for the QDS application for retrieval and analysis of check event data - [system.kanoa.quality.event.addCheckEvent(chkEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/event/addCheckEvent.md): Adds a new check sheet event. Only chkShtId key is required - [system.kanoa.quality.event.addChkItemEventComment(chkItemEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/event/addChkItemEventComment.md): Adds a comment to a check item event. If chkItemEventId is passed, it will update it and only requires the comment key to be passed otherwise all keys are expected. - [system.kanoa.quality.event.deleteChkEvent(chkShtEventId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/event/deleteChkEvent.md): Deletes a check sheet event. SQL handles cascade deletions down to chkItemEvents table - [system.kanoa.quality.event.deleteChkShtItemEvents(chkShtItemEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/event/deleteChkShtItemEvents.md): Deletes check item events from a check sheet event. chkShtItemEventInfo keys are optional unless otherwise stated. - [system.kanoa.quality.event.getAssetTagInfo(tagPath)](https://kanoa-software.netlify.app/systemFunctions/quality/event/getAssetTagInfo.md): Returns the current asset status values from the qds/assetInfo udt at the given tagPath - [system.kanoa.quality.event.getChkItemStateId(chkItemInfo, value, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/event/getChkItemStateId.md): Given the chkItem info and value, this function will return if the check item event passed, failed or has warning - [system.kanoa.quality.config.getChkShtEventItems(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/event/getChkShtEventItems.md): This function gets called by the chkShtEventEditor to build the check table. paramsDict keys are optional. - [system.kanoa.quality.event.getChkShtEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/event/getChkShtEvents.md): Returns scheduled checkSheets. paramsDict keys are optional. - [system.kanoa.quality.event.getChkShtItemEventValues(chkShtEventId, chkItemId)](https://kanoa-software.netlify.app/systemFunctions/quality/event/getChkShtItemEventValues.md): Returns the values for the check sheet event and check item passed - [system.kanoa.event.getMasterChkShtEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/event/getMasterChkShtEvents.md): Returns check sheet events - [system.kanoa.quality.event.saveChkItemEvent(chkItemEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/event/saveChkItemEvent.md): Saves a chkItemEvent value. Check if a record already exists for the chkShtEventId|chkItemId|measNumber combo and updates it otherwise inserts it. - [system.kanoa.quality.schedule.updateChkEventDataTag()](https://kanoa-software.netlify.app/systemFunctions/quality/event/updateChkEventDataTag.md): Updates [Kanoa]kanoa/timers/qdsScheduleChecks/update tag that is used to show current status of active checks. - [system.kanoa.quality.event.updateChkShtEventField(chkShtEventId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/event/updateChkShtEventField.md): Updates any field in a check sheet event - [system.kanoa.quality.event.updateChkShtEventFields(chkShtEventId, updates, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/event/updateChkShtEventFields.md): Updates one or more fields in a check sheet event. - [system.kanoa.quality.event.updateChkShtStatus(chkShtEventId, status, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/event/updateChkShtStatus.md): Updates a check sheet event status - [Quality Image System Functions](https://kanoa-software.netlify.app/systemFunctions/quality/apiQualityImageIntro.md): Provides a set of system functions for managing images in the QDS application - [system.kanoa.quality.image.addImage(chkItemId, imageName, imageType, imageDescription, image, thumbnail, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/image/addImage.md): Inserts an image into the qds.image table - [system.kanoa.quality.image.updateImage(imageId, chkItemId, imageName, imageType, imageDescription, imageBytes, thumbnail, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/image/updateImage.md): Updates an image into the qds.image table - [system.kanoa.quality.image.deleteImage(imageId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/image/deleteImage.md): Deletes an image from the qds.image table - [system.kanoa.quality.image.getImageThumbnail(imageId)](https://kanoa-software.netlify.app/systemFunctions/quality/image/getImageThumbnail.md): Returns the thumbnail for a given imageId - [system.kanoa.quality.image.getImageId(chkItemId, imageName)](https://kanoa-software.netlify.app/systemFunctions/quality/image/getImageId.md): Returns the imageId for a given chkItemId and imageName - [system.kanoa.quality.image.getImage(imageId)](https://kanoa-software.netlify.app/systemFunctions/quality/image/getImage.md): Returns the image for a given imageId - [system.kanoa.quality.image.getImageData(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/image/getImageData.md): Returns the image data filtered by the given parameters. paramsDict keys are optional. - [system.kanoa.quality.image.processImage(filePath, chkItemId, imageId, imageName, imageType, imageDescription, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/image/processImage.md): Given a filepath, this function will convert the image found to a jpg, create a thumbnail and store it in the database - [Quality Schedule System Functions](https://kanoa-software.netlify.app/systemFunctions/quality/apiQualityScheduleIntro.md): Provides a set of system functions for the QDS application for the scheduling of quality checks - [system.kanoa.quality.schedule.assetChangeEvent(stateInfo)](https://kanoa-software.netlify.app/systemFunctions/quality/schedule/assetChangeEvent.md): This function can be called by a tag change event to check if any check sheets should become active. - [system.kanoa.schedule.checkIfItemCheckedThisShift(chkShtId, assetId, shiftNameId, itemId)](https://kanoa-software.netlify.app/systemFunctions/quality/schedule/checkIfItemCheckedThisShift.md): Determines if this check has already been performed on this item during this shift - [system.kanoa.quality.schedule.getSecondsSinceLastCheck(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/schedule/getSecondsSinceLastCheck.md): Returns the seconds since the last scheduled check for this check sheet on this asset. All paramsDict keys are required. - [system.kanoa.quality.schedule.intervalTimerEvent()](https://kanoa-software.netlify.app/systemFunctions/quality/schedule/intervalTimerEvent.md): This function is called by the [Kanoa]kanoa/timers/qdsIntervalTimer tag to check for check sheets that have a 'Timed interval' trigger. - [system.kanoa.quality.schedule.updateScheduledAutoChecks()](https://kanoa-software.netlify.app/systemFunctions/quality/schedule/updateScheduledAutoChecks.md): IntervalTimer check generates all checks that are coming due. This function will look for scheduled checks that are set to 'auto' and grab the values - [system.kanoa.quality.schedule.updateScheduledChecks()](https://kanoa-software.netlify.app/systemFunctions/quality/schedule/updateScheduledChecks.md): This function is called by the system.kanoa.quality.schedule.intervalTimerEvent() function to update a check sheet events status from 'coming due' to 'due' to 'overdue' etc. - [Quality Sheet System Functions](https://kanoa-software.netlify.app/systemFunctions/quality/apiQualitySheetIntro.md): Provides a set of system functions for the QDS application for the configuration and retrieval specifically of check sheets - [system.kanoa.sheet.addAssets(chkShtId, assetIdList, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/addAssets.md): Adds links between a check sheet and a list of assets - [system.kanoa.sheet.addChangeLog(changeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/addChangeLog.md): Adds a new change log record. All changeInfo keys are required. - [system.kanoa.sheet.addFile(chkShtId, fileName, fileBlob, description, thumbnail, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/addFile.md): Adds a file for a check sheet - [system.kanoa.quality.sheet.addItemClasses(chkShtId, itemClassIdList, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/addItemClasses.md): Adds links between a check sheet and a list of item classes. - [system.kanoa.quality.sheet.addItems(chkShtId, itemIdList, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/addItems.md): Adds links between a check sheet and a list of items (products). - [system.kanoa.quality.sheet.addItemSets(chkShtId, itemSetIdList, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/addItemSets.md): Adds links between a check sheet and a list of item sets. - [system.kanoa.sheet.addSheet(chkShtInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/addSheet.md): Adds a new check sheet. All chkShtInfo keys are required unless otherwise stated. - [system.kanoa.quality.sheet.addSheetAlertGroups(chkShtId, alertGroupIdList, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/addSheetAlertGroups.md): Adds links between a check sheet and a list of alert groups. - [system.kanoa.sheet.addSheetType(shtTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/addSheetType.md): Adds a new sheet type - [system.kanoa.sheet.addSheetVersionHistory(chkShtVersionInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/addSheetVersionHistory.md): Adds check sheet version history. chkShtVersionInfo keys are required. - [system.kanoa.sheet.addTooling(chkShtId, toolingIdList, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/addTooling.md): Adds links between a check sheet and a list of tools. - [system.kanoa.sheet.copySheet(copyShtInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/copySheet.md): Makes a copy of a checksheet - [system.kanoa.sheet.deleteAssets(chkShtId, assetIdList, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/deleteAssets.md): Delete the asset links for a check sheet. - [system.kanoa.sheet.deleteItemClasses(chkShtId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/deleteItemClasses.md): Delete the item class links for a check sheet. - [system.kanoa.sheet.deleteItems(chkShtId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/deleteItems.md): Delete the item links for a check sheet. - [system.kanoa.sheet.deleteItemSets(chkShtId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/deleteItemSets.md): Delete the item set links for a check sheet. - [system.kanoa.sheet.deleteSheet(chkShtId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/deleteSheet.md): Deletes the checksheet and any of its versions. Will fail if this checksheet has event data for it. - [system.kanoa.sheet.deleteSheetAlertGroups(chkShtId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/deleteSheetAlertGroups.md): Delete the alert group links for a check sheet. - [system.kanoa.sheet.deleteSheetType(chkShtTypeId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/deleteSheetType.md): Deletes a check sheet type. FK constraints will prevent the deletion of check sheet types that has check sheets - [system.kanoa.sheet.deleteSheetWithHistory(chkShtId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/deleteSheetWithHistory.md): Deletes a check sheet and any associated checkEvent data - [system.kanoa.sheet.deleteTooling(chkShtId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/deleteTooling.md): Delete the tooling links for a check sheet. - [system.kanoa.sheet.exportSheets(chkShtIdList)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/exportSheets.md): This functions exports a list of checksheets and returns it as json - [system.kanoa.sheet.getAlertGroups(chkShtId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getAlertGroups.md): Returns alert groups linked to a check sheet. - [system.kanoa.sheet.getAssets(chkShtId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getAssets.md): Returns all assets linked to a check sheet - [system.kanoa.sheet.getChangeLog(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getChangeLog.md): Returns all check sheet changes that meet the passed criteria. paramsDict keys are optional. - [system.kanoa.sheet.getFiles(chkShtId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getFiles.md): Returns files linked to a check sheet . - [system.kanoa.sheet.getItemClasses(chkShtId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getItemClasses.md): Returns all item classes linked to a check sheet. - [system.kanoa.sheet.getItems(chkShtId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getItems.md): Returns all items linked to a check sheet - [system.kanoa.sheet.getItemSets(chkShtId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getItemSets.md): Returns all item sets linked to a check sheet. - [system.kanoa.quality.sheet.getSheets(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getSheets.md): Returns check sheets filtered by passed in paramter keys. Keys are optional. - [system.kanoa.quality.sheet.getSheetsByAsset(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getSheetsByAsset.md): Returns all check sheets linked to assets that meet the passed criteria. This function only returns unique records for a check sheet. - [system.kanoa.sheet.getSheetsFilteredBy(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getSheetsFilteredBy.md): Returns all check sheets that meet the passed criteria. This function may return duplicate records for a checksheet as each will be specific for the trigger, asset and item - [system.kanoa.sheet.getSheetTypes(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getSheetTypes.md): Returns check sheet types - [system.kanoa.sheet.getSheetVersionHistory(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getSheetVersionHistory.md): Returns check sheet version history. paramsDict keys are optional. - [system.kanoa.sheet.getSheetVersionStates(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getSheetVersionStates.md): Returns check sheet version states. paramsDict keys are optional. - [system.kanoa.sheet.getStates(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getStates.md): Returns check sheet states. paramsDict keys are optional. - [system.kanoa.sheet.getTooling(chkShtId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getTooling.md): Returns tooling linked to a check sheet. - [system.kanoa.sheet.getUniqueChecksOnly(assetChkShts)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/getUniqueChecksOnly.md): The kanoa.qds.config.sheets.getSheetsFilteredBy() function can return duplicate check sheets due to the join for items, itemSets and triggers. - [system.kanoa.sheet.revertSheetVersionState(masterChkShtId, chkShtId, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/revertSheetVersionState.md): This function sets an archived checksheet back to 'In Revision'. - [system.kanoa.quality.sheet.updateFile(chkShtId, fileName, fileBlob, description, thumbnail, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/updateFile.md): Updates a file for a chksheet. - [system.kanoa.sheet.updateSheet(chkShtInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/updateSheet.md): Updates a check sheet. All chkShtInfo keys are required unless otherwise stated. - [system.kanoa.sheet.updateSheetField(chkShtId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/updateSheetField.md): Updates the passed field value for the given chkShtId. - [system.kanoa.sheet.updateSheetType(shtTypeInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/updateSheetType.md): Updates a sheet type - [system.kanoa.sheet.updateSheetVersionState(masterChkShtId, chkShtId, chkShtVersionStateName, userId)](https://kanoa-software.netlify.app/systemFunctions/quality/sheet/updateSheetVersionState.md): This function updates the chkShtId version state i.e. to 'Released'. It handles the logic of creating copies, archiving, renaming etc. - [Quality SPC System Functions](https://kanoa-software.netlify.app/systemFunctions/quality/apiQualitySPCIntro.md): Provides a set of SPC system functions for the QDS application - [system.kanoa.quality.spc.rule1(valueList, mean, sigma)](https://kanoa-software.netlify.app/systemFunctions/quality/spc/rule1.md): Rule 1: One point is more than 3 standard deviations from the mean (outlier) - [system.kanoa.quality.spc.rule2(valueList, mean)](https://kanoa-software.netlify.app/systemFunctions/quality/spc/rule2.md): Rule 2: Nine (or more) points in a row are on the same side of the mean (shift) - [system.kanoa.quality.spc.rule3(valueList)](https://kanoa-software.netlify.app/systemFunctions/quality/spc/rule3.md): Rule 3: Six (or more) points in a row are continually increasing (or decreasing) trend - [system.kanoa.quality.spc.rule4(valueList)](https://kanoa-software.netlify.app/systemFunctions/quality/spc/rule4.md): Rule 4: Fourteen (or more) points in a row alternate in direction, increasing then decreasing (bimodal, 2 or more factors in data set) - [system.kanoa.quality.spc.rule5(valueList, mean, sigma)](https://kanoa-software.netlify.app/systemFunctions/quality/spc/rule5.md): Rule 5: Two (or three) out of three points in a row are more than 2 standard deviations from the mean in the same direction (shift) - [system.kanoa.quality.spc.rule6(valueList, mean, sigma)](https://kanoa-software.netlify.app/systemFunctions/quality/spc/rule6.md): Rule 6: Four (or five) out of five points in a row are more than 1 standard deviation from the mean in the same direction (shift or trend) - [system.kanoa.quality.spc.rule7(valueList, mean, sigma)](https://kanoa-software.netlify.app/systemFunctions/quality/spc/rule7.md): Rule 7: Fifteen points in a row are all within 1 standard deviation of the mean on either side of the mean (reduced variation or measurement issue) - [system.kanoa.quality.spc.rule8(valueList, mean, sigma)](https://kanoa-software.netlify.app/systemFunctions/quality/spc/rule8.md): Rule 8: Eight points in a row exist with none within 1 standard deviation of the mean and the points are in both directions from the mean (bimodal, 2 or more factors in data set) - [system.kanoa.quality.spc.spcCheck(values, chartType, ruleSet, subgroupSize, usl, lsl, sampleSizes)](https://kanoa-software.netlify.app/systemFunctions/quality/spc/spcCheck.md): Computes SPC control limits, zone-based rule violations (Western Electric / Nelson), and - where applicable - process capability/performance indices, for one of the following chart types: - [system.kanoa.quality.spc.spcCheckT2(rows, variableNames, alpha)](https://kanoa-software.netlify.app/systemFunctions/quality/spc/spcCheckT2.md): Hotelling's T2 multivariate control chart. Charts a matrix of correlated variables per observation, not a single value series. Mean vector and covariance matrix are computed from chkItemEvent data (Phase I - the baseline is the same data being charted). UCL uses the chi-square approximation (valid once the baseline sample is reasonably large), not the exact F-distribution - simpler, no incomplete-beta-function implementation needed, and standard practice in most commercial SPC software for this case. - [Schedule System Functions](https://kanoa-software.netlify.app/systemFunctions/apiScheduleIntro.md): Provide system functions for the MES application Operations Scheduling - [system.kanoa.schedule.addScheduleBlock(scheduleBlockInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/schedule/addScheduleBlock.md): Adds a new scheduleBlock. All scheduleBlockInfo keys are required - [system.kanoa.schedule.addScheduleBlockException(scheduleBlockId, exceptionDate, userId)](https://kanoa-software.netlify.app/systemFunctions/schedule/addScheduleBlockException.md): Adds a new scheduleBlock exception - [system.kanoa.schedule.adjustExistingEvents(scheduleTimes, scheduleBlockList, scheduleOption, userId)](https://kanoa-software.netlify.app/systemFunctions/schedule/adjustExistingEvents.md): Takes a list of scheduleTimes to be scheduled and a list of scheduleBlocks to be modified, and depending on the scheduleOption, will either have its start or end time modified, or deleted. - [system.kanoa.schedule.adjustScheduleEvents(scheduleBlockInfo, scheduleTimes, scheduleBlockList, scheduleOption, scheduleConfig, rangeStart, rangeEnd, userId)](https://kanoa-software.netlify.app/systemFunctions/schedule/adjustScheduleEvents.md): Takes a list of scheduleTimes to be scheduled and a list of scheduleBlocks that are overlapping and adjusts the scheduleTimes - [system.kanoa.schedule.calcEventDuration(assetId, startDate, qty, itemInfo)](https://kanoa-software.netlify.app/systemFunctions/schedule/calcEventDuration.md): This function will calculate the expected duration it will take to complete a production run for a given item - [system.kanoa.schedule.checkAssetSchedule(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/schedule/checkAssetSchedule.md): Used by the checkAssetSchedule tag timer to check an assets schedule and its current status, and will update its mode accordingly if allowed. - [system.kanoa.schedule.checkForScheduleOverlap(scheduleBlockInfo, scheduleConfig, rangeStart, rangeEnd)](https://kanoa-software.netlify.app/systemFunctions/schedule/checkForScheduleOverlap.md): Checks a new event to schedule or modify, against the asset's current schedule and shift schedule if required and returns a list of start and endDates available - [system.kanoa.schedule.checkEventsOverlap(eventsToScheduleList, scheduledEventsList)](https://kanoa-software.netlify.app/systemFunctions/schedule/checkEventsOverlap.md): Checks to see if there is any overlap between two lists of time intervals. - [system.kanoa.schedule.convertRecurringRuleToText(rruleStr)](https://kanoa-software.netlify.app/systemFunctions/schedule/convertRecurringRuleToText.md): Takes the rruleStr string object and returns human readable text for displaying to the user - [system.kanoa.schedule.decodeScheduleBlock(scheduleBlock, rangeStart, rangeEnd, tzOffsets)](https://kanoa-software.netlify.app/systemFunctions/schedule/decodeScheduleBlock.md): Decodes the rruleStr passed in the scheduleBlock and returns a list of start and end times. Note this function can only be run in gateway scope. - [system.kanoa.schedule.deleteScheduleBlock(scheduleBlockId, userId)](https://kanoa-software.netlify.app/systemFunctions/schedule/deleteScheduleBlock.md): Deletes a schedule block - [system.kanoa.schedule.deleteScheduleBlockException(scheduleBlockExceptionId, userId)](https://kanoa-software.netlify.app/systemFunctions/schedule/deleteScheduleBlockException.md): Deletes a scheduleBlock exception - [system.kanoa.schedule.deleteScheduleBlocks(assetId, startDate, endDate)](https://kanoa-software.netlify.app/systemFunctions/schedule/deleteScheduleBlocks.md): Deletes all schedule blocks for the given parameters - [system.kanoa.schedule.getCalendarEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/schedule/getCalendarEvents.md): Gets all operations schedule or shift events for the specified range. Applies an offset to the returned dates to show correctly on the calendar component. - [system.kanoa.schedule.getExistingEventAdjustedTimes(scheduleOption, eventToSchedule, existingEvent)](https://kanoa-software.netlify.app/systemFunctions/schedule/getExistingEventAdjustedTimes.md): Checks the existing event time against an eventToSchedule time and returns the existingEvent with adjusted time and an action i.e 'adjust' or 'delete' - [system.kanoa.schedule.getScheduleBlockExceptions(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/schedule/getScheduleBlockExceptions.md): Returns scheduleBlock exceptions. paramsDict keys are optional - [system.kanoa.schedule.getScheduleBlocks(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/schedule/getScheduleBlocks.md): Returns all schedule blocks for the given parameters. paramsDict keys are optional - [system.kanoa.schedule.getScheduledEventDurations](https://kanoa-software.netlify.app/systemFunctions/schedule/getScheduledEventDurations.md): Used in Reliability analysis to compare the amount of time modes were scheduled for compared to how long they were actually in that mode. - [system.kanoa.schedule.scheduleOperation(scheduleBlockInfo, scheduleConfig, scheduleOption, userId)](https://kanoa-software.netlify.app/systemFunctions/schedule/scheduleOperation.md): Schedules an operation that flexibly adheres to the asset's shift schedule and schedule config settings, while also avoiding any currently existing schedule blocks. - [system.kanoa.schedule.updateClientsScheduleChange(assetPath)](https://kanoa-software.netlify.app/systemFunctions/schedule/updateClientsScheduleChange.md): After a change has been made to the schedule, this function can be called to update the tag schedule dataset 'kanoa/timers/getActiveAssetScheduleTimer/data'. - [system.kanoa.schedule.updateScheduleBlock(scheduleBlockInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/schedule/updateScheduleBlock.md): Updates a schedule block. All scheduleBlockInfo keys are required - [system.kanoa.schedule.updateScheduleBlockExceptions(scheduleBlockId, newStartDate, userId)](https://kanoa-software.netlify.app/systemFunctions/schedule/updateScheduleBlockExceptions.md): Updates a scheduleBlockException. When a scheduled event block's startDate gets updated, all of its exceptions dates will be updated as well - [system.kanoa.schedule.updateScheduleBlockField(scheduleBlockId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/schedule/updateScheduleBlockField.md): Updates the passed field value for the given scheduleBlockId - [Security System Functions](https://kanoa-software.netlify.app/systemFunctions/apiSecurityIntro.md): Provide system functions for the MES application User Management - [system.kanoa.security.addConfig(configInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/security/addConfig.md): Adds a security configuration property - [system.kanoa.security.addRole(roleInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/security/addRole.md): Add a new user role - [system.kanoa.security.addUser(userInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/security/addUser.md): Creates a new user, using information provided by the userInfo - [system.kanoa.security.addUserToUserSource(userInfo)](https://kanoa-software.netlify.app/systemFunctions/security/addUserToUserSource.md): Creates a new user in the gateway's default user source using information provided by the userInfo - [system.kanoa.security.addUserAssetRole(userAssetRoleInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/security/addUserAssetRole.md): Adds roles for a user and asset - [system.kanoa.analysis.addUserFunction(functionInfo)](https://kanoa-software.netlify.app/systemFunctions/security/addUserFunction.md): Adds a new security function - [system.kanoa.security.checkIsGatewayAdmin(userId)](https://kanoa-software.netlify.app/systemFunctions/security/checkIsGatewayAdmin.md): Returns true if user has Gateway Admin role - [system.kanoa.security.deleteRole(roleId, userId)](https://kanoa-software.netlify.app/systemFunctions/security/deleteRole.md): Deletes a user role - [system.kanoa.security.deleteUser(userName)](https://kanoa-software.netlify.app/systemFunctions/security/deleteUser.md): Deletes a user from the userSource and the sec.user table. SQL Cascade will remove any user asset roles for this user. - [system.kanoa.event.deleteUserAssetRole(userAssetRoleInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/security/deleteUserAssetRole.md): Deletes a user asset role - [system.kanoa.analysis.deleteUserFunction(functionId, userId)](https://kanoa-software.netlify.app/systemFunctions/security/deleteUserFunction.md): Adds a new security function - [system.kanoa.security.getConfig(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/security/getConfig.md): Returns security configuration - [system.kanoa.security.getIDPUserId(user)](https://kanoa-software.netlify.app/systemFunctions/security/getIDPUserId.md): Returns the userId for the given user authentication object. This can be the session authentication property. - [system.kanoa.security.getRoleFunctions(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/security/getRoleFunctions.md): Returns role functions filtered by the given parameters - [system.kanoa.security.getRoles(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/security/getRoles.md): Returns roles for the given parameters - [system.kanoa.security.getTableRoles()](https://kanoa-software.netlify.app/systemFunctions/security/getTableRoles.md): Returns roles info as a dataset. Used to populate the user table view - [system.kanoa.security.getTableUsers(userId, userSources)](https://kanoa-software.netlify.app/systemFunctions/security/getTableUsers.md): Takes a user ID and a list of user sources, and returns a dataset of other users, that the user may see - [system.kanoa.security.getUserAssetRoles(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/security/getUserAssetRoles.md): Returns the assets, functions and roles for a user - [system.kanoa.security.getUserFunctions(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/security/getUserFunctions.md): Returns user functions filtered by key values passed in the paramsDict - [system.kanoa.security.getUsers(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/security/getUsers.md): Returns users filtered by the passed parameters. paramsDict keys are optional. - [system.kanoa.security.getUserAssetCRUD(userId)](https://kanoa-software.netlify.app/systemFunctions/security/getUserAssetCRUD.md): Returns CRUD information by asset path and function for the given user. - [system.kanoa.security.getUserCRUD(userId)](https://kanoa-software.netlify.app/systemFunctions/security/getUserCRUD.md): Returns CRUD information by asset id and function for the given user. This function is deprecated and replaced with getUserAssetCRUD() - [system.kanoa.security.getUserSource(userName)](https://kanoa-software.netlify.app/systemFunctions/security/getUserSource.md): Returns the userSource that a user belongs to - [system.kanoa.security.setGatewayAdmin(userId, enabled)](https://kanoa-software.netlify.app/systemFunctions/security/setGatewayAdmin.md): Changes the enabled status of GatewayAdmin role from the passed user - [system.kanoa.security.storeNewIDPUser(auth)](https://kanoa-software.netlify.app/systemFunctions/security/storeNewIDPUser.md): Whenever a new user logs in and is authenticated by the iDP, a new record is created in the sec.user table that is the primary key in all changedBy and createdBy records. - [system.kanoa.security.updateConfig(configInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/security/updateConfig.md): Updates a security configuration property - [system.kanoa.security.updateConfigField(configId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/security/updateConfigField.md): Updates the security config field with the passed value - [system.kanoa.security.updateRoleFunctions(roleFunctionInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/security/updateRoleFunctions.md): Updates a role function link - [system.kanoa.security.updateUser(userInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/security/updateUser.md): Updates a user with the provided information - [system.kanoa.security.updateUserField(userId, field, value, updaterId)](https://kanoa-software.netlify.app/systemFunctions/security/updateUserField.md): Updates the user table field with the passed value - [system.kanoa.sheet.updateUserFunction(functionInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/security/updateUserFunction.md): Updates a security function - [Serial System Functions](https://kanoa-software.netlify.app/systemFunctions/apiSerialIntro.md): Provide system functions for the MES application Serial Number Management - [system.kanoa.serial.addSerialNumber(serialInfo, serialValue, userId)](https://kanoa-software.netlify.app/systemFunctions/serial/addSerialNumber.md): Adds a new template for generating serial numbers. serialInfo keys are required unless otherwise stated. - [system.kanoa.serial.deleteSerialNumber(serialId, userId)](https://kanoa-software.netlify.app/systemFunctions/serial/deleteSerialNumber.md): Deletes a serialization - [system.kanoa.serial.getNextSerialNumber(serialId, userId)](https://kanoa-software.netlify.app/systemFunctions/serial/getNextSerialNumber.md): Increments the serialNumber for the given serialId and returns the formatted serialNumber with prefix and suffix. - [system.kanoa.serial.getSerialNumbers(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/serial/getSerialNumbers.md): Returns serial number templates filtered by the given parameters. paramsDict keys are optional. - [system.kanoa.serial.updateSerialField(serialId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/serial/updateSerialField.md): Updates the serialNumber configuration field with the passed value for the serialId. - [system.kanoa.serial.updateSerialNumber(serialInfo, serialValue, userId)](https://kanoa-software.netlify.app/systemFunctions/serial/updateSerialNumber.md): Updates a serial number template. All serialInfo keys are required unless otherwise stated. - [Shift System Functions](https://kanoa-software.netlify.app/systemFunctions/apiShiftIntro.md): Provide system functions for the MES application Shift Management - [system.kanoa.shift.addShift(shiftInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/addShift.md): Adds a new shift. All shiftInfo keys are required. - [system.kanoa.shift.addShiftBlock(shiftBlockInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/addShiftBlock.md): Adds a new shift block. All shiftBlockInfo keys are required - [system.kanoa.shift.addShiftBlockException(shiftBlockId, exceptionDate, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/addShiftBlockException.md): Adds a shift block exception - [system.kanoa.shift.addShiftEvent(shiftEventInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/addShiftEvent.md): This function adds an entry to the shiftEvent table. All shiftEventInfo keys are required - [system.kanoa.shift.addShiftName(shiftName, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/addShiftName.md): Adds a new shiftName i.e. '1st Shift' - [system.kanoa.shift.deleteShift(shiftId, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/deleteShift.md): Deletes a shift - [system.kanoa.shift.deleteShiftBlock(shiftBlockId, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/deleteShiftBlock.md): Deletes a shift block - [system.kanoa.shift.deleteShiftBlockException(shiftBlockExceptionId, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/deleteShiftBlockException.md): Deletes a shiftBlock exception - [system.kanoa.shift.deleteShiftEvents(shiftEventInfo)](https://kanoa-software.netlify.app/systemFunctions/shift/deleteShiftEvents.md): This function deletes an entry to the shiftEvent table. All shiftEventInfo keys are required - [system.kanoa.shift.deleteShiftName(shiftNameId, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/deleteShiftName.md): Deletes a shift name - [system.kanoa.shift.getShiftCalendarEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/shift/getShiftCalendarEvents.md): Returns the shift calendar event for the given parameters. It will combine an assets shifts with any inherited shifts if includeInherited is set to True - [system.kanoa.shift.getClosestAncestor(assets, shiftBlocks, assetPath, rangeStart, rangeEnd, tzOffsets)](https://kanoa-software.netlify.app/systemFunctions/shift/getClosestAncestor.md): Returns the assetPath that has shifts associated to it in order of the asset path tree. if no shifts are associated, returns None - [system.kanoa.shift.getCurrentShift(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/shift/getCurrentShift.md): Returns the current shift for the given parameters. paramsDict keys are optional - [system.kanoa.shift.getPreviousShift(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/shift/getPreviousShift.md): Returns the current shift for the given parameters. paramsDict keys are optional - [system.kanoa.shift.getShiftBlockExceptions(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/shift/getShiftBlockExceptions.md): Returns shiftBlock exceptions. paramsDict keys are optional. - [system.kanoa.shift.getShiftBlocks(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/shift/getShiftBlocks.md): Returns shiftsBlocks. paramsDict keys are optional. - [system.kanoa.shift.getShiftEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/shift/getShiftEvents.md): Returns shift events for the given parameters. paramsDict keys are optional. - [system.kanoa.shift.getShiftNames(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/shift/getShiftNames.md): Returns shift Names.paramsDict keys are optional. - [system.kanoa.shift.getShifts(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/shift/getShifts.md): Returns shifts. paramsDict keys are optional. - [system.kanoa.shift.updateShift(shiftInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/updateShift.md): Updates a shift. All shiftInfo keys are required. - [system.kanoa.shift.updateShiftBlock(shiftBlockInfo, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/updateShiftBlock.md): Updates a shift block. All shiftBlockInfo keys are required - [system.kanoa.shift.updateShiftBlockExceptions(shiftBlockId, newStartDate)](https://kanoa-software.netlify.app/systemFunctions/shift/updateShiftBlockExceptions.md): Updates a shift blocks exceptions date. When a shift block's startDate gets updated, all of its exceptions need to have its dates updated too - [system.kanoa.shift.updateShiftBlockField(shiftBlockId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/updateShiftBlockField.md): Updates the passed field value for the given scheduleBlockId. (kanoaOps) - [system.kanoa.shift.updateShiftEvents(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/shift/updateShiftEvents.md): This function is called by the shiftTimer tag timer function to build the shiftEvents table. The shiftEvents table is used for SQL joins in shift analysis functions. - [system.kanoa.shift.updateShiftField(shiftId, field, value, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/updateShiftField.md): Updates the passed field value for the given shift. - [system.kanoa.shift.updateShiftName(shiftName, shiftNameId, userId)](https://kanoa-software.netlify.app/systemFunctions/shift/updateShiftName.md): Updates a shift name - [Toast System Functions](https://kanoa-software.netlify.app/systemFunctions/apiToastIntro.md): Provide system functions for showing, updating and dismissing toast notifications on Perspective pages. These functions are Perspective-only. - [system.kanoa.toast.dismiss(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/toast/dismiss.md): Closes a toast notification by id. Pass an empty dictionary to close every toast on the page. - [system.kanoa.toast.show(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/toast/show.md): Shows a toast notification and returns its id. Invalid arguments raise an error in the calling script. - [system.kanoa.toast.update(paramsDict)](https://kanoa-software.netlify.app/systemFunctions/toast/update.md): Changes a toast notification that is still on screen. Takes the same keys as show, and id is required. The message and title are replaced, so pass both again if both should stay. Updating a toast that has already closed does nothing. - [Utilities System Functions](https://kanoa-software.netlify.app/systemFunctions/apiUtilitiesIntro.md): Provide a set of helper functions for the MES application - [system.kanoa.utilities.convertDatasetRowToJSON(data, rowIndex)](https://kanoa-software.netlify.app/systemFunctions/utilities/convertDatasetRowToJSON.md): Converts the dataset row to a dictionary - [system.kanoa.utilities.convertDatasetToBreadcrumb(dataset)](https://kanoa-software.netlify.app/systemFunctions/utilities/convertDatasetToBreadcrumb.md): Converts an Ignition dataset into the nested node structure expected by the Breadcrumb component. The dataset's assetPath column is used to derive the parent-child hierarchy. Each row becomes a BreadcrumbNode with assetId mapped to id, assetName mapped to label, and all remaining columns packed into the node's data object. - [system.kanoa.utilities.convertDatasetToDict(data, keyCol, valueCol)](https://kanoa-software.netlify.app/systemFunctions/utilities/convertDatasetToDict.md): Given the name of a key column or list of key columns, and value column, this function will convert a dataset into a dictionary of key value pairs - [system.kanoa.utilities.convertDatasetToJSON(data)](https://kanoa-software.netlify.app/systemFunctions/utilities/convertDatasetToJSON.md): Converts a dataset to a list of dictionaries - [system.kanoa.utilities.convertDatesToString(datesIn, deviceUTCOffSetMins)](https://kanoa-software.netlify.app/systemFunctions/utilities/convertDatesToString.md): When passing a date to a stored procedure, it needs to be converted to the timezone of the SQL Server - [system.kanoa.utilities.convertDictListToDataset(dictList)](https://kanoa-software.netlify.app/systemFunctions/utilities/convertDictListToDataset.md): Given a list of dictionaries, this function will convert it to a dataset - [system.kanoa.utilities.convertListToDict(dictList, key)](https://kanoa-software.netlify.app/systemFunctions/utilities/convertListToDict.md): Given a list of dictionaries, this function will convert it to a dictionary with the key value being the passed key from the dictionary - [system.kanoa.utilities.convertSQLTimeStamp(timeStamp)](https://kanoa-software.netlify.app/systemFunctions/utilities/convertSQLTimeStamp.md): Some functions have a habit of returning a java.util.date or a SQL Timestamp object. - [system.kanoa.utilities.createChecksum(dictInfo)](https://kanoa-software.netlify.app/systemFunctions/utilities/createCheckSum.md): Creates an MD5 hash checksum out of the passed in dictInfo - [system.kanoa.utilities.createTreeHierarchy(inputData, levels)](https://kanoa-software.netlify.app/systemFunctions/utilities/createTreeHierarchy.md): Takes a dataset, and appends an extra 'path' column based on the passed in levels - [system.kanoa.utilities.dateStringToPython(dateString)](https://kanoa-software.netlify.app/systemFunctions/utilities/dateStringToPython.md): Converts a date string to python datetime object - [system.kanoa.utilities.exportToExcel(fileName, data)](https://kanoa-software.netlify.app/systemFunctions/utilities/exportToExcel.md): Wrapper function that calls system.dataset.toExcel() and system.perspective.download() - [system.kanoa.utilities.formatDatesForSP(datesIn)](https://kanoa-software.netlify.app/systemFunctions/utilities/formatDatesForSP.md): When passing a date to a stored procedure, it needs to be converted to the timezone of the SQL Server - [system.kanoa.utilities.formatDictionary(dictionary, paramsDict)](https://kanoa-software.netlify.app/systemFunctions/utilities/formatDictionary.md): Takes a dictionary and formats it in a human readable way - [system.kanoa.utilities.formatNumber(format, value)](https://kanoa-software.netlify.app/systemFunctions/utilities/formatNumber.md): Given a number or string representation of a number, this function will return the number formatted to the passed in format - [system.kanoa.utilities.formatPath(path, paramsDict)](https://kanoa-software.netlify.app/systemFunctions/utilities/formatPath.md): Takes a string 'path' and replaces the splitKey with the delimiter. By default the splitKey is set to '\' and the delimiter is set to ' > ' - [system.kanoa.utilities.getComplementaryColors(count, red, green, blue)](https://kanoa-software.netlify.app/systemFunctions/utilities/getComplementaryColors.md): This function will return a list of ordered colors which are tetradic complements of the provided rgb value - [system.kanoa.utilities.getContrastingColor(colorString)](https://kanoa-software.netlify.app/systemFunctions/utilities/getContrastingColor.md): Takes a string in either the form of RGB hex digits with hash sign (i.e. #FFFFFF') or a CSS custom variable (i.e '--KcBlue-60') - [system.kanoa.utilities.getDictionaryValue(data, key)](https://kanoa-software.netlify.app/systemFunctions/utilities/getDictionaryValue.md): Recursively searches for a key within a nested dictionary. - [system.kanoa.utilities.getFieldValue(field, data)](https://kanoa-software.netlify.app/systemFunctions/utilities/getFieldValue.md): Helper function that returns a scalar value for the passed in column (field) from a dataset. Expects there to be 1 row in the dataset. Returns None if passed an empty dataset or invalid column name - [system.kanoa.utilities.getFraction(number)](https://kanoa-software.netlify.app/systemFunctions/utilities/getFraction.md): Given a number, this function will return a string representation of the number as a fraction - [system.kanoa.utilities.getGatewayTimeZoneOffset()](https://kanoa-software.netlify.app/systemFunctions/utilities/getGatewayTimeZoneOffset.md): Returns the timezone offset in hours for the gateway server. Deprecated - Replaced by system.kanoa.date.getGatewayTimeZoneOffsetMins() - [system.kanoa.utilities.getNextColor(usedColors)](https://kanoa-software.netlify.app/systemFunctions/utilities/getNextColor.md): Given a list of hex color strings, returns a new hex color whose hue is maximally distant from all used hues. - [system.kanoa.utilities.getPageObject(self, objName)](https://kanoa-software.netlify.app/systemFunctions/utilities/getPageObject.md): Retrieves an object identified by 'objName' from the kanoa session properties - [system.kanoa.utilities.getRandomNumber(start, end)](https://kanoa-software.netlify.app/systemFunctions/utilities/getRandomNumber.md): Returns a random number between the start and end values passed - [system.kanoa.utilities.getStoredAssetPath(self)](https://kanoa-software.netlify.app/systemFunctions/utilities/getStoredAssetPath.md): Gets the stored assetPath for the page from the session properties to make the asset selector persistent across views in the current tab (page) - [system.kanoa.utilities.getStoredDateRange(self)](https://kanoa-software.netlify.app/systemFunctions/utilities/getStoredDateRange.md): Gets the stored date range for the page from the session properties to make the date selector persistent across views in the current tab (page) - [system.kanoa.utilities.getUUID()](https://kanoa-software.netlify.app/systemFunctions/utilities/getUUID.md): Returns a universally unique 65 character string value - [system.kanoa.utilities.hexToRGB(hexNumber)](https://kanoa-software.netlify.app/systemFunctions/utilities/hexToRGB.md): Converts HEX value to RGB color value - [system.kanoa.utilities.javaDateToPython(date)](https://kanoa-software.netlify.app/systemFunctions/utilities/javaDateToPython.md): Converts java.util.date object to python datetime object - [system.kanoa.utilities.jsonToMarkdown(json)](https://kanoa-software.netlify.app/systemFunctions/utilities/jsonToMarkdown.md): Formats json to markdown - [system.kanoa.utilities.printDataset(data, params, dict)](https://kanoa-software.netlify.app/systemFunctions/utilities/printDataset.md): Given a dataset, this functions prints out its contents formatted based on the paramsDict keys. paramsDict keys are optional. - [system.kanoa.utilities.pythonDateToJava(date)](https://kanoa-software.netlify.app/systemFunctions/utilities/pythonDateToJava.md): Converts python datetime object to java.util.date object - [system.kanoa.utilities.RGBToHex(red, green, blue)](https://kanoa-software.netlify.app/systemFunctions/utilities/RGBToHex.md): Converts RGB color value to HEX value - [system.kanoa.utilities.storeAssetPath(self, assetPath)](https://kanoa-software.netlify.app/systemFunctions/utilities/storeAssetPath.md): Stores the assetPath in the session custom properties to make it persistent across views in the current tab (page) - [system.kanoa.utilities.storeDateRangeSelection(self, startDate, endDate, selectedDateRange)](https://kanoa-software.netlify.app/systemFunctions/utilities/storeDateRangeSelection.md): Stores the passed in date range to make it persistent across views in the current tab (page) - [system.kanoa.utilities.storePageObject(self, objName, dictObject)](https://kanoa-software.netlify.app/systemFunctions/utilities/storePageObject.md): Stores the passed in object as a session object specific to the current page - [system.kanoa.utilities.stringFormat(text)](https://kanoa-software.netlify.app/systemFunctions/utilities/stringFormat.md): Replaces underscores and dashes with spaces, creates spaces between separate words - [system.kanoa.utilities.translateData(data, colList, locale)](https://kanoa-software.netlify.app/systemFunctions/utilities/translateData.md): Translates the list of columns of the passed in dataset into the given locale language - [Database Schema](https://kanoa-software.netlify.app/dbSchema.md): Our database schema is designed following the third normal form pattern (3NF). - [mes.fnGetCount](https://kanoa-software.netlify.app/scalarFunctions/fnGetCount.md): Returns the sum of counter values for a given counter Id within a time range. - [mes.fnGetStateSeconds](https://kanoa-software.netlify.app/scalarFunctions/fnGetStateSeconds.md): Returns total duration in seconds for a given state type within a time range for an asset. - [mes.fnGetWOCount](https://kanoa-software.netlify.app/scalarFunctions/fnGetWOCount.md): Returns the total count (sum of values) for a given work order. - [qds.fnGetChkItemStateCount](https://kanoa-software.netlify.app/scalarFunctions/fnGetChkItemStateCount.md): Returns how many times a specific state was recorded for a checklist event. - [dbo.fnParseIntList](https://kanoa-software.netlify.app/tableValuedFunctions/fnParseIntList.md): Parses a comma-separated string of integers into a table of int values. - [mes.fnGetAssetStateEvents](https://kanoa-software.netlify.app/tableValuedFunctions/fnGetAssetStateEvents.md): Returns asset state events with mode and time window overlap information. - [mes.fnGetModeEventData](https://kanoa-software.netlify.app/tableValuedFunctions/fnGetModeEventData.md): Returns production mode event data for a given asset within a time range. - [mes.fnGetOEEMetrics](https://kanoa-software.netlify.app/tableValuedFunctions/fnGetOEEMetrics.md): Returns calculated OEE metrics from raw counts and durations. - [mes.fnGetOrderCount](https://kanoa-software.netlify.app/tableValuedFunctions/fnGetOrderCount.md): Returns total quantity completed for a given work order using mode event data. - [mes.fnGetRunTimesAndCounts](https://kanoa-software.netlify.app/tableValuedFunctions/fnGetRunTimesAndCounts.md): Returns runtime, downtime, and counter totals for a given asset within a time range. - [qds.fnGetAttributeTolerances](https://kanoa-software.netlify.app/tableValuedFunctions/fnGetAttributeTolerances.md): Returns tolerance limits for a given attribute, resolving by priority. - [mes.spAdminDeleteAssetWithHistory](https://kanoa-software.netlify.app/storedProcedures/spAdminDeleteAssetWithHistory.md): Recursively deletes an asset and its descendant hierarchy, along with all historical records including counters, events, and linked metadata across MES, SCH, SEC, and QDS schemas. - [mes.spDeleteAsset](https://kanoa-software.netlify.app/storedProcedures/spDeleteAsset.md): Deletes a single asset and its associated metadata. Also deletes historical records such as state events, counters, and mode events. If child assets exist, they will be recursively deleted as well. - [mes.spDeleteMultipleAssetsWithNoHistory](https://kanoa-software.netlify.app/storedProcedures/spDeleteMultipleAssetsWithNoHistory.md): Deletes an asset and all of its descendants as long as no historical data (state events, counters, mode events, checklist events) is found. Raises an error if historical data is detected, and instructs to use spAdminDeleteAssetWithHistory instead. - [mes.spDeleteSingleAssetWithNoHistory](https://kanoa-software.netlify.app/storedProcedures/spDeleteSingleAssetWithNoHistory.md): Deletes a single asset and its associated metadata if it has no historical data and no descendant assets. If history exists, raises an error instructing to use spAdminDeleteAsset. If descendants exist, instructs to use spDeleteMultipleAssetsWithNoHistory. - [mes.spGetAssetPerformanceEventByShift](https://kanoa-software.netlify.app/storedProcedures/spGetAssetPerformanceEventByShift.md): Combines data from production events and performance events to return summarized performance information for each shift, including target counts, runtime, coded loss minutes, and performance metrics. - [mes.spGetAssetProductionEvents](https://kanoa-software.netlify.app/storedProcedures/spGetAssetProductionEvents.md): Retrieves production mode events for a given asset over a date range. Optionally filters by mode, work order, or current mode. Calculates production-related metrics like counts and OEE components when applicable. - [mes.spGetAssetProductionEventsByShift](https://kanoa-software.netlify.app/storedProcedures/spGetAssetProductionEventsByShift.md): Returns asset production events sliced by shift. Includes mode, item, and work order data, enriched with runtime and count metrics. Also calculates OEE values per shift segment and provides raw vs. mode-specific counters. - [mes.spGetAssetProductionEventSummary](https://kanoa-software.netlify.app/storedProcedures/spGetAssetProductionEventSummary.md): Generates an aggregated summary of production events and performance metrics (OEE) for a given asset over a specified time window. Data is grouped by asset, mode, work order, and item, and includes summarized counters, durations, and calculated KPIs. - [mes.spGetAssetStateDataSummary](https://kanoa-software.netlify.app/storedProcedures/spGetAssetStateDataSummary.md): Returns a summarized breakdown of state durations for a given asset over a specified time range. Each row represents time spent in a specific state, categorized by state type, color, and label. Adjusts the start of the range to capture partial states that began prior to the provided window. - [mes.spGetAssetStateEventByCategory](https://kanoa-software.netlify.app/storedProcedures/spGetAssetStateEventByCategory.md): Retrieves state event durations for a specific asset, grouped by state category and type, within a given time range. Filters allow for selecting events based on duration, changed states, or only downtime-related states. - [mes.spGetAssetStateEventByShift](https://kanoa-software.netlify.app/storedProcedures/spGetAssetStateEventByShift.md): Retrieves state events for a specified asset and time range, categorized by shift. Events can be filtered by duration, include only changed states, or be restricted to downtime categories. Includes overlap handling between state and shift boundaries. - [mes.spGetAssetStateEventByShiftSummary](https://kanoa-software.netlify.app/storedProcedures/spGetAssetStateEventByShiftSummary.md): Generates a summarized report of asset state events, grouped by shift, state name, category, and type. This procedure internally uses spGetAssetStateEventByShift and rolls up event durations to provide a shift-level overview. - [mes.spGetAssetStateEvents](https://kanoa-software.netlify.app/storedProcedures/spGetAssetStateEvents.md): Retrieves raw asset state event data by invoking the internal table-valued function fnGetAssetStateEvents. Includes adjusted start time logic to include state changes that begin prior to the selected time window. - [mes.spGetAssetStateEventsByInterval](https://kanoa-software.netlify.app/storedProcedures/spGetAssetStateEventsByInterval.md): Returns a pivoted view of asset state durations broken out by hour, day, or week intervals. Retrieves state events using fnGetAssetStateEvents and bins them into time slices for visual summary analysis. Internally builds dynamic SQL to pivot the results into columns by descriptor (asset + state). - [mes.spGetAssetStateEventSummary](https://kanoa-software.netlify.app/storedProcedures/spGetAssetStateEventSummary.md): Summarizes state durations for a given asset within a date range, optionally filtered by event duration and type. Uses fnGetAssetStateEvents internally and performs grouping on state dimensions. - [mes.spGetDowntimeDataForReliability](https://kanoa-software.netlify.app/storedProcedures/spGetDowntimeDataForReliability.md): Classifies downtime states into reliability buckets such as PLANNED, SETUP, MINORSTOP, BREAKDOWN, or PROCESSFAILURE. Useful for reliability and maintenance analytics. Derives data from stateEvent, state, and associated state metadata. - [mes.spGetLotActivity](https://kanoa-software.netlify.app/storedProcedures/spGetLotActivity.md): Returns a history of lot activity, including movements, quantities, lot states, and operation metadata. Useful for material traceability and inventory audits. Includes JOINs on vwLot and vwLotEvent. - [mes.spGetOEEDataByInterval](https://kanoa-software.netlify.app/storedProcedures/spGetOEEDataByInterval.md): Generates OEE (Overall Equipment Effectiveness) and supporting metrics for an asset over a time range, aggregated by hour/day/week. Utilizes run states, counters, and mode data to derive KPIs. Performs dynamic interval grouping using recursive CTEs. - [mes.spGetOEEDataByIntervalByShift](https://kanoa-software.netlify.app/storedProcedures/spGetOEEDataByIntervalByShift.md): Calculates Overall Equipment Effectiveness (OEE) metrics for a given asset across shifts, aligned to time-based intervals (Hour, Day, or Week). Aggregates runtime, downtime, and counter metrics using shift windows. Ideal for tracking OEE by operational shifts. - [mes.spGetOEEDataByIntervalGroupByItem](https://kanoa-software.netlify.app/storedProcedures/spGetOEEDataByIntervalGroupByItem.md): Returns OEE performance indicators grouped by item over hourly, daily, or weekly intervals. Useful for analyzing item-specific efficiencies regardless of shift structure. Data includes duration, runtime, downtime, and count-based calculations for each item. - [mes.spGetOEEDataByIntervalGroupByItemAndShift](https://kanoa-software.netlify.app/storedProcedures/spGetOEEDataByIntervalGroupByItemAndShift.md): This procedure returns Overall Equipment Effectiveness (OEE) metrics grouped by both item and operational shift for a specified asset over a given time interval. It aligns asset run/downtime with shift windows and aggregates counter data to compute availability, performance, quality, and OEE. - [mes.spGetOEEDataByIntervalGroupByShift](https://kanoa-software.netlify.app/storedProcedures/spGetOEEDataByIntervalGroupByShift.md): This stored procedure calculates and returns Overall Equipment Effectiveness (OEE) metrics for a given asset over a time range, grouped by shift. It computes runtime, downtime, counter-based performance, and derives availability, performance, quality, and OEE. It aggregates the data by time intervals (hour/day/week) and shifts. - [mes.spGetOEEDataSummary](https://kanoa-software.netlify.app/storedProcedures/spGetOEEDataSummary.md): This stored procedure summarizes Overall Equipment Effectiveness (OEE) for a specified asset over a given date range. It aggregates production runs into one consolidated summary including runtime, downtime, and counter-based production metrics. It then applies a server-side function to compute derived OEE metrics such as availability, performance, and quality. - [mes.spGetProductionDataForReliability](https://kanoa-software.netlify.app/storedProcedures/spGetProductionDataForReliability.md): This stored procedure collects detailed production and reliability data for a given asset and mode across a defined time range. It calculates raw counters, availability, performance, and quality metrics, including takt time, actual rates, and loss analyses, suitable for reliability and performance dashboards. - [mes.spGetStateEvent](https://kanoa-software.netlify.app/storedProcedures/spGetStateEvent.md): This stored procedure returns detailed diagnostic information for a given stateEventId. It identifies the start and end timestamps, associated asset, state codes, and descriptive metadata from multiple joined views and tables. Useful for event auditing and state history analysis. - [mes.spGetWorkOrderDataSummary](https://kanoa-software.netlify.app/storedProcedures/spGetWorkOrderDataSummary.md): This stored procedure summarizes key production and performance metrics for a specific asset and work order within a defined date range. It calculates availability, performance, and quality KPIs using production and counter data joined with work order and item information. - [mes.spGetWorkOrders](https://kanoa-software.netlify.app/storedProcedures/spGetWorkOrders.md): Returns a list of work orders and associated item, asset, and status metadata. Supports extensive filtering options including asset, item, date ranges, work order status, and more. Designed for reporting and planning interfaces that need to explore or filter active and historical work orders. - [mes.spPopulateAssetHierarchy](https://kanoa-software.netlify.app/storedProcedures/spPopulateAssetHierarchy.md): Recomputes and populates the mes.assetHierarchy_MAT table by recursively traversing the parent-child relationships of assets. This procedure ensures asset hierarchy and metadata such as types, groups, and performance thresholds are rebuilt for efficient querying and display. - [mes.spPopulateItemClassHierarchy](https://kanoa-software.netlify.app/storedProcedures/spPopulateItemClassHierarchy.md): Populates the mes.itemClassHierarchy_MAT table with the full path hierarchy of item classes using a recursive CTE. Designed to improve performance of lookups and filters based on item class lineage. - [qds.spDeleteAssetId](https://kanoa-software.netlify.app/storedProcedures/spDeleteAssetId.md): Deletes all QDS-related records associated with a given assetId. This includes links to check sheets, events, attribute tolerances, and data sources. - [qds.spDeleteAttribute](https://kanoa-software.netlify.app/storedProcedures/spDeleteAttribute.md): Recursively deletes an attribute and all its descendants from the QDS schema, removing associated links, tolerances, and data sources. - [qds.spDeleteChkItem](https://kanoa-software.netlify.app/storedProcedures/spDeleteChkItem.md): Deletes a checklist item (chkItemId) and all its associated events and attribute links. It also nullifies any checklist item triggers that point to it. - [qds.spDeleteChkSht](https://kanoa-software.netlify.app/storedProcedures/spDeleteChkSht.md): Deletes a checklist (chkShtId) by first deleting associated checklist items and their dependencies, followed by deletion from multiple linking and data tables. - [qds.spDeleteChkShtEvents](https://kanoa-software.netlify.app/storedProcedures/spDeleteChkShtEvents.md): Removes all checklist events and linked checklist item events for a given checklist sheet. - [qds.spDeleteItemId](https://kanoa-software.netlify.app/storedProcedures/spDeleteItemId.md): Deletes all QDS data tied to a specific item ID, including tolerances, links, and events. - [qds.spDeleteItemSet](https://kanoa-software.netlify.app/storedProcedures/spDeleteItemSet.md): Removes an item set from the QDS database along with its attribute tolerances, links, and checklist references. ## Other - [Kanoa Components](https://kanoa-software.netlify.app/components-intro.md): Kanoa provides a number of react components that are used in the kanoaAPP project. The components are documented in this section. - [Assets](https://kanoa-software.netlify.app/configuration/assets.md): Watch Asset Configuration Tutorial - [Attributes](https://kanoa-software.netlify.app/configuration/attributes.md): Kanoa MES has two built-in methods for tracking custom data: Custom Attributes and Dynamic Attributes. - [Lots](https://kanoa-software.netlify.app/configuration/lots.md): There are several aspects of Lot Management that can be configured... - [Materials](https://kanoa-software.netlify.app/configuration/materials.md): Watch Creating Items Tutorial - [Modes](https://kanoa-software.netlify.app/configuration/modes.md): A mode defines the intended operation of an asset. The mode is typically set by the schedule or manually set by the operator, but can also be set via - [OEE](https://kanoa-software.netlify.app/configuration/oee.md): Overall Equipment Effectiveness identifies the percentage of manufacturing time that is truly productive. - [Orders](https://kanoa-software.netlify.app/configuration/orders.md): The Orders Configuration screen defines the lifecycle states that production orders (work orders) move through in Kanoa MES. - [Check Sheets](https://kanoa-software.netlify.app/configuration/quality/checkSheets.md): The Check Sheets configuration screen allows a user to manage all aspects of check sheet configuration. - [Security Functions](https://kanoa-software.netlify.app/configuration/security.md): Our roles are designed to associate with any number of functions. Where the security actually happens is implemented on each view individually. - [Shifts](https://kanoa-software.netlify.app/configuration/shifts.md): Watch Starting Production Tutorial - [States](https://kanoa-software.netlify.app/configuration/states.md): While Modes represent what an asset is supposed to be doing, states show what the asset says it was actually doing. - [Themes](https://kanoa-software.netlify.app/configuration/themes.md): The Kanoa framework supports both light and dark modes. To switch themes, click the icon located at the top right of the header. This will open the themes menu where you can toggle between light and dark mode. - [KanoaMES Demo](https://kanoa-software.netlify.app/demo-help.md): Welcome to the KanoaMES demo! We have created a self-guided project that sits on top of the KanoaMES application that will take you directly to a number of chosen pages. - [Kanoa and Ignition](https://kanoa-software.netlify.app/getting-started/kanoa-and-ignition.md): Kanoa MES is built on and for Inductive Automation’s Ignition platform and is delivered as a combination of... - [Kanoa Ops](https://kanoa-software.netlify.app/getting-started/modules/ops.md):