<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.augmensys.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LMA</id>
		<title>UBIK Wiki / Augmensys - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.augmensys.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LMA"/>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Special:Contributions/LMA"/>
		<updated>2026-07-08T23:23:32Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=30017</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=30017"/>
				<updated>2026-06-23T13:42:35Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations are created manually by users and link materials to tasks.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
Users can see which material is required for a task, where the material is stored, how much material is available, how much material is reserved, and which reservation status applies.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow object&lt;br /&gt;
| Represents a manually created material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Related storage object&lt;br /&gt;
| Represents a physical storage location for materials.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material status.&lt;br /&gt;
| User/admin managed property&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The property is managed by the user or administrator. The system does not change it automatically.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive and should not be used for new reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active and can be used for reservations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a manually created material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and the actually issued or consumed quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actually issued or consumed quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; is a related object used to represent a physical storage location.&lt;br /&gt;
&lt;br /&gt;
A material can reference a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties and values ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Values / meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is a technical base class.&lt;br /&gt;
&lt;br /&gt;
It provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property for material-related objects such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actually issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
Reservations are created manually by the user.&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; must point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the actually issued or consumed quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level.&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
A spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A user manually creates a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; and links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Actual quantity is entered ===&lt;br /&gt;
&lt;br /&gt;
The actually issued or consumed quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 6: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROMaintenancePlans]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29997</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29997"/>
				<updated>2026-06-23T09:27:08Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Validation and business rules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations are created manually by users and link materials to tasks.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
Users can see which material is required for a task, where the material is stored, how much material is available, how much material is reserved, and which reservation status applies.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow object&lt;br /&gt;
| Represents a manually created material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Related storage object&lt;br /&gt;
| Represents a physical storage location for materials.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material status.&lt;br /&gt;
| User/admin managed property&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The property is managed by the user or administrator. The system does not change it automatically.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive and should not be used for new reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active and can be used for reservations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a manually created material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and the actually issued or consumed quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actually issued or consumed quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; is a related object used to represent a physical storage location.&lt;br /&gt;
&lt;br /&gt;
A material can reference a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties and values ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Values / meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is a technical base class.&lt;br /&gt;
&lt;br /&gt;
It provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property for material-related objects such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actually issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
Reservations are created manually by the user.&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; must point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the actually issued or consumed quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level.&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
A spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A user manually creates a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; and links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Actual quantity is entered ===&lt;br /&gt;
&lt;br /&gt;
The actually issued or consumed quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 6: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROMaintenancePlans]]&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29996</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29996"/>
				<updated>2026-06-23T09:19:18Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Finishing a task */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations are created manually by users and link materials to tasks.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
Users can see which material is required for a task, where the material is stored, how much material is available, how much material is reserved, and which reservation status applies.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow object&lt;br /&gt;
| Represents a manually created material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Related storage object&lt;br /&gt;
| Represents a physical storage location for materials.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material status.&lt;br /&gt;
| User/admin managed property&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The property is managed by the user or administrator. The system does not change it automatically.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive and should not be used for new reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active and can be used for reservations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a manually created material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and the actually issued or consumed quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actually issued or consumed quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; is a related object used to represent a physical storage location.&lt;br /&gt;
&lt;br /&gt;
A material can reference a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties and values ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Values / meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is a technical base class.&lt;br /&gt;
&lt;br /&gt;
It provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property for material-related objects such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actually issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
Reservations are created manually by the user.&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; must point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the actually issued or consumed quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level.&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
A spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A user manually creates a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; and links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Actual quantity is entered ===&lt;br /&gt;
&lt;br /&gt;
The actually issued or consumed quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 6: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROMaintenancePlans]]&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29995</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29995"/>
				<updated>2026-06-23T09:17:06Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Delete behavior */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations are created manually by users and link materials to tasks.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
Users can see which material is required for a task, where the material is stored, how much material is available, how much material is reserved, and which reservation status applies.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow object&lt;br /&gt;
| Represents a manually created material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Related storage object&lt;br /&gt;
| Represents a physical storage location for materials.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material status.&lt;br /&gt;
| User/admin managed property&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The property is managed by the user or administrator. The system does not change it automatically.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive and should not be used for new reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active and can be used for reservations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a manually created material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and the actually issued or consumed quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actually issued or consumed quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; is a related object used to represent a physical storage location.&lt;br /&gt;
&lt;br /&gt;
A material can reference a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties and values ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Values / meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is a technical base class.&lt;br /&gt;
&lt;br /&gt;
It provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property for material-related objects such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actually issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
Reservations are created manually by the user.&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; must point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The method processes active reservations for the task:&lt;br /&gt;
&lt;br /&gt;
* if a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* otherwise, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the actually issued or consumed quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level.&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
A spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A user manually creates a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; and links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Actual quantity is entered ===&lt;br /&gt;
&lt;br /&gt;
The actually issued or consumed quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 6: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROMaintenancePlans]]&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29994</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29994"/>
				<updated>2026-06-23T09:14:50Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Object overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations are created manually by users and link materials to tasks.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
Users can see which material is required for a task, where the material is stored, how much material is available, how much material is reserved, and which reservation status applies.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow object&lt;br /&gt;
| Represents a manually created material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Related storage object&lt;br /&gt;
| Represents a physical storage location for materials.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material status.&lt;br /&gt;
| User/admin managed property&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The property is managed by the user or administrator. The system does not change it automatically.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive and should not be used for new reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active and can be used for reservations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
Deletion is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is lower than or equal to 0&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; returns false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a manually created material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and the actually issued or consumed quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actually issued or consumed quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; is a related object used to represent a physical storage location.&lt;br /&gt;
&lt;br /&gt;
A material can reference a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties and values ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Values / meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is a technical base class.&lt;br /&gt;
&lt;br /&gt;
It provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property for material-related objects such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actually issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
Reservations are created manually by the user.&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; must point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The method processes active reservations for the task:&lt;br /&gt;
&lt;br /&gt;
* if a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* otherwise, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the actually issued or consumed quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level.&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
A spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A user manually creates a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; and links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Actual quantity is entered ===&lt;br /&gt;
&lt;br /&gt;
The actually issued or consumed quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 6: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROMaintenancePlans]]&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29993</id>
		<title>MROMaintenancePlans</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29993"/>
				<updated>2026-06-19T06:42:49Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MRO Maintenance Planning =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The Maintenance Planning feature in MRO is used to plan recurring maintenance work and automatically generate work packages from maintenance plans. The maintenance plan defines the rules. The generated work package is used by users to execute and complete the actual maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
A maintenance plan defines the rules for creating work packages. These rules include:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package belongs to&lt;br /&gt;
* which template work package is used&lt;br /&gt;
* how the template work package is copied&lt;br /&gt;
* how many days before the planned execution date the work package may be generated&lt;br /&gt;
* how future planning dates are calculated&lt;br /&gt;
&lt;br /&gt;
The actual maintenance work is not executed by the maintenance plan itself. The maintenance plan creates work packages. These generated work packages are then used by users to execute and complete the maintenance work.&lt;br /&gt;
&lt;br /&gt;
In MRO, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt; is the abstract base class for maintenance planning. It provides the common foundation for maintenance plans, but it is not intended to be used directly.&lt;br /&gt;
&lt;br /&gt;
The fully implemented maintenance plan types in standard MRO are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Custom maintenance plan types can be implemented by deriving from the abstract &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt; base class. However, the standard MRO maintenance planning feature is based on cyclic maintenance plans and round maintenance plans.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt; support recurrence-based scheduling. This includes planned execution dates, automatic work package generation, calendar-based scheduling, completion-based scheduling, automatic recalculation of scheduling dates, and generation based on due dates.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt; additionally supports maintenance rounds. A round maintenance plan creates one main work package for the round. It can also create additional work packages from child maintenance plans linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;. These additional work packages are assigned to the main round work package.&lt;br /&gt;
&lt;br /&gt;
== Basic Concept ==&lt;br /&gt;
&lt;br /&gt;
The maintenance planning feature is built around four main parts:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Part&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the rules for creating generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Template work package&lt;br /&gt;
| Defines what the generated work package should look like.&lt;br /&gt;
|-&lt;br /&gt;
| Replication configuration&lt;br /&gt;
| Defines how the template work package is copied.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package&lt;br /&gt;
| The actual work package created by the maintenance plan.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maintenance Plan ===&lt;br /&gt;
&lt;br /&gt;
The maintenance plan defines the rules for creating work packages.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package should belong to&lt;br /&gt;
* how many days before the planned execution date the work package may be created&lt;br /&gt;
* which template work package should be used&lt;br /&gt;
* which recurrence pattern should be used&lt;br /&gt;
* whether future dates are calculated calendar-based or completion-based&lt;br /&gt;
&lt;br /&gt;
=== Template Work Package ===&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
It is the source work package that is copied when the maintenance plan creates a new work package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Rule:''' Only work packages with &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ISTEMPLATE&amp;lt;/span&amp;gt; set can be used as template work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Replication Configuration ===&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how referenced objects are handled&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package ===&lt;br /&gt;
&lt;br /&gt;
The generated work package is the actual result created by the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
# A pump has to be inspected every month.&lt;br /&gt;
# A cyclic maintenance plan is created for this pump.&lt;br /&gt;
# The plan is configured with a monthly recurrence, an assigned asset, a template work package, and a replication configuration.&lt;br /&gt;
# When the plan becomes due, the system uses a replication job to create a new work package from the configured template work package.&lt;br /&gt;
# The generated work package is linked back to the maintenance plan via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This link allows the maintenance plan to react when the generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
== MaintenancePlan Base Class ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt; is the abstract base class for maintenance planning in MRO.&lt;br /&gt;
&lt;br /&gt;
It provides the common properties and logic required by maintenance plan implementations.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt; is abstract, users do not create or use this base class directly in the standard MRO feature. Instead, the concrete maintenance plan types are used:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Developers can derive from the abstract base class if a project requires a custom maintenance plan type. In that case, the custom implementation must provide the missing plan-specific behavior.&lt;br /&gt;
&lt;br /&gt;
=== Base Class Properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the asset that requires maintenance.&lt;br /&gt;
| Required for a valid cyclic maintenance plan.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the template work package.&lt;br /&gt;
| The linked work package must have &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ISTEMPLATE&amp;lt;/span&amp;gt; set.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the replication configuration.&lt;br /&gt;
| Required for work package generation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the planned execution date of the next maintenance activity.&lt;br /&gt;
| Used as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; on generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines how many days before &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; the system may create the work package.&lt;br /&gt;
| Does not define the recurrence interval.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
| Calculated by the system.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines whether the maintenance plan is active or inactive.&lt;br /&gt;
| Only active plans are considered for automatic generation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines whether the system is allowed to automatically create work packages.&lt;br /&gt;
| If disabled, the plan does not automatically create work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stores the most recent completion date of a generated work package linked to the maintenance plan.&lt;br /&gt;
| Especially relevant for completion-based scheduling.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PRIORITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| Numeric value that can be used to sort maintenance plans.&lt;br /&gt;
| For round maintenance plans, see also &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; is the link to the asset that requires maintenance.&lt;br /&gt;
&lt;br /&gt;
This can be, for example:&lt;br /&gt;
&lt;br /&gt;
* equipment&lt;br /&gt;
* a functional location&lt;br /&gt;
* another customized maintainable object deriving from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Asset&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to the same asset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Requirement:''' A cyclic maintenance plan requires &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; to be assigned in order to be valid.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; is the link to the template work package.&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
When the maintenance plan creates a work package, the system copies the work package referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The linked work package must be a template work package. This means its &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ISTEMPLATE&amp;lt;/span&amp;gt; property must be set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Requirement:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; must be configured before the maintenance plan can create a work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt; is the link to the replication configuration.&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied into a generated work package.&lt;br /&gt;
&lt;br /&gt;
It can define, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how references are copied&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Requirement:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt; must be configured before the maintenance plan can create a work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; defines the planned execution date of the next maintenance activity.&lt;br /&gt;
&lt;br /&gt;
It answers the question: '''When should the next maintenance work be performed?'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is not necessarily the date on which the work package is created.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this example, the system may create the work package on 12 March, but the generated work package is planned for 15 March.&lt;br /&gt;
&lt;br /&gt;
When a work package is generated, the generated work package receives the maintenance plan’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; as its &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; defines how many days before &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; the system may create the work package.&lt;br /&gt;
&lt;br /&gt;
This is used to create work packages before the actual planned execution date.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Resulting &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Note:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; does not define the recurrence interval. It only defines how early the work package may be generated before the planned execution date.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is calculated by the system.&lt;br /&gt;
&lt;br /&gt;
It defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maintenance planning orchestrator searches for active plans where &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; has been reached.&lt;br /&gt;
&lt;br /&gt;
A plan can be considered for automatic work package generation when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE &amp;lt;= current date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; has not yet been reached, no work package is created.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt; defines whether the maintenance plan is active or inactive.&lt;br /&gt;
&lt;br /&gt;
Only active plans are considered for automatic work package generation. Inactive plans are ignored by the maintenance planning process.&lt;br /&gt;
&lt;br /&gt;
Typical values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows users to temporarily disable a maintenance plan without deleting it.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; defines whether the system is allowed to automatically create work packages from the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; is enabled, the maintenance planning orchestrator can create work packages once the plan is due.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; is disabled, the plan does not automatically create work packages.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; stores the date when the most recent generated work package linked to the maintenance plan was completed.&lt;br /&gt;
&lt;br /&gt;
This property is especially important for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Previous generated work package completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| Next date is calculated from&lt;br /&gt;
| 20 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The system updates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PRIORITY&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PRIORITY&amp;lt;/span&amp;gt; is a numeric value that can be used to sort maintenance plans.&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, there is also a property called &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The exact effect of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; should only be documented after the implementation behavior has been verified.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Work Package Properties Used by Maintenance Planning ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Used on&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Links the generated work package back to the maintenance plan that triggered its creation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the template work package that was used to create the generated work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the asset for which the work package was created.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the planned start date of the generated work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORGA_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Used to determine whether a generated work package is finished.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Assigns additional generated work packages to the main round work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Can be copied from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; to structure or order round work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Can be copied from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; to group round work packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt; is set on generated work packages.&lt;br /&gt;
&lt;br /&gt;
It stores the maintenance plan that triggered the creation of the work package.&lt;br /&gt;
&lt;br /&gt;
This is important because the maintenance plan itself does not directly store a list of generated work packages. Instead, generated work packages reference their source maintenance plan via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This link allows the system to find work packages created from a maintenance plan and to update the maintenance plan when a generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; stores the template work package that was used to create the generated work package.&lt;br /&gt;
&lt;br /&gt;
This allows users and the system to see which template was used as the source.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; stores the asset for which the work package was created.&lt;br /&gt;
&lt;br /&gt;
This is usually copied or assigned based on the maintenance plan’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; stores the planned start date of the generated work package.&lt;br /&gt;
&lt;br /&gt;
When a maintenance plan generates a work package, the system sets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
generated WorkPackage.PLANNED_START = MaintenancePlan.NEXT_DATE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORGA_STATUS&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORGA_STATUS&amp;lt;/span&amp;gt; is used to determine whether a generated work package is finished.&lt;br /&gt;
&lt;br /&gt;
A work package is considered finished when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open work packages are generated work packages linked to the maintenance plan where:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS != 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Generation rule:''' A maintenance plan does not create another work package while it still has an open generated work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt; is used in round maintenance scenarios.&lt;br /&gt;
&lt;br /&gt;
When a round maintenance plan creates a main work package and additional work packages from linked child plans, the additional work packages are assigned to the main round work package via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt; can be copied from the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; relation to generated work packages in a round maintenance scenario.&lt;br /&gt;
&lt;br /&gt;
They can be used to order or group the additional work packages that belong to the generated round work package.&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; is used for recurring maintenance work on an asset.&lt;br /&gt;
&lt;br /&gt;
It is the standard maintenance plan type for maintenance activities that repeat according to a defined recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspect a pump every month&lt;br /&gt;
* service a machine every 6 months&lt;br /&gt;
* check safety equipment every Monday&lt;br /&gt;
* replace a filter every 30 days&lt;br /&gt;
* perform annual maintenance on a functional location&lt;br /&gt;
&lt;br /&gt;
A cyclic maintenance plan uses &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; to define the recurrence. It also uses &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; to define how future dates are calculated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Key concept:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; defines whether the plan follows fixed calendar dates or whether the next date depends on the actual completion date of the previous generated work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
* Calendar-Based&lt;br /&gt;
* Completion-Based&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan Properties ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the recurrence pattern.&lt;br /&gt;
| Must be valid and parseable.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines when the recurrence pattern starts.&lt;br /&gt;
| Used as the start point for recurrence calculation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Optional end date for the recurrence.&lt;br /&gt;
| No further occurrences are generated after this date.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;&lt;br /&gt;
| Limits how many work packages can be created from the plan.&lt;br /&gt;
| Further occurrences stop once the count is reached.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines how &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated.&lt;br /&gt;
| Supports Calendar-Based and Completion-Based scheduling.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; defines the recurrence pattern of a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
It describes how often the maintenance should occur.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FREQ=DAILY&lt;br /&gt;
FREQ=WEEKLY;BYDAY=MO,WE,FR&lt;br /&gt;
FREQ=MONTHLY;BYMONTHDAY=15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system uses &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; to calculate future planned execution dates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Problem:''' If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; is invalid and cannot be parsed, the cyclic maintenance plan is not valid and cannot create work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; defines when the recurrence pattern starts.&lt;br /&gt;
&lt;br /&gt;
The recurrence rule is calculated from this date forward.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 01 January&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Monthly on the 15th&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The system uses these values to determine valid planned execution dates.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; is an optional end date for the recurrence.&lt;br /&gt;
&lt;br /&gt;
If this date is configured, no further occurrences are generated after this date.&lt;br /&gt;
&lt;br /&gt;
This can be used for maintenance plans that should only run until a certain date.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; limits how many work packages can be created from the plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When the number of related generated work packages reaches &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;, the system no longer calculates new occurrences for the plan.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; defines how &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated for a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; is only relevant for concrete maintenance plan types that use recurrence logic, such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Scheduling mode&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Calendar-Based&lt;br /&gt;
| Future dates follow the recurrence pattern defined by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Completion-Based&lt;br /&gt;
| Future dates are calculated from the actual completion date of the previous generated work package.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This property is one of the most important settings because it defines whether future dates follow the calendar or depend on the actual completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
== Calendar-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling is used when maintenance should follow fixed calendar occurrences.&lt;br /&gt;
&lt;br /&gt;
The next planned execution date is calculated according to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; and the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
This means that delays in completing a work package do not automatically shift the whole future schedule.&lt;br /&gt;
&lt;br /&gt;
Use calendar-based scheduling when the maintenance should happen on fixed dates or fixed calendar intervals.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspection every 15th day of the month&lt;br /&gt;
* safety check every Monday&lt;br /&gt;
* yearly inspection every January&lt;br /&gt;
* quarterly maintenance in fixed maintenance windows&lt;br /&gt;
&lt;br /&gt;
=== How Calendar-Based Scheduling Works ===&lt;br /&gt;
&lt;br /&gt;
In calendar-based scheduling, the system calculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; based on the recurrence rule and the relevant dates of existing generated work packages.&lt;br /&gt;
&lt;br /&gt;
The system determines the highest relevant planned or finished date of generated work packages linked to the maintenance plan. Then it uses the recurrence rule to calculate the next valid occurrence after that date.&lt;br /&gt;
&lt;br /&gt;
This means the schedule continues according to the recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
If a work package is completed later than planned, the future schedule does not necessarily move with that completion date.&lt;br /&gt;
&lt;br /&gt;
=== Example: Calendar-Based Scheduling ===&lt;br /&gt;
&lt;br /&gt;
A pump must be inspected on the 15th of every month.&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Plan type&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
| Pump 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Pump Inspection Template&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt;&lt;br /&gt;
| Pump Inspection Replication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calendar-Based&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Monthly on the 15th&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 01 January&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Enabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = 12 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the work package is planned, the system can calculate the next occurrence:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NEXT_DATE = 15 April&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the March work package is completed on 20 March, the next date still follows the monthly recurrence. The next planned execution date remains 15 April.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Result:''' The late completion does not shift the future schedule to 20 April.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Completion-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling is used when the next maintenance date should depend on the actual completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
This means that the interval starts after the work has actually been completed.&lt;br /&gt;
&lt;br /&gt;
Use completion-based scheduling when the maintenance should repeat based on the time since the last completed maintenance activity.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* service every 30 days after the last service&lt;br /&gt;
* inspection 6 months after the previous inspection was completed&lt;br /&gt;
* replacement 90 days after the previous replacement&lt;br /&gt;
* maintenance where a delay should also delay the next cycle&lt;br /&gt;
&lt;br /&gt;
=== How Completion-Based Scheduling Works ===&lt;br /&gt;
&lt;br /&gt;
In completion-based scheduling, the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; after a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
The completion date becomes the basis for the next occurrence.&lt;br /&gt;
&lt;br /&gt;
Planning changes alone do not define the next recurrence in the same way as calendar-based scheduling.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' The plan waits for the generated work package to be completed. Then the system calculates the next date from the completion date.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: Completion-Based Scheduling ===&lt;br /&gt;
&lt;br /&gt;
A machine must be serviced every 30 days after the previous service was completed.&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Plan type&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
| Machine 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Machine Service Template&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt;&lt;br /&gt;
| Machine Service Replication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Every 30 days&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 01 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Enabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = 12 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The work package is completed on 20 March.&lt;br /&gt;
&lt;br /&gt;
Because the plan is completion-based, the system calculates the next date from 20 March.&lt;br /&gt;
&lt;br /&gt;
If the recurrence is every 30 days:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| around 19 April&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| around 16 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Result:''' In this mode, the delay from 15 March to 20 March shifts the future schedule.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Calendar-Based vs Completion-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
The difference is the date that is used as the basis for calculating &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Aspect&lt;br /&gt;
! Calendar-Based&lt;br /&gt;
! Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| Basis for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Recurrence defined by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Actual completion date of the previous generated work package&lt;br /&gt;
|-&lt;br /&gt;
| Effect of late completion&lt;br /&gt;
| Future dates are not automatically shifted&lt;br /&gt;
| Future dates move with the completion date&lt;br /&gt;
|-&lt;br /&gt;
| Typical use case&lt;br /&gt;
| Fixed maintenance windows, fixed calendar intervals, legal or organizational inspection dates&lt;br /&gt;
| Service intervals that depend on the actual last maintenance&lt;br /&gt;
|-&lt;br /&gt;
| Example&lt;br /&gt;
| Planned: 15 March&amp;lt;br /&amp;gt;Completed: 20 March&amp;lt;br /&amp;gt;Next date: 15 April&lt;br /&gt;
| Planned: 15 March&amp;lt;br /&amp;gt;Completed: 20 March&amp;lt;br /&amp;gt;Interval: 30 days&amp;lt;br /&amp;gt;Next date: around 19 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calendar-Based ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling should be used when the maintenance must follow fixed planned dates.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan follows the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; calendar pattern.&lt;br /&gt;
* Future dates are not automatically shifted just because a work package was completed late.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; can be recalculated after planning updates.&lt;br /&gt;
* It is useful for fixed maintenance windows and legally or organizationally fixed inspection dates.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Planned inspection&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| Completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| Next date&lt;br /&gt;
| 15 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The future date stays aligned with the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
=== Completion-Based ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling should be used when the next maintenance interval starts after the previous work was completed.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan waits for completion.&lt;br /&gt;
* The completion date is used as the basis for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
* If the work is completed late, the future schedule moves.&lt;br /&gt;
* It is useful for service intervals that depend on the actual last maintenance.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Planned service&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| Completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| Interval&lt;br /&gt;
| 30 days&lt;br /&gt;
|-&lt;br /&gt;
| Next date&lt;br /&gt;
| around 19 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The future date shifts because the work was completed later.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt; is used for recurring maintenance rounds.&lt;br /&gt;
&lt;br /&gt;
It is a specialized type of cyclic maintenance plan. This means that it also uses &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In addition to the cyclic scheduling logic, a round maintenance plan includes child maintenance plans linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the round maintenance plan is due, the system creates the main work package for the round. Then it creates additional work packages from the child maintenance plans linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important for child plans:''' For the child plans, the system does not care whether they are due, active, auto-created, or whether they have a valid &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;. The round maintenance plan uses the child plans as configuration for the additional work packages that should be created as part of the round.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important configuration on the child plans is their work package generation setup, especially the configured template work package and replication setup.&lt;br /&gt;
&lt;br /&gt;
=== Generated Result ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Round maintenance plan&lt;br /&gt;
| Machine Room Round&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 1&lt;br /&gt;
| Pump 1 Inspection&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 2&lt;br /&gt;
| Pump 2 Inspection&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 3&lt;br /&gt;
| Pump 3 Inspection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Generated main work package:&lt;br /&gt;
&lt;br /&gt;
* Machine Room Round&lt;br /&gt;
&lt;br /&gt;
Additional generated work packages inside the main round work package:&lt;br /&gt;
&lt;br /&gt;
* Pump 1 Inspection&lt;br /&gt;
* Pump 2 Inspection&lt;br /&gt;
* Pump 3 Inspection&lt;br /&gt;
&lt;br /&gt;
The additional work packages are assigned to the main round work package. This allows the result of the round maintenance plan to be structured as one complete maintenance round.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan Properties and Relations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property / relation&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
| Child plans define additional work packages created as part of the round.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Exists on &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Runtime behavior must be verified before documenting further effects.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt;&lt;br /&gt;
| Can exist on the relation between the round plan and a child plan.&lt;br /&gt;
| Can be copied to generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt;&lt;br /&gt;
| Can exist on the relation between the round plan and a child plan.&lt;br /&gt;
| Can be copied to generated work packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
&lt;br /&gt;
The linked child plans define which additional work packages should be generated when the round maintenance plan is due.&lt;br /&gt;
&lt;br /&gt;
When the round plan generates work packages, the system creates:&lt;br /&gt;
&lt;br /&gt;
* one main work package from the round plan’s own &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
* one additional work package for each child maintenance plan linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The child maintenance plans do not need to be due themselves for the round maintenance plan to use them during round generation.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; exists on &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The exact runtime effect of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; should be documented after the implementation behavior has been verified. Until that behavior is confirmed, the wiki should not claim that &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; filters child plans by due date, asset, or priority.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
The relation between the round maintenance plan and a linked child maintenance plan can contain &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the system creates an additional work package from a linked child maintenance plan, these values can be copied to the generated work package.&lt;br /&gt;
&lt;br /&gt;
This can be used to structure, order, or group the additional work packages in the generated round.&lt;br /&gt;
&lt;br /&gt;
== Properties Calculated or Updated by the System ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property / link&lt;br /&gt;
! System behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated or recalculated for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Updated when a generated work package is completed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;&lt;br /&gt;
| Set on generated work packages from the maintenance plan’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Links on generated work packages&lt;br /&gt;
| Required links are set automatically during generation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is calculated by the system from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value is recalculated when:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changes&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; changes&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is recalculated after planning or completion&lt;br /&gt;
* recurrence settings cause a new &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; to be calculated&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; can be calculated or recalculated by the system.&lt;br /&gt;
&lt;br /&gt;
The calculation depends on:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
* related generated work packages&lt;br /&gt;
* planning events&lt;br /&gt;
* completion events&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated from the recurrence pattern and the highest relevant planned or finished date of related generated work packages.&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated from the completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; is updated by the system when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
It stores the latest completion date of a generated work package related to the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
This value is especially relevant for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; on Generated Work Packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package from a maintenance plan, it sets the generated work package’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; to the maintenance plan’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MaintenancePlan.NEXT_DATE: 15 March&lt;br /&gt;
Generated WorkPackage.PLANNED_START: 15 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links on Generated Work Packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package, it automatically sets the required links on the generated work package.&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to:&lt;br /&gt;
&lt;br /&gt;
* the source maintenance plan via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt;&lt;br /&gt;
* the template work package via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the assigned asset via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, additional generated work packages from linked child maintenance plans are assigned to the main round work package via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Properties and Events That Trigger Recalculation ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Trigger&lt;br /&gt;
! Recalculation behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; based on the new recurrence rule and selected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates the schedule and may change &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Checks whether future occurrences are still available.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; according to the selected scheduling mode.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Notifies the linked maintenance plan and may trigger date recalculation.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package completed&lt;br /&gt;
| Updates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; and recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; according to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changes, the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; changes, the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; changes, the recurrence pattern changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; based on the new recurrence rule and the selected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is recalculated, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; changes, the start point of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates the schedule. This can change &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changes, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; changes, the end boundary of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system checks whether future occurrences are still available.&lt;br /&gt;
&lt;br /&gt;
If no further occurrence is possible because of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt;, the system cannot calculate a new &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; changes, the system checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
&lt;br /&gt;
If the number of related generated work packages is greater than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;, the system does not calculate further occurrences.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; changes, the logic for calculating future dates changes.&lt;br /&gt;
&lt;br /&gt;
Changing to Calendar-Based means that the plan follows the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
Changing to Completion-Based means that the plan calculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; from the completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
Because this changes the calculation logic, the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; according to the selected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changes, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; of a generated work package is set or changed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
For calendar-based cyclic maintenance plans, this can trigger recalculation of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;. The system uses the planning information to continue the calendar-based recurrence.&lt;br /&gt;
&lt;br /&gt;
For completion-based cyclic maintenance plans, a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; change does not drive the recurrence in the same way. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is mainly calculated after the work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package Completed ===&lt;br /&gt;
&lt;br /&gt;
When a generated work package is completed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
A work package is considered completed when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system updates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt;. Then the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; according to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the system continues according to the calendar recurrence&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated from the recurrence pattern and relevant planned or finished dates&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the completion date becomes the basis for the next occurrence&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated from the completion date&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is updated, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is recalculated.&lt;br /&gt;
&lt;br /&gt;
== Work Package Generation Logic ==&lt;br /&gt;
&lt;br /&gt;
=== When Is a Plan Ready to Create a Work Package? ===&lt;br /&gt;
&lt;br /&gt;
A cyclic or round maintenance plan can create a work package only if all required conditions are fulfilled.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Requirement&lt;br /&gt;
! Condition&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Plan validity&lt;br /&gt;
| The plan must be valid.&lt;br /&gt;
| For cyclic maintenance plans, this requires a valid &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;, assigned &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;, and available &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Plan status&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS == Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inactive plans are ignored.&lt;br /&gt;
|-&lt;br /&gt;
| Automatic generation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; must be enabled.&lt;br /&gt;
| If disabled, the plan does not automatically create work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Template work package&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
| The linked work package must be a template work package.&lt;br /&gt;
|-&lt;br /&gt;
| Replication configuration&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
| Required to copy the template work package.&lt;br /&gt;
|-&lt;br /&gt;
| Earliest generation date&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE &amp;lt;= current date&amp;lt;/span&amp;gt;&lt;br /&gt;
| The plan may only generate once the earliest generation date has been reached.&lt;br /&gt;
|-&lt;br /&gt;
| Open work packages&lt;br /&gt;
| No open generated work package may exist for the plan.&lt;br /&gt;
| There must be no generated work package linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt; where &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORGA_STATUS != 100&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Generation rule:''' The open work package check prevents the system from creating multiple open work packages for the same maintenance plan.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Round Work Package Generation ==&lt;br /&gt;
&lt;br /&gt;
A round maintenance plan creates a main work package for the round.&lt;br /&gt;
&lt;br /&gt;
After the main work package has been created, the system processes the maintenance plans linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For each linked child maintenance plan, the system creates an additional work package.&lt;br /&gt;
&lt;br /&gt;
These additional generated work packages are assigned to the main round work package via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For child plans used in a round, the system does not care whether the child plan:&lt;br /&gt;
&lt;br /&gt;
* has &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS == Active&amp;lt;/span&amp;gt;&lt;br /&gt;
* has &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE == true&amp;lt;/span&amp;gt;&lt;br /&gt;
* has a valid &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
* has a valid &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
* is due based on its own &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Rule:''' The round plan controls the timing. The child plans define what additional work packages should be created as part of the round.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MRO_Material_Management]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29992</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29992"/>
				<updated>2026-06-19T06:41:12Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Relations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations are created manually by users and link materials to tasks.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
Users can see which material is required for a task, where the material is stored, how much material is available, how much material is reserved, and which reservation status applies.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow object&lt;br /&gt;
| Represents a manually created material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Related storage object&lt;br /&gt;
| Represents a physical storage location for materials.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material status.&lt;br /&gt;
| User/admin managed property&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The property is managed by the user or administrator. The system does not change it automatically.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive and should not be used for new reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active and can be used for reservations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
Deletion is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is lower than or equal to 0&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; returns false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a manually created material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and the actually issued or consumed quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actually issued or consumed quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; is a related object used to represent a physical storage location.&lt;br /&gt;
&lt;br /&gt;
A material can reference a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties and values ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Values / meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is a technical base class.&lt;br /&gt;
&lt;br /&gt;
It provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property for material-related objects such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actually issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
Reservations are created manually by the user.&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; must point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The method processes active reservations for the task:&lt;br /&gt;
&lt;br /&gt;
* if a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* otherwise, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the actually issued or consumed quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level.&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
A spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A user manually creates a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; and links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Actual quantity is entered ===&lt;br /&gt;
&lt;br /&gt;
The actually issued or consumed quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 6: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROMaintenancePlans]]&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29991</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29991"/>
				<updated>2026-06-19T06:40:02Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Reservation status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations are created manually by users and link materials to tasks.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
Users can see which material is required for a task, where the material is stored, how much material is available, how much material is reserved, and which reservation status applies.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow object&lt;br /&gt;
| Represents a manually created material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Related storage object&lt;br /&gt;
| Represents a physical storage location for materials.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material status.&lt;br /&gt;
| User/admin managed property&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The property is managed by the user or administrator. The system does not change it automatically.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive and should not be used for new reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active and can be used for reservations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
Deletion is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is lower than or equal to 0&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; returns false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a manually created material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and the actually issued or consumed quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actually issued or consumed quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; is a related object used to represent a physical storage location.&lt;br /&gt;
&lt;br /&gt;
A material can reference a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties and values ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Values / meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is a technical base class.&lt;br /&gt;
&lt;br /&gt;
It provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property for material-related objects such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Relations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relation&lt;br /&gt;
! Source&lt;br /&gt;
! Target&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links a material instance to its master data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines where the material is stored.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines which material is reserved.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the task for which the material is reserved.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actually issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
Reservations are created manually by the user.&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; must point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The method processes active reservations for the task:&lt;br /&gt;
&lt;br /&gt;
* if a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* otherwise, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the actually issued or consumed quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level.&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
A spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A user manually creates a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; and links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Actual quantity is entered ===&lt;br /&gt;
&lt;br /&gt;
The actually issued or consumed quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 6: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROMaintenancePlans]]&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29990</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29990"/>
				<updated>2026-06-19T06:38:54Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Material type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations are created manually by users and link materials to tasks.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
Users can see which material is required for a task, where the material is stored, how much material is available, how much material is reserved, and which reservation status applies.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow object&lt;br /&gt;
| Represents a manually created material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Related storage object&lt;br /&gt;
| Represents a physical storage location for materials.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
Values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material status.&lt;br /&gt;
| User/admin managed property&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The property is managed by the user or administrator. The system does not change it automatically.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive and should not be used for new reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active and can be used for reservations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
Deletion is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is lower than or equal to 0&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; returns false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a manually created material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and the actually issued or consumed quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actually issued or consumed quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; is a related object used to represent a physical storage location.&lt;br /&gt;
&lt;br /&gt;
A material can reference a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties and values ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Values / meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is a technical base class.&lt;br /&gt;
&lt;br /&gt;
It provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property for material-related objects such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Relations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relation&lt;br /&gt;
! Source&lt;br /&gt;
! Target&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links a material instance to its master data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines where the material is stored.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines which material is reserved.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the task for which the material is reserved.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actually issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
Reservations are created manually by the user.&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; must point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The method processes active reservations for the task:&lt;br /&gt;
&lt;br /&gt;
* if a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* otherwise, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the actually issued or consumed quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level.&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
A spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A user manually creates a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; and links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Actual quantity is entered ===&lt;br /&gt;
&lt;br /&gt;
The actually issued or consumed quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 6: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROMaintenancePlans]]&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29989</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29989"/>
				<updated>2026-06-19T06:37:42Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations are created manually by users and link materials to tasks.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
Users can see which material is required for a task, where the material is stored, how much material is available, how much material is reserved, and which reservation status applies.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow object&lt;br /&gt;
| Represents a manually created material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Related storage object&lt;br /&gt;
| Represents a physical storage location for materials.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Technical base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Material status.&lt;br /&gt;
| User/admin managed property&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The property is managed by the user or administrator. The system does not change it automatically.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive and should not be used for new reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active and can be used for reservations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
Deletion is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is lower than or equal to 0&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; returns false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a manually created material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and the actually issued or consumed quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| Reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actually issued or consumed quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; is a related object used to represent a physical storage location.&lt;br /&gt;
&lt;br /&gt;
A material can reference a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Important properties and values ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Values / meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; / &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| int / enum&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is a technical base class.&lt;br /&gt;
&lt;br /&gt;
It provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property for material-related objects such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Relations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relation&lt;br /&gt;
! Source&lt;br /&gt;
! Target&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links a material instance to its master data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines where the material is stored.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines which material is reserved.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the task for which the material is reserved.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actually issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
Reservations are created manually by the user.&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; must point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The method processes active reservations for the task:&lt;br /&gt;
&lt;br /&gt;
* if a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* otherwise, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the actually issued or consumed quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level.&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
A spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A user manually creates a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; and links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt; &lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Actual quantity is entered ===&lt;br /&gt;
&lt;br /&gt;
The actually issued or consumed quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 6: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual issued or consumed quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROMaintenancePlans]]&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29988</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29988"/>
				<updated>2026-06-18T14:48:44Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Usage in tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations link materials to tasks and define planned or actual quantities for maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with the required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
In a maintenance workflow, users may need to know:&lt;br /&gt;
&lt;br /&gt;
* which material is required for a task&lt;br /&gt;
* which material master data belongs to a material&lt;br /&gt;
* where the material is stored&lt;br /&gt;
* how much material is available&lt;br /&gt;
* how much material is already reserved&lt;br /&gt;
* which reservations exist for a task&lt;br /&gt;
* whether a reservation is planned, confirmed, issued, cancelled, or expired&lt;br /&gt;
&lt;br /&gt;
The material management implementation separates the general material catalogue from the actual material quantity and reservation handling.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
The material management implementation is built around the following main objects:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow / transaction object&lt;br /&gt;
| Represents a material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage master / location object&lt;br /&gt;
| Represents a physical storage location and stores storage-related information such as storage type, dimensions, access type, and occupancy status.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in the MRO stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the base class for material-related quantity-bearing objects.&lt;br /&gt;
&lt;br /&gt;
It defines the common quantity concept used by both:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Quantity value for the goods movement. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, this is the material quantity. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, this is the actual reservation quantity and has reservation-specific validation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
A material master describes the material independently from a concrete reservation or task.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number of the material master.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit of the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure used for the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
The typed material type accessor is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also exposes calculated reservation and availability logic.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material status.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is not treated as a normal stored quantity in the business logic. It is computed from confirmed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; objects.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by the method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Active reservations ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; checks whether active reservations exist for the material.&lt;br /&gt;
&lt;br /&gt;
It queries reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means the method considers reservations up to the confirmed state as active.&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
Deletion is only allowed if the base delete conditions are fulfilled and:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is lower than or equal to 0&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; returns false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and can also store an actual quantity through the overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Uses the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; enum.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actual reservation quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled. This is only allowed if the reservation has not been issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This prevents changing the task or material after the reservation has reached a more binding status.&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; represents a physical storage location.&lt;br /&gt;
&lt;br /&gt;
It is a functional location specialization and can be linked from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A storage location stores information about storage type, dimensions, access type, label, level, position, and occupancy.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for storage type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_WEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed weight for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_VOLUME&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed volume for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LENGTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Length of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;WIDTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Width of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Height of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for access type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for occupancy status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Storage type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Access type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Occupancy status ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Relations ==&lt;br /&gt;
&lt;br /&gt;
The following relations are relevant for material management.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relation&lt;br /&gt;
! Source&lt;br /&gt;
! Target&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links a material instance to its master data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines where the material is stored.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines which material is reserved.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the task for which the material is reserved.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Material quantity ===&lt;br /&gt;
&lt;br /&gt;
The material quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, the property is inherited from the base class.&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
The reserved quantity is exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is calculated by summing the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; values of confirmed reservations for the material.&lt;br /&gt;
&lt;br /&gt;
Only reservations with &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt; are included in this calculation.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
Available quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The planned reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It can only be set if:&lt;br /&gt;
&lt;br /&gt;
* the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material is assigned&lt;br /&gt;
* the quantity is greater than 0&lt;br /&gt;
* the quantity does not exceed the material's available quantity&lt;br /&gt;
&lt;br /&gt;
=== Actual reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The actual reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This property overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and can only be set if the status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; and the new quantity is greater than 0.&lt;br /&gt;
&lt;br /&gt;
=== Quantity overview ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; should point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material because:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The method processes active reservations for the task:&lt;br /&gt;
&lt;br /&gt;
* if a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* otherwise, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The changed reservations are added to the unsaved children through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AddToUnsavedChildren(reservation)&amp;lt;/span&amp;gt; so that the changes are persisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level in the inspected implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Goods movement usage ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the common base class for quantity-bearing material objects.&lt;br /&gt;
&lt;br /&gt;
Both &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; inherit from it and expose &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the inspected implementation:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt; represents the material quantity&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt; represents the actual quantity for the reservation and applies reservation-specific validation&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt; represents the planned reserved quantity&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated from confirmed reservations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Scenario ===&lt;br /&gt;
&lt;br /&gt;
A task requires one spare part from stock.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
The spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The planned quantity is allowed because the material has enough available quantity.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
The following business rules are implemented in the inspected material management logic.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29987</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29987"/>
				<updated>2026-06-18T14:48:34Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Occupancy status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations link materials to tasks and define planned or actual quantities for maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with the required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
In a maintenance workflow, users may need to know:&lt;br /&gt;
&lt;br /&gt;
* which material is required for a task&lt;br /&gt;
* which material master data belongs to a material&lt;br /&gt;
* where the material is stored&lt;br /&gt;
* how much material is available&lt;br /&gt;
* how much material is already reserved&lt;br /&gt;
* which reservations exist for a task&lt;br /&gt;
* whether a reservation is planned, confirmed, issued, cancelled, or expired&lt;br /&gt;
&lt;br /&gt;
The material management implementation separates the general material catalogue from the actual material quantity and reservation handling.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
The material management implementation is built around the following main objects:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow / transaction object&lt;br /&gt;
| Represents a material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage master / location object&lt;br /&gt;
| Represents a physical storage location and stores storage-related information such as storage type, dimensions, access type, and occupancy status.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in the MRO stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the base class for material-related quantity-bearing objects.&lt;br /&gt;
&lt;br /&gt;
It defines the common quantity concept used by both:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Quantity value for the goods movement. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, this is the material quantity. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, this is the actual reservation quantity and has reservation-specific validation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
A material master describes the material independently from a concrete reservation or task.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number of the material master.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit of the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure used for the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
The typed material type accessor is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also exposes calculated reservation and availability logic.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material status.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is not treated as a normal stored quantity in the business logic. It is computed from confirmed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; objects.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by the method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Active reservations ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; checks whether active reservations exist for the material.&lt;br /&gt;
&lt;br /&gt;
It queries reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means the method considers reservations up to the confirmed state as active.&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
Deletion is only allowed if the base delete conditions are fulfilled and:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is lower than or equal to 0&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; returns false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and can also store an actual quantity through the overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Uses the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; enum.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actual reservation quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled. This is only allowed if the reservation has not been issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This prevents changing the task or material after the reservation has reached a more binding status.&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; represents a physical storage location.&lt;br /&gt;
&lt;br /&gt;
It is a functional location specialization and can be linked from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A storage location stores information about storage type, dimensions, access type, label, level, position, and occupancy.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for storage type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_WEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed weight for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_VOLUME&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed volume for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LENGTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Length of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;WIDTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Width of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Height of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for access type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for occupancy status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Storage type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Access type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Occupancy status ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Relations ==&lt;br /&gt;
&lt;br /&gt;
The following relations are relevant for material management.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relation&lt;br /&gt;
! Source&lt;br /&gt;
! Target&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links a material instance to its master data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines where the material is stored.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines which material is reserved.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the task for which the material is reserved.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Material quantity ===&lt;br /&gt;
&lt;br /&gt;
The material quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, the property is inherited from the base class.&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
The reserved quantity is exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is calculated by summing the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; values of confirmed reservations for the material.&lt;br /&gt;
&lt;br /&gt;
Only reservations with &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt; are included in this calculation.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
Available quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The planned reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It can only be set if:&lt;br /&gt;
&lt;br /&gt;
* the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material is assigned&lt;br /&gt;
* the quantity is greater than 0&lt;br /&gt;
* the quantity does not exceed the material's available quantity&lt;br /&gt;
&lt;br /&gt;
=== Actual reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The actual reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This property overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and can only be set if the status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; and the new quantity is greater than 0.&lt;br /&gt;
&lt;br /&gt;
=== Quantity overview ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; should point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material because:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The method processes active reservations for the task:&lt;br /&gt;
&lt;br /&gt;
* if a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* otherwise, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The changed reservations are added to the unsaved children through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AddToUnsavedChildren(reservation)&amp;lt;/span&amp;gt; so that the changes are persisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level in the inspected implementation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected information explicitly confirms the relation to tasks. Direct relations to work packages or work orders were not confirmed in the provided code analysis. If work packages or work orders use materials indirectly through tasks, that should be documented with the exact relation or navigation path.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Goods movement usage ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the common base class for quantity-bearing material objects.&lt;br /&gt;
&lt;br /&gt;
Both &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; inherit from it and expose &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the inspected implementation:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt; represents the material quantity&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt; represents the actual quantity for the reservation and applies reservation-specific validation&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt; represents the planned reserved quantity&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated from confirmed reservations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Scenario ===&lt;br /&gt;
&lt;br /&gt;
A task requires one spare part from stock.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
The spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The planned quantity is allowed because the material has enough available quantity.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
The following business rules are implemented in the inspected material management logic.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29986</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29986"/>
				<updated>2026-06-18T14:48:18Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Material status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations link materials to tasks and define planned or actual quantities for maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with the required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
In a maintenance workflow, users may need to know:&lt;br /&gt;
&lt;br /&gt;
* which material is required for a task&lt;br /&gt;
* which material master data belongs to a material&lt;br /&gt;
* where the material is stored&lt;br /&gt;
* how much material is available&lt;br /&gt;
* how much material is already reserved&lt;br /&gt;
* which reservations exist for a task&lt;br /&gt;
* whether a reservation is planned, confirmed, issued, cancelled, or expired&lt;br /&gt;
&lt;br /&gt;
The material management implementation separates the general material catalogue from the actual material quantity and reservation handling.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
The material management implementation is built around the following main objects:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow / transaction object&lt;br /&gt;
| Represents a material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage master / location object&lt;br /&gt;
| Represents a physical storage location and stores storage-related information such as storage type, dimensions, access type, and occupancy status.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in the MRO stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the base class for material-related quantity-bearing objects.&lt;br /&gt;
&lt;br /&gt;
It defines the common quantity concept used by both:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Quantity value for the goods movement. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, this is the material quantity. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, this is the actual reservation quantity and has reservation-specific validation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
A material master describes the material independently from a concrete reservation or task.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number of the material master.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit of the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure used for the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
The typed material type accessor is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also exposes calculated reservation and availability logic.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material status.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is not treated as a normal stored quantity in the business logic. It is computed from confirmed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; objects.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by the method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Active reservations ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; checks whether active reservations exist for the material.&lt;br /&gt;
&lt;br /&gt;
It queries reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means the method considers reservations up to the confirmed state as active.&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
Deletion is only allowed if the base delete conditions are fulfilled and:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is lower than or equal to 0&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; returns false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and can also store an actual quantity through the overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Uses the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; enum.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actual reservation quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled. This is only allowed if the reservation has not been issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This prevents changing the task or material after the reservation has reached a more binding status.&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; represents a physical storage location.&lt;br /&gt;
&lt;br /&gt;
It is a functional location specialization and can be linked from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A storage location stores information about storage type, dimensions, access type, label, level, position, and occupancy.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for storage type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_WEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed weight for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_VOLUME&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed volume for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LENGTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Length of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;WIDTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Width of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Height of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for access type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for occupancy status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Storage type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Access type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Occupancy status ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; information does not show automatic occupancy calculation. It is unclear from code whether &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; is updated manually, by workflow logic, or by another module.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relations ==&lt;br /&gt;
&lt;br /&gt;
The following relations are relevant for material management.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relation&lt;br /&gt;
! Source&lt;br /&gt;
! Target&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links a material instance to its master data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines where the material is stored.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines which material is reserved.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the task for which the material is reserved.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Material quantity ===&lt;br /&gt;
&lt;br /&gt;
The material quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, the property is inherited from the base class.&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
The reserved quantity is exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is calculated by summing the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; values of confirmed reservations for the material.&lt;br /&gt;
&lt;br /&gt;
Only reservations with &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt; are included in this calculation.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
Available quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The planned reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It can only be set if:&lt;br /&gt;
&lt;br /&gt;
* the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material is assigned&lt;br /&gt;
* the quantity is greater than 0&lt;br /&gt;
* the quantity does not exceed the material's available quantity&lt;br /&gt;
&lt;br /&gt;
=== Actual reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The actual reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This property overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and can only be set if the status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; and the new quantity is greater than 0.&lt;br /&gt;
&lt;br /&gt;
=== Quantity overview ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; should point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material because:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The method processes active reservations for the task:&lt;br /&gt;
&lt;br /&gt;
* if a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* otherwise, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The changed reservations are added to the unsaved children through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AddToUnsavedChildren(reservation)&amp;lt;/span&amp;gt; so that the changes are persisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level in the inspected implementation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected information explicitly confirms the relation to tasks. Direct relations to work packages or work orders were not confirmed in the provided code analysis. If work packages or work orders use materials indirectly through tasks, that should be documented with the exact relation or navigation path.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Goods movement usage ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the common base class for quantity-bearing material objects.&lt;br /&gt;
&lt;br /&gt;
Both &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; inherit from it and expose &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the inspected implementation:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt; represents the material quantity&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt; represents the actual quantity for the reservation and applies reservation-specific validation&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt; represents the planned reserved quantity&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated from confirmed reservations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Scenario ===&lt;br /&gt;
&lt;br /&gt;
A task requires one spare part from stock.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
The spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The planned quantity is allowed because the material has enough available quantity.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
The following business rules are implemented in the inspected material management logic.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29985</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29985"/>
				<updated>2026-06-18T14:48:01Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Material type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations link materials to tasks and define planned or actual quantities for maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with the required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
In a maintenance workflow, users may need to know:&lt;br /&gt;
&lt;br /&gt;
* which material is required for a task&lt;br /&gt;
* which material master data belongs to a material&lt;br /&gt;
* where the material is stored&lt;br /&gt;
* how much material is available&lt;br /&gt;
* how much material is already reserved&lt;br /&gt;
* which reservations exist for a task&lt;br /&gt;
* whether a reservation is planned, confirmed, issued, cancelled, or expired&lt;br /&gt;
&lt;br /&gt;
The material management implementation separates the general material catalogue from the actual material quantity and reservation handling.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
The material management implementation is built around the following main objects:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow / transaction object&lt;br /&gt;
| Represents a material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage master / location object&lt;br /&gt;
| Represents a physical storage location and stores storage-related information such as storage type, dimensions, access type, and occupancy status.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in the MRO stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the base class for material-related quantity-bearing objects.&lt;br /&gt;
&lt;br /&gt;
It defines the common quantity concept used by both:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Quantity value for the goods movement. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, this is the material quantity. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, this is the actual reservation quantity and has reservation-specific validation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
A material master describes the material independently from a concrete reservation or task.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number of the material master.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit of the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure used for the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
The typed material type accessor is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also exposes calculated reservation and availability logic.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material status.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected class information does not show specific methods that automatically change &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;. Status changes outside these classes are unclear from code.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is not treated as a normal stored quantity in the business logic. It is computed from confirmed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; objects.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by the method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Active reservations ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; checks whether active reservations exist for the material.&lt;br /&gt;
&lt;br /&gt;
It queries reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means the method considers reservations up to the confirmed state as active.&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
Deletion is only allowed if the base delete conditions are fulfilled and:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is lower than or equal to 0&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; returns false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and can also store an actual quantity through the overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Uses the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; enum.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actual reservation quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled. This is only allowed if the reservation has not been issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This prevents changing the task or material after the reservation has reached a more binding status.&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; represents a physical storage location.&lt;br /&gt;
&lt;br /&gt;
It is a functional location specialization and can be linked from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A storage location stores information about storage type, dimensions, access type, label, level, position, and occupancy.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for storage type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_WEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed weight for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_VOLUME&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed volume for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LENGTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Length of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;WIDTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Width of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Height of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for access type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for occupancy status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Storage type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Access type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Occupancy status ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; information does not show automatic occupancy calculation. It is unclear from code whether &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; is updated manually, by workflow logic, or by another module.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relations ==&lt;br /&gt;
&lt;br /&gt;
The following relations are relevant for material management.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relation&lt;br /&gt;
! Source&lt;br /&gt;
! Target&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links a material instance to its master data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines where the material is stored.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines which material is reserved.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the task for which the material is reserved.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Material quantity ===&lt;br /&gt;
&lt;br /&gt;
The material quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, the property is inherited from the base class.&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
The reserved quantity is exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is calculated by summing the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; values of confirmed reservations for the material.&lt;br /&gt;
&lt;br /&gt;
Only reservations with &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt; are included in this calculation.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
Available quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The planned reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It can only be set if:&lt;br /&gt;
&lt;br /&gt;
* the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material is assigned&lt;br /&gt;
* the quantity is greater than 0&lt;br /&gt;
* the quantity does not exceed the material's available quantity&lt;br /&gt;
&lt;br /&gt;
=== Actual reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The actual reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This property overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and can only be set if the status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; and the new quantity is greater than 0.&lt;br /&gt;
&lt;br /&gt;
=== Quantity overview ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; should point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material because:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The method processes active reservations for the task:&lt;br /&gt;
&lt;br /&gt;
* if a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* otherwise, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The changed reservations are added to the unsaved children through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AddToUnsavedChildren(reservation)&amp;lt;/span&amp;gt; so that the changes are persisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level in the inspected implementation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected information explicitly confirms the relation to tasks. Direct relations to work packages or work orders were not confirmed in the provided code analysis. If work packages or work orders use materials indirectly through tasks, that should be documented with the exact relation or navigation path.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Goods movement usage ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the common base class for quantity-bearing material objects.&lt;br /&gt;
&lt;br /&gt;
Both &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; inherit from it and expose &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the inspected implementation:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt; represents the material quantity&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt; represents the actual quantity for the reservation and applies reservation-specific validation&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt; represents the planned reserved quantity&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated from confirmed reservations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Scenario ===&lt;br /&gt;
&lt;br /&gt;
A task requires one spare part from stock.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
The spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The planned quantity is allowed because the material has enough available quantity.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
The following business rules are implemented in the inspected material management logic.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29984</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29984"/>
				<updated>2026-06-18T14:47:11Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Goods movement usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations link materials to tasks and define planned or actual quantities for maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with the required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
In a maintenance workflow, users may need to know:&lt;br /&gt;
&lt;br /&gt;
* which material is required for a task&lt;br /&gt;
* which material master data belongs to a material&lt;br /&gt;
* where the material is stored&lt;br /&gt;
* how much material is available&lt;br /&gt;
* how much material is already reserved&lt;br /&gt;
* which reservations exist for a task&lt;br /&gt;
* whether a reservation is planned, confirmed, issued, cancelled, or expired&lt;br /&gt;
&lt;br /&gt;
The material management implementation separates the general material catalogue from the actual material quantity and reservation handling.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
The material management implementation is built around the following main objects:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow / transaction object&lt;br /&gt;
| Represents a material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage master / location object&lt;br /&gt;
| Represents a physical storage location and stores storage-related information such as storage type, dimensions, access type, and occupancy status.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in the MRO stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the base class for material-related quantity-bearing objects.&lt;br /&gt;
&lt;br /&gt;
It defines the common quantity concept used by both:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Quantity value for the goods movement. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, this is the material quantity. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, this is the actual reservation quantity and has reservation-specific validation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
A material master describes the material independently from a concrete reservation or task.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number of the material master.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit of the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure used for the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
The typed material type accessor is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' No explicit SAP or ERP synchronization behavior was found in the inspected classes. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt; may correspond to an external material number, but the exact SAP/ERP mapping is unclear from the available code information.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also exposes calculated reservation and availability logic.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material status.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected class information does not show specific methods that automatically change &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;. Status changes outside these classes are unclear from code.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is not treated as a normal stored quantity in the business logic. It is computed from confirmed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; objects.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by the method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Active reservations ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; checks whether active reservations exist for the material.&lt;br /&gt;
&lt;br /&gt;
It queries reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means the method considers reservations up to the confirmed state as active.&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
Deletion is only allowed if the base delete conditions are fulfilled and:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is lower than or equal to 0&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; returns false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and can also store an actual quantity through the overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Uses the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; enum.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actual reservation quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled. This is only allowed if the reservation has not been issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This prevents changing the task or material after the reservation has reached a more binding status.&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; represents a physical storage location.&lt;br /&gt;
&lt;br /&gt;
It is a functional location specialization and can be linked from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A storage location stores information about storage type, dimensions, access type, label, level, position, and occupancy.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for storage type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_WEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed weight for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_VOLUME&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed volume for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LENGTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Length of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;WIDTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Width of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Height of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for access type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for occupancy status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Storage type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Access type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Occupancy status ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; information does not show automatic occupancy calculation. It is unclear from code whether &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; is updated manually, by workflow logic, or by another module.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relations ==&lt;br /&gt;
&lt;br /&gt;
The following relations are relevant for material management.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relation&lt;br /&gt;
! Source&lt;br /&gt;
! Target&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links a material instance to its master data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines where the material is stored.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines which material is reserved.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the task for which the material is reserved.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Material quantity ===&lt;br /&gt;
&lt;br /&gt;
The material quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, the property is inherited from the base class.&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
The reserved quantity is exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is calculated by summing the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; values of confirmed reservations for the material.&lt;br /&gt;
&lt;br /&gt;
Only reservations with &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt; are included in this calculation.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
Available quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The planned reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It can only be set if:&lt;br /&gt;
&lt;br /&gt;
* the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material is assigned&lt;br /&gt;
* the quantity is greater than 0&lt;br /&gt;
* the quantity does not exceed the material's available quantity&lt;br /&gt;
&lt;br /&gt;
=== Actual reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The actual reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This property overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and can only be set if the status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; and the new quantity is greater than 0.&lt;br /&gt;
&lt;br /&gt;
=== Quantity overview ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; should point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material because:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The method processes active reservations for the task:&lt;br /&gt;
&lt;br /&gt;
* if a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* otherwise, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The changed reservations are added to the unsaved children through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AddToUnsavedChildren(reservation)&amp;lt;/span&amp;gt; so that the changes are persisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level in the inspected implementation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected information explicitly confirms the relation to tasks. Direct relations to work packages or work orders were not confirmed in the provided code analysis. If work packages or work orders use materials indirectly through tasks, that should be documented with the exact relation or navigation path.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Goods movement usage ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the common base class for quantity-bearing material objects.&lt;br /&gt;
&lt;br /&gt;
Both &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; inherit from it and expose &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the inspected implementation:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt; represents the material quantity&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt; represents the actual quantity for the reservation and applies reservation-specific validation&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt; represents the planned reserved quantity&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated from confirmed reservations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Scenario ===&lt;br /&gt;
&lt;br /&gt;
A task requires one spare part from stock.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
The spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The planned quantity is allowed because the material has enough available quantity.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
The following business rules are implemented in the inspected material management logic.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29983</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29983"/>
				<updated>2026-06-18T14:46:27Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations link materials to tasks and define planned or actual quantities for maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with the required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
In a maintenance workflow, users may need to know:&lt;br /&gt;
&lt;br /&gt;
* which material is required for a task&lt;br /&gt;
* which material master data belongs to a material&lt;br /&gt;
* where the material is stored&lt;br /&gt;
* how much material is available&lt;br /&gt;
* how much material is already reserved&lt;br /&gt;
* which reservations exist for a task&lt;br /&gt;
* whether a reservation is planned, confirmed, issued, cancelled, or expired&lt;br /&gt;
&lt;br /&gt;
The material management implementation separates the general material catalogue from the actual material quantity and reservation handling.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
The material management implementation is built around the following main objects:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow / transaction object&lt;br /&gt;
| Represents a material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage master / location object&lt;br /&gt;
| Represents a physical storage location and stores storage-related information such as storage type, dimensions, access type, and occupancy status.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in the MRO stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the base class for material-related quantity-bearing objects.&lt;br /&gt;
&lt;br /&gt;
It defines the common quantity concept used by both:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Quantity value for the goods movement. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, this is the material quantity. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, this is the actual reservation quantity and has reservation-specific validation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
A material master describes the material independently from a concrete reservation or task.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number of the material master.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit of the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure used for the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
The typed material type accessor is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' No explicit SAP or ERP synchronization behavior was found in the inspected classes. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt; may correspond to an external material number, but the exact SAP/ERP mapping is unclear from the available code information.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also exposes calculated reservation and availability logic.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material status.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected class information does not show specific methods that automatically change &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;. Status changes outside these classes are unclear from code.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is not treated as a normal stored quantity in the business logic. It is computed from confirmed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; objects.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by the method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Active reservations ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; checks whether active reservations exist for the material.&lt;br /&gt;
&lt;br /&gt;
It queries reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means the method considers reservations up to the confirmed state as active.&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
Deletion is only allowed if the base delete conditions are fulfilled and:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is lower than or equal to 0&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; returns false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and can also store an actual quantity through the overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Uses the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; enum.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actual reservation quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled. This is only allowed if the reservation has not been issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This prevents changing the task or material after the reservation has reached a more binding status.&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; represents a physical storage location.&lt;br /&gt;
&lt;br /&gt;
It is a functional location specialization and can be linked from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A storage location stores information about storage type, dimensions, access type, label, level, position, and occupancy.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for storage type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_WEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed weight for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_VOLUME&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed volume for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LENGTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Length of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;WIDTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Width of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Height of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for access type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for occupancy status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Storage type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Access type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Occupancy status ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; information does not show automatic occupancy calculation. It is unclear from code whether &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; is updated manually, by workflow logic, or by another module.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relations ==&lt;br /&gt;
&lt;br /&gt;
The following relations are relevant for material management.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relation&lt;br /&gt;
! Source&lt;br /&gt;
! Target&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links a material instance to its master data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines where the material is stored.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines which material is reserved.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the task for which the material is reserved.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Material quantity ===&lt;br /&gt;
&lt;br /&gt;
The material quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, the property is inherited from the base class.&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
The reserved quantity is exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is calculated by summing the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; values of confirmed reservations for the material.&lt;br /&gt;
&lt;br /&gt;
Only reservations with &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt; are included in this calculation.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
Available quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The planned reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It can only be set if:&lt;br /&gt;
&lt;br /&gt;
* the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material is assigned&lt;br /&gt;
* the quantity is greater than 0&lt;br /&gt;
* the quantity does not exceed the material's available quantity&lt;br /&gt;
&lt;br /&gt;
=== Actual reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The actual reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This property overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and can only be set if the status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; and the new quantity is greater than 0.&lt;br /&gt;
&lt;br /&gt;
=== Quantity overview ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; should point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material because:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing a task ===&lt;br /&gt;
&lt;br /&gt;
When a task is finished, the task logic calls &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The method processes active reservations for the task:&lt;br /&gt;
&lt;br /&gt;
* if a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* otherwise, it is set to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The changed reservations are added to the unsaved children through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AddToUnsavedChildren(reservation)&amp;lt;/span&amp;gt; so that the changes are persisted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Workflow effect:''' Finishing a task closes its reservations. Confirmed reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;; other active reservations become &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks ==&lt;br /&gt;
&lt;br /&gt;
Reservations are the central link between material handling and task execution.&lt;br /&gt;
&lt;br /&gt;
A reservation connects:&lt;br /&gt;
&lt;br /&gt;
* the required material through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the task through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* the planned quantity through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
* the reservation state through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that material usage is tracked at task level in the inspected implementation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected information explicitly confirms the relation to tasks. Direct relations to work packages or work orders were not confirmed in the provided code analysis. If work packages or work orders use materials indirectly through tasks, that should be documented with the exact relation or navigation path.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Goods movement usage ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the common base class for quantity-bearing material objects.&lt;br /&gt;
&lt;br /&gt;
Both &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; inherit from it and expose &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the inspected implementation:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt; represents the material quantity&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt; represents the actual quantity for the reservation and applies reservation-specific validation&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt; represents the planned reserved quantity&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated from confirmed reservations&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected information describes &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; as a base class for quantity-bearing objects. It does not confirm separate movement types such as goods receipt, goods issue, transfer, correction, or consumption postings.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Scenario ===&lt;br /&gt;
&lt;br /&gt;
A task requires one spare part from stock.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material master exists ===&lt;br /&gt;
&lt;br /&gt;
The spare part is defined as a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material exists in a storage location ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; object references the material master and a storage location.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage Shelf A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created for a task ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links the material to the task.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The planned quantity is allowed because the material has enough available quantity.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Reservation is confirmed ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After confirmation, the material's reserved quantity includes the reservation's planned quantity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Task is finished ===&lt;br /&gt;
&lt;br /&gt;
When the task is finished, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CloseReservations()&amp;lt;/span&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
The confirmed reservation is changed to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Validation and business rules ==&lt;br /&gt;
&lt;br /&gt;
The following business rules are implemented in the inspected material management logic.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area&lt;br /&gt;
! Rule&lt;br /&gt;
! Implemented by&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; can only be changed while the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| Status cannot be changed once the reservation is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation status&lt;br /&gt;
| A reservation cannot be changed from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation links&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; cannot be changed when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Property setters&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is greater than 0.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material deletion&lt;br /&gt;
| Material cannot be deleted while active reservations exist.&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;InternalDeleteAllowed()&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29980</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29980"/>
				<updated>2026-06-18T09:04:40Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations link materials to tasks and define planned or actual quantities for maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with the required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
In a maintenance workflow, users may need to know:&lt;br /&gt;
&lt;br /&gt;
* which material is required for a task&lt;br /&gt;
* which material master data belongs to a material&lt;br /&gt;
* where the material is stored&lt;br /&gt;
* how much material is available&lt;br /&gt;
* how much material is already reserved&lt;br /&gt;
* which reservations exist for a task&lt;br /&gt;
* whether a reservation is planned, confirmed, issued, cancelled, or expired&lt;br /&gt;
&lt;br /&gt;
The material management implementation separates the general material catalogue from the actual material quantity and reservation handling.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
The material management implementation is built around the following main objects:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow / transaction object&lt;br /&gt;
| Represents a material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage master / location object&lt;br /&gt;
| Represents a physical storage location and stores storage-related information such as storage type, dimensions, access type, and occupancy status.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in the MRO stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the base class for material-related quantity-bearing objects.&lt;br /&gt;
&lt;br /&gt;
It defines the common quantity concept used by both:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Quantity value for the goods movement. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, this is the material quantity. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, this is the actual reservation quantity and has reservation-specific validation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
A material master describes the material independently from a concrete reservation or task.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number of the material master.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit of the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure used for the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
The typed material type accessor is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' No explicit SAP or ERP synchronization behavior was found in the inspected classes. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt; may correspond to an external material number, but the exact SAP/ERP mapping is unclear from the available code information.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also exposes calculated reservation and availability logic.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material status.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material status ===&lt;br /&gt;
&lt;br /&gt;
The material status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Undefined&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| No specific material status is defined.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Material is inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material is active.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected class information does not show specific methods that automatically change &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;. Status changes outside these classes are unclear from code.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is calculated at read time.&lt;br /&gt;
&lt;br /&gt;
The calculation uses reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculated value is the sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of these confirmed reservations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt; is not treated as a normal stored quantity in the business logic. It is computed from confirmed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; objects.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
The available material quantity is calculated by the method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Active reservations ===&lt;br /&gt;
&lt;br /&gt;
The method &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; checks whether active reservations exist for the material.&lt;br /&gt;
&lt;br /&gt;
It queries reservations where:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; points to the current material&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means the method considers reservations up to the confirmed state as active.&lt;br /&gt;
&lt;br /&gt;
=== Delete behavior ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.InternalDeleteAllowed()&amp;lt;/span&amp;gt; prevents deleting a material if it still has quantity or active reservations.&lt;br /&gt;
&lt;br /&gt;
Deletion is only allowed if the base delete conditions are fulfilled and:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; is lower than or equal to 0&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HasActiveReservation()&amp;lt;/span&amp;gt; returns false&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; cannot be deleted while it has a quantity greater than 0 or active reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; represents a material reservation for a task.&lt;br /&gt;
&lt;br /&gt;
It links:&lt;br /&gt;
&lt;br /&gt;
* a task via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It stores the planned reservation quantity in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; and can also store an actual quantity through the overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Important behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the task for which the material is reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material being reserved.&lt;br /&gt;
| Setter is blocked when status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the reservation status.&lt;br /&gt;
| Changes are validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Uses the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; enum.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Planned quantity for the reservation.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Actual reservation quantity. Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Setter validates through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reservation status ===&lt;br /&gt;
&lt;br /&gt;
The reservation status is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STATUS&amp;lt;/span&amp;gt; and exposed through the typed accessor &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Numeric value&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Reservation is planned.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
| Reservation is confirmed and contributes to the material's reserved quantity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
| 20&lt;br /&gt;
| Material has been physically issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Cancelled&amp;lt;/span&amp;gt;&lt;br /&gt;
| 30&lt;br /&gt;
| Reservation was cancelled. This is only allowed if the reservation has not been issued.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Expired&amp;lt;/span&amp;gt;&lt;br /&gt;
| 50&lt;br /&gt;
| Reservation has expired.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status change rules ===&lt;br /&gt;
&lt;br /&gt;
Status changes are controlled by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowStatusChange(int newStatus)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following rules are applied:&lt;br /&gt;
&lt;br /&gt;
* no status change is allowed when the current status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* changing from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; back to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; is not allowed&lt;br /&gt;
* other status changes are allowed by this method&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Restriction:''' Once a reservation has status &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;, its status can no longer be changed by the normal status setter logic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The setter of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new planned quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; is assigned&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the new quantity is lower than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Quantity rule:''' A planned reservation quantity can only be set while the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; and only if the selected material has enough available quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actual quantity validation ===&lt;br /&gt;
&lt;br /&gt;
The overridden &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; setter validates changes through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A new actual quantity is only allowed if:&lt;br /&gt;
&lt;br /&gt;
* the new quantity is greater than 0&lt;br /&gt;
* the status is either &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link editing rules ===&lt;br /&gt;
&lt;br /&gt;
The setters of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; are guarded by reservation status.&lt;br /&gt;
&lt;br /&gt;
The links cannot be changed when the reservation is:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Issued&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This prevents changing the task or material after the reservation has reached a more binding status.&lt;br /&gt;
&lt;br /&gt;
== StorageLocation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; represents a physical storage location.&lt;br /&gt;
&lt;br /&gt;
It is a functional location specialization and can be linked from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A storage location stores information about storage type, dimensions, access type, label, level, position, and occupancy.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for storage type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_WEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed weight for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MAX_VOLUME&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Maximum allowed volume for the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LENGTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Length of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;WIDTH&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Width of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;HEIGHT&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Height of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for access type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACCESS_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;STORAGE_LABEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Label of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEVEL&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Level of the storage location.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;POSITION&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Position identifier.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for occupancy status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Storage type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Floor&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Shelf&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Rack&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Bin&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Pallet&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Container&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Access type ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AccessType&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Manual&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Forklift&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Crane&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Automated&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Occupancy status ===&lt;br /&gt;
&lt;br /&gt;
Known values of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OccupancyStatus&amp;lt;/span&amp;gt; are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Empty&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Partial&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Full&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reserved&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Blocked&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OutOfService&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The inspected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt; information does not show automatic occupancy calculation. It is unclear from code whether &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;OCCUPANCY_STATUS&amp;lt;/span&amp;gt; is updated manually, by workflow logic, or by another module.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Relations ==&lt;br /&gt;
&lt;br /&gt;
The following relations are relevant for material management.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relation&lt;br /&gt;
! Source&lt;br /&gt;
! Target&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links a material instance to its master data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines where the material is stored.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines which material is reserved.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Task&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the task for which the material is reserved.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Material quantity ===&lt;br /&gt;
&lt;br /&gt;
The material quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, the property is inherited from the base class.&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
The reserved quantity is exposed through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is calculated by summing the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; values of confirmed reservations for the material.&lt;br /&gt;
&lt;br /&gt;
Only reservations with &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ReservationStatus.Confirmed&amp;lt;/span&amp;gt; are included in this calculation.&lt;br /&gt;
&lt;br /&gt;
=== Available quantity ===&lt;br /&gt;
&lt;br /&gt;
Available quantity is calculated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - RESERVED_QUANTITY&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The planned reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QTY_PLANNED&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It can only be set if:&lt;br /&gt;
&lt;br /&gt;
* the reservation is still &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;&lt;br /&gt;
* a material is assigned&lt;br /&gt;
* the quantity is greater than 0&lt;br /&gt;
* the quantity does not exceed the material's available quantity&lt;br /&gt;
&lt;br /&gt;
=== Actual reservation quantity ===&lt;br /&gt;
&lt;br /&gt;
The actual reservation quantity is stored in &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation.QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This property overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and can only be set if the status is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Confirmed&amp;lt;/span&amp;gt; and the new quantity is greater than 0.&lt;br /&gt;
&lt;br /&gt;
=== Quantity overview ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity&lt;br /&gt;
! Property / method&lt;br /&gt;
! Object&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Material quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| Sum of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; of confirmed reservations for the material.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AvailableQuantity()&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; minus &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Planned reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantityPlanned(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Actual reservation quantity&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stored&lt;br /&gt;
| Overrides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement.QUANTITY&amp;lt;/span&amp;gt; and is validated by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AllowQuantity(double)&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reservation workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Creating or editing a reservation ===&lt;br /&gt;
&lt;br /&gt;
A reservation links a material to a task.&lt;br /&gt;
&lt;br /&gt;
For a reservation to define its planned quantity correctly:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt; should point to the task requiring the material.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Status&amp;lt;/span&amp;gt; must still be &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Planned&amp;lt;/span&amp;gt;.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must be greater than 0.&lt;br /&gt;
# &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QTY_PLANNED&amp;lt;/span&amp;gt; must not exceed &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL.AvailableQuantity()&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Confirmed reservations ===&lt;br /&gt;
&lt;br /&gt;
When a reservation is confirmed, it contributes to the material's reserved quantity.&lt;br /&gt;
&lt;br /&gt;
This affects the available quantity of the material because:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 8px 10px; margin: 10px 0;&amp;quot;&amp;gt;&lt;br /&gt;
AvailableQuantity = QUANTITY - sum(QTY_PLANNED of confirmed reservations)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29979</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29979"/>
				<updated>2026-06-18T09:02:41Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations link materials to tasks and define planned or actual quantities for maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with the required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
In a maintenance workflow, users may need to know:&lt;br /&gt;
&lt;br /&gt;
* which material is required for a task&lt;br /&gt;
* which material master data belongs to a material&lt;br /&gt;
* where the material is stored&lt;br /&gt;
* how much material is available&lt;br /&gt;
* how much material is already reserved&lt;br /&gt;
* which reservations exist for a task&lt;br /&gt;
* whether a reservation is planned, confirmed, issued, cancelled, or expired&lt;br /&gt;
&lt;br /&gt;
The material management implementation separates the general material catalogue from the actual material quantity and reservation handling.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
The material management implementation is built around the following main objects:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow / transaction object&lt;br /&gt;
| Represents a material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage master / location object&lt;br /&gt;
| Represents a physical storage location and stores storage-related information such as storage type, dimensions, access type, and occupancy status.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in the MRO stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the base class for material-related quantity-bearing objects.&lt;br /&gt;
&lt;br /&gt;
It defines the common quantity concept used by both:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Quantity value for the goods movement. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, this is the material quantity. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, this is the actual reservation quantity and has reservation-specific validation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
A material master describes the material independently from a concrete reservation or task.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number of the material master.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit of the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure used for the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
The typed material type accessor is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' No explicit SAP or ERP synchronization behavior was found in the inspected classes. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt; may correspond to an external material number, but the exact SAP/ERP mapping is unclear from the available code information.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also exposes calculated reservation and availability logic.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number of the material master.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit of the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure used for the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
The typed material type accessor is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' No explicit SAP or ERP synchronization behavior was found in the inspected classes. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt; may correspond to an external material number, but the exact SAP/ERP mapping is unclear from the available code information.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also exposes calculated reservation and availability logic.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
! Stored or calculated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the material master data.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Link to the storage location where the material is located.&lt;br /&gt;
| Stored link&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Material quantity. Inherited from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RESERVED_QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Sum of planned quantities of confirmed reservations for this material.&lt;br /&gt;
| Calculated property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material status.&lt;br /&gt;
| Stored property&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialStatus&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Stored through &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29976</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29976"/>
				<updated>2026-06-17T14:23:58Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations link materials to tasks and define planned or actual quantities for maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with the required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
In a maintenance workflow, users may need to know:&lt;br /&gt;
&lt;br /&gt;
* which material is required for a task&lt;br /&gt;
* which material master data belongs to a material&lt;br /&gt;
* where the material is stored&lt;br /&gt;
* how much material is available&lt;br /&gt;
* how much material is already reserved&lt;br /&gt;
* which reservations exist for a task&lt;br /&gt;
* whether a reservation is planned, confirmed, issued, cancelled, or expired&lt;br /&gt;
&lt;br /&gt;
The material management implementation separates the general material catalogue from the actual material quantity and reservation handling.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
The material management implementation is built around the following main objects:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow / transaction object&lt;br /&gt;
| Represents a material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage master / location object&lt;br /&gt;
| Represents a physical storage location and stores storage-related information such as storage type, dimensions, access type, and occupancy status.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in the MRO stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Class name&lt;br /&gt;
! Base / inheritance&lt;br /&gt;
! Main relations&lt;br /&gt;
|-&lt;br /&gt;
| Material&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Material Master&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data class&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reservation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_TASK&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Goods Movement&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; to derived objects&lt;br /&gt;
|-&lt;br /&gt;
| Storage Location&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UBIK.MRO.StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Functional location specialization&lt;br /&gt;
| Referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GoodsMovement ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; is the base class for material-related quantity-bearing objects.&lt;br /&gt;
&lt;br /&gt;
It defines the common quantity concept used by both:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Quantity value for the goods movement. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, this is the material quantity. For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, this is the actual reservation quantity and has reservation-specific validation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MaterialMaster ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; represents the material master or catalogue entry.&lt;br /&gt;
&lt;br /&gt;
It stores item-level master data that can be referenced by material instances in MRO.&lt;br /&gt;
&lt;br /&gt;
A material master describes the material independently from a concrete reservation or task.&lt;br /&gt;
&lt;br /&gt;
=== Important properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Type&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Item number or material number of the material master.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_UNIT&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Packaging unit of the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PACKAGING_SIZE&amp;lt;/span&amp;gt;&lt;br /&gt;
| double&lt;br /&gt;
| Packaging size.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ACTIVE&amp;lt;/span&amp;gt;&lt;br /&gt;
| bool&lt;br /&gt;
| Defines whether the material master is active.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;UNIT_OF_MEASURE&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Unit of measure used for the material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;&lt;br /&gt;
| int&lt;br /&gt;
| Underlying integer value for the material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;&lt;br /&gt;
| enum&lt;br /&gt;
| Typed accessor for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MATERIAL_TYPE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_COMPANY_NAME&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MANUFACTURER_PRODUCT_TAG&amp;lt;/span&amp;gt;&lt;br /&gt;
| string&lt;br /&gt;
| Manufacturer product tag or product identifier.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material type ===&lt;br /&gt;
&lt;br /&gt;
The typed material type accessor is &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialType&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Known values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SpareParts&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Consumables&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Tools&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' No explicit SAP or ERP synchronization behavior was found in the inspected classes. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ITEM_NUMBER&amp;lt;/span&amp;gt; may correspond to an external material number, but the exact SAP/ERP mapping is unclear from the available code information.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents a material instance or stock entry in MRO.&lt;br /&gt;
&lt;br /&gt;
It inherits from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt; and therefore uses the inherited &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property as its material quantity.&lt;br /&gt;
&lt;br /&gt;
A material links to:&lt;br /&gt;
&lt;br /&gt;
* a material master via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MATERIAL_MASTER&amp;lt;/span&amp;gt;&lt;br /&gt;
* a storage location via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_STORAGE_LOCATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also exposes calculated reservation and availability logic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29955</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29955"/>
				<updated>2026-06-17T10:02:10Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management features provide the foundation for handling materials, material master data, reservations, storage locations, and goods movements in MRO workflows. The central objects are &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;. Materials are linked to master data and storage locations. Reservations link materials to tasks and define planned or actual quantities for maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with the required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
In a maintenance workflow, users may need to know:&lt;br /&gt;
&lt;br /&gt;
* which material is required for a task&lt;br /&gt;
* which material master data belongs to a material&lt;br /&gt;
* where the material is stored&lt;br /&gt;
* how much material is available&lt;br /&gt;
* how much material is already reserved&lt;br /&gt;
* which reservations exist for a task&lt;br /&gt;
* whether a reservation is planned, confirmed, issued, cancelled, or expired&lt;br /&gt;
&lt;br /&gt;
The material management implementation separates the general material catalogue from the actual material quantity and reservation handling.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
The material management implementation is built around the following main objects:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Type&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt;&lt;br /&gt;
| Master data&lt;br /&gt;
| Defines the catalogue entry for a material, including item number, unit, packaging, manufacturer data, and material type.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Quantity-bearing MRO object&lt;br /&gt;
| Represents a material instance or stock entry in MRO. It links to a material master and a storage location and exposes quantity, reserved quantity, and available quantity logic.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Workflow / transaction object&lt;br /&gt;
| Represents a material reservation for a task. It links a material to a task and stores planned and actual quantities.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GoodsMovement&amp;lt;/span&amp;gt;&lt;br /&gt;
| Base class&lt;br /&gt;
| Provides the common &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;QUANTITY&amp;lt;/span&amp;gt; property used by both materials and reservations.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;StorageLocation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Storage master / location object&lt;br /&gt;
| Represents a physical storage location and stores storage-related information such as storage type, dimensions, access type, and occupancy status.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Core idea:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaterialMaster&amp;lt;/span&amp;gt; defines what the material is. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt; represents the material in the MRO stock or material context. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt; links a material to a task and reserves a planned quantity for maintenance execution.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29941</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29941"/>
				<updated>2026-06-16T12:37:59Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management concept describes how materials are defined, requested, reserved, and used in maintenance workflows. It explains the relationship between material-related objects such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material Master&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, and how these objects are connected to tasks or work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with the required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
In a maintenance workflow, users may need to know:&lt;br /&gt;
&lt;br /&gt;
* which material is required for a task or work package&lt;br /&gt;
* whether the required material is available&lt;br /&gt;
* how much material is required&lt;br /&gt;
* how much material has already been reserved&lt;br /&gt;
* whether the material can be used&lt;br /&gt;
* whether a reservation is still open, fulfilled, or no longer relevant&lt;br /&gt;
&lt;br /&gt;
The material management concept separates the general definition of a material from its actual usage in maintenance work.&lt;br /&gt;
&lt;br /&gt;
A material can be defined centrally as master data and then used in different tasks, work packages, or reservations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29940</id>
		<title>MRO Material Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Material_Management&amp;diff=29940"/>
				<updated>2026-06-16T12:28:34Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: Created page with &amp;quot;{{UnderConstructionStart}} == MRO Material Management ==  &amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt; '''Summary:...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Material Management ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The MRO material management concept describes how materials are defined, requested, reserved, and used in maintenance workflows. It explains the relationship between material-related objects such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material Master&amp;lt;/span&amp;gt;, and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;, and how these objects are connected to tasks or work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MRO material management is used to support maintenance work with the required spare parts, consumables, tools, or other material items.&lt;br /&gt;
&lt;br /&gt;
In a maintenance workflow, users may need to know:&lt;br /&gt;
&lt;br /&gt;
* which material is required for a task or work package&lt;br /&gt;
* whether the required material is available&lt;br /&gt;
* how much material is required&lt;br /&gt;
* how much material has already been reserved&lt;br /&gt;
* whether the material can be used&lt;br /&gt;
* whether a reservation is still open, fulfilled, or no longer relevant&lt;br /&gt;
&lt;br /&gt;
The material management concept separates the general definition of a material from its actual usage in maintenance work.&lt;br /&gt;
&lt;br /&gt;
A material can be defined centrally as master data and then used in different tasks, work packages, or reservations.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
The material management feature is built around the following main concepts:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Purpose&lt;br /&gt;
! Typical usage&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material Master&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the master data of a material.&lt;br /&gt;
| Used as the central reference for material identity, description, unit, and related master data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Represents a material item used in the MRO context.&lt;br /&gt;
| Used to describe material that can be assigned, requested, or consumed in maintenance workflows.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Represents a request or reservation for a certain quantity of material.&lt;br /&gt;
| Used to reserve material for a task, operation, or work package.&lt;br /&gt;
|-&lt;br /&gt;
| Task or Work Package&lt;br /&gt;
| Represents the maintenance work that requires material.&lt;br /&gt;
| Material requirements and reservations are linked to the maintenance execution object.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Note:''' The exact object names, relation names, and property names may differ depending on the MRO configuration. This page describes the concept and should be aligned with the actual implementation before it is published as final technical documentation.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object overview ==&lt;br /&gt;
&lt;br /&gt;
The following simplified overview shows how the material-related objects are typically connected.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Related to&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material Master&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Provides the master data for a material.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Material&amp;lt;/span&amp;gt;&lt;br /&gt;
| Task or Work Package&lt;br /&gt;
| Describes which material is needed or used for the maintenance activity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Reservation&amp;lt;/span&amp;gt;&lt;br /&gt;
| Material and Task or Work Package&lt;br /&gt;
| Reserves a specific quantity of material for a specific maintenance activity.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Material Master ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
The Material Master represents the central master data record for a material.&lt;br /&gt;
&lt;br /&gt;
It describes the material independently from a specific maintenance task or work package.&lt;br /&gt;
&lt;br /&gt;
The Material Master is used to provide consistent information about materials across the MRO system.&lt;br /&gt;
&lt;br /&gt;
This can include, for example:&lt;br /&gt;
&lt;br /&gt;
* material number&lt;br /&gt;
* material name&lt;br /&gt;
* material description&lt;br /&gt;
* base unit of measure&lt;br /&gt;
* material group&lt;br /&gt;
* manufacturer information&lt;br /&gt;
* external ERP or SAP reference&lt;br /&gt;
* default storage or warehouse information&lt;br /&gt;
* default status information&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Concept:''' The Material Master should be understood as the reusable definition of a material. It does not by itself describe that material is required for a specific task. The concrete usage is handled by material assignments, requirements, or reservations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Typical responsibilities ===&lt;br /&gt;
&lt;br /&gt;
The Material Master is typically responsible for:&lt;br /&gt;
&lt;br /&gt;
* identifying a material uniquely&lt;br /&gt;
* providing the default description of the material&lt;br /&gt;
* defining the base unit in which the material is handled&lt;br /&gt;
* providing references to external systems&lt;br /&gt;
* allowing users to select the correct material when planning maintenance work&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
A maintenance team regularly needs a specific oil filter.&lt;br /&gt;
&lt;br /&gt;
The oil filter is defined once as a Material Master.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Example value&lt;br /&gt;
|-&lt;br /&gt;
| Material number&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| Description&lt;br /&gt;
| Standard oil filter for Pump Series A&lt;br /&gt;
|-&lt;br /&gt;
| Base unit&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| Material group&lt;br /&gt;
| Spare Parts&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When a task or work package requires this oil filter, the task does not define the oil filter again from scratch. Instead, it references the existing Material Master or a material object based on it.&lt;br /&gt;
&lt;br /&gt;
== Material ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A Material represents a material item used in MRO workflows.&lt;br /&gt;
&lt;br /&gt;
Depending on the implementation, the Material object may either represent:&lt;br /&gt;
&lt;br /&gt;
* a concrete material based on a Material Master&lt;br /&gt;
* a material requirement assigned to a task or work package&lt;br /&gt;
* a material item available for planning, reservation, or consumption&lt;br /&gt;
&lt;br /&gt;
The Material object is used to bring material information into the maintenance workflow.&lt;br /&gt;
&lt;br /&gt;
=== Relationship to Material Master ===&lt;br /&gt;
&lt;br /&gt;
A Material is typically based on or linked to a Material Master.&lt;br /&gt;
&lt;br /&gt;
The Material Master provides the general definition.&lt;br /&gt;
&lt;br /&gt;
The Material object provides the MRO-specific usage context.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Aspect&lt;br /&gt;
! Material Master&lt;br /&gt;
! Material&lt;br /&gt;
|-&lt;br /&gt;
| Main purpose&lt;br /&gt;
| Defines the material as master data.&lt;br /&gt;
| Uses the material in an MRO context.&lt;br /&gt;
|-&lt;br /&gt;
| Scope&lt;br /&gt;
| General and reusable.&lt;br /&gt;
| Workflow-specific or MRO-specific.&lt;br /&gt;
|-&lt;br /&gt;
| Example&lt;br /&gt;
| Oil Filter Type A.&lt;br /&gt;
| Oil Filter Type A required for Work Package 4711.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Typical material information ===&lt;br /&gt;
&lt;br /&gt;
A Material object may contain or reference information such as:&lt;br /&gt;
&lt;br /&gt;
* material master reference&lt;br /&gt;
* material number&lt;br /&gt;
* name or description&lt;br /&gt;
* required quantity&lt;br /&gt;
* available quantity&lt;br /&gt;
* reserved quantity&lt;br /&gt;
* unit of measure&lt;br /&gt;
* material status&lt;br /&gt;
* storage location or warehouse&lt;br /&gt;
* reference to a task or work package&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Implementation check required:''' This page should be aligned with the actual MRO data model to clarify whether quantity fields are stored directly on the Material object, calculated from related Reservation objects, or received from an external system.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A Reservation represents a request to reserve a specific quantity of material for maintenance work.&lt;br /&gt;
&lt;br /&gt;
It connects material demand with a task, operation, or work package.&lt;br /&gt;
&lt;br /&gt;
A reservation is used when material should be set aside or requested before the maintenance work is executed.&lt;br /&gt;
&lt;br /&gt;
=== Typical reservation information ===&lt;br /&gt;
&lt;br /&gt;
A Reservation usually contains:&lt;br /&gt;
&lt;br /&gt;
* reference to the material&lt;br /&gt;
* reference to the task or work package&lt;br /&gt;
* requested quantity&lt;br /&gt;
* reserved quantity&lt;br /&gt;
* open quantity&lt;br /&gt;
* unit of measure&lt;br /&gt;
* reservation status&lt;br /&gt;
* requested date or required date&lt;br /&gt;
* storage location or warehouse&lt;br /&gt;
* external reservation number, if synchronized with an external system&lt;br /&gt;
&lt;br /&gt;
=== Relationship to tasks or work packages ===&lt;br /&gt;
&lt;br /&gt;
Reservations are created for maintenance work.&lt;br /&gt;
&lt;br /&gt;
Depending on the workflow, a reservation may be linked to:&lt;br /&gt;
&lt;br /&gt;
* a task&lt;br /&gt;
* an operation&lt;br /&gt;
* a work package&lt;br /&gt;
* a work order&lt;br /&gt;
* a work package template, if material requirements are predefined&lt;br /&gt;
&lt;br /&gt;
The reservation allows users to see which material has been requested or reserved for the maintenance activity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Example:''' A work package for pump maintenance requires two oil filters. A reservation is created for quantity 2 of the oil filter material. The maintenance team can then see that the material is required and should be available for the work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Material quantity concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Material quantity ===&lt;br /&gt;
&lt;br /&gt;
Material quantity describes how much of a material is required, available, reserved, or consumed.&lt;br /&gt;
&lt;br /&gt;
The meaning of a quantity depends on the context in which it is used.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quantity concept&lt;br /&gt;
! Meaning&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Required quantity&lt;br /&gt;
| Quantity needed to execute the task or work package.&lt;br /&gt;
| 2 oil filters are needed for pump maintenance.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity&lt;br /&gt;
| Quantity that has already been reserved for the task or work package.&lt;br /&gt;
| 2 oil filters are reserved for the work package.&lt;br /&gt;
|-&lt;br /&gt;
| Available quantity&lt;br /&gt;
| Quantity currently available for use or reservation.&lt;br /&gt;
| 15 oil filters are available in the warehouse.&lt;br /&gt;
|-&lt;br /&gt;
| Consumed quantity&lt;br /&gt;
| Quantity actually used during execution.&lt;br /&gt;
| 1 oil filter was used during the maintenance work.&lt;br /&gt;
|-&lt;br /&gt;
| Open quantity&lt;br /&gt;
| Quantity still missing or not yet reserved.&lt;br /&gt;
| Required quantity 5, reserved quantity 3, open quantity 2.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reserved quantity ===&lt;br /&gt;
&lt;br /&gt;
Reserved quantity describes the amount of material that has been reserved for a task, operation, or work package.&lt;br /&gt;
&lt;br /&gt;
It answers the question:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Question:''' How much of the required material has already been reserved for this maintenance work?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Required quantity&lt;br /&gt;
! Reserved quantity&lt;br /&gt;
! Result&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 0&lt;br /&gt;
| No material has been reserved yet.&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 3&lt;br /&gt;
| The reservation is partially fulfilled.&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
| The required material quantity is fully reserved.&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 7&lt;br /&gt;
| More material is reserved than required. This may require review, depending on the business rules.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Potential issue:''' If the reserved quantity is greater than the required quantity, the case should be checked against the business rules. It may be valid in some workflows, but it can also indicate an incorrect reservation quantity.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Material status ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Material status describes whether a material can currently be used in the maintenance workflow.&lt;br /&gt;
&lt;br /&gt;
The material status can help users understand if a material is available, blocked, obsolete, or otherwise restricted.&lt;br /&gt;
&lt;br /&gt;
=== Typical material statuses ===&lt;br /&gt;
&lt;br /&gt;
The following statuses are examples and must be aligned with the actual MRO implementation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Meaning&lt;br /&gt;
! Effect&lt;br /&gt;
|-&lt;br /&gt;
| Available&lt;br /&gt;
| The material can be used or reserved.&lt;br /&gt;
| Users can select and use the material in maintenance workflows.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved&lt;br /&gt;
| The material or part of its quantity is reserved.&lt;br /&gt;
| The material is already assigned to one or more maintenance activities.&lt;br /&gt;
|-&lt;br /&gt;
| Blocked&lt;br /&gt;
| The material must not be used.&lt;br /&gt;
| Users should not use the material for new reservations or work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Obsolete&lt;br /&gt;
| The material is no longer intended for use.&lt;br /&gt;
| The material should be replaced by another material or removed from active workflows.&lt;br /&gt;
|-&lt;br /&gt;
| Out of stock&lt;br /&gt;
| No available quantity exists.&lt;br /&gt;
| The material cannot be fulfilled until stock is replenished.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Note:''' The exact status values must be taken from the actual MRO status model. This section should not introduce status values that do not exist in the implementation.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reservation status ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Reservation status describes the current state of a material reservation.&lt;br /&gt;
&lt;br /&gt;
It helps users understand whether a reservation is still open, partially fulfilled, fulfilled, cancelled, or completed.&lt;br /&gt;
&lt;br /&gt;
=== Typical reservation statuses ===&lt;br /&gt;
&lt;br /&gt;
The following statuses are examples and must be aligned with the actual MRO implementation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Meaning&lt;br /&gt;
! Typical situation&lt;br /&gt;
|-&lt;br /&gt;
| Open&lt;br /&gt;
| The reservation has been created but not yet fulfilled.&lt;br /&gt;
| Material has been requested, but no quantity has been reserved yet.&lt;br /&gt;
|-&lt;br /&gt;
| Partially Reserved&lt;br /&gt;
| Only part of the required quantity has been reserved.&lt;br /&gt;
| Required quantity is 5, reserved quantity is 3.&lt;br /&gt;
|-&lt;br /&gt;
| Reserved&lt;br /&gt;
| The full required quantity has been reserved.&lt;br /&gt;
| Required quantity is 5, reserved quantity is 5.&lt;br /&gt;
|-&lt;br /&gt;
| Issued&lt;br /&gt;
| The material has been handed out or issued for execution.&lt;br /&gt;
| The maintenance team has received the material.&lt;br /&gt;
|-&lt;br /&gt;
| Consumed&lt;br /&gt;
| The material has been used during execution.&lt;br /&gt;
| The material usage has been confirmed.&lt;br /&gt;
|-&lt;br /&gt;
| Cancelled&lt;br /&gt;
| The reservation is no longer required.&lt;br /&gt;
| The work package was cancelled or the material is no longer needed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Status calculation ===&lt;br /&gt;
&lt;br /&gt;
Depending on the implementation, the reservation status may be:&lt;br /&gt;
&lt;br /&gt;
* set manually by the user&lt;br /&gt;
* calculated from quantity values&lt;br /&gt;
* updated by the system during workflow transitions&lt;br /&gt;
* synchronized from an external ERP or warehouse system&lt;br /&gt;
&lt;br /&gt;
Example status calculation:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Condition&lt;br /&gt;
! Possible reservation status&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity is 0&lt;br /&gt;
| Open&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity is greater than 0 and lower than required quantity&lt;br /&gt;
| Partially Reserved&lt;br /&gt;
|-&lt;br /&gt;
| Reserved quantity is equal to required quantity&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| Reservation was cancelled&lt;br /&gt;
| Cancelled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Implementation check required:''' The final wiki page should document whether reservation status is calculated in MRO, entered manually, or imported from an external system.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage in tasks or work packages ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Tasks and work packages represent maintenance work.&lt;br /&gt;
&lt;br /&gt;
Material management is used to define and track which materials are required for this maintenance work.&lt;br /&gt;
&lt;br /&gt;
Material usage can occur during different phases of the maintenance process.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Phase&lt;br /&gt;
! Material handling&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Planning&lt;br /&gt;
| Required materials are selected and planned.&lt;br /&gt;
| The planner adds two oil filters to the pump maintenance work package.&lt;br /&gt;
|-&lt;br /&gt;
| Preparation&lt;br /&gt;
| Required materials are reserved or requested.&lt;br /&gt;
| A reservation is created for two oil filters.&lt;br /&gt;
|-&lt;br /&gt;
| Execution&lt;br /&gt;
| The maintenance team uses the material.&lt;br /&gt;
| One oil filter is installed during the task.&lt;br /&gt;
|-&lt;br /&gt;
| Completion&lt;br /&gt;
| Actual material usage is confirmed.&lt;br /&gt;
| The consumed quantity is recorded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material requirements on work packages ===&lt;br /&gt;
&lt;br /&gt;
A work package may contain one or more material requirements.&lt;br /&gt;
&lt;br /&gt;
Each material requirement describes which material is needed and in which quantity.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Work package&lt;br /&gt;
! Material&lt;br /&gt;
! Required quantity&lt;br /&gt;
! Unit&lt;br /&gt;
|-&lt;br /&gt;
| Pump Maintenance WP-4711&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
| 2&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| Pump Maintenance WP-4711&lt;br /&gt;
| Lubricating Oil&lt;br /&gt;
| 5&lt;br /&gt;
| Liter&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Material requirements on tasks ===&lt;br /&gt;
&lt;br /&gt;
If material is linked to individual tasks, the material requirement can be more precise.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Task&lt;br /&gt;
! Material&lt;br /&gt;
! Required quantity&lt;br /&gt;
! Unit&lt;br /&gt;
|-&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
| 1&lt;br /&gt;
| Piece&lt;br /&gt;
|-&lt;br /&gt;
| Refill oil&lt;br /&gt;
| Lubricating Oil&lt;br /&gt;
| 5&lt;br /&gt;
| Liter&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This allows the system and users to understand exactly which material is required for each task.&lt;br /&gt;
&lt;br /&gt;
=== Reservations for work packages ===&lt;br /&gt;
&lt;br /&gt;
A reservation may be created for a complete work package.&lt;br /&gt;
&lt;br /&gt;
This is useful when the material should be prepared for the whole maintenance activity.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
A work package contains three tasks.&lt;br /&gt;
&lt;br /&gt;
The planner creates one material reservation for all required material of the work package.&lt;br /&gt;
&lt;br /&gt;
The warehouse prepares the material before the work package starts.&lt;br /&gt;
&lt;br /&gt;
=== Reservations for tasks ===&lt;br /&gt;
&lt;br /&gt;
A reservation may also be created for a specific task.&lt;br /&gt;
&lt;br /&gt;
This is useful when material usage should be tracked at task level.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Task: Replace oil filter&lt;br /&gt;
&lt;br /&gt;
Required material: Oil Filter Type A&lt;br /&gt;
&lt;br /&gt;
Required quantity: 1&lt;br /&gt;
&lt;br /&gt;
Reservation: 1 Oil Filter Type A&lt;br /&gt;
&lt;br /&gt;
== Example workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Scenario ===&lt;br /&gt;
&lt;br /&gt;
A pump requires planned maintenance.&lt;br /&gt;
&lt;br /&gt;
The work package contains one task for replacing an oil filter.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Material Master exists ===&lt;br /&gt;
&lt;br /&gt;
The oil filter is defined as a Material Master.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Material number&lt;br /&gt;
| OF-10045&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
|-&lt;br /&gt;
| Base unit&lt;br /&gt;
| Piece&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Material is assigned to the task ===&lt;br /&gt;
&lt;br /&gt;
The task requires one oil filter.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Task&lt;br /&gt;
! Material&lt;br /&gt;
! Required quantity&lt;br /&gt;
|-&lt;br /&gt;
| Replace oil filter&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Reservation is created ===&lt;br /&gt;
&lt;br /&gt;
A reservation is created for the required material.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reservation&lt;br /&gt;
! Material&lt;br /&gt;
! Required quantity&lt;br /&gt;
! Reserved quantity&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| RES-90001&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Material is used during execution ===&lt;br /&gt;
&lt;br /&gt;
During execution, the oil filter is installed.&lt;br /&gt;
&lt;br /&gt;
The consumed quantity is recorded, if supported by the implementation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Material&lt;br /&gt;
! Reserved quantity&lt;br /&gt;
! Consumed quantity&lt;br /&gt;
! Result&lt;br /&gt;
|-&lt;br /&gt;
| Oil Filter Type A&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| Material was fully used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Work is completed ===&lt;br /&gt;
&lt;br /&gt;
The task or work package is completed.&lt;br /&gt;
&lt;br /&gt;
The material reservation can then be considered completed, consumed, or closed, depending on the workflow.&lt;br /&gt;
&lt;br /&gt;
== Important rules and open implementation points ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The final documentation should be aligned with the real object model. In particular, relation names, property names, status values, and quantity calculation rules should be verified before the page is published.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following information is required to finalize this page precisely:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Topic&lt;br /&gt;
! Required information&lt;br /&gt;
! Why it matters&lt;br /&gt;
|-&lt;br /&gt;
| Object names&lt;br /&gt;
| Exact class names for Material, Material Master, and Reservation.&lt;br /&gt;
| Needed to document the real data model instead of generic concepts.&lt;br /&gt;
|-&lt;br /&gt;
| Relation names&lt;br /&gt;
| Exact relation names between Material, Material Master, Reservation, Task, Work Package, and Work Order.&lt;br /&gt;
| Needed for technical accuracy.&lt;br /&gt;
|-&lt;br /&gt;
| Quantity properties&lt;br /&gt;
| Exact property names for required quantity, reserved quantity, available quantity, consumed quantity, and open quantity.&lt;br /&gt;
| Needed to explain where quantities are stored and how they are calculated.&lt;br /&gt;
|-&lt;br /&gt;
| Status properties&lt;br /&gt;
| Exact property names and allowed values for Material status and Reservation status.&lt;br /&gt;
| Needed to avoid inventing unsupported status values.&lt;br /&gt;
|-&lt;br /&gt;
| Status logic&lt;br /&gt;
| Whether statuses are manual, calculated, workflow-driven, or imported from an external system.&lt;br /&gt;
| Needed to explain system behavior correctly.&lt;br /&gt;
|-&lt;br /&gt;
| ERP integration&lt;br /&gt;
| Whether materials and reservations are synchronized with SAP or another ERP system.&lt;br /&gt;
| Needed to document external references, synchronization rules, and ownership of data.&lt;br /&gt;
|-&lt;br /&gt;
| Usage level&lt;br /&gt;
| Whether material is assigned to tasks, operations, work packages, work orders, or multiple levels.&lt;br /&gt;
| Needed to describe the actual workflow correctly.&lt;br /&gt;
|-&lt;br /&gt;
| Reservation creation&lt;br /&gt;
| Whether reservations are created manually, automatically, from templates, or by an external system.&lt;br /&gt;
| Needed to explain the user workflow and automation.&lt;br /&gt;
|-&lt;br /&gt;
| Consumption handling&lt;br /&gt;
| Whether consumed quantities are recorded in MRO.&lt;br /&gt;
| Needed to document execution and completion behavior.&lt;br /&gt;
|-&lt;br /&gt;
| Validation rules&lt;br /&gt;
| Rules such as required quantity must be greater than 0, reservation cannot exceed available stock, or blocked material cannot be reserved.&lt;br /&gt;
| Needed to document important restrictions and error cases.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29939</id>
		<title>MROMaintenancePlans</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29939"/>
				<updated>2026-06-16T12:18:40Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MRO Maintenance Planning =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The Maintenance Planning feature in MRO is used to plan recurring maintenance work and automatically generate work packages from maintenance plans. The maintenance plan defines the rules. The generated work package is used by users to execute and complete the actual maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
A maintenance plan defines the rules for creating work packages. These rules include:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package belongs to&lt;br /&gt;
* which template work package is used&lt;br /&gt;
* how the template work package is copied&lt;br /&gt;
* how many days before the planned execution date the work package may be generated&lt;br /&gt;
* how future planning dates are calculated&lt;br /&gt;
&lt;br /&gt;
The actual maintenance work is not executed by the maintenance plan itself. The maintenance plan creates work packages. These generated work packages are then used by users to execute and complete the maintenance work.&lt;br /&gt;
&lt;br /&gt;
In MRO, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt; is the abstract base class for maintenance planning. It provides the common foundation for maintenance plans, but it is not intended to be used directly.&lt;br /&gt;
&lt;br /&gt;
The fully implemented maintenance plan types in standard MRO are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Custom maintenance plan types can be implemented by deriving from the abstract &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt; base class. However, the standard MRO maintenance planning feature is based on cyclic maintenance plans and round maintenance plans.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt; support recurrence-based scheduling. This includes planned execution dates, automatic work package generation, calendar-based scheduling, completion-based scheduling, automatic recalculation of scheduling dates, and generation based on due dates.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt; additionally supports maintenance rounds. A round maintenance plan creates one main work package for the round. It can also create additional work packages from child maintenance plans linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;. These additional work packages are assigned to the main round work package.&lt;br /&gt;
&lt;br /&gt;
== Basic Concept ==&lt;br /&gt;
&lt;br /&gt;
The maintenance planning feature is built around four main parts:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Part&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the rules for creating generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Template work package&lt;br /&gt;
| Defines what the generated work package should look like.&lt;br /&gt;
|-&lt;br /&gt;
| Replication configuration&lt;br /&gt;
| Defines how the template work package is copied.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package&lt;br /&gt;
| The actual work package created by the maintenance plan.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maintenance Plan ===&lt;br /&gt;
&lt;br /&gt;
The maintenance plan defines the rules for creating work packages.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package should belong to&lt;br /&gt;
* how many days before the planned execution date the work package may be created&lt;br /&gt;
* which template work package should be used&lt;br /&gt;
* which recurrence pattern should be used&lt;br /&gt;
* whether future dates are calculated calendar-based or completion-based&lt;br /&gt;
&lt;br /&gt;
=== Template Work Package ===&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
It is the source work package that is copied when the maintenance plan creates a new work package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Rule:''' Only work packages with &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ISTEMPLATE&amp;lt;/span&amp;gt; set can be used as template work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Replication Configuration ===&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how referenced objects are handled&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package ===&lt;br /&gt;
&lt;br /&gt;
The generated work package is the actual result created by the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
# A pump has to be inspected every month.&lt;br /&gt;
# A cyclic maintenance plan is created for this pump.&lt;br /&gt;
# The plan is configured with a monthly recurrence, an assigned asset, a template work package, and a replication configuration.&lt;br /&gt;
# When the plan becomes due, the system uses a replication job to create a new work package from the configured template work package.&lt;br /&gt;
# The generated work package is linked back to the maintenance plan via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This link allows the maintenance plan to react when the generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
== MaintenancePlan Base Class ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt; is the abstract base class for maintenance planning in MRO.&lt;br /&gt;
&lt;br /&gt;
It provides the common properties and logic required by maintenance plan implementations.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt; is abstract, users do not create or use this base class directly in the standard MRO feature. Instead, the concrete maintenance plan types are used:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Developers can derive from the abstract base class if a project requires a custom maintenance plan type. In that case, the custom implementation must provide the missing plan-specific behavior.&lt;br /&gt;
&lt;br /&gt;
=== Base Class Properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the asset that requires maintenance.&lt;br /&gt;
| Required for a valid cyclic maintenance plan.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the template work package.&lt;br /&gt;
| The linked work package must have &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ISTEMPLATE&amp;lt;/span&amp;gt; set.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the replication configuration.&lt;br /&gt;
| Required for work package generation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the planned execution date of the next maintenance activity.&lt;br /&gt;
| Used as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; on generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines how many days before &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; the system may create the work package.&lt;br /&gt;
| Does not define the recurrence interval.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
| Calculated by the system.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines whether the maintenance plan is active or inactive.&lt;br /&gt;
| Only active plans are considered for automatic generation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines whether the system is allowed to automatically create work packages.&lt;br /&gt;
| If disabled, the plan does not automatically create work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stores the most recent completion date of a generated work package linked to the maintenance plan.&lt;br /&gt;
| Especially relevant for completion-based scheduling.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PRIORITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| Numeric value that can be used to sort maintenance plans.&lt;br /&gt;
| For round maintenance plans, see also &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; is the link to the asset that requires maintenance.&lt;br /&gt;
&lt;br /&gt;
This can be, for example:&lt;br /&gt;
&lt;br /&gt;
* equipment&lt;br /&gt;
* a functional location&lt;br /&gt;
* another customized maintainable object deriving from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Asset&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to the same asset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Requirement:''' A cyclic maintenance plan requires &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; to be assigned in order to be valid.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; is the link to the template work package.&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
When the maintenance plan creates a work package, the system copies the work package referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The linked work package must be a template work package. This means its &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ISTEMPLATE&amp;lt;/span&amp;gt; property must be set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Requirement:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; must be configured before the maintenance plan can create a work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt; is the link to the replication configuration.&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied into a generated work package.&lt;br /&gt;
&lt;br /&gt;
It can define, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how references are copied&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Requirement:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt; must be configured before the maintenance plan can create a work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; defines the planned execution date of the next maintenance activity.&lt;br /&gt;
&lt;br /&gt;
It answers the question: '''When should the next maintenance work be performed?'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is not necessarily the date on which the work package is created.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this example, the system may create the work package on 12 March, but the generated work package is planned for 15 March.&lt;br /&gt;
&lt;br /&gt;
When a work package is generated, the generated work package receives the maintenance plan’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; as its &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; defines how many days before &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; the system may create the work package.&lt;br /&gt;
&lt;br /&gt;
This is used to create work packages before the actual planned execution date.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Resulting &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Note:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; does not define the recurrence interval. It only defines how early the work package may be generated before the planned execution date.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is calculated by the system.&lt;br /&gt;
&lt;br /&gt;
It defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maintenance planning orchestrator searches for active plans where &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; has been reached.&lt;br /&gt;
&lt;br /&gt;
A plan can be considered for automatic work package generation when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE &amp;lt;= current date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; has not yet been reached, no work package is created.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt; defines whether the maintenance plan is active or inactive.&lt;br /&gt;
&lt;br /&gt;
Only active plans are considered for automatic work package generation. Inactive plans are ignored by the maintenance planning process.&lt;br /&gt;
&lt;br /&gt;
Typical values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows users to temporarily disable a maintenance plan without deleting it.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; defines whether the system is allowed to automatically create work packages from the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; is enabled, the maintenance planning orchestrator can create work packages once the plan is due.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; is disabled, the plan does not automatically create work packages.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; stores the date when the most recent generated work package linked to the maintenance plan was completed.&lt;br /&gt;
&lt;br /&gt;
This property is especially important for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Previous generated work package completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| Next date is calculated from&lt;br /&gt;
| 20 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The system updates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PRIORITY&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PRIORITY&amp;lt;/span&amp;gt; is a numeric value that can be used to sort maintenance plans.&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, there is also a property called &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The exact effect of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; should only be documented after the implementation behavior has been verified.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Work Package Properties Used by Maintenance Planning ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Used on&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Links the generated work package back to the maintenance plan that triggered its creation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the template work package that was used to create the generated work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the asset for which the work package was created.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the planned start date of the generated work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORGA_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Used to determine whether a generated work package is finished.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Assigns additional generated work packages to the main round work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Can be copied from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; to structure or order round work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Can be copied from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; to group round work packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt; is set on generated work packages.&lt;br /&gt;
&lt;br /&gt;
It stores the maintenance plan that triggered the creation of the work package.&lt;br /&gt;
&lt;br /&gt;
This is important because the maintenance plan itself does not directly store a list of generated work packages. Instead, generated work packages reference their source maintenance plan via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This link allows the system to find work packages created from a maintenance plan and to update the maintenance plan when a generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; stores the template work package that was used to create the generated work package.&lt;br /&gt;
&lt;br /&gt;
This allows users and the system to see which template was used as the source.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; stores the asset for which the work package was created.&lt;br /&gt;
&lt;br /&gt;
This is usually copied or assigned based on the maintenance plan’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; stores the planned start date of the generated work package.&lt;br /&gt;
&lt;br /&gt;
When a maintenance plan generates a work package, the system sets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
generated WorkPackage.PLANNED_START = MaintenancePlan.NEXT_DATE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORGA_STATUS&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORGA_STATUS&amp;lt;/span&amp;gt; is used to determine whether a generated work package is finished.&lt;br /&gt;
&lt;br /&gt;
A work package is considered finished when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open work packages are generated work packages linked to the maintenance plan where:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS != 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Generation rule:''' A maintenance plan does not create another work package while it still has an open generated work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt; is used in round maintenance scenarios.&lt;br /&gt;
&lt;br /&gt;
When a round maintenance plan creates a main work package and additional work packages from linked child plans, the additional work packages are assigned to the main round work package via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt; can be copied from the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; relation to generated work packages in a round maintenance scenario.&lt;br /&gt;
&lt;br /&gt;
They can be used to order or group the additional work packages that belong to the generated round work package.&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; is used for recurring maintenance work on an asset.&lt;br /&gt;
&lt;br /&gt;
It is the standard maintenance plan type for maintenance activities that repeat according to a defined recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspect a pump every month&lt;br /&gt;
* service a machine every 6 months&lt;br /&gt;
* check safety equipment every Monday&lt;br /&gt;
* replace a filter every 30 days&lt;br /&gt;
* perform annual maintenance on a functional location&lt;br /&gt;
&lt;br /&gt;
A cyclic maintenance plan uses &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; to define the recurrence. It also uses &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; to define how future dates are calculated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Key concept:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; defines whether the plan follows fixed calendar dates or whether the next date depends on the actual completion date of the previous generated work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
* Calendar-Based&lt;br /&gt;
* Completion-Based&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan Properties ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the recurrence pattern.&lt;br /&gt;
| Must be valid and parseable.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines when the recurrence pattern starts.&lt;br /&gt;
| Used as the start point for recurrence calculation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Optional end date for the recurrence.&lt;br /&gt;
| No further occurrences are generated after this date.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;&lt;br /&gt;
| Limits how many work packages can be created from the plan.&lt;br /&gt;
| Further occurrences stop once the count is reached.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines how &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated.&lt;br /&gt;
| Supports Calendar-Based and Completion-Based scheduling.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; defines the recurrence pattern of a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
It describes how often the maintenance should occur.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FREQ=DAILY&lt;br /&gt;
FREQ=WEEKLY;BYDAY=MO,WE,FR&lt;br /&gt;
FREQ=MONTHLY;BYMONTHDAY=15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system uses &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; to calculate future planned execution dates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Problem:''' If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; is invalid and cannot be parsed, the cyclic maintenance plan is not valid and cannot create work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; defines when the recurrence pattern starts.&lt;br /&gt;
&lt;br /&gt;
The recurrence rule is calculated from this date forward.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 01 January&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Monthly on the 15th&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The system uses these values to determine valid planned execution dates.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; is an optional end date for the recurrence.&lt;br /&gt;
&lt;br /&gt;
If this date is configured, no further occurrences are generated after this date.&lt;br /&gt;
&lt;br /&gt;
This can be used for maintenance plans that should only run until a certain date.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; limits how many work packages can be created from the plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When the number of related generated work packages reaches &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;, the system no longer calculates new occurrences for the plan.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; defines how &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated for a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; is only relevant for concrete maintenance plan types that use recurrence logic, such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Scheduling mode&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Calendar-Based&lt;br /&gt;
| Future dates follow the recurrence pattern defined by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Completion-Based&lt;br /&gt;
| Future dates are calculated from the actual completion date of the previous generated work package.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This property is one of the most important settings because it defines whether future dates follow the calendar or depend on the actual completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
== Calendar-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling is used when maintenance should follow fixed calendar occurrences.&lt;br /&gt;
&lt;br /&gt;
The next planned execution date is calculated according to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; and the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
This means that delays in completing a work package do not automatically shift the whole future schedule.&lt;br /&gt;
&lt;br /&gt;
Use calendar-based scheduling when the maintenance should happen on fixed dates or fixed calendar intervals.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspection every 15th day of the month&lt;br /&gt;
* safety check every Monday&lt;br /&gt;
* yearly inspection every January&lt;br /&gt;
* quarterly maintenance in fixed maintenance windows&lt;br /&gt;
&lt;br /&gt;
=== How Calendar-Based Scheduling Works ===&lt;br /&gt;
&lt;br /&gt;
In calendar-based scheduling, the system calculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; based on the recurrence rule and the relevant dates of existing generated work packages.&lt;br /&gt;
&lt;br /&gt;
The system determines the highest relevant planned or finished date of generated work packages linked to the maintenance plan. Then it uses the recurrence rule to calculate the next valid occurrence after that date.&lt;br /&gt;
&lt;br /&gt;
This means the schedule continues according to the recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
If a work package is completed later than planned, the future schedule does not necessarily move with that completion date.&lt;br /&gt;
&lt;br /&gt;
=== Example: Calendar-Based Scheduling ===&lt;br /&gt;
&lt;br /&gt;
A pump must be inspected on the 15th of every month.&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Plan type&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
| Pump 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Pump Inspection Template&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt;&lt;br /&gt;
| Pump Inspection Replication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calendar-Based&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Monthly on the 15th&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 01 January&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Enabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = 12 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the work package is planned, the system can calculate the next occurrence:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NEXT_DATE = 15 April&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the March work package is completed on 20 March, the next date still follows the monthly recurrence. The next planned execution date remains 15 April.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Result:''' The late completion does not shift the future schedule to 20 April.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Completion-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling is used when the next maintenance date should depend on the actual completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
This means that the interval starts after the work has actually been completed.&lt;br /&gt;
&lt;br /&gt;
Use completion-based scheduling when the maintenance should repeat based on the time since the last completed maintenance activity.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* service every 30 days after the last service&lt;br /&gt;
* inspection 6 months after the previous inspection was completed&lt;br /&gt;
* replacement 90 days after the previous replacement&lt;br /&gt;
* maintenance where a delay should also delay the next cycle&lt;br /&gt;
&lt;br /&gt;
=== How Completion-Based Scheduling Works ===&lt;br /&gt;
&lt;br /&gt;
In completion-based scheduling, the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; after a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
The completion date becomes the basis for the next occurrence.&lt;br /&gt;
&lt;br /&gt;
Planning changes alone do not define the next recurrence in the same way as calendar-based scheduling.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' The plan waits for the generated work package to be completed. Then the system calculates the next date from the completion date.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: Completion-Based Scheduling ===&lt;br /&gt;
&lt;br /&gt;
A machine must be serviced every 30 days after the previous service was completed.&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Plan type&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
| Machine 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Machine Service Template&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt;&lt;br /&gt;
| Machine Service Replication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Every 30 days&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 01 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Enabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = 12 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The work package is completed on 20 March.&lt;br /&gt;
&lt;br /&gt;
Because the plan is completion-based, the system calculates the next date from 20 March.&lt;br /&gt;
&lt;br /&gt;
If the recurrence is every 30 days:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| around 19 April&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| around 16 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Result:''' In this mode, the delay from 15 March to 20 March shifts the future schedule.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Calendar-Based vs Completion-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
The difference is the date that is used as the basis for calculating &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Aspect&lt;br /&gt;
! Calendar-Based&lt;br /&gt;
! Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| Basis for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Recurrence defined by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Actual completion date of the previous generated work package&lt;br /&gt;
|-&lt;br /&gt;
| Effect of late completion&lt;br /&gt;
| Future dates are not automatically shifted&lt;br /&gt;
| Future dates move with the completion date&lt;br /&gt;
|-&lt;br /&gt;
| Typical use case&lt;br /&gt;
| Fixed maintenance windows, fixed calendar intervals, legal or organizational inspection dates&lt;br /&gt;
| Service intervals that depend on the actual last maintenance&lt;br /&gt;
|-&lt;br /&gt;
| Example&lt;br /&gt;
| Planned: 15 March&amp;lt;br /&amp;gt;Completed: 20 March&amp;lt;br /&amp;gt;Next date: 15 April&lt;br /&gt;
| Planned: 15 March&amp;lt;br /&amp;gt;Completed: 20 March&amp;lt;br /&amp;gt;Interval: 30 days&amp;lt;br /&amp;gt;Next date: around 19 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calendar-Based ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling should be used when the maintenance must follow fixed planned dates.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan follows the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; calendar pattern.&lt;br /&gt;
* Future dates are not automatically shifted just because a work package was completed late.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; can be recalculated after planning updates.&lt;br /&gt;
* It is useful for fixed maintenance windows and legally or organizationally fixed inspection dates.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Planned inspection&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| Completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| Next date&lt;br /&gt;
| 15 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The future date stays aligned with the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
=== Completion-Based ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling should be used when the next maintenance interval starts after the previous work was completed.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan waits for completion.&lt;br /&gt;
* The completion date is used as the basis for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
* If the work is completed late, the future schedule moves.&lt;br /&gt;
* It is useful for service intervals that depend on the actual last maintenance.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Planned service&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| Completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| Interval&lt;br /&gt;
| 30 days&lt;br /&gt;
|-&lt;br /&gt;
| Next date&lt;br /&gt;
| around 19 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The future date shifts because the work was completed later.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt; is used for recurring maintenance rounds.&lt;br /&gt;
&lt;br /&gt;
It is a specialized type of cyclic maintenance plan. This means that it also uses &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In addition to the cyclic scheduling logic, a round maintenance plan includes child maintenance plans linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the round maintenance plan is due, the system creates the main work package for the round. Then it creates additional work packages from the child maintenance plans linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important for child plans:''' For the child plans, the system does not care whether they are due, active, auto-created, or whether they have a valid &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;. The round maintenance plan uses the child plans as configuration for the additional work packages that should be created as part of the round.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important configuration on the child plans is their work package generation setup, especially the configured template work package and replication setup.&lt;br /&gt;
&lt;br /&gt;
=== Generated Result ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Round maintenance plan&lt;br /&gt;
| Machine Room Round&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 1&lt;br /&gt;
| Pump 1 Inspection&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 2&lt;br /&gt;
| Pump 2 Inspection&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 3&lt;br /&gt;
| Pump 3 Inspection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Generated main work package:&lt;br /&gt;
&lt;br /&gt;
* Machine Room Round&lt;br /&gt;
&lt;br /&gt;
Additional generated work packages inside the main round work package:&lt;br /&gt;
&lt;br /&gt;
* Pump 1 Inspection&lt;br /&gt;
* Pump 2 Inspection&lt;br /&gt;
* Pump 3 Inspection&lt;br /&gt;
&lt;br /&gt;
The additional work packages are assigned to the main round work package. This allows the result of the round maintenance plan to be structured as one complete maintenance round.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan Properties and Relations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property / relation&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
| Child plans define additional work packages created as part of the round.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Exists on &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Runtime behavior must be verified before documenting further effects.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt;&lt;br /&gt;
| Can exist on the relation between the round plan and a child plan.&lt;br /&gt;
| Can be copied to generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt;&lt;br /&gt;
| Can exist on the relation between the round plan and a child plan.&lt;br /&gt;
| Can be copied to generated work packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
&lt;br /&gt;
The linked child plans define which additional work packages should be generated when the round maintenance plan is due.&lt;br /&gt;
&lt;br /&gt;
When the round plan generates work packages, the system creates:&lt;br /&gt;
&lt;br /&gt;
* one main work package from the round plan’s own &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
* one additional work package for each child maintenance plan linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The child maintenance plans do not need to be due themselves for the round maintenance plan to use them during round generation.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; exists on &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The exact runtime effect of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; should be documented after the implementation behavior has been verified. Until that behavior is confirmed, the wiki should not claim that &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; filters child plans by due date, asset, or priority.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
The relation between the round maintenance plan and a linked child maintenance plan can contain &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the system creates an additional work package from a linked child maintenance plan, these values can be copied to the generated work package.&lt;br /&gt;
&lt;br /&gt;
This can be used to structure, order, or group the additional work packages in the generated round.&lt;br /&gt;
&lt;br /&gt;
== Properties Calculated or Updated by the System ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property / link&lt;br /&gt;
! System behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated or recalculated for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Updated when a generated work package is completed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;&lt;br /&gt;
| Set on generated work packages from the maintenance plan’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Links on generated work packages&lt;br /&gt;
| Required links are set automatically during generation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is calculated by the system from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value is recalculated when:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changes&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; changes&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is recalculated after planning or completion&lt;br /&gt;
* recurrence settings cause a new &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; to be calculated&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; can be calculated or recalculated by the system.&lt;br /&gt;
&lt;br /&gt;
The calculation depends on:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
* related generated work packages&lt;br /&gt;
* planning events&lt;br /&gt;
* completion events&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated from the recurrence pattern and the highest relevant planned or finished date of related generated work packages.&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated from the completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; is updated by the system when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
It stores the latest completion date of a generated work package related to the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
This value is especially relevant for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; on Generated Work Packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package from a maintenance plan, it sets the generated work package’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; to the maintenance plan’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MaintenancePlan.NEXT_DATE: 15 March&lt;br /&gt;
Generated WorkPackage.PLANNED_START: 15 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links on Generated Work Packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package, it automatically sets the required links on the generated work package.&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to:&lt;br /&gt;
&lt;br /&gt;
* the source maintenance plan via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt;&lt;br /&gt;
* the template work package via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the assigned asset via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, additional generated work packages from linked child maintenance plans are assigned to the main round work package via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Properties and Events That Trigger Recalculation ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Trigger&lt;br /&gt;
! Recalculation behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; based on the new recurrence rule and selected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates the schedule and may change &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Checks whether future occurrences are still available.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; according to the selected scheduling mode.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Notifies the linked maintenance plan and may trigger date recalculation.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package completed&lt;br /&gt;
| Updates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; and recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; according to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changes, the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; changes, the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; changes, the recurrence pattern changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; based on the new recurrence rule and the selected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is recalculated, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; changes, the start point of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates the schedule. This can change &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changes, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; changes, the end boundary of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system checks whether future occurrences are still available.&lt;br /&gt;
&lt;br /&gt;
If no further occurrence is possible because of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt;, the system cannot calculate a new &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; changes, the system checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
&lt;br /&gt;
If the number of related generated work packages is greater than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;, the system does not calculate further occurrences.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; changes, the logic for calculating future dates changes.&lt;br /&gt;
&lt;br /&gt;
Changing to Calendar-Based means that the plan follows the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
Changing to Completion-Based means that the plan calculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; from the completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
Because this changes the calculation logic, the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; according to the selected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changes, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; of a generated work package is set or changed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
For calendar-based cyclic maintenance plans, this can trigger recalculation of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;. The system uses the planning information to continue the calendar-based recurrence.&lt;br /&gt;
&lt;br /&gt;
For completion-based cyclic maintenance plans, a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; change does not drive the recurrence in the same way. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is mainly calculated after the work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package Completed ===&lt;br /&gt;
&lt;br /&gt;
When a generated work package is completed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
A work package is considered completed when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system updates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt;. Then the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; according to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the system continues according to the calendar recurrence&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated from the recurrence pattern and relevant planned or finished dates&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the completion date becomes the basis for the next occurrence&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated from the completion date&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is updated, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is recalculated.&lt;br /&gt;
&lt;br /&gt;
== Work Package Generation Logic ==&lt;br /&gt;
&lt;br /&gt;
=== When Is a Plan Ready to Create a Work Package? ===&lt;br /&gt;
&lt;br /&gt;
A cyclic or round maintenance plan can create a work package only if all required conditions are fulfilled.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Requirement&lt;br /&gt;
! Condition&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Plan validity&lt;br /&gt;
| The plan must be valid.&lt;br /&gt;
| For cyclic maintenance plans, this requires a valid &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;, assigned &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;, and available &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Plan status&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS == Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inactive plans are ignored.&lt;br /&gt;
|-&lt;br /&gt;
| Automatic generation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; must be enabled.&lt;br /&gt;
| If disabled, the plan does not automatically create work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Template work package&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
| The linked work package must be a template work package.&lt;br /&gt;
|-&lt;br /&gt;
| Replication configuration&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
| Required to copy the template work package.&lt;br /&gt;
|-&lt;br /&gt;
| Earliest generation date&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE &amp;lt;= current date&amp;lt;/span&amp;gt;&lt;br /&gt;
| The plan may only generate once the earliest generation date has been reached.&lt;br /&gt;
|-&lt;br /&gt;
| Open work packages&lt;br /&gt;
| No open generated work package may exist for the plan.&lt;br /&gt;
| There must be no generated work package linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt; where &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORGA_STATUS != 100&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Generation rule:''' The open work package check prevents the system from creating multiple open work packages for the same maintenance plan.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Round Work Package Generation ==&lt;br /&gt;
&lt;br /&gt;
A round maintenance plan creates a main work package for the round.&lt;br /&gt;
&lt;br /&gt;
After the main work package has been created, the system processes the maintenance plans linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For each linked child maintenance plan, the system creates an additional work package.&lt;br /&gt;
&lt;br /&gt;
These additional generated work packages are assigned to the main round work package via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For child plans used in a round, the system does not care whether the child plan:&lt;br /&gt;
&lt;br /&gt;
* has &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS == Active&amp;lt;/span&amp;gt;&lt;br /&gt;
* has &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE == true&amp;lt;/span&amp;gt;&lt;br /&gt;
* has a valid &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
* has a valid &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
* is due based on its own &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Rule:''' The round plan controls the timing. The child plans define what additional work packages should be created as part of the round.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29932</id>
		<title>MROMaintenancePlans</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29932"/>
				<updated>2026-06-16T07:30:36Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
= MRO Maintenance Planning =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The Maintenance Planning feature in MRO is used to plan recurring maintenance work and automatically generate work packages from maintenance plans. The maintenance plan defines the rules. The generated work package is used by users to execute and complete the actual maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
A maintenance plan defines the rules for creating work packages. These rules include:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package belongs to&lt;br /&gt;
* which template work package is used&lt;br /&gt;
* how the template work package is copied&lt;br /&gt;
* how many days before the planned execution date the work package may be generated&lt;br /&gt;
* how future planning dates are calculated&lt;br /&gt;
&lt;br /&gt;
The actual maintenance work is not executed by the maintenance plan itself. The maintenance plan creates work packages. These generated work packages are then used by users to execute and complete the maintenance work.&lt;br /&gt;
&lt;br /&gt;
In MRO, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt; is the abstract base class for maintenance planning. It provides the common foundation for maintenance plans, but it is not intended to be used directly.&lt;br /&gt;
&lt;br /&gt;
The fully implemented maintenance plan types in standard MRO are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Custom maintenance plan types can be implemented by deriving from the abstract &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt; base class. However, the standard MRO maintenance planning feature is based on cyclic maintenance plans and round maintenance plans.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt; support recurrence-based scheduling. This includes planned execution dates, automatic work package generation, calendar-based scheduling, completion-based scheduling, automatic recalculation of scheduling dates, and generation based on due dates.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt; additionally supports maintenance rounds. A round maintenance plan creates one main work package for the round. It can also create additional work packages from child maintenance plans linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;. These additional work packages are assigned to the main round work package.&lt;br /&gt;
&lt;br /&gt;
== Basic Concept ==&lt;br /&gt;
&lt;br /&gt;
The maintenance planning feature is built around four main parts:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Part&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the rules for creating generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Template work package&lt;br /&gt;
| Defines what the generated work package should look like.&lt;br /&gt;
|-&lt;br /&gt;
| Replication configuration&lt;br /&gt;
| Defines how the template work package is copied.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package&lt;br /&gt;
| The actual work package created by the maintenance plan.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maintenance Plan ===&lt;br /&gt;
&lt;br /&gt;
The maintenance plan defines the rules for creating work packages.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package should belong to&lt;br /&gt;
* how many days before the planned execution date the work package may be created&lt;br /&gt;
* which template work package should be used&lt;br /&gt;
* which recurrence pattern should be used&lt;br /&gt;
* whether future dates are calculated calendar-based or completion-based&lt;br /&gt;
&lt;br /&gt;
=== Template Work Package ===&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
It is the source work package that is copied when the maintenance plan creates a new work package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Rule:''' Only work packages with &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ISTEMPLATE&amp;lt;/span&amp;gt; set can be used as template work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Replication Configuration ===&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how referenced objects are handled&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package ===&lt;br /&gt;
&lt;br /&gt;
The generated work package is the actual result created by the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
# A pump has to be inspected every month.&lt;br /&gt;
# A cyclic maintenance plan is created for this pump.&lt;br /&gt;
# The plan is configured with a monthly recurrence, an assigned asset, a template work package, and a replication configuration.&lt;br /&gt;
# When the plan becomes due, the system uses a replication job to create a new work package from the configured template work package.&lt;br /&gt;
# The generated work package is linked back to the maintenance plan via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This link allows the maintenance plan to react when the generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
== MaintenancePlan Base Class ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt; is the abstract base class for maintenance planning in MRO.&lt;br /&gt;
&lt;br /&gt;
It provides the common properties and logic required by maintenance plan implementations.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;MaintenancePlan&amp;lt;/span&amp;gt; is abstract, users do not create or use this base class directly in the standard MRO feature. Instead, the concrete maintenance plan types are used:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Developers can derive from the abstract base class if a project requires a custom maintenance plan type. In that case, the custom implementation must provide the missing plan-specific behavior.&lt;br /&gt;
&lt;br /&gt;
=== Base Class Properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the asset that requires maintenance.&lt;br /&gt;
| Required for a valid cyclic maintenance plan.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the template work package.&lt;br /&gt;
| The linked work package must have &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ISTEMPLATE&amp;lt;/span&amp;gt; set.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the replication configuration.&lt;br /&gt;
| Required for work package generation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the planned execution date of the next maintenance activity.&lt;br /&gt;
| Used as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; on generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines how many days before &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; the system may create the work package.&lt;br /&gt;
| Does not define the recurrence interval.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
| Calculated by the system.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines whether the maintenance plan is active or inactive.&lt;br /&gt;
| Only active plans are considered for automatic generation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines whether the system is allowed to automatically create work packages.&lt;br /&gt;
| If disabled, the plan does not automatically create work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Stores the most recent completion date of a generated work package linked to the maintenance plan.&lt;br /&gt;
| Especially relevant for completion-based scheduling.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PRIORITY&amp;lt;/span&amp;gt;&lt;br /&gt;
| Numeric value that can be used to sort maintenance plans.&lt;br /&gt;
| For round maintenance plans, see also &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; is the link to the asset that requires maintenance.&lt;br /&gt;
&lt;br /&gt;
This can be, for example:&lt;br /&gt;
&lt;br /&gt;
* equipment&lt;br /&gt;
* a functional location&lt;br /&gt;
* another customized maintainable object deriving from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Asset&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to the same asset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Requirement:''' A cyclic maintenance plan requires &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; to be assigned in order to be valid.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; is the link to the template work package.&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
When the maintenance plan creates a work package, the system copies the work package referenced by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The linked work package must be a template work package. This means its &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ISTEMPLATE&amp;lt;/span&amp;gt; property must be set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Requirement:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; must be configured before the maintenance plan can create a work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt; is the link to the replication configuration.&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied into a generated work package.&lt;br /&gt;
&lt;br /&gt;
It can define, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how references are copied&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Requirement:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt; must be configured before the maintenance plan can create a work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; defines the planned execution date of the next maintenance activity.&lt;br /&gt;
&lt;br /&gt;
It answers the question: '''When should the next maintenance work be performed?'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is not necessarily the date on which the work package is created.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this example, the system may create the work package on 12 March, but the generated work package is planned for 15 March.&lt;br /&gt;
&lt;br /&gt;
When a work package is generated, the generated work package receives the maintenance plan’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; as its &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; defines how many days before &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; the system may create the work package.&lt;br /&gt;
&lt;br /&gt;
This is used to create work packages before the actual planned execution date.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Resulting &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Note:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; does not define the recurrence interval. It only defines how early the work package may be generated before the planned execution date.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is calculated by the system.&lt;br /&gt;
&lt;br /&gt;
It defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maintenance planning orchestrator searches for active plans where &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; has been reached.&lt;br /&gt;
&lt;br /&gt;
A plan can be considered for automatic work package generation when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE &amp;lt;= current date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; has not yet been reached, no work package is created.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt; defines whether the maintenance plan is active or inactive.&lt;br /&gt;
&lt;br /&gt;
Only active plans are considered for automatic work package generation. Inactive plans are ignored by the maintenance planning process.&lt;br /&gt;
&lt;br /&gt;
Typical values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Inactive&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows users to temporarily disable a maintenance plan without deleting it.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; defines whether the system is allowed to automatically create work packages from the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; is enabled, the maintenance planning orchestrator can create work packages once the plan is due.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; is disabled, the plan does not automatically create work packages.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; stores the date when the most recent generated work package linked to the maintenance plan was completed.&lt;br /&gt;
&lt;br /&gt;
This property is especially important for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Previous generated work package completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| Next date is calculated from&lt;br /&gt;
| 20 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The system updates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PRIORITY&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PRIORITY&amp;lt;/span&amp;gt; is a numeric value that can be used to sort maintenance plans.&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, there is also a property called &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The exact effect of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; should only be documented after the implementation behavior has been verified.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Work Package Properties Used by Maintenance Planning ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Used on&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Links the generated work package back to the maintenance plan that triggered its creation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the template work package that was used to create the generated work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the asset for which the work package was created.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the planned start date of the generated work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORGA_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Used to determine whether a generated work package is finished.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Assigns additional generated work packages to the main round work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Can be copied from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; to structure or order round work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Can be copied from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; to group round work packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt; is set on generated work packages.&lt;br /&gt;
&lt;br /&gt;
It stores the maintenance plan that triggered the creation of the work package.&lt;br /&gt;
&lt;br /&gt;
This is important because the maintenance plan itself does not directly store a list of generated work packages. Instead, generated work packages reference their source maintenance plan via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This link allows the system to find work packages created from a maintenance plan and to update the maintenance plan when a generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; stores the template work package that was used to create the generated work package.&lt;br /&gt;
&lt;br /&gt;
This allows users and the system to see which template was used as the source.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt; stores the asset for which the work package was created.&lt;br /&gt;
&lt;br /&gt;
This is usually copied or assigned based on the maintenance plan’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; stores the planned start date of the generated work package.&lt;br /&gt;
&lt;br /&gt;
When a maintenance plan generates a work package, the system sets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
generated WorkPackage.PLANNED_START = MaintenancePlan.NEXT_DATE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORGA_STATUS&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORGA_STATUS&amp;lt;/span&amp;gt; is used to determine whether a generated work package is finished.&lt;br /&gt;
&lt;br /&gt;
A work package is considered finished when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open work packages are generated work packages linked to the maintenance plan where:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS != 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Generation rule:''' A maintenance plan does not create another work package while it still has an open generated work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt; is used in round maintenance scenarios.&lt;br /&gt;
&lt;br /&gt;
When a round maintenance plan creates a main work package and additional work packages from linked child plans, the additional work packages are assigned to the main round work package via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt; can be copied from the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; relation to generated work packages in a round maintenance scenario.&lt;br /&gt;
&lt;br /&gt;
They can be used to order or group the additional work packages that belong to the generated round work package.&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; is used for recurring maintenance work on an asset.&lt;br /&gt;
&lt;br /&gt;
It is the standard maintenance plan type for maintenance activities that repeat according to a defined recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspect a pump every month&lt;br /&gt;
* service a machine every 6 months&lt;br /&gt;
* check safety equipment every Monday&lt;br /&gt;
* replace a filter every 30 days&lt;br /&gt;
* perform annual maintenance on a functional location&lt;br /&gt;
&lt;br /&gt;
A cyclic maintenance plan uses &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; to define the recurrence. It also uses &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; to define how future dates are calculated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Key concept:''' &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; defines whether the plan follows fixed calendar dates or whether the next date depends on the actual completion date of the previous generated work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
* Calendar-Based&lt;br /&gt;
* Completion-Based&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan Properties ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines the recurrence pattern.&lt;br /&gt;
| Must be valid and parseable.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines when the recurrence pattern starts.&lt;br /&gt;
| Used as the start point for recurrence calculation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Optional end date for the recurrence.&lt;br /&gt;
| No further occurrences are generated after this date.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;&lt;br /&gt;
| Limits how many work packages can be created from the plan.&lt;br /&gt;
| Further occurrences stop once the count is reached.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Defines how &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated.&lt;br /&gt;
| Supports Calendar-Based and Completion-Based scheduling.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; defines the recurrence pattern of a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
It describes how often the maintenance should occur.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FREQ=DAILY&lt;br /&gt;
FREQ=WEEKLY;BYDAY=MO,WE,FR&lt;br /&gt;
FREQ=MONTHLY;BYMONTHDAY=15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system uses &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; to calculate future planned execution dates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Problem:''' If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; is invalid and cannot be parsed, the cyclic maintenance plan is not valid and cannot create work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; defines when the recurrence pattern starts.&lt;br /&gt;
&lt;br /&gt;
The recurrence rule is calculated from this date forward.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 01 January&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Monthly on the 15th&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The system uses these values to determine valid planned execution dates.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; is an optional end date for the recurrence.&lt;br /&gt;
&lt;br /&gt;
If this date is configured, no further occurrences are generated after this date.&lt;br /&gt;
&lt;br /&gt;
This can be used for maintenance plans that should only run until a certain date.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; limits how many work packages can be created from the plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When the number of related generated work packages reaches &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;, the system no longer calculates new occurrences for the plan.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; defines how &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated for a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; is only relevant for concrete maintenance plan types that use recurrence logic, such as &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Scheduling mode&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Calendar-Based&lt;br /&gt;
| Future dates follow the recurrence pattern defined by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Completion-Based&lt;br /&gt;
| Future dates are calculated from the actual completion date of the previous generated work package.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This property is one of the most important settings because it defines whether future dates follow the calendar or depend on the actual completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
== Calendar-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling is used when maintenance should follow fixed calendar occurrences.&lt;br /&gt;
&lt;br /&gt;
The next planned execution date is calculated according to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; and the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
This means that delays in completing a work package do not automatically shift the whole future schedule.&lt;br /&gt;
&lt;br /&gt;
Use calendar-based scheduling when the maintenance should happen on fixed dates or fixed calendar intervals.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspection every 15th day of the month&lt;br /&gt;
* safety check every Monday&lt;br /&gt;
* yearly inspection every January&lt;br /&gt;
* quarterly maintenance in fixed maintenance windows&lt;br /&gt;
&lt;br /&gt;
=== How Calendar-Based Scheduling Works ===&lt;br /&gt;
&lt;br /&gt;
In calendar-based scheduling, the system calculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; based on the recurrence rule and the relevant dates of existing generated work packages.&lt;br /&gt;
&lt;br /&gt;
The system determines the highest relevant planned or finished date of generated work packages linked to the maintenance plan. Then it uses the recurrence rule to calculate the next valid occurrence after that date.&lt;br /&gt;
&lt;br /&gt;
This means the schedule continues according to the recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
If a work package is completed later than planned, the future schedule does not necessarily move with that completion date.&lt;br /&gt;
&lt;br /&gt;
=== Example: Calendar-Based Scheduling ===&lt;br /&gt;
&lt;br /&gt;
A pump must be inspected on the 15th of every month.&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Plan type&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
| Pump 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Pump Inspection Template&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt;&lt;br /&gt;
| Pump Inspection Replication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calendar-Based&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Monthly on the 15th&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 01 January&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Enabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = 12 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the work package is planned, the system can calculate the next occurrence:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NEXT_DATE = 15 April&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the March work package is completed on 20 March, the next date still follows the monthly recurrence. The next planned execution date remains 15 April.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Result:''' The late completion does not shift the future schedule to 20 April.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Completion-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling is used when the next maintenance date should depend on the actual completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
This means that the interval starts after the work has actually been completed.&lt;br /&gt;
&lt;br /&gt;
Use completion-based scheduling when the maintenance should repeat based on the time since the last completed maintenance activity.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* service every 30 days after the last service&lt;br /&gt;
* inspection 6 months after the previous inspection was completed&lt;br /&gt;
* replacement 90 days after the previous replacement&lt;br /&gt;
* maintenance where a delay should also delay the next cycle&lt;br /&gt;
&lt;br /&gt;
=== How Completion-Based Scheduling Works ===&lt;br /&gt;
&lt;br /&gt;
In completion-based scheduling, the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; after a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
The completion date becomes the basis for the next occurrence.&lt;br /&gt;
&lt;br /&gt;
Planning changes alone do not define the next recurrence in the same way as calendar-based scheduling.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' The plan waits for the generated work package to be completed. Then the system calculates the next date from the completion date.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: Completion-Based Scheduling ===&lt;br /&gt;
&lt;br /&gt;
A machine must be serviced every 30 days after the previous service was completed.&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Plan type&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
| Machine 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
| Machine Service Template&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt;&lt;br /&gt;
| Machine Service Replication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Every 30 days&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 01 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS&amp;lt;/span&amp;gt;&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Enabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = 12 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The work package is completed on 20 March.&lt;br /&gt;
&lt;br /&gt;
Because the plan is completion-based, the system calculates the next date from 20 March.&lt;br /&gt;
&lt;br /&gt;
If the recurrence is every 30 days:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| around 19 April&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| around 16 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Result:''' In this mode, the delay from 15 March to 20 March shifts the future schedule.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Calendar-Based vs Completion-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
The difference is the date that is used as the basis for calculating &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Aspect&lt;br /&gt;
! Calendar-Based&lt;br /&gt;
! Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| Basis for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Recurrence defined by &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Actual completion date of the previous generated work package&lt;br /&gt;
|-&lt;br /&gt;
| Effect of late completion&lt;br /&gt;
| Future dates are not automatically shifted&lt;br /&gt;
| Future dates move with the completion date&lt;br /&gt;
|-&lt;br /&gt;
| Typical use case&lt;br /&gt;
| Fixed maintenance windows, fixed calendar intervals, legal or organizational inspection dates&lt;br /&gt;
| Service intervals that depend on the actual last maintenance&lt;br /&gt;
|-&lt;br /&gt;
| Example&lt;br /&gt;
| Planned: 15 March&amp;lt;br /&amp;gt;Completed: 20 March&amp;lt;br /&amp;gt;Next date: 15 April&lt;br /&gt;
| Planned: 15 March&amp;lt;br /&amp;gt;Completed: 20 March&amp;lt;br /&amp;gt;Interval: 30 days&amp;lt;br /&amp;gt;Next date: around 19 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calendar-Based ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling should be used when the maintenance must follow fixed planned dates.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan follows the &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; calendar pattern.&lt;br /&gt;
* Future dates are not automatically shifted just because a work package was completed late.&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; can be recalculated after planning updates.&lt;br /&gt;
* It is useful for fixed maintenance windows and legally or organizationally fixed inspection dates.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Planned inspection&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| Completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| Next date&lt;br /&gt;
| 15 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The future date stays aligned with the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
=== Completion-Based ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling should be used when the next maintenance interval starts after the previous work was completed.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan waits for completion.&lt;br /&gt;
* The completion date is used as the basis for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
* If the work is completed late, the future schedule moves.&lt;br /&gt;
* It is useful for service intervals that depend on the actual last maintenance.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Planned service&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| Completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| Interval&lt;br /&gt;
| 30 days&lt;br /&gt;
|-&lt;br /&gt;
| Next date&lt;br /&gt;
| around 19 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The future date shifts because the work was completed later.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt; is used for recurring maintenance rounds.&lt;br /&gt;
&lt;br /&gt;
It is a specialized type of cyclic maintenance plan. This means that it also uses &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In addition to the cyclic scheduling logic, a round maintenance plan includes child maintenance plans linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the round maintenance plan is due, the system creates the main work package for the round. Then it creates additional work packages from the child maintenance plans linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important for child plans:''' For the child plans, the system does not care whether they are due, active, auto-created, or whether they have a valid &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;. The round maintenance plan uses the child plans as configuration for the additional work packages that should be created as part of the round.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important configuration on the child plans is their work package generation setup, especially the configured template work package and replication setup.&lt;br /&gt;
&lt;br /&gt;
=== Generated Result ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Round maintenance plan&lt;br /&gt;
| Machine Room Round&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 1&lt;br /&gt;
| Pump 1 Inspection&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 2&lt;br /&gt;
| Pump 2 Inspection&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 3&lt;br /&gt;
| Pump 3 Inspection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Generated main work package:&lt;br /&gt;
&lt;br /&gt;
* Machine Room Round&lt;br /&gt;
&lt;br /&gt;
Additional generated work packages inside the main round work package:&lt;br /&gt;
&lt;br /&gt;
* Pump 1 Inspection&lt;br /&gt;
* Pump 2 Inspection&lt;br /&gt;
* Pump 3 Inspection&lt;br /&gt;
&lt;br /&gt;
The additional work packages are assigned to the main round work package. This allows the result of the round maintenance plan to be structured as one complete maintenance round.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan Properties and Relations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property / relation&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;&lt;br /&gt;
| Links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
| Child plans define additional work packages created as part of the round.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Exists on &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;.&lt;br /&gt;
| Runtime behavior must be verified before documenting further effects.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt;&lt;br /&gt;
| Can exist on the relation between the round plan and a child plan.&lt;br /&gt;
| Can be copied to generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt;&lt;br /&gt;
| Can exist on the relation between the round plan and a child plan.&lt;br /&gt;
| Can be copied to generated work packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt; links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
&lt;br /&gt;
The linked child plans define which additional work packages should be generated when the round maintenance plan is due.&lt;br /&gt;
&lt;br /&gt;
When the round plan generates work packages, the system creates:&lt;br /&gt;
&lt;br /&gt;
* one main work package from the round plan’s own &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
* one additional work package for each child maintenance plan linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The child maintenance plans do not need to be due themselves for the round maintenance plan to use them during round generation.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; exists on &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The exact runtime effect of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; should be documented after the implementation behavior has been verified. Until that behavior is confirmed, the wiki should not claim that &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_SELECTION_RULE&amp;lt;/span&amp;gt; filters child plans by due date, asset, or priority.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
The relation between the round maintenance plan and a linked child maintenance plan can contain &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORDERID&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;GROUPID&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the system creates an additional work package from a linked child maintenance plan, these values can be copied to the generated work package.&lt;br /&gt;
&lt;br /&gt;
This can be used to structure, order, or group the additional work packages in the generated round.&lt;br /&gt;
&lt;br /&gt;
== Properties Calculated or Updated by the System ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property / link&lt;br /&gt;
! System behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Calculated or recalculated for &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
| Updated when a generated work package is completed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt;&lt;br /&gt;
| Set on generated work packages from the maintenance plan’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Links on generated work packages&lt;br /&gt;
| Required links are set automatically during generation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is calculated by the system from &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value is recalculated when:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changes&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; changes&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is recalculated after planning or completion&lt;br /&gt;
* recurrence settings cause a new &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; to be calculated&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;CyclicMaintenancePlan&amp;lt;/span&amp;gt; and &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RoundMaintenancePlan&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; can be calculated or recalculated by the system.&lt;br /&gt;
&lt;br /&gt;
The calculation depends on:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;&lt;br /&gt;
* related generated work packages&lt;br /&gt;
* planning events&lt;br /&gt;
* completion events&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated from the recurrence pattern and the highest relevant planned or finished date of related generated work packages.&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated from the completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; is updated by the system when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
It stores the latest completion date of a generated work package related to the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
This value is especially relevant for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; on Generated Work Packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package from a maintenance plan, it sets the generated work package’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; to the maintenance plan’s &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MaintenancePlan.NEXT_DATE: 15 March&lt;br /&gt;
Generated WorkPackage.PLANNED_START: 15 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links on Generated Work Packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package, it automatically sets the required links on the generated work package.&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to:&lt;br /&gt;
&lt;br /&gt;
* the source maintenance plan via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt;&lt;br /&gt;
* the template work package via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt;&lt;br /&gt;
* the assigned asset via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, additional generated work packages from linked child maintenance plans are assigned to the main round work package via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Properties and Events That Trigger Recalculation ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Trigger&lt;br /&gt;
! Recalculation behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; based on the new recurrence rule and selected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates the schedule and may change &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Checks whether future occurrences are still available.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; according to the selected scheduling mode.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; changed&lt;br /&gt;
| Notifies the linked maintenance plan and may trigger date recalculation.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package completed&lt;br /&gt;
| Updates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt; and recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; according to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changes, the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LEAD_DAYS&amp;lt;/span&amp;gt; changes, the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt; changes, the recurrence pattern changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; based on the new recurrence rule and the selected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is recalculated, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_START_DATE&amp;lt;/span&amp;gt; changes, the start point of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates the schedule. This can change &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changes, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt; changes, the end boundary of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system checks whether future occurrences are still available.&lt;br /&gt;
&lt;br /&gt;
If no further occurrence is possible because of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_UNTIL_DATE&amp;lt;/span&amp;gt;, the system cannot calculate a new &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt; changes, the system checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
&lt;br /&gt;
If the number of related generated work packages is greater than or equal to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE_COUNT&amp;lt;/span&amp;gt;, the system does not calculate further occurrences.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt; changes, the logic for calculating future dates changes.&lt;br /&gt;
&lt;br /&gt;
Changing to Calendar-Based means that the plan follows the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
Changing to Completion-Based means that the plan calculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; from the completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
Because this changes the calculation logic, the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; according to the selected &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; changes, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; of a generated work package is set or changed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
For calendar-based cyclic maintenance plans, this can trigger recalculation of &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;. The system uses the planning information to continue the calendar-based recurrence.&lt;br /&gt;
&lt;br /&gt;
For completion-based cyclic maintenance plans, a &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLANNED_START&amp;lt;/span&amp;gt; change does not drive the recurrence in the same way. &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is mainly calculated after the work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package Completed ===&lt;br /&gt;
&lt;br /&gt;
When a generated work package is completed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
A work package is considered completed when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system updates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LAST_DATE&amp;lt;/span&amp;gt;. Then the system recalculates &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; according to &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SCHEDULING_MODE&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the system continues according to the calendar recurrence&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated from the recurrence pattern and relevant planned or finished dates&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the completion date becomes the basis for the next occurrence&lt;br /&gt;
* &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is calculated from the completion date&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt; is updated, &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt; is recalculated.&lt;br /&gt;
&lt;br /&gt;
== Work Package Generation Logic ==&lt;br /&gt;
&lt;br /&gt;
=== When Is a Plan Ready to Create a Work Package? ===&lt;br /&gt;
&lt;br /&gt;
A cyclic or round maintenance plan can create a work package only if all required conditions are fulfilled.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Requirement&lt;br /&gt;
! Condition&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Plan validity&lt;br /&gt;
| The plan must be valid.&lt;br /&gt;
| For cyclic maintenance plans, this requires a valid &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;, assigned &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_ASSET&amp;lt;/span&amp;gt;, and available &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Plan status&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS == Active&amp;lt;/span&amp;gt;&lt;br /&gt;
| Inactive plans are ignored.&lt;br /&gt;
|-&lt;br /&gt;
| Automatic generation&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE&amp;lt;/span&amp;gt; must be enabled.&lt;br /&gt;
| If disabled, the plan does not automatically create work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Template work package&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_WP_TMPL&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
| The linked work package must be a template work package.&lt;br /&gt;
|-&lt;br /&gt;
| Replication configuration&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/span&amp;gt; must be set.&lt;br /&gt;
| Required to copy the template work package.&lt;br /&gt;
|-&lt;br /&gt;
| Earliest generation date&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE &amp;lt;= current date&amp;lt;/span&amp;gt;&lt;br /&gt;
| The plan may only generate once the earliest generation date has been reached.&lt;br /&gt;
|-&lt;br /&gt;
| Open work packages&lt;br /&gt;
| No open generated work package may exist for the plan.&lt;br /&gt;
| There must be no generated work package linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/span&amp;gt; where &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;ORGA_STATUS != 100&amp;lt;/span&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Generation rule:''' The open work package check prevents the system from creating multiple open work packages for the same maintenance plan.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Round Work Package Generation ==&lt;br /&gt;
&lt;br /&gt;
A round maintenance plan creates a main work package for the round.&lt;br /&gt;
&lt;br /&gt;
After the main work package has been created, the system processes the maintenance plans linked via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For each linked child maintenance plan, the system creates an additional work package.&lt;br /&gt;
&lt;br /&gt;
These additional generated work packages are assigned to the main round work package via &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;TASK_OWNER&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For child plans used in a round, the system does not care whether the child plan:&lt;br /&gt;
&lt;br /&gt;
* has &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;PLAN_STATUS == Active&amp;lt;/span&amp;gt;&lt;br /&gt;
* has &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;AUTO_CREATE == true&amp;lt;/span&amp;gt;&lt;br /&gt;
* has a valid &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;RRULE&amp;lt;/span&amp;gt;&lt;br /&gt;
* has a valid &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;NEXT_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
* is due based on its own &amp;lt;span style=&amp;quot;font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;&amp;quot;&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Rule:''' The round plan controls the timing. The child plans define what additional work packages should be created as part of the round.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29919</id>
		<title>MROMaintenancePlans</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29919"/>
				<updated>2026-06-15T05:47:20Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
= MRO Maintenance Planning =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The Maintenance Planning feature in MRO is used to plan recurring maintenance work and automatically generate work packages from maintenance plans. The maintenance plan defines the rules. The generated work package is used by users to execute and complete the actual maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
A maintenance plan defines the rules for creating work packages. These rules include:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package belongs to&lt;br /&gt;
* which template work package is used&lt;br /&gt;
* how the template work package is copied&lt;br /&gt;
* how many days before the planned execution date the work package may be generated&lt;br /&gt;
* how future planning dates are calculated&lt;br /&gt;
&lt;br /&gt;
The actual maintenance work is not executed by the maintenance plan itself. The maintenance plan creates work packages. These generated work packages are then used by users to execute and complete the maintenance work.&lt;br /&gt;
&lt;br /&gt;
In MRO, &amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt; is the abstract base class for maintenance planning. It provides the common foundation for maintenance plans, but it is not intended to be used directly.&lt;br /&gt;
&lt;br /&gt;
The fully implemented maintenance plan types in standard MRO are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Custom maintenance plan types can be implemented by deriving from the abstract &amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt; base class. However, the standard MRO maintenance planning feature is based on cyclic maintenance plans and round maintenance plans.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt; support recurrence-based scheduling. This includes planned execution dates, automatic work package generation, calendar-based scheduling, completion-based scheduling, automatic recalculation of scheduling dates, and generation based on due dates.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt; additionally supports maintenance rounds. A round maintenance plan creates one main work package for the round. It can also create additional work packages from child maintenance plans linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;. These additional work packages are assigned to the main round work package.&lt;br /&gt;
&lt;br /&gt;
== Basic Concept ==&lt;br /&gt;
&lt;br /&gt;
The maintenance planning feature is built around four main parts:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Part&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines the rules for creating generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Template work package&lt;br /&gt;
| Defines what the generated work package should look like.&lt;br /&gt;
|-&lt;br /&gt;
| Replication configuration&lt;br /&gt;
| Defines how the template work package is copied.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package&lt;br /&gt;
| The actual work package created by the maintenance plan.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maintenance Plan ===&lt;br /&gt;
&lt;br /&gt;
The maintenance plan defines the rules for creating work packages.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package should belong to&lt;br /&gt;
* how many days before the planned execution date the work package may be created&lt;br /&gt;
* which template work package should be used&lt;br /&gt;
* which recurrence pattern should be used&lt;br /&gt;
* whether future dates are calculated calendar-based or completion-based&lt;br /&gt;
&lt;br /&gt;
=== Template Work Package ===&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
It is the source work package that is copied when the maintenance plan creates a new work package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Rule:''' Only work packages with &amp;lt;code&amp;gt;ISTEMPLATE&amp;lt;/code&amp;gt; set can be used as template work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Replication Configuration ===&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how referenced objects are handled&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package ===&lt;br /&gt;
&lt;br /&gt;
The generated work package is the actual result created by the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
# A pump has to be inspected every month.&lt;br /&gt;
# A cyclic maintenance plan is created for this pump.&lt;br /&gt;
# The plan is configured with a monthly recurrence, an assigned asset, a template work package, and a replication configuration.&lt;br /&gt;
# When the plan becomes due, the system uses a replication job to create a new work package from the configured template work package.&lt;br /&gt;
# The generated work package is linked back to the maintenance plan via &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This link allows the maintenance plan to react when the generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
== MaintenancePlan Base Class ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt; is the abstract base class for maintenance planning in MRO.&lt;br /&gt;
&lt;br /&gt;
It provides the common properties and logic required by maintenance plan implementations.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt; is abstract, users do not create or use this base class directly in the standard MRO feature. Instead, the concrete maintenance plan types are used:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Developers can derive from the abstract base class if a project requires a custom maintenance plan type. In that case, the custom implementation must provide the missing plan-specific behavior.&lt;br /&gt;
&lt;br /&gt;
=== Base Class Properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the asset that requires maintenance.&lt;br /&gt;
| Required for a valid cyclic maintenance plan.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the template work package.&lt;br /&gt;
| The linked work package must have &amp;lt;code&amp;gt;ISTEMPLATE&amp;lt;/code&amp;gt; set.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the replication configuration.&lt;br /&gt;
| Required for work package generation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines the planned execution date of the next maintenance activity.&lt;br /&gt;
| Used as &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; on generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines how many days before &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; the system may create the work package.&lt;br /&gt;
| Does not define the recurrence interval.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
| Calculated by the system.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines whether the maintenance plan is active or inactive.&lt;br /&gt;
| Only active plans are considered for automatic generation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines whether the system is allowed to automatically create work packages.&lt;br /&gt;
| If disabled, the plan does not automatically create work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Stores the most recent completion date of a generated work package linked to the maintenance plan.&lt;br /&gt;
| Especially relevant for completion-based scheduling.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PRIORITY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Numeric value that can be used to sort maintenance plans.&lt;br /&gt;
| For round maintenance plans, see also &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; is the link to the asset that requires maintenance.&lt;br /&gt;
&lt;br /&gt;
This can be, for example:&lt;br /&gt;
&lt;br /&gt;
* equipment&lt;br /&gt;
* a functional location&lt;br /&gt;
* another customized maintainable object deriving from &amp;lt;code&amp;gt;Asset&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to the same asset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Validation:''' A cyclic maintenance plan requires &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; to be assigned in order to be valid.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; is the link to the template work package.&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
When the maintenance plan creates a work package, the system copies the work package referenced by &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The linked work package must be a template work package. This means its &amp;lt;code&amp;gt;ISTEMPLATE&amp;lt;/code&amp;gt; property must be set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Validation:''' If &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; is not configured, the maintenance plan cannot create a work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt; is the link to the replication configuration.&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied into a generated work package.&lt;br /&gt;
&lt;br /&gt;
It can define, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how references are copied&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Validation:''' If &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt; is not configured, the maintenance plan cannot create a work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; defines the planned execution date of the next maintenance activity.&lt;br /&gt;
&lt;br /&gt;
It answers the question: '''When should the next maintenance work be performed?'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is not necessarily the date on which the work package is created.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this example, the system may create the work package on 12 March, but the generated work package is planned for 15 March.&lt;br /&gt;
&lt;br /&gt;
When a work package is generated, the generated work package receives the maintenance plan’s &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; as its &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; defines how many days before &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; the system may create the work package.&lt;br /&gt;
&lt;br /&gt;
This is used to create work packages before the actual planned execution date.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Resulting &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Note:''' &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; does not define the recurrence interval. It only defines how early the work package may be generated before the planned execution date.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is calculated by the system.&lt;br /&gt;
&lt;br /&gt;
It defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maintenance planning orchestrator searches for active plans where &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; has been reached.&lt;br /&gt;
&lt;br /&gt;
A plan can be considered for automatic work package generation when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE &amp;lt;= current date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; has not yet been reached, no work package is created.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt; defines whether the maintenance plan is active or inactive.&lt;br /&gt;
&lt;br /&gt;
Only active plans are considered for automatic work package generation. Inactive plans are ignored by the maintenance planning process.&lt;br /&gt;
&lt;br /&gt;
Typical values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Inactive&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Active&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows users to temporarily disable a maintenance plan without deleting it.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; defines whether the system is allowed to automatically create work packages from the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; is enabled, the maintenance planning orchestrator can create work packages once the plan is due.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; is disabled, the plan does not automatically create work packages.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; stores the date when the most recent generated work package linked to the maintenance plan was completed.&lt;br /&gt;
&lt;br /&gt;
This property is especially important for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Previous generated work package completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| Next date is calculated from&lt;br /&gt;
| 20 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The system updates &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PRIORITY&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PRIORITY&amp;lt;/code&amp;gt; is a numeric value that can be used to sort maintenance plans.&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, there is also a property called &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The exact effect of &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; should only be documented after the implementation behavior has been verified.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Work Package Properties Used by Maintenance Planning ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Used on&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Links the generated work package back to the maintenance plan that triggered its creation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the template work package that was used to create the generated work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the asset for which the work package was created.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the planned start date of the generated work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ORGA_STATUS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Used to determine whether a generated work package is finished.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Assigns additional generated work packages to the main round work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Can be copied from &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; to structure or order round work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Can be copied from &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; to group round work packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt; is set on generated work packages.&lt;br /&gt;
&lt;br /&gt;
It stores the maintenance plan that triggered the creation of the work package.&lt;br /&gt;
&lt;br /&gt;
This is important because the maintenance plan itself does not directly store a list of generated work packages. Instead, generated work packages reference their source maintenance plan via &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This link allows the system to find work packages created from a maintenance plan and to update the maintenance plan when a generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; stores the template work package that was used to create the generated work package.&lt;br /&gt;
&lt;br /&gt;
This allows users and the system to see which template was used as the source.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; stores the asset for which the work package was created.&lt;br /&gt;
&lt;br /&gt;
This is usually copied or assigned based on the maintenance plan’s &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; stores the planned start date of the generated work package.&lt;br /&gt;
&lt;br /&gt;
When a maintenance plan generates a work package, the system sets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
generated WorkPackage.PLANNED_START = MaintenancePlan.NEXT_DATE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;ORGA_STATUS&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ORGA_STATUS&amp;lt;/code&amp;gt; is used to determine whether a generated work package is finished.&lt;br /&gt;
&lt;br /&gt;
A work package is considered finished when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open work packages are generated work packages linked to the maintenance plan where:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS != 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Generation rule:''' A maintenance plan does not create another work package while it still has an open generated work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt; is used in round maintenance scenarios.&lt;br /&gt;
&lt;br /&gt;
When a round maintenance plan creates a main work package and additional work packages from linked child plans, the additional work packages are assigned to the main round work package via &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt; can be copied from the &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; relation to generated work packages in a round maintenance scenario.&lt;br /&gt;
&lt;br /&gt;
They can be used to order or group the additional work packages that belong to the generated round work package.&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; is used for recurring maintenance work on an asset.&lt;br /&gt;
&lt;br /&gt;
It is the standard maintenance plan type for maintenance activities that repeat according to a defined recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspect a pump every month&lt;br /&gt;
* service a machine every 6 months&lt;br /&gt;
* check safety equipment every Monday&lt;br /&gt;
* replace a filter every 30 days&lt;br /&gt;
* perform annual maintenance on a functional location&lt;br /&gt;
&lt;br /&gt;
A cyclic maintenance plan uses &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; to define the recurrence. It also uses &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; to define how future dates are calculated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Key concept:''' &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; defines whether the plan follows fixed calendar dates or whether the next date depends on the actual completion date of the previous generated work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
* Calendar-Based&lt;br /&gt;
* Completion-Based&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan Properties ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines the recurrence pattern.&lt;br /&gt;
| Must be valid and parseable.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines when the recurrence pattern starts.&lt;br /&gt;
| Used as the start point for recurrence calculation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Optional end date for the recurrence.&lt;br /&gt;
| No further occurrences are generated after this date.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;&lt;br /&gt;
| Limits how many work packages can be created from the plan.&lt;br /&gt;
| Further occurrences stop once the count is reached.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines how &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated.&lt;br /&gt;
| Supports Calendar-Based and Completion-Based scheduling.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; defines the recurrence pattern of a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
It describes how often the maintenance should occur.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FREQ=DAILY&lt;br /&gt;
FREQ=WEEKLY;BYDAY=MO,WE,FR&lt;br /&gt;
FREQ=MONTHLY;BYMONTHDAY=15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system uses &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; to calculate future planned execution dates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Validation:''' If &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; is invalid and cannot be parsed, the cyclic maintenance plan is not valid and cannot create work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; defines when the recurrence pattern starts.&lt;br /&gt;
&lt;br /&gt;
The recurrence rule is calculated from this date forward.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 01 January&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Monthly on the 15th&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The system uses these values to determine valid planned execution dates.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; is an optional end date for the recurrence.&lt;br /&gt;
&lt;br /&gt;
If this date is configured, no further occurrences are generated after this date.&lt;br /&gt;
&lt;br /&gt;
This can be used for maintenance plans that should only run until a certain date.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; limits how many work packages can be created from the plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When the number of related generated work packages reaches &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;, the system no longer calculates new occurrences for the plan.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; defines how &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated for a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; is only relevant for concrete maintenance plan types that use recurrence logic, such as &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Scheduling mode&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Calendar-Based&lt;br /&gt;
| Future dates follow the recurrence pattern defined by &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Completion-Based&lt;br /&gt;
| Future dates are calculated from the actual completion date of the previous generated work package.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This property is one of the most important settings because it defines whether future dates follow the calendar or depend on the actual completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
== Calendar-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling is used when maintenance should follow fixed calendar occurrences.&lt;br /&gt;
&lt;br /&gt;
The next planned execution date is calculated according to &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; and the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
This means that delays in completing a work package do not automatically shift the whole future schedule.&lt;br /&gt;
&lt;br /&gt;
Use calendar-based scheduling when the maintenance should happen on fixed dates or fixed calendar intervals.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspection every 15th day of the month&lt;br /&gt;
* safety check every Monday&lt;br /&gt;
* yearly inspection every January&lt;br /&gt;
* quarterly maintenance in fixed maintenance windows&lt;br /&gt;
&lt;br /&gt;
=== How Calendar-Based Scheduling Works ===&lt;br /&gt;
&lt;br /&gt;
In calendar-based scheduling, the system calculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; based on the recurrence rule and the relevant dates of existing generated work packages.&lt;br /&gt;
&lt;br /&gt;
The system determines the highest relevant planned or finished date of generated work packages linked to the maintenance plan. Then it uses the recurrence rule to calculate the next valid occurrence after that date.&lt;br /&gt;
&lt;br /&gt;
This means the schedule continues according to the recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
If a work package is completed later than planned, the future schedule does not necessarily move with that completion date.&lt;br /&gt;
&lt;br /&gt;
=== Example: Calendar-Based Scheduling ===&lt;br /&gt;
&lt;br /&gt;
A pump must be inspected on the 15th of every month.&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Plan type&lt;br /&gt;
| &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
| Pump 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Pump Inspection Template&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt;&lt;br /&gt;
| Pump Inspection Replication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Calendar-Based&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Monthly on the 15th&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 01 January&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = 12 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the work package is planned, the system can calculate the next occurrence:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NEXT_DATE = 15 April&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the March work package is completed on 20 March, the next date still follows the monthly recurrence. The next planned execution date remains 15 April.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Result:''' The late completion does not shift the future schedule to 20 April.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Completion-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling is used when the next maintenance date should depend on the actual completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
This means that the interval starts after the work has actually been completed.&lt;br /&gt;
&lt;br /&gt;
Use completion-based scheduling when the maintenance should repeat based on the time since the last completed maintenance activity.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* service every 30 days after the last service&lt;br /&gt;
* inspection 6 months after the previous inspection was completed&lt;br /&gt;
* replacement 90 days after the previous replacement&lt;br /&gt;
* maintenance where a delay should also delay the next cycle&lt;br /&gt;
&lt;br /&gt;
=== How Completion-Based Scheduling Works ===&lt;br /&gt;
&lt;br /&gt;
In completion-based scheduling, the system recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; after a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
The completion date becomes the basis for the next occurrence.&lt;br /&gt;
&lt;br /&gt;
Planning changes alone do not define the next recurrence in the same way as calendar-based scheduling.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' The plan waits for the generated work package to be completed. Then the system calculates the next date from the completion date.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: Completion-Based Scheduling ===&lt;br /&gt;
&lt;br /&gt;
A machine must be serviced every 30 days after the previous service was completed.&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Plan type&lt;br /&gt;
| &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
| Machine 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Machine Service Template&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt;&lt;br /&gt;
| Machine Service Replication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Every 30 days&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 01 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = 12 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The work package is completed on 20 March.&lt;br /&gt;
&lt;br /&gt;
Because the plan is completion-based, the system calculates the next date from 20 March.&lt;br /&gt;
&lt;br /&gt;
If the recurrence is every 30 days:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| around 19 April&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| around 16 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Result:''' In this mode, the delay from 15 March to 20 March shifts the future schedule.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Calendar-Based vs Completion-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
The difference is the date that is used as the basis for calculating &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Aspect&lt;br /&gt;
! Calendar-Based&lt;br /&gt;
! Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| Basis for &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Recurrence defined by &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Actual completion date of the previous generated work package&lt;br /&gt;
|-&lt;br /&gt;
| Effect of late completion&lt;br /&gt;
| Future dates are not automatically shifted&lt;br /&gt;
| Future dates move with the completion date&lt;br /&gt;
|-&lt;br /&gt;
| Typical use case&lt;br /&gt;
| Fixed maintenance windows, fixed calendar intervals, legal or organizational inspection dates&lt;br /&gt;
| Service intervals that depend on the actual last maintenance&lt;br /&gt;
|-&lt;br /&gt;
| Example&lt;br /&gt;
| Planned: 15 March&amp;lt;br /&amp;gt;Completed: 20 March&amp;lt;br /&amp;gt;Next date: 15 April&lt;br /&gt;
| Planned: 15 March&amp;lt;br /&amp;gt;Completed: 20 March&amp;lt;br /&amp;gt;Interval: 30 days&amp;lt;br /&amp;gt;Next date: around 19 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calendar-Based ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling should be used when the maintenance must follow fixed planned dates.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan follows the &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; calendar pattern.&lt;br /&gt;
* Future dates are not automatically shifted just because a work package was completed late.&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; can be recalculated after planning updates.&lt;br /&gt;
* It is useful for fixed maintenance windows and legally or organizationally fixed inspection dates.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Planned inspection&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| Completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| Next date&lt;br /&gt;
| 15 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The future date stays aligned with the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
=== Completion-Based ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling should be used when the next maintenance interval starts after the previous work was completed.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan waits for completion.&lt;br /&gt;
* The completion date is used as the basis for &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
* If the work is completed late, the future schedule moves.&lt;br /&gt;
* It is useful for service intervals that depend on the actual last maintenance.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Planned service&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| Completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| Interval&lt;br /&gt;
| 30 days&lt;br /&gt;
|-&lt;br /&gt;
| Next date&lt;br /&gt;
| around 19 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The future date shifts because the work was completed later.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt; is used for recurring maintenance rounds.&lt;br /&gt;
&lt;br /&gt;
It is a specialized type of cyclic maintenance plan. This means that it also uses &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In addition to the cyclic scheduling logic, a round maintenance plan includes child maintenance plans linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the round maintenance plan is due, the system creates the main work package for the round. Then it creates additional work packages from the child maintenance plans linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important for child plans:''' For the child plans, the system does not care whether they are due, active, auto-created, or whether they have a valid &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;. The round maintenance plan uses the child plans as configuration for the additional work packages that should be created as part of the round.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important configuration on the child plans is their work package generation setup, especially the configured template work package and replication setup.&lt;br /&gt;
&lt;br /&gt;
=== Generated Result ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Round maintenance plan&lt;br /&gt;
| Machine Room Round&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 1&lt;br /&gt;
| Pump 1 Inspection&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 2&lt;br /&gt;
| Pump 2 Inspection&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 3&lt;br /&gt;
| Pump 3 Inspection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Generated main work package:&lt;br /&gt;
&lt;br /&gt;
* Machine Room Round&lt;br /&gt;
&lt;br /&gt;
Additional generated work packages inside the main round work package:&lt;br /&gt;
&lt;br /&gt;
* Pump 1 Inspection&lt;br /&gt;
* Pump 2 Inspection&lt;br /&gt;
* Pump 3 Inspection&lt;br /&gt;
&lt;br /&gt;
The additional work packages are assigned to the main round work package. This allows the result of the round maintenance plan to be structured as one complete maintenance round.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan Properties and Relations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property / relation&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;&lt;br /&gt;
| Links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
| Child plans define additional work packages created as part of the round.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exists on &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;.&lt;br /&gt;
| Runtime behavior must be verified before documenting further effects.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Can exist on the relation between the round plan and a child plan.&lt;br /&gt;
| Can be copied to generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Can exist on the relation between the round plan and a child plan.&lt;br /&gt;
| Can be copied to generated work packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
&lt;br /&gt;
The linked child plans define which additional work packages should be generated when the round maintenance plan is due.&lt;br /&gt;
&lt;br /&gt;
When the round plan generates work packages, the system creates:&lt;br /&gt;
&lt;br /&gt;
* one main work package from the round plan’s own &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
* one additional work package for each child maintenance plan linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The child maintenance plans do not need to be due themselves for the round maintenance plan to use them during round generation.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; exists on &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The exact runtime effect of &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; should be documented after the implementation behavior has been verified. Until that behavior is confirmed, the wiki should not claim that &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; filters child plans by due date, asset, or priority.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
The relation between the round maintenance plan and a linked child maintenance plan can contain &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the system creates an additional work package from a linked child maintenance plan, these values can be copied to the generated work package.&lt;br /&gt;
&lt;br /&gt;
This can be used to structure, order, or group the additional work packages in the generated round.&lt;br /&gt;
&lt;br /&gt;
== Properties Calculated or Updated by the System ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property / link&lt;br /&gt;
! System behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Calculated from &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Calculated or recalculated for &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Updated when a generated work package is completed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set on generated work packages from the maintenance plan’s &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Links on generated work packages&lt;br /&gt;
| Required links are set automatically during generation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is calculated by the system from &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value is recalculated when:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changes&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; changes&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is recalculated after planning or completion&lt;br /&gt;
* recurrence settings cause a new &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; to be calculated&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; can be calculated or recalculated by the system.&lt;br /&gt;
&lt;br /&gt;
The calculation depends on:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
* related generated work packages&lt;br /&gt;
* planning events&lt;br /&gt;
* completion events&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling, &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated from the recurrence pattern and the highest relevant planned or finished date of related generated work packages.&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling, &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated from the completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; is updated by the system when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
It stores the latest completion date of a generated work package related to the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
This value is especially relevant for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; on Generated Work Packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package from a maintenance plan, it sets the generated work package’s &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; to the maintenance plan’s &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MaintenancePlan.NEXT_DATE: 15 March&lt;br /&gt;
Generated WorkPackage.PLANNED_START: 15 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links on Generated Work Packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package, it automatically sets the required links on the generated work package.&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to:&lt;br /&gt;
&lt;br /&gt;
* the source maintenance plan via &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt;&lt;br /&gt;
* the template work package via &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
* the assigned asset via &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, additional generated work packages from linked child maintenance plans are assigned to the main round work package via &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Properties and Events That Trigger Recalculation ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Trigger&lt;br /&gt;
! Recalculation behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; based on the new recurrence rule and selected &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates the schedule and may change &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Checks whether future occurrences are still available.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; according to the selected scheduling mode.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Notifies the linked maintenance plan and may trigger date recalculation.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package completed&lt;br /&gt;
| Updates &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; and recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; according to &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changes, the system recalculates &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; changes, the system recalculates &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; changes, the recurrence pattern changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; based on the new recurrence rule and the selected &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is recalculated, &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; changes, the start point of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates the schedule. This can change &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changes, &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; changes, the end boundary of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system checks whether future occurrences are still available.&lt;br /&gt;
&lt;br /&gt;
If no further occurrence is possible because of &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt;, the system cannot calculate a new &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; changes, the system checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
&lt;br /&gt;
If the number of related generated work packages is greater than or equal to &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;, the system does not calculate further occurrences.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; changes, the logic for calculating future dates changes.&lt;br /&gt;
&lt;br /&gt;
Changing to Calendar-Based means that the plan follows the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
Changing to Completion-Based means that the plan calculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; from the completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
Because this changes the calculation logic, the system recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; according to the selected &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changes, &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; of a generated work package is set or changed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
For calendar-based cyclic maintenance plans, this can trigger recalculation of &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;. The system uses the planning information to continue the calendar-based recurrence.&lt;br /&gt;
&lt;br /&gt;
For completion-based cyclic maintenance plans, a &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; change does not drive the recurrence in the same way. &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is mainly calculated after the work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package Completed ===&lt;br /&gt;
&lt;br /&gt;
When a generated work package is completed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
A work package is considered completed when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system updates &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt;. Then the system recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; according to &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the system continues according to the calendar recurrence&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated from the recurrence pattern and relevant planned or finished dates&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the completion date becomes the basis for the next occurrence&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated from the completion date&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is updated, &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is recalculated.&lt;br /&gt;
&lt;br /&gt;
== Work Package Generation Logic ==&lt;br /&gt;
&lt;br /&gt;
=== When Is a Plan Ready to Create a Work Package? ===&lt;br /&gt;
&lt;br /&gt;
A cyclic or round maintenance plan can create a work package only if all required conditions are fulfilled.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Requirement&lt;br /&gt;
! Condition&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Plan validity&lt;br /&gt;
| The plan must be valid.&lt;br /&gt;
| For cyclic maintenance plans, this requires a valid &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;, assigned &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;, and available &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Plan status&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_STATUS == Active&amp;lt;/code&amp;gt;&lt;br /&gt;
| Inactive plans are ignored.&lt;br /&gt;
|-&lt;br /&gt;
| Automatic generation&lt;br /&gt;
| &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; must be enabled.&lt;br /&gt;
| If disabled, the plan does not automatically create work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Template work package&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; must be set.&lt;br /&gt;
| The linked work package must be a template work package.&lt;br /&gt;
|-&lt;br /&gt;
| Replication configuration&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt; must be set.&lt;br /&gt;
| Required to copy the template work package.&lt;br /&gt;
|-&lt;br /&gt;
| Earliest generation date&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE &amp;lt;= current date&amp;lt;/code&amp;gt;&lt;br /&gt;
| The plan may only generate once the earliest generation date has been reached.&lt;br /&gt;
|-&lt;br /&gt;
| Open work packages&lt;br /&gt;
| No open generated work package may exist for the plan.&lt;br /&gt;
| There must be no generated work package linked via &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;ORGA_STATUS != 100&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' The open work package check prevents the system from creating multiple open work packages for the same maintenance plan.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Round Work Package Generation ==&lt;br /&gt;
&lt;br /&gt;
A round maintenance plan creates a main work package for the round.&lt;br /&gt;
&lt;br /&gt;
After the main work package has been created, the system processes the maintenance plans linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For each linked child maintenance plan, the system creates an additional work package.&lt;br /&gt;
&lt;br /&gt;
These additional generated work packages are assigned to the main round work package via &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For child plans used in a round, the system does not care whether the child plan:&lt;br /&gt;
&lt;br /&gt;
* has &amp;lt;code&amp;gt;PLAN_STATUS == Active&amp;lt;/code&amp;gt;&lt;br /&gt;
* has &amp;lt;code&amp;gt;AUTO_CREATE == true&amp;lt;/code&amp;gt;&lt;br /&gt;
* has a valid &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
* has a valid &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
* is due based on its own &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Rule:''' The round plan controls the timing. The child plans define what additional work packages should be created as part of the round.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29918</id>
		<title>MROMaintenancePlans</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29918"/>
				<updated>2026-06-15T05:46:42Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
= MRO Maintenance Planning =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The Maintenance Planning feature in MRO is used to plan recurring maintenance work and automatically generate work packages from maintenance plans. The maintenance plan defines the rules. The generated work package is used by users to execute and complete the actual maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
A maintenance plan defines the rules for creating work packages. These rules include:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package belongs to&lt;br /&gt;
* which template work package is used&lt;br /&gt;
* how the template work package is copied&lt;br /&gt;
* how many days before the planned execution date the work package may be generated&lt;br /&gt;
* how future planning dates are calculated&lt;br /&gt;
&lt;br /&gt;
The actual maintenance work is not executed by the maintenance plan itself. The maintenance plan creates work packages. These generated work packages are then used by users to execute and complete the maintenance work.&lt;br /&gt;
&lt;br /&gt;
In MRO, &amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt; is the abstract base class for maintenance planning. It provides the common foundation for maintenance plans, but it is not intended to be used directly.&lt;br /&gt;
&lt;br /&gt;
The fully implemented maintenance plan types in standard MRO are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Custom maintenance plan types can be implemented by deriving from the abstract &amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt; base class. However, the standard MRO maintenance planning feature is based on cyclic maintenance plans and round maintenance plans.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt; support recurrence-based scheduling. This includes planned execution dates, automatic work package generation, calendar-based scheduling, completion-based scheduling, automatic recalculation of scheduling dates, and generation based on due dates.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt; additionally supports maintenance rounds. A round maintenance plan creates one main work package for the round. It can also create additional work packages from child maintenance plans linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;. These additional work packages are assigned to the main round work package.&lt;br /&gt;
&lt;br /&gt;
== Basic Concept ==&lt;br /&gt;
&lt;br /&gt;
The maintenance planning feature is built around four main parts:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Part&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines the rules for creating generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Template work package&lt;br /&gt;
| Defines what the generated work package should look like.&lt;br /&gt;
|-&lt;br /&gt;
| Replication configuration&lt;br /&gt;
| Defines how the template work package is copied.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package&lt;br /&gt;
| The actual work package created by the maintenance plan.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maintenance Plan ===&lt;br /&gt;
&lt;br /&gt;
The maintenance plan defines the rules for creating work packages.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package should belong to&lt;br /&gt;
* how many days before the planned execution date the work package may be created&lt;br /&gt;
* which template work package should be used&lt;br /&gt;
* which recurrence pattern should be used&lt;br /&gt;
* whether future dates are calculated calendar-based or completion-based&lt;br /&gt;
&lt;br /&gt;
=== Template Work Package ===&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
It is the source work package that is copied when the maintenance plan creates a new work package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Rule:''' Only work packages with &amp;lt;code&amp;gt;ISTEMPLATE&amp;lt;/code&amp;gt; set can be used as template work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Replication Configuration ===&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how referenced objects are handled&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package ===&lt;br /&gt;
&lt;br /&gt;
The generated work package is the actual result created by the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
# A pump has to be inspected every month.&lt;br /&gt;
# A cyclic maintenance plan is created for this pump.&lt;br /&gt;
# The plan is configured with a monthly recurrence, an assigned asset, a template work package, and a replication configuration.&lt;br /&gt;
# When the plan becomes due, the system uses a replication job to create a new work package from the configured template work package.&lt;br /&gt;
# The generated work package is linked back to the maintenance plan via &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This link allows the maintenance plan to react when the generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
== MaintenancePlan Base Class ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt; is the abstract base class for maintenance planning in MRO.&lt;br /&gt;
&lt;br /&gt;
It provides the common properties and logic required by maintenance plan implementations.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt; is abstract, users do not create or use this base class directly in the standard MRO feature. Instead, the concrete maintenance plan types are used:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Developers can derive from the abstract base class if a project requires a custom maintenance plan type. In that case, the custom implementation must provide the missing plan-specific behavior.&lt;br /&gt;
&lt;br /&gt;
=== Base Class Properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the asset that requires maintenance.&lt;br /&gt;
| Required for a valid cyclic maintenance plan.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the template work package.&lt;br /&gt;
| The linked work package must have &amp;lt;code&amp;gt;ISTEMPLATE&amp;lt;/code&amp;gt; set.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the replication configuration.&lt;br /&gt;
| Required for work package generation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines the planned execution date of the next maintenance activity.&lt;br /&gt;
| Used as &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; on generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines how many days before &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; the system may create the work package.&lt;br /&gt;
| Does not define the recurrence interval.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
| Calculated by the system.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines whether the maintenance plan is active or inactive.&lt;br /&gt;
| Only active plans are considered for automatic generation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines whether the system is allowed to automatically create work packages.&lt;br /&gt;
| If disabled, the plan does not automatically create work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Stores the most recent completion date of a generated work package linked to the maintenance plan.&lt;br /&gt;
| Especially relevant for completion-based scheduling.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PRIORITY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Numeric value that can be used to sort maintenance plans.&lt;br /&gt;
| For round maintenance plans, see also &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; is the link to the asset that requires maintenance.&lt;br /&gt;
&lt;br /&gt;
This can be, for example:&lt;br /&gt;
&lt;br /&gt;
* equipment&lt;br /&gt;
* a functional location&lt;br /&gt;
* another customized maintainable object deriving from &amp;lt;code&amp;gt;Asset&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to the same asset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Validation:''' A cyclic maintenance plan requires &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; to be assigned in order to be valid.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; is the link to the template work package.&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
When the maintenance plan creates a work package, the system copies the work package referenced by &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The linked work package must be a template work package. This means its &amp;lt;code&amp;gt;ISTEMPLATE&amp;lt;/code&amp;gt; property must be set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Validation:''' If &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; is not configured, the maintenance plan cannot create a work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt; is the link to the replication configuration.&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied into a generated work package.&lt;br /&gt;
&lt;br /&gt;
It can define, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how references are copied&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Validation:''' If &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt; is not configured, the maintenance plan cannot create a work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; defines the planned execution date of the next maintenance activity.&lt;br /&gt;
&lt;br /&gt;
It answers the question: '''When should the next maintenance work be performed?'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is not necessarily the date on which the work package is created.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this example, the system may create the work package on 12 March, but the generated work package is planned for 15 March.&lt;br /&gt;
&lt;br /&gt;
When a work package is generated, the generated work package receives the maintenance plan’s &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; as its &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; defines how many days before &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; the system may create the work package.&lt;br /&gt;
&lt;br /&gt;
This is used to create work packages before the actual planned execution date.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Resulting &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Note:''' &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; does not define the recurrence interval. It only defines how early the work package may be generated before the planned execution date.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is calculated by the system.&lt;br /&gt;
&lt;br /&gt;
It defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maintenance planning orchestrator searches for active plans where &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; has been reached.&lt;br /&gt;
&lt;br /&gt;
A plan can be considered for automatic work package generation when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE &amp;lt;= current date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; has not yet been reached, no work package is created.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt; defines whether the maintenance plan is active or inactive.&lt;br /&gt;
&lt;br /&gt;
Only active plans are considered for automatic work package generation. Inactive plans are ignored by the maintenance planning process.&lt;br /&gt;
&lt;br /&gt;
Typical values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Inactive&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Active&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows users to temporarily disable a maintenance plan without deleting it.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; defines whether the system is allowed to automatically create work packages from the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; is enabled, the maintenance planning orchestrator can create work packages once the plan is due.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; is disabled, the plan does not automatically create work packages.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; stores the date when the most recent generated work package linked to the maintenance plan was completed.&lt;br /&gt;
&lt;br /&gt;
This property is especially important for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Previous generated work package completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| Next date is calculated from&lt;br /&gt;
| 20 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The system updates &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PRIORITY&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PRIORITY&amp;lt;/code&amp;gt; is a numeric value that can be used to sort maintenance plans.&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, there is also a property called &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The exact effect of &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; should only be documented after the implementation behavior has been verified.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Work Package Properties Used by Maintenance Planning ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Used on&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Links the generated work package back to the maintenance plan that triggered its creation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the template work package that was used to create the generated work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the asset for which the work package was created.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the planned start date of the generated work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ORGA_STATUS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Used to determine whether a generated work package is finished.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Assigns additional generated work packages to the main round work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Can be copied from &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; to structure or order round work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Can be copied from &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; to group round work packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt; is set on generated work packages.&lt;br /&gt;
&lt;br /&gt;
It stores the maintenance plan that triggered the creation of the work package.&lt;br /&gt;
&lt;br /&gt;
This is important because the maintenance plan itself does not directly store a list of generated work packages. Instead, generated work packages reference their source maintenance plan via &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This link allows the system to find work packages created from a maintenance plan and to update the maintenance plan when a generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; stores the template work package that was used to create the generated work package.&lt;br /&gt;
&lt;br /&gt;
This allows users and the system to see which template was used as the source.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; stores the asset for which the work package was created.&lt;br /&gt;
&lt;br /&gt;
This is usually copied or assigned based on the maintenance plan’s &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; stores the planned start date of the generated work package.&lt;br /&gt;
&lt;br /&gt;
When a maintenance plan generates a work package, the system sets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
generated WorkPackage.PLANNED_START = MaintenancePlan.NEXT_DATE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;ORGA_STATUS&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ORGA_STATUS&amp;lt;/code&amp;gt; is used to determine whether a generated work package is finished.&lt;br /&gt;
&lt;br /&gt;
A work package is considered finished when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open work packages are generated work packages linked to the maintenance plan where:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS != 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Generation rule:''' A maintenance plan does not create another work package while it still has an open generated work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt; is used in round maintenance scenarios.&lt;br /&gt;
&lt;br /&gt;
When a round maintenance plan creates a main work package and additional work packages from linked child plans, the additional work packages are assigned to the main round work package via &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt; can be copied from the &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; relation to generated work packages in a round maintenance scenario.&lt;br /&gt;
&lt;br /&gt;
They can be used to order or group the additional work packages that belong to the generated round work package.&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; is used for recurring maintenance work on an asset.&lt;br /&gt;
&lt;br /&gt;
It is the standard maintenance plan type for maintenance activities that repeat according to a defined recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspect a pump every month&lt;br /&gt;
* service a machine every 6 months&lt;br /&gt;
* check safety equipment every Monday&lt;br /&gt;
* replace a filter every 30 days&lt;br /&gt;
* perform annual maintenance on a functional location&lt;br /&gt;
&lt;br /&gt;
A cyclic maintenance plan uses &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; to define the recurrence. It also uses &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; to define how future dates are calculated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Key concept:''' &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; defines whether the plan follows fixed calendar dates or whether the next date depends on the actual completion date of the previous generated work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
* Calendar-Based&lt;br /&gt;
* Completion-Based&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan Properties ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines the recurrence pattern.&lt;br /&gt;
| Must be valid and parseable.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines when the recurrence pattern starts.&lt;br /&gt;
| Used as the start point for recurrence calculation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Optional end date for the recurrence.&lt;br /&gt;
| No further occurrences are generated after this date.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;&lt;br /&gt;
| Limits how many work packages can be created from the plan.&lt;br /&gt;
| Further occurrences stop once the count is reached.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines how &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated.&lt;br /&gt;
| Supports Calendar-Based and Completion-Based scheduling.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; defines the recurrence pattern of a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
It describes how often the maintenance should occur.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FREQ=DAILY&lt;br /&gt;
FREQ=WEEKLY;BYDAY=MO,WE,FR&lt;br /&gt;
FREQ=MONTHLY;BYMONTHDAY=15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system uses &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; to calculate future planned execution dates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Validation:''' If &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; is invalid and cannot be parsed, the cyclic maintenance plan is not valid and cannot create work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; defines when the recurrence pattern starts.&lt;br /&gt;
&lt;br /&gt;
The recurrence rule is calculated from this date forward.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 01 January&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Monthly on the 15th&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The system uses these values to determine valid planned execution dates.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; is an optional end date for the recurrence.&lt;br /&gt;
&lt;br /&gt;
If this date is configured, no further occurrences are generated after this date.&lt;br /&gt;
&lt;br /&gt;
This can be used for maintenance plans that should only run until a certain date.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; limits how many work packages can be created from the plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When the number of related generated work packages reaches &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;, the system no longer calculates new occurrences for the plan.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; defines how &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated for a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; is only relevant for concrete maintenance plan types that use recurrence logic, such as &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Scheduling mode&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Calendar-Based&lt;br /&gt;
| Future dates follow the recurrence pattern defined by &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Completion-Based&lt;br /&gt;
| Future dates are calculated from the actual completion date of the previous generated work package.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This property is one of the most important settings because it defines whether future dates follow the calendar or depend on the actual completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
== Calendar-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling is used when maintenance should follow fixed calendar occurrences.&lt;br /&gt;
&lt;br /&gt;
The next planned execution date is calculated according to &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; and the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
This means that delays in completing a work package do not automatically shift the whole future schedule.&lt;br /&gt;
&lt;br /&gt;
Use calendar-based scheduling when the maintenance should happen on fixed dates or fixed calendar intervals.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspection every 15th day of the month&lt;br /&gt;
* safety check every Monday&lt;br /&gt;
* yearly inspection every January&lt;br /&gt;
* quarterly maintenance in fixed maintenance windows&lt;br /&gt;
&lt;br /&gt;
=== How Calendar-Based Scheduling Works ===&lt;br /&gt;
&lt;br /&gt;
In calendar-based scheduling, the system calculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; based on the recurrence rule and the relevant dates of existing generated work packages.&lt;br /&gt;
&lt;br /&gt;
The system determines the highest relevant planned or finished date of generated work packages linked to the maintenance plan. Then it uses the recurrence rule to calculate the next valid occurrence after that date.&lt;br /&gt;
&lt;br /&gt;
This means the schedule continues according to the recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
If a work package is completed later than planned, the future schedule does not necessarily move with that completion date.&lt;br /&gt;
&lt;br /&gt;
=== Example: Calendar-Based Scheduling ===&lt;br /&gt;
&lt;br /&gt;
A pump must be inspected on the 15th of every month.&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Plan type&lt;br /&gt;
| &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
| Pump 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Pump Inspection Template&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt;&lt;br /&gt;
| Pump Inspection Replication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Calendar-Based&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Monthly on the 15th&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 01 January&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = 12 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the work package is planned, the system can calculate the next occurrence:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NEXT_DATE = 15 April&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the March work package is completed on 20 March, the next date still follows the monthly recurrence. The next planned execution date remains 15 April.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Result:''' The late completion does not shift the future schedule to 20 April.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Completion-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling is used when the next maintenance date should depend on the actual completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
This means that the interval starts after the work has actually been completed.&lt;br /&gt;
&lt;br /&gt;
Use completion-based scheduling when the maintenance should repeat based on the time since the last completed maintenance activity.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* service every 30 days after the last service&lt;br /&gt;
* inspection 6 months after the previous inspection was completed&lt;br /&gt;
* replacement 90 days after the previous replacement&lt;br /&gt;
* maintenance where a delay should also delay the next cycle&lt;br /&gt;
&lt;br /&gt;
=== How Completion-Based Scheduling Works ===&lt;br /&gt;
&lt;br /&gt;
In completion-based scheduling, the system recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; after a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
The completion date becomes the basis for the next occurrence.&lt;br /&gt;
&lt;br /&gt;
Planning changes alone do not define the next recurrence in the same way as calendar-based scheduling.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' The plan waits for the generated work package to be completed. Then the system calculates the next date from the completion date.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: Completion-Based Scheduling ===&lt;br /&gt;
&lt;br /&gt;
A machine must be serviced every 30 days after the previous service was completed.&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Plan type&lt;br /&gt;
| &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
| Machine 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Machine Service Template&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt;&lt;br /&gt;
| Machine Service Replication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Every 30 days&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 01 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = 12 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The work package is completed on 20 March.&lt;br /&gt;
&lt;br /&gt;
Because the plan is completion-based, the system calculates the next date from 20 March.&lt;br /&gt;
&lt;br /&gt;
If the recurrence is every 30 days:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| around 19 April&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| around 16 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Result:''' In this mode, the delay from 15 March to 20 March shifts the future schedule.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Calendar-Based vs Completion-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
The difference is the date that is used as the basis for calculating &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Aspect&lt;br /&gt;
! Calendar-Based&lt;br /&gt;
! Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| Basis for &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Recurrence defined by &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Actual completion date of the previous generated work package&lt;br /&gt;
|-&lt;br /&gt;
| Effect of late completion&lt;br /&gt;
| Future dates are not automatically shifted&lt;br /&gt;
| Future dates move with the completion date&lt;br /&gt;
|-&lt;br /&gt;
| Typical use case&lt;br /&gt;
| Fixed maintenance windows, fixed calendar intervals, legal or organizational inspection dates&lt;br /&gt;
| Service intervals that depend on the actual last maintenance&lt;br /&gt;
|-&lt;br /&gt;
| Example&lt;br /&gt;
| Planned: 15 March&amp;lt;br /&amp;gt;Completed: 20 March&amp;lt;br /&amp;gt;Next date: 15 April&lt;br /&gt;
| Planned: 15 March&amp;lt;br /&amp;gt;Completed: 20 March&amp;lt;br /&amp;gt;Interval: 30 days&amp;lt;br /&amp;gt;Next date: around 19 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calendar-Based ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling should be used when the maintenance must follow fixed planned dates.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan follows the &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; calendar pattern.&lt;br /&gt;
* Future dates are not automatically shifted just because a work package was completed late.&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; can be recalculated after planning updates.&lt;br /&gt;
* It is useful for fixed maintenance windows and legally or organizationally fixed inspection dates.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Planned inspection&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| Completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| Next date&lt;br /&gt;
| 15 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The future date stays aligned with the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
=== Completion-Based ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling should be used when the next maintenance interval starts after the previous work was completed.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan waits for completion.&lt;br /&gt;
* The completion date is used as the basis for &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
* If the work is completed late, the future schedule moves.&lt;br /&gt;
* It is useful for service intervals that depend on the actual last maintenance.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Planned service&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| Completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| Interval&lt;br /&gt;
| 30 days&lt;br /&gt;
|-&lt;br /&gt;
| Next date&lt;br /&gt;
| around 19 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The future date shifts because the work was completed later.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt; is used for recurring maintenance rounds.&lt;br /&gt;
&lt;br /&gt;
It is a specialized type of cyclic maintenance plan. This means that it also uses &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In addition to the cyclic scheduling logic, a round maintenance plan includes child maintenance plans linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the round maintenance plan is due, the system creates the main work package for the round. Then it creates additional work packages from the child maintenance plans linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important for child plans:''' For the child plans, the system does not care whether they are due, active, auto-created, or whether they have a valid &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;. The round maintenance plan uses the child plans as configuration for the additional work packages that should be created as part of the round.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important configuration on the child plans is their work package generation setup, especially the configured template work package and replication setup.&lt;br /&gt;
&lt;br /&gt;
=== Generated Result ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Round maintenance plan&lt;br /&gt;
| Machine Room Round&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 1&lt;br /&gt;
| Pump 1 Inspection&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 2&lt;br /&gt;
| Pump 2 Inspection&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 3&lt;br /&gt;
| Pump 3 Inspection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Generated main work package:&lt;br /&gt;
&lt;br /&gt;
* Machine Room Round&lt;br /&gt;
&lt;br /&gt;
Additional generated work packages inside the main round work package:&lt;br /&gt;
&lt;br /&gt;
* Pump 1 Inspection&lt;br /&gt;
* Pump 2 Inspection&lt;br /&gt;
* Pump 3 Inspection&lt;br /&gt;
&lt;br /&gt;
The additional work packages are assigned to the main round work package. This allows the result of the round maintenance plan to be structured as one complete maintenance round.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan Properties and Relations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property / relation&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;&lt;br /&gt;
| Links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
| Child plans define additional work packages created as part of the round.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exists on &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;.&lt;br /&gt;
| Runtime behavior must be verified before documenting further effects.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Can exist on the relation between the round plan and a child plan.&lt;br /&gt;
| Can be copied to generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Can exist on the relation between the round plan and a child plan.&lt;br /&gt;
| Can be copied to generated work packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
&lt;br /&gt;
The linked child plans define which additional work packages should be generated when the round maintenance plan is due.&lt;br /&gt;
&lt;br /&gt;
When the round plan generates work packages, the system creates:&lt;br /&gt;
&lt;br /&gt;
* one main work package from the round plan’s own &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
* one additional work package for each child maintenance plan linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The child maintenance plans do not need to be due themselves for the round maintenance plan to use them during round generation.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; exists on &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The exact runtime effect of &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; should be documented after the implementation behavior has been verified. Until that behavior is confirmed, the wiki should not claim that &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; filters child plans by due date, asset, or priority.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
The relation between the round maintenance plan and a linked child maintenance plan can contain &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the system creates an additional work package from a linked child maintenance plan, these values can be copied to the generated work package.&lt;br /&gt;
&lt;br /&gt;
This can be used to structure, order, or group the additional work packages in the generated round.&lt;br /&gt;
&lt;br /&gt;
== Properties Calculated or Updated by the System ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property / link&lt;br /&gt;
! System behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Calculated from &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Calculated or recalculated for &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Updated when a generated work package is completed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set on generated work packages from the maintenance plan’s &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Links on generated work packages&lt;br /&gt;
| Required links are set automatically during generation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is calculated by the system from &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value is recalculated when:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changes&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; changes&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is recalculated after planning or completion&lt;br /&gt;
* recurrence settings cause a new &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; to be calculated&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; can be calculated or recalculated by the system.&lt;br /&gt;
&lt;br /&gt;
The calculation depends on:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
* related generated work packages&lt;br /&gt;
* planning events&lt;br /&gt;
* completion events&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling, &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated from the recurrence pattern and the highest relevant planned or finished date of related generated work packages.&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling, &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated from the completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; is updated by the system when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
It stores the latest completion date of a generated work package related to the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
This value is especially relevant for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; on Generated Work Packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package from a maintenance plan, it sets the generated work package’s &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; to the maintenance plan’s &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MaintenancePlan.NEXT_DATE: 15 March&lt;br /&gt;
Generated WorkPackage.PLANNED_START: 15 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links on Generated Work Packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package, it automatically sets the required links on the generated work package.&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to:&lt;br /&gt;
&lt;br /&gt;
* the source maintenance plan via &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt;&lt;br /&gt;
* the template work package via &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
* the assigned asset via &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, additional generated work packages from linked child maintenance plans are assigned to the main round work package via &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Properties and Events That Trigger Recalculation ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Trigger&lt;br /&gt;
! Recalculation behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; based on the new recurrence rule and selected &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates the schedule and may change &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Checks whether future occurrences are still available.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; according to the selected scheduling mode.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Notifies the linked maintenance plan and may trigger date recalculation.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package completed&lt;br /&gt;
| Updates &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; and recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; according to &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changes, the system recalculates &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; changes, the system recalculates &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; changes, the recurrence pattern changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; based on the new recurrence rule and the selected &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is recalculated, &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; changes, the start point of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates the schedule. This can change &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changes, &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; changes, the end boundary of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system checks whether future occurrences are still available.&lt;br /&gt;
&lt;br /&gt;
If no further occurrence is possible because of &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt;, the system cannot calculate a new &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; changes, the system checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
&lt;br /&gt;
If the number of related generated work packages is greater than or equal to &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;, the system does not calculate further occurrences.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; changes, the logic for calculating future dates changes.&lt;br /&gt;
&lt;br /&gt;
Changing to Calendar-Based means that the plan follows the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
Changing to Completion-Based means that the plan calculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; from the completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
Because this changes the calculation logic, the system recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; according to the selected &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changes, &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; of a generated work package is set or changed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
For calendar-based cyclic maintenance plans, this can trigger recalculation of &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;. The system uses the planning information to continue the calendar-based recurrence.&lt;br /&gt;
&lt;br /&gt;
For completion-based cyclic maintenance plans, a &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; change does not drive the recurrence in the same way. &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is mainly calculated after the work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package Completed ===&lt;br /&gt;
&lt;br /&gt;
When a generated work package is completed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
A work package is considered completed when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system updates &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt;. Then the system recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; according to &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the system continues according to the calendar recurrence&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated from the recurrence pattern and relevant planned or finished dates&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the completion date becomes the basis for the next occurrence&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated from the completion date&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is updated, &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is recalculated.&lt;br /&gt;
&lt;br /&gt;
== Work Package Generation Logic ==&lt;br /&gt;
&lt;br /&gt;
=== When Is a Plan Ready to Create a Work Package? ===&lt;br /&gt;
&lt;br /&gt;
A cyclic or round maintenance plan can create a work package only if all required conditions are fulfilled.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Requirement&lt;br /&gt;
! Condition&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Plan validity&lt;br /&gt;
| The plan must be valid.&lt;br /&gt;
| For cyclic maintenance plans, this requires a valid &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;, assigned &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;, and available &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Plan status&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_STATUS == Active&amp;lt;/code&amp;gt;&lt;br /&gt;
| Inactive plans are ignored.&lt;br /&gt;
|-&lt;br /&gt;
| Automatic generation&lt;br /&gt;
| &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; must be enabled.&lt;br /&gt;
| If disabled, the plan does not automatically create work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Template work package&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; must be set.&lt;br /&gt;
| The linked work package must be a template work package.&lt;br /&gt;
|-&lt;br /&gt;
| Replication configuration&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt; must be set.&lt;br /&gt;
| Required to copy the template work package.&lt;br /&gt;
|-&lt;br /&gt;
| Earliest generation date&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE &amp;lt;= current date&amp;lt;/code&amp;gt;&lt;br /&gt;
| The plan may only generate once the earliest generation date has been reached.&lt;br /&gt;
|-&lt;br /&gt;
| Open work packages&lt;br /&gt;
| No open generated work package may exist for the plan.&lt;br /&gt;
| There must be no generated work package linked via &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;ORGA_STATUS != 100&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' The open work package check prevents the system from creating multiple open work packages for the same maintenance plan.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Round Work Package Generation ==&lt;br /&gt;
&lt;br /&gt;
A round maintenance plan creates a main work package for the round.&lt;br /&gt;
&lt;br /&gt;
After the main work package has been created, the system processes the maintenance plans linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For each linked child maintenance plan, the system creates an additional work package.&lt;br /&gt;
&lt;br /&gt;
These additional generated work packages are assigned to the main round work package via &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For child plans used in a round, the system does not care whether the child plan:&lt;br /&gt;
&lt;br /&gt;
* has &amp;lt;code&amp;gt;PLAN_STATUS == Active&amp;lt;/code&amp;gt;&lt;br /&gt;
* has &amp;lt;code&amp;gt;AUTO_CREATE == true&amp;lt;/code&amp;gt;&lt;br /&gt;
* has a valid &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
* has a valid &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
* is due based on its own &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Rule:''' The round plan controls the timing. The child plans define what additional work packages should be created as part of the round.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29917</id>
		<title>MROMaintenancePlans</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29917"/>
				<updated>2026-06-15T05:45:39Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
= MRO Maintenance Planning =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Summary:''' The Maintenance Planning feature in MRO is used to plan recurring maintenance work and automatically generate work packages from maintenance plans. The maintenance plan defines the rules. The generated work package is used by users to execute and complete the actual maintenance work.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
A maintenance plan defines the rules for creating work packages. These rules include:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package belongs to&lt;br /&gt;
* which template work package is used&lt;br /&gt;
* how the template work package is copied&lt;br /&gt;
* how many days before the planned execution date the work package may be generated&lt;br /&gt;
* how future planning dates are calculated&lt;br /&gt;
&lt;br /&gt;
The actual maintenance work is not executed by the maintenance plan itself. The maintenance plan creates work packages. These generated work packages are then used by users to execute and complete the maintenance work.&lt;br /&gt;
&lt;br /&gt;
In MRO, &amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt; is the abstract base class for maintenance planning. It provides the common foundation for maintenance plans, but it is not intended to be used directly.&lt;br /&gt;
&lt;br /&gt;
The fully implemented maintenance plan types in standard MRO are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Custom maintenance plan types can be implemented by deriving from the abstract &amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt; base class. However, the standard MRO maintenance planning feature is based on cyclic maintenance plans and round maintenance plans.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt; support recurrence-based scheduling. This includes planned execution dates, automatic work package generation, calendar-based scheduling, completion-based scheduling, automatic recalculation of scheduling dates, and generation based on due dates.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt; additionally supports maintenance rounds. A round maintenance plan creates one main work package for the round. It can also create additional work packages from child maintenance plans linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;. These additional work packages are assigned to the main round work package.&lt;br /&gt;
&lt;br /&gt;
== Basic Concept ==&lt;br /&gt;
&lt;br /&gt;
The maintenance planning feature is built around four main parts:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Part&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines the rules for creating generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Template work package&lt;br /&gt;
| Defines what the generated work package should look like.&lt;br /&gt;
|-&lt;br /&gt;
| Replication configuration&lt;br /&gt;
| Defines how the template work package is copied.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package&lt;br /&gt;
| The actual work package created by the maintenance plan.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Maintenance Plan ===&lt;br /&gt;
&lt;br /&gt;
The maintenance plan defines the rules for creating work packages.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package should belong to&lt;br /&gt;
* how many days before the planned execution date the work package may be created&lt;br /&gt;
* which template work package should be used&lt;br /&gt;
* which recurrence pattern should be used&lt;br /&gt;
* whether future dates are calculated calendar-based or completion-based&lt;br /&gt;
&lt;br /&gt;
=== Template Work Package ===&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
It is the source work package that is copied when the maintenance plan creates a new work package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Rule:''' Only work packages with &amp;lt;code&amp;gt;ISTEMPLATE&amp;lt;/code&amp;gt; set can be used as template work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Replication Configuration ===&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how referenced objects are handled&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package ===&lt;br /&gt;
&lt;br /&gt;
The generated work package is the actual result created by the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
# A pump has to be inspected every month.&lt;br /&gt;
# A cyclic maintenance plan is created for this pump.&lt;br /&gt;
# The plan is configured with a monthly recurrence, an assigned asset, a template work package, and a replication configuration.&lt;br /&gt;
# When the plan becomes due, the system uses a replication job to create a new work package from the configured template work package.&lt;br /&gt;
# The generated work package is linked back to the maintenance plan via &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This link allows the maintenance plan to react when the generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
== MaintenancePlan Base Class ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt; is the abstract base class for maintenance planning in MRO.&lt;br /&gt;
&lt;br /&gt;
It provides the common properties and logic required by maintenance plan implementations.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;code&amp;gt;MaintenancePlan&amp;lt;/code&amp;gt; is abstract, users do not create or use this base class directly in the standard MRO feature. Instead, the concrete maintenance plan types are used:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Developers can derive from the abstract base class if a project requires a custom maintenance plan type. In that case, the custom implementation must provide the missing plan-specific behavior.&lt;br /&gt;
&lt;br /&gt;
=== Base Class Properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the asset that requires maintenance.&lt;br /&gt;
| Required for a valid cyclic maintenance plan.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the template work package.&lt;br /&gt;
| The linked work package must have &amp;lt;code&amp;gt;ISTEMPLATE&amp;lt;/code&amp;gt; set.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt;&lt;br /&gt;
| Links the maintenance plan to the replication configuration.&lt;br /&gt;
| Required for work package generation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines the planned execution date of the next maintenance activity.&lt;br /&gt;
| Used as &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; on generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines how many days before &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; the system may create the work package.&lt;br /&gt;
| Does not define the recurrence interval.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
| Calculated by the system.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines whether the maintenance plan is active or inactive.&lt;br /&gt;
| Only active plans are considered for automatic generation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines whether the system is allowed to automatically create work packages.&lt;br /&gt;
| If disabled, the plan does not automatically create work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Stores the most recent completion date of a generated work package linked to the maintenance plan.&lt;br /&gt;
| Especially relevant for completion-based scheduling.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PRIORITY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Numeric value that can be used to sort maintenance plans.&lt;br /&gt;
| For round maintenance plans, see also &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; is the link to the asset that requires maintenance.&lt;br /&gt;
&lt;br /&gt;
This can be, for example:&lt;br /&gt;
&lt;br /&gt;
* equipment&lt;br /&gt;
* a functional location&lt;br /&gt;
* another customized maintainable object deriving from &amp;lt;code&amp;gt;Asset&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to the same asset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Validation:''' A cyclic maintenance plan requires &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; to be assigned in order to be valid.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; is the link to the template work package.&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
When the maintenance plan creates a work package, the system copies the work package referenced by &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The linked work package must be a template work package. This means its &amp;lt;code&amp;gt;ISTEMPLATE&amp;lt;/code&amp;gt; property must be set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Validation:''' If &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; is not configured, the maintenance plan cannot create a work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt; is the link to the replication configuration.&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied into a generated work package.&lt;br /&gt;
&lt;br /&gt;
It can define, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how references are copied&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Validation:''' If &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt; is not configured, the maintenance plan cannot create a work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; defines the planned execution date of the next maintenance activity.&lt;br /&gt;
&lt;br /&gt;
It answers the question: '''When should the next maintenance work be performed?'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is not necessarily the date on which the work package is created.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this example, the system may create the work package on 12 March, but the generated work package is planned for 15 March.&lt;br /&gt;
&lt;br /&gt;
When a work package is generated, the generated work package receives the maintenance plan’s &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; as its &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; defines how many days before &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; the system may create the work package.&lt;br /&gt;
&lt;br /&gt;
This is used to create work packages before the actual planned execution date.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| Resulting &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Note:''' &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; does not define the recurrence interval. It only defines how early the work package may be generated before the planned execution date.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is calculated by the system.&lt;br /&gt;
&lt;br /&gt;
It defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 12 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maintenance planning orchestrator searches for active plans where &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; has been reached.&lt;br /&gt;
&lt;br /&gt;
A plan can be considered for automatic work package generation when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE &amp;lt;= current date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; has not yet been reached, no work package is created.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt; defines whether the maintenance plan is active or inactive.&lt;br /&gt;
&lt;br /&gt;
Only active plans are considered for automatic work package generation. Inactive plans are ignored by the maintenance planning process.&lt;br /&gt;
&lt;br /&gt;
Typical values are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Inactive&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Active&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows users to temporarily disable a maintenance plan without deleting it.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; defines whether the system is allowed to automatically create work packages from the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; is enabled, the maintenance planning orchestrator can create work packages once the plan is due.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; is disabled, the plan does not automatically create work packages.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; stores the date when the most recent generated work package linked to the maintenance plan was completed.&lt;br /&gt;
&lt;br /&gt;
This property is especially important for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Previous generated work package completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| Next date is calculated from&lt;br /&gt;
| 20 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The system updates &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PRIORITY&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PRIORITY&amp;lt;/code&amp;gt; is a numeric value that can be used to sort maintenance plans.&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, there is also a property called &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The exact effect of &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; should only be documented after the implementation behavior has been verified.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Work Package Properties Used by Maintenance Planning ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Used on&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Links the generated work package back to the maintenance plan that triggered its creation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the template work package that was used to create the generated work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the asset for which the work package was created.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Stores the planned start date of the generated work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ORGA_STATUS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Generated work package&lt;br /&gt;
| Used to determine whether a generated work package is finished.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Assigns additional generated work packages to the main round work package.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Can be copied from &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; to structure or order round work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Additional round work package&lt;br /&gt;
| Can be copied from &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; to group round work packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt; is set on generated work packages.&lt;br /&gt;
&lt;br /&gt;
It stores the maintenance plan that triggered the creation of the work package.&lt;br /&gt;
&lt;br /&gt;
This is important because the maintenance plan itself does not directly store a list of generated work packages. Instead, generated work packages reference their source maintenance plan via &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This link allows the system to find work packages created from a maintenance plan and to update the maintenance plan when a generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; stores the template work package that was used to create the generated work package.&lt;br /&gt;
&lt;br /&gt;
This allows users and the system to see which template was used as the source.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt; stores the asset for which the work package was created.&lt;br /&gt;
&lt;br /&gt;
This is usually copied or assigned based on the maintenance plan’s &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; stores the planned start date of the generated work package.&lt;br /&gt;
&lt;br /&gt;
When a maintenance plan generates a work package, the system sets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
generated WorkPackage.PLANNED_START = MaintenancePlan.NEXT_DATE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;ORGA_STATUS&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ORGA_STATUS&amp;lt;/code&amp;gt; is used to determine whether a generated work package is finished.&lt;br /&gt;
&lt;br /&gt;
A work package is considered finished when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open work packages are generated work packages linked to the maintenance plan where:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS != 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Generation rule:''' A maintenance plan does not create another work package while it still has an open generated work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt; is used in round maintenance scenarios.&lt;br /&gt;
&lt;br /&gt;
When a round maintenance plan creates a main work package and additional work packages from linked child plans, the additional work packages are assigned to the main round work package via &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt; can be copied from the &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; relation to generated work packages in a round maintenance scenario.&lt;br /&gt;
&lt;br /&gt;
They can be used to order or group the additional work packages that belong to the generated round work package.&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; is used for recurring maintenance work on an asset.&lt;br /&gt;
&lt;br /&gt;
It is the standard maintenance plan type for maintenance activities that repeat according to a defined recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspect a pump every month&lt;br /&gt;
* service a machine every 6 months&lt;br /&gt;
* check safety equipment every Monday&lt;br /&gt;
* replace a filter every 30 days&lt;br /&gt;
* perform annual maintenance on a functional location&lt;br /&gt;
&lt;br /&gt;
A cyclic maintenance plan uses &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; to define the recurrence. It also uses &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; to define how future dates are calculated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Key concept:''' &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; defines whether the plan follows fixed calendar dates or whether the next date depends on the actual completion date of the previous generated work package.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
* Calendar-Based&lt;br /&gt;
* Completion-Based&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan Properties ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines the recurrence pattern.&lt;br /&gt;
| Must be valid and parseable.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines when the recurrence pattern starts.&lt;br /&gt;
| Used as the start point for recurrence calculation.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Optional end date for the recurrence.&lt;br /&gt;
| No further occurrences are generated after this date.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;&lt;br /&gt;
| Limits how many work packages can be created from the plan.&lt;br /&gt;
| Further occurrences stop once the count is reached.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Defines how &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated.&lt;br /&gt;
| Supports Calendar-Based and Completion-Based scheduling.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; defines the recurrence pattern of a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
It describes how often the maintenance should occur.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FREQ=DAILY&lt;br /&gt;
FREQ=WEEKLY;BYDAY=MO,WE,FR&lt;br /&gt;
FREQ=MONTHLY;BYMONTHDAY=15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system uses &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; to calculate future planned execution dates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Validation:''' If &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; is invalid and cannot be parsed, the cyclic maintenance plan is not valid and cannot create work packages.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; defines when the recurrence pattern starts.&lt;br /&gt;
&lt;br /&gt;
The recurrence rule is calculated from this date forward.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 01 January&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Monthly on the 15th&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The system uses these values to determine valid planned execution dates.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; is an optional end date for the recurrence.&lt;br /&gt;
&lt;br /&gt;
If this date is configured, no further occurrences are generated after this date.&lt;br /&gt;
&lt;br /&gt;
This can be used for maintenance plans that should only run until a certain date.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; limits how many work packages can be created from the plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;&lt;br /&gt;
| 10&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When the number of related generated work packages reaches &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;, the system no longer calculates new occurrences for the plan.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; defines how &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated for a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; is only relevant for concrete maintenance plan types that use recurrence logic, such as &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Scheduling mode&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Calendar-Based&lt;br /&gt;
| Future dates follow the recurrence pattern defined by &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Completion-Based&lt;br /&gt;
| Future dates are calculated from the actual completion date of the previous generated work package.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This property is one of the most important settings because it defines whether future dates follow the calendar or depend on the actual completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
== Calendar-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling is used when maintenance should follow fixed calendar occurrences.&lt;br /&gt;
&lt;br /&gt;
The next planned execution date is calculated according to &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; and the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
This means that delays in completing a work package do not automatically shift the whole future schedule.&lt;br /&gt;
&lt;br /&gt;
Use calendar-based scheduling when the maintenance should happen on fixed dates or fixed calendar intervals.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspection every 15th day of the month&lt;br /&gt;
* safety check every Monday&lt;br /&gt;
* yearly inspection every January&lt;br /&gt;
* quarterly maintenance in fixed maintenance windows&lt;br /&gt;
&lt;br /&gt;
=== How Calendar-Based Scheduling Works ===&lt;br /&gt;
&lt;br /&gt;
In calendar-based scheduling, the system calculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; based on the recurrence rule and the relevant dates of existing generated work packages.&lt;br /&gt;
&lt;br /&gt;
The system determines the highest relevant planned or finished date of generated work packages linked to the maintenance plan. Then it uses the recurrence rule to calculate the next valid occurrence after that date.&lt;br /&gt;
&lt;br /&gt;
This means the schedule continues according to the recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
If a work package is completed later than planned, the future schedule does not necessarily move with that completion date.&lt;br /&gt;
&lt;br /&gt;
=== Example: Calendar-Based Scheduling ===&lt;br /&gt;
&lt;br /&gt;
A pump must be inspected on the 15th of every month.&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Plan type&lt;br /&gt;
| &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
| Pump 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Pump Inspection Template&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt;&lt;br /&gt;
| Pump Inspection Replication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Calendar-Based&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Monthly on the 15th&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 01 January&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = 12 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the work package is planned, the system can calculate the next occurrence:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NEXT_DATE = 15 April&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the March work package is completed on 20 March, the next date still follows the monthly recurrence. The next planned execution date remains 15 April.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Result:''' The late completion does not shift the future schedule to 20 April.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Completion-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling is used when the next maintenance date should depend on the actual completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
This means that the interval starts after the work has actually been completed.&lt;br /&gt;
&lt;br /&gt;
Use completion-based scheduling when the maintenance should repeat based on the time since the last completed maintenance activity.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* service every 30 days after the last service&lt;br /&gt;
* inspection 6 months after the previous inspection was completed&lt;br /&gt;
* replacement 90 days after the previous replacement&lt;br /&gt;
* maintenance where a delay should also delay the next cycle&lt;br /&gt;
&lt;br /&gt;
=== How Completion-Based Scheduling Works ===&lt;br /&gt;
&lt;br /&gt;
In completion-based scheduling, the system recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; after a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
The completion date becomes the basis for the next occurrence.&lt;br /&gt;
&lt;br /&gt;
Planning changes alone do not define the next recurrence in the same way as calendar-based scheduling.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' The plan waits for the generated work package to be completed. Then the system calculates the next date from the completion date.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example: Completion-Based Scheduling ===&lt;br /&gt;
&lt;br /&gt;
A machine must be serviced every 30 days after the previous service was completed.&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Plan type&lt;br /&gt;
| &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
| Machine 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Machine Service Template&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt;&lt;br /&gt;
| Machine Service Replication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Every 30 days&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 01 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_STATUS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Result ====&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = 12 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;&lt;br /&gt;
| 15 March&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The work package is completed on 20 March.&lt;br /&gt;
&lt;br /&gt;
Because the plan is completion-based, the system calculates the next date from 20 March.&lt;br /&gt;
&lt;br /&gt;
If the recurrence is every 30 days:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| around 19 April&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| around 16 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Result:''' In this mode, the delay from 15 March to 20 March shifts the future schedule.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Calendar-Based vs Completion-Based Scheduling ==&lt;br /&gt;
&lt;br /&gt;
The difference is the date that is used as the basis for calculating &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Aspect&lt;br /&gt;
! Calendar-Based&lt;br /&gt;
! Completion-Based&lt;br /&gt;
|-&lt;br /&gt;
| Basis for &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Recurrence defined by &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Actual completion date of the previous generated work package&lt;br /&gt;
|-&lt;br /&gt;
| Effect of late completion&lt;br /&gt;
| Future dates are not automatically shifted&lt;br /&gt;
| Future dates move with the completion date&lt;br /&gt;
|-&lt;br /&gt;
| Typical use case&lt;br /&gt;
| Fixed maintenance windows, fixed calendar intervals, legal or organizational inspection dates&lt;br /&gt;
| Service intervals that depend on the actual last maintenance&lt;br /&gt;
|-&lt;br /&gt;
| Example&lt;br /&gt;
| Planned: 15 March&amp;lt;br /&amp;gt;Completed: 20 March&amp;lt;br /&amp;gt;Next date: 15 April&lt;br /&gt;
| Planned: 15 March&amp;lt;br /&amp;gt;Completed: 20 March&amp;lt;br /&amp;gt;Interval: 30 days&amp;lt;br /&amp;gt;Next date: around 19 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calendar-Based ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling should be used when the maintenance must follow fixed planned dates.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan follows the &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; calendar pattern.&lt;br /&gt;
* Future dates are not automatically shifted just because a work package was completed late.&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; can be recalculated after planning updates.&lt;br /&gt;
* It is useful for fixed maintenance windows and legally or organizationally fixed inspection dates.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Planned inspection&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| Completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| Next date&lt;br /&gt;
| 15 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The future date stays aligned with the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
=== Completion-Based ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling should be used when the next maintenance interval starts after the previous work was completed.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan waits for completion.&lt;br /&gt;
* The completion date is used as the basis for &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
* If the work is completed late, the future schedule moves.&lt;br /&gt;
* It is useful for service intervals that depend on the actual last maintenance.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Planned service&lt;br /&gt;
| 15 March&lt;br /&gt;
|-&lt;br /&gt;
| Completed&lt;br /&gt;
| 20 March&lt;br /&gt;
|-&lt;br /&gt;
| Interval&lt;br /&gt;
| 30 days&lt;br /&gt;
|-&lt;br /&gt;
| Next date&lt;br /&gt;
| around 19 April&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The future date shifts because the work was completed later.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt; is used for recurring maintenance rounds.&lt;br /&gt;
&lt;br /&gt;
It is a specialized type of cyclic maintenance plan. This means that it also uses &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In addition to the cyclic scheduling logic, a round maintenance plan includes child maintenance plans linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the round maintenance plan is due, the system creates the main work package for the round. Then it creates additional work packages from the child maintenance plans linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important for child plans:''' For the child plans, the system does not care whether they are due, active, auto-created, or whether they have a valid &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;. The round maintenance plan uses the child plans as configuration for the additional work packages that should be created as part of the round.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important configuration on the child plans is their work package generation setup, especially the configured template work package and replication setup.&lt;br /&gt;
&lt;br /&gt;
=== Generated Result ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Element&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| Round maintenance plan&lt;br /&gt;
| Machine Room Round&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 1&lt;br /&gt;
| Pump 1 Inspection&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 2&lt;br /&gt;
| Pump 2 Inspection&lt;br /&gt;
|-&lt;br /&gt;
| Linked child plan 3&lt;br /&gt;
| Pump 3 Inspection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Generated main work package:&lt;br /&gt;
&lt;br /&gt;
* Machine Room Round&lt;br /&gt;
&lt;br /&gt;
Additional generated work packages inside the main round work package:&lt;br /&gt;
&lt;br /&gt;
* Pump 1 Inspection&lt;br /&gt;
* Pump 2 Inspection&lt;br /&gt;
* Pump 3 Inspection&lt;br /&gt;
&lt;br /&gt;
The additional work packages are assigned to the main round work package. This allows the result of the round maintenance plan to be structured as one complete maintenance round.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan Properties and Relations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property / relation&lt;br /&gt;
! Purpose&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;&lt;br /&gt;
| Links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
| Child plans define additional work packages created as part of the round.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exists on &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;.&lt;br /&gt;
| Runtime behavior must be verified before documenting further effects.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Can exist on the relation between the round plan and a child plan.&lt;br /&gt;
| Can be copied to generated work packages.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Can exist on the relation between the round plan and a child plan.&lt;br /&gt;
| Can be copied to generated work packages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt; links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
&lt;br /&gt;
The linked child plans define which additional work packages should be generated when the round maintenance plan is due.&lt;br /&gt;
&lt;br /&gt;
When the round plan generates work packages, the system creates:&lt;br /&gt;
&lt;br /&gt;
* one main work package from the round plan’s own &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
* one additional work package for each child maintenance plan linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The child maintenance plans do not need to be due themselves for the round maintenance plan to use them during round generation.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; exists on &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Open point:''' The exact runtime effect of &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; should be documented after the implementation behavior has been verified. Until that behavior is confirmed, the wiki should not claim that &amp;lt;code&amp;gt;PLAN_SELECTION_RULE&amp;lt;/code&amp;gt; filters child plans by due date, asset, or priority.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
The relation between the round maintenance plan and a linked child maintenance plan can contain &amp;lt;code&amp;gt;ORDERID&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPID&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When the system creates an additional work package from a linked child maintenance plan, these values can be copied to the generated work package.&lt;br /&gt;
&lt;br /&gt;
This can be used to structure, order, or group the additional work packages in the generated round.&lt;br /&gt;
&lt;br /&gt;
== Properties Calculated or Updated by the System ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Property / link&lt;br /&gt;
! System behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Calculated from &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Calculated or recalculated for &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Updated when a generated work package is completed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set on generated work packages from the maintenance plan’s &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Links on generated work packages&lt;br /&gt;
| Required links are set automatically during generation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is calculated by the system from &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value is recalculated when:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changes&lt;br /&gt;
* &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; changes&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is recalculated after planning or completion&lt;br /&gt;
* recurrence settings cause a new &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; to be calculated&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;code&amp;gt;CyclicMaintenancePlan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RoundMaintenancePlan&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; can be calculated or recalculated by the system.&lt;br /&gt;
&lt;br /&gt;
The calculation depends on:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
* related generated work packages&lt;br /&gt;
* planning events&lt;br /&gt;
* completion events&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling, &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated from the recurrence pattern and the highest relevant planned or finished date of related generated work packages.&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling, &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated from the completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; is updated by the system when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
It stores the latest completion date of a generated work package related to the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
This value is especially relevant for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; on Generated Work Packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package from a maintenance plan, it sets the generated work package’s &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; to the maintenance plan’s &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MaintenancePlan.NEXT_DATE: 15 March&lt;br /&gt;
Generated WorkPackage.PLANNED_START: 15 March&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links on Generated Work Packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package, it automatically sets the required links on the generated work package.&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to:&lt;br /&gt;
&lt;br /&gt;
* the source maintenance plan via &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt;&lt;br /&gt;
* the template work package via &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt;&lt;br /&gt;
* the assigned asset via &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, additional generated work packages from linked child maintenance plans are assigned to the main round work package via &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Properties and Events That Trigger Recalculation ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Trigger&lt;br /&gt;
! Recalculation behavior&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; based on the new recurrence rule and selected &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates the schedule and may change &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Checks whether future occurrences are still available.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; according to the selected scheduling mode.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; changed&lt;br /&gt;
| Notifies the linked maintenance plan and may trigger date recalculation.&lt;br /&gt;
|-&lt;br /&gt;
| Generated work package completed&lt;br /&gt;
| Updates &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt; and recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; according to &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changes, the system recalculates &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;LEAD_DAYS&amp;lt;/code&amp;gt; changes, the system recalculates &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt; changes, the recurrence pattern changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; based on the new recurrence rule and the selected &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is recalculated, &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;RRULE_START_DATE&amp;lt;/code&amp;gt; changes, the start point of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates the schedule. This can change &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changes, &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt; changes, the end boundary of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system checks whether future occurrences are still available.&lt;br /&gt;
&lt;br /&gt;
If no further occurrence is possible because of &amp;lt;code&amp;gt;RRULE_UNTIL_DATE&amp;lt;/code&amp;gt;, the system cannot calculate a new &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt; changes, the system checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
&lt;br /&gt;
If the number of related generated work packages is greater than or equal to &amp;lt;code&amp;gt;RRULE_COUNT&amp;lt;/code&amp;gt;, the system does not calculate further occurrences.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt; changes, the logic for calculating future dates changes.&lt;br /&gt;
&lt;br /&gt;
Changing to Calendar-Based means that the plan follows the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
Changing to Completion-Based means that the plan calculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; from the completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
Because this changes the calculation logic, the system recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; according to the selected &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; changes, &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; Changed ===&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; of a generated work package is set or changed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
For calendar-based cyclic maintenance plans, this can trigger recalculation of &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;. The system uses the planning information to continue the calendar-based recurrence.&lt;br /&gt;
&lt;br /&gt;
For completion-based cyclic maintenance plans, a &amp;lt;code&amp;gt;PLANNED_START&amp;lt;/code&amp;gt; change does not drive the recurrence in the same way. &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is mainly calculated after the work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== Generated Work Package Completed ===&lt;br /&gt;
&lt;br /&gt;
When a generated work package is completed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
A work package is considered completed when:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system updates &amp;lt;code&amp;gt;LAST_DATE&amp;lt;/code&amp;gt;. Then the system recalculates &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; according to &amp;lt;code&amp;gt;SCHEDULING_MODE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the system continues according to the calendar recurrence&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated from the recurrence pattern and relevant planned or finished dates&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the completion date becomes the basis for the next occurrence&lt;br /&gt;
* &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is calculated from the completion date&lt;br /&gt;
&lt;br /&gt;
After &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt; is updated, &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt; is recalculated.&lt;br /&gt;
&lt;br /&gt;
== Work Package Generation Logic ==&lt;br /&gt;
&lt;br /&gt;
=== When Is a Plan Ready to Create a Work Package? ===&lt;br /&gt;
&lt;br /&gt;
A cyclic or round maintenance plan can create a work package only if all required conditions are fulfilled.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Requirement&lt;br /&gt;
! Condition&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Plan validity&lt;br /&gt;
| The plan must be valid.&lt;br /&gt;
| For cyclic maintenance plans, this requires a valid &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;, assigned &amp;lt;code&amp;gt;LK_ASSET&amp;lt;/code&amp;gt;, and available &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Plan status&lt;br /&gt;
| &amp;lt;code&amp;gt;PLAN_STATUS == Active&amp;lt;/code&amp;gt;&lt;br /&gt;
| Inactive plans are ignored.&lt;br /&gt;
|-&lt;br /&gt;
| Automatic generation&lt;br /&gt;
| &amp;lt;code&amp;gt;AUTO_CREATE&amp;lt;/code&amp;gt; must be enabled.&lt;br /&gt;
| If disabled, the plan does not automatically create work packages.&lt;br /&gt;
|-&lt;br /&gt;
| Template work package&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_WP_TMPL&amp;lt;/code&amp;gt; must be set.&lt;br /&gt;
| The linked work package must be a template work package.&lt;br /&gt;
|-&lt;br /&gt;
| Replication configuration&lt;br /&gt;
| &amp;lt;code&amp;gt;LK_REPLICATION_CONFIG&amp;lt;/code&amp;gt; must be set.&lt;br /&gt;
| Required to copy the template work package.&lt;br /&gt;
|-&lt;br /&gt;
| Earliest generation date&lt;br /&gt;
| &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE &amp;lt;= current date&amp;lt;/code&amp;gt;&lt;br /&gt;
| The plan may only generate once the earliest generation date has been reached.&lt;br /&gt;
|-&lt;br /&gt;
| Open work packages&lt;br /&gt;
| No open generated work package may exist for the plan.&lt;br /&gt;
| There must be no generated work package linked via &amp;lt;code&amp;gt;LK_MAINTENANCE_PLAN&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;ORGA_STATUS != 100&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Important:''' The open work package check prevents the system from creating multiple open work packages for the same maintenance plan.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Round Work Package Generation ==&lt;br /&gt;
&lt;br /&gt;
A round maintenance plan creates a main work package for the round.&lt;br /&gt;
&lt;br /&gt;
After the main work package has been created, the system processes the maintenance plans linked via &amp;lt;code&amp;gt;SYSREL_ROUND_RELATION&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For each linked child maintenance plan, the system creates an additional work package.&lt;br /&gt;
&lt;br /&gt;
These additional generated work packages are assigned to the main round work package via &amp;lt;code&amp;gt;TASK_OWNER&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For child plans used in a round, the system does not care whether the child plan:&lt;br /&gt;
&lt;br /&gt;
* has &amp;lt;code&amp;gt;PLAN_STATUS == Active&amp;lt;/code&amp;gt;&lt;br /&gt;
* has &amp;lt;code&amp;gt;AUTO_CREATE == true&amp;lt;/code&amp;gt;&lt;br /&gt;
* has a valid &amp;lt;code&amp;gt;RRULE&amp;lt;/code&amp;gt;&lt;br /&gt;
* has a valid &amp;lt;code&amp;gt;NEXT_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
* is due based on its own &amp;lt;code&amp;gt;EARLIEST_GENERATION_DATE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;&amp;quot;&amp;gt;&lt;br /&gt;
'''Rule:''' The round plan controls the timing. The child plans define what additional work packages should be created as part of the round.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29908</id>
		<title>MROMaintenancePlans</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROMaintenancePlans&amp;diff=29908"/>
				<updated>2026-06-07T12:47:18Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: Created page with &amp;quot;{{UnderConstructionStart}} == MRO Maintenance Planning ==  The Maintenance Planning feature in MRO is used to plan recurring maintenance work and automatically generate work p...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
== MRO Maintenance Planning ==&lt;br /&gt;
&lt;br /&gt;
The Maintenance Planning feature in MRO is used to plan recurring maintenance work and automatically generate work packages from maintenance plans.&lt;br /&gt;
&lt;br /&gt;
A maintenance plan defines the rules for creating work packages. These rules include when a work package should be created, which asset it belongs to, which template work package should be used, how the template work package should be copied, how early before the planned execution date the work package may be generated, and how future planning dates are calculated.&lt;br /&gt;
&lt;br /&gt;
The actual maintenance work is not executed by the maintenance plan itself. The maintenance plan creates work packages. These generated work packages are then used by users to execute and complete the actual maintenance work.&lt;br /&gt;
&lt;br /&gt;
In MRO, MaintenancePlan is the abstract base class for maintenance planning. It provides the common foundation for maintenance plans, but it is not intended to be used directly because it is abstract.&lt;br /&gt;
&lt;br /&gt;
The fully implemented maintenance plan types in standard MRO are:&lt;br /&gt;
&lt;br /&gt;
* CyclicMaintenancePlan&lt;br /&gt;
* RoundMaintenancePlan&lt;br /&gt;
&lt;br /&gt;
Custom maintenance plan types can be implemented by deriving from the abstract MaintenancePlan base class. However, the standard MRO maintenance planning feature is based on cyclic maintenance plans and round maintenance plans.&lt;br /&gt;
&lt;br /&gt;
CyclicMaintenancePlan and RoundMaintenancePlan support recurrence-based scheduling. This includes planned execution dates, automatic work package generation, calendar-based scheduling, completion-based scheduling, automatic recalculation of scheduling dates, and generation based on due dates.&lt;br /&gt;
&lt;br /&gt;
RoundMaintenancePlan additionally supports maintenance rounds. A round maintenance plan creates one main work package for the round. It can also create additional work packages from child maintenance plans linked via SYSREL_ROUND_RELATION. These additional work packages are assigned to the main round work package.&lt;br /&gt;
&lt;br /&gt;
== Basic concept ==&lt;br /&gt;
&lt;br /&gt;
The maintenance planning feature is built around four main parts:&lt;br /&gt;
&lt;br /&gt;
* the maintenance plan&lt;br /&gt;
* the template work package&lt;br /&gt;
* the replication configuration&lt;br /&gt;
* the generated work package&lt;br /&gt;
&lt;br /&gt;
=== Maintenance plan ===&lt;br /&gt;
&lt;br /&gt;
The maintenance plan defines the rules for creating work packages.&lt;br /&gt;
&lt;br /&gt;
This includes, for example:&lt;br /&gt;
&lt;br /&gt;
* when a work package should be created&lt;br /&gt;
* which asset the work package should belong to&lt;br /&gt;
* how many days before the planned execution date the work package may be created&lt;br /&gt;
* which template work package should be used&lt;br /&gt;
* which recurrence pattern should be used&lt;br /&gt;
* whether future dates are calculated calendar-based or completion-based&lt;br /&gt;
&lt;br /&gt;
=== Template work package ===&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
This means the template work package is the source work package that is copied when the maintenance plan creates a new work package.&lt;br /&gt;
&lt;br /&gt;
Only work packages with ISTEMPLATE set can be used as template work packages.&lt;br /&gt;
&lt;br /&gt;
=== Replication configuration ===&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied.&lt;br /&gt;
&lt;br /&gt;
This includes, for example, which properties are copied, how referenced objects are handled, and what the target meta class of the generated work package should be.&lt;br /&gt;
&lt;br /&gt;
=== Generated work package ===&lt;br /&gt;
&lt;br /&gt;
The generated work package is the actual result created by the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
A pump has to be inspected every month.&lt;br /&gt;
&lt;br /&gt;
A cyclic maintenance plan is created for this pump. The plan is configured with a monthly recurrence, an assigned asset, a template work package, and a replication configuration.&lt;br /&gt;
&lt;br /&gt;
When the plan becomes due, the system uses a replication job to create a new work package from the configured template work package.&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked back to the maintenance plan via LK_MAINTENANCE_PLAN. This allows the maintenance plan to react when the generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
== MaintenancePlan base class ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
MaintenancePlan is the abstract base class for maintenance planning in MRO.&lt;br /&gt;
&lt;br /&gt;
It provides the common properties and logic that are required by maintenance plan implementations.&lt;br /&gt;
&lt;br /&gt;
Because MaintenancePlan is abstract, users do not create or use this base class directly in the standard MRO feature.&lt;br /&gt;
&lt;br /&gt;
Instead, the concrete maintenance plan types are used:&lt;br /&gt;
&lt;br /&gt;
* CyclicMaintenancePlan&lt;br /&gt;
* RoundMaintenancePlan&lt;br /&gt;
&lt;br /&gt;
Developers can derive from the abstract base class if a project requires a custom maintenance plan type. In that case, the custom implementation must provide the missing plan-specific behavior.&lt;br /&gt;
&lt;br /&gt;
=== LK_ASSET ===&lt;br /&gt;
&lt;br /&gt;
LK_ASSET is the link to the asset that requires maintenance.&lt;br /&gt;
&lt;br /&gt;
This can be, for example:&lt;br /&gt;
&lt;br /&gt;
* equipment&lt;br /&gt;
* a functional location&lt;br /&gt;
* another customized maintainable object deriving from Asset&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to the same asset.&lt;br /&gt;
&lt;br /&gt;
A cyclic maintenance plan requires LK_ASSET to be assigned in order to be valid.&lt;br /&gt;
&lt;br /&gt;
=== LK_WP_TMPL ===&lt;br /&gt;
&lt;br /&gt;
LK_WP_TMPL is the link to the template work package.&lt;br /&gt;
&lt;br /&gt;
The template work package defines what the generated work package should look like.&lt;br /&gt;
&lt;br /&gt;
When the maintenance plan creates a work package, the system copies the work package referenced by LK_WP_TMPL.&lt;br /&gt;
&lt;br /&gt;
The linked work package must be a template work package. This means its ISTEMPLATE property must be set.&lt;br /&gt;
&lt;br /&gt;
If LK_WP_TMPL is not configured, the maintenance plan cannot create a work package.&lt;br /&gt;
&lt;br /&gt;
=== LK_REPLICATION_CONFIG ===&lt;br /&gt;
&lt;br /&gt;
LK_REPLICATION_CONFIG is the link to the replication configuration.&lt;br /&gt;
&lt;br /&gt;
The replication configuration defines how the template work package is copied into a generated work package.&lt;br /&gt;
&lt;br /&gt;
It can define, for example:&lt;br /&gt;
&lt;br /&gt;
* which properties are copied&lt;br /&gt;
* how references are copied&lt;br /&gt;
* what the target meta class of the generated work package should be&lt;br /&gt;
&lt;br /&gt;
If LK_REPLICATION_CONFIG is not configured, the maintenance plan cannot create a work package.&lt;br /&gt;
&lt;br /&gt;
=== NEXT_DATE ===&lt;br /&gt;
&lt;br /&gt;
NEXT_DATE defines the planned execution date of the next maintenance activity.&lt;br /&gt;
&lt;br /&gt;
It answers the question: When should the next maintenance work be performed?&lt;br /&gt;
&lt;br /&gt;
NEXT_DATE is not necessarily the date on which the work package is created.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
NEXT_DATE: 15 March&lt;br /&gt;
LEAD_DAYS: 3&lt;br /&gt;
EARLIEST_GENERATION_DATE: 12 March&lt;br /&gt;
&lt;br /&gt;
In this example, the system may create the work package on 12 March, but the generated work package is planned for 15 March.&lt;br /&gt;
&lt;br /&gt;
When a work package is generated, the generated work package receives the maintenance plan’s NEXT_DATE as its PLANNED_START.&lt;br /&gt;
&lt;br /&gt;
=== LEAD_DAYS ===&lt;br /&gt;
&lt;br /&gt;
LEAD_DAYS defines how many days before NEXT_DATE the system may create the work package.&lt;br /&gt;
&lt;br /&gt;
This is used to create work packages before the actual planned execution date.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
NEXT_DATE: 15 March&lt;br /&gt;
LEAD_DAYS: 3&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
EARLIEST_GENERATION_DATE: 12 March&lt;br /&gt;
&lt;br /&gt;
This means that the work package can be created from 12 March onward.&lt;br /&gt;
&lt;br /&gt;
LEAD_DAYS does not define the recurrence interval. It only defines how early the work package may be generated before the planned execution date.&lt;br /&gt;
&lt;br /&gt;
=== EARLIEST_GENERATION_DATE ===&lt;br /&gt;
&lt;br /&gt;
EARLIEST_GENERATION_DATE is calculated by the system.&lt;br /&gt;
&lt;br /&gt;
It defines the earliest date on which the maintenance plan may create a work package.&lt;br /&gt;
&lt;br /&gt;
The system calculates it like this:&lt;br /&gt;
&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
NEXT_DATE: 15 March&lt;br /&gt;
LEAD_DAYS: 3&lt;br /&gt;
EARLIEST_GENERATION_DATE: 12 March&lt;br /&gt;
&lt;br /&gt;
The maintenance planning orchestrator searches for active plans where EARLIEST_GENERATION_DATE has been reached.&lt;br /&gt;
&lt;br /&gt;
A plan can be considered for automatic work package generation when:&lt;br /&gt;
&lt;br /&gt;
EARLIEST_GENERATION_DATE &amp;lt;= current date&lt;br /&gt;
&lt;br /&gt;
If EARLIEST_GENERATION_DATE has not yet been reached, no work package is created.&lt;br /&gt;
&lt;br /&gt;
=== PLAN_STATUS ===&lt;br /&gt;
&lt;br /&gt;
PLAN_STATUS defines whether the maintenance plan is active or inactive.&lt;br /&gt;
&lt;br /&gt;
Only active plans are considered for automatic work package generation.&lt;br /&gt;
&lt;br /&gt;
Inactive plans are ignored by the maintenance planning process.&lt;br /&gt;
&lt;br /&gt;
This allows users to temporarily disable a maintenance plan without deleting it.&lt;br /&gt;
&lt;br /&gt;
Typical values are:&lt;br /&gt;
&lt;br /&gt;
* Inactive&lt;br /&gt;
* Active&lt;br /&gt;
&lt;br /&gt;
=== AUTO_CREATE ===&lt;br /&gt;
&lt;br /&gt;
AUTO_CREATE defines whether the system is allowed to automatically create work packages from the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
If AUTO_CREATE is enabled, the maintenance planning orchestrator can create work packages once the plan is due.&lt;br /&gt;
&lt;br /&gt;
If AUTO_CREATE is disabled, the plan does not automatically create work packages.&lt;br /&gt;
&lt;br /&gt;
=== LAST_DATE ===&lt;br /&gt;
&lt;br /&gt;
LAST_DATE stores the date when the most recent generated work package linked to the maintenance plan was completed.&lt;br /&gt;
&lt;br /&gt;
This property is especially important for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
In completion-based scheduling, the completion date of the previous generated work package is used to calculate the next planned execution date.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Previous generated work package completed: 20 March&lt;br /&gt;
SCHEDULING_MODE: Completion-Based&lt;br /&gt;
Next date is calculated from: 20 March&lt;br /&gt;
&lt;br /&gt;
The system updates LAST_DATE when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== PRIORITY ===&lt;br /&gt;
&lt;br /&gt;
PRIORITY is a numeric value that can be used to sort maintenance plans.&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, there is also a property called PLAN_SELECTION_RULE. The exact effect of this property should be documented only after the implementation behavior has been verified.&lt;br /&gt;
&lt;br /&gt;
== Work package properties used by maintenance planning ==&lt;br /&gt;
&lt;br /&gt;
=== LK_MAINTENANCE_PLAN ===&lt;br /&gt;
&lt;br /&gt;
LK_MAINTENANCE_PLAN is set on generated work packages.&lt;br /&gt;
&lt;br /&gt;
It stores the maintenance plan that triggered the creation of the work package.&lt;br /&gt;
&lt;br /&gt;
This is important because the maintenance plan itself does not directly store a list of generated work packages. Instead, generated work packages reference their source maintenance plan via LK_MAINTENANCE_PLAN.&lt;br /&gt;
&lt;br /&gt;
This link allows the system to find work packages created from a maintenance plan and to update the maintenance plan when a generated work package is planned or completed.&lt;br /&gt;
&lt;br /&gt;
=== LK_WP_TMPL ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, LK_WP_TMPL stores the template work package that was used to create the generated work package.&lt;br /&gt;
&lt;br /&gt;
This allows users and the system to see which template was used as the source.&lt;br /&gt;
&lt;br /&gt;
=== LK_ASSET ===&lt;br /&gt;
&lt;br /&gt;
On a generated work package, LK_ASSET stores the asset for which the work package was created.&lt;br /&gt;
&lt;br /&gt;
This is usually copied or assigned based on the maintenance plan’s LK_ASSET.&lt;br /&gt;
&lt;br /&gt;
=== PLANNED_START ===&lt;br /&gt;
&lt;br /&gt;
PLANNED_START stores the planned start date of the generated work package.&lt;br /&gt;
&lt;br /&gt;
When a maintenance plan generates a work package, the system sets:&lt;br /&gt;
&lt;br /&gt;
generated WorkPackage.PLANNED_START = MaintenancePlan.NEXT_DATE&lt;br /&gt;
&lt;br /&gt;
=== ORGA_STATUS ===&lt;br /&gt;
&lt;br /&gt;
ORGA_STATUS is used to determine whether a generated work package is finished.&lt;br /&gt;
&lt;br /&gt;
A work package is considered finished when:&lt;br /&gt;
&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&lt;br /&gt;
Open work packages are generated work packages linked to the maintenance plan where ORGA_STATUS != 100.&lt;br /&gt;
&lt;br /&gt;
A maintenance plan does not create another work package while it still has an open generated work package.&lt;br /&gt;
&lt;br /&gt;
=== TASK_OWNER ===&lt;br /&gt;
&lt;br /&gt;
TASK_OWNER is used in round maintenance scenarios.&lt;br /&gt;
&lt;br /&gt;
When a round maintenance plan creates a main work package and additional work packages from linked child plans, the additional work packages are assigned to the main round work package via TASK_OWNER.&lt;br /&gt;
&lt;br /&gt;
=== ORDERID and GROUPID ===&lt;br /&gt;
&lt;br /&gt;
ORDERID and GROUPID can be copied from the SYSREL_ROUND_RELATION relation to generated work packages in a round maintenance scenario.&lt;br /&gt;
&lt;br /&gt;
They can be used to order or group the additional work packages that belong to the generated round work package.&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A CyclicMaintenancePlan is used for recurring maintenance work on an asset.&lt;br /&gt;
&lt;br /&gt;
It is the standard maintenance plan type for maintenance activities that repeat according to a defined recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspect a pump every month&lt;br /&gt;
* service a machine every 6 months&lt;br /&gt;
* check safety equipment every Monday&lt;br /&gt;
* replace a filter every 30 days&lt;br /&gt;
* perform annual maintenance on a functional location&lt;br /&gt;
&lt;br /&gt;
A cyclic maintenance plan uses RRULE to define the recurrence. It also uses SCHEDULING_MODE to define how future dates are calculated.&lt;br /&gt;
&lt;br /&gt;
SCHEDULING_MODE is important because it defines whether the plan follows fixed calendar dates or whether the next date depends on the actual completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
* Calendar-Based&lt;br /&gt;
* Completion-Based&lt;br /&gt;
&lt;br /&gt;
== CyclicMaintenancePlan properties ==&lt;br /&gt;
&lt;br /&gt;
=== RRULE ===&lt;br /&gt;
&lt;br /&gt;
RRULE defines the recurrence pattern of a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
It describes how often the maintenance should occur.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
FREQ=DAILY&lt;br /&gt;
&lt;br /&gt;
FREQ=WEEKLY;BYDAY=MO,WE,FR&lt;br /&gt;
&lt;br /&gt;
FREQ=MONTHLY;BYMONTHDAY=15&lt;br /&gt;
&lt;br /&gt;
The system uses RRULE to calculate future planned execution dates.&lt;br /&gt;
&lt;br /&gt;
If RRULE is invalid and cannot be parsed, the cyclic maintenance plan is not valid and cannot create work packages.&lt;br /&gt;
&lt;br /&gt;
=== RRULE_START_DATE ===&lt;br /&gt;
&lt;br /&gt;
RRULE_START_DATE defines when the recurrence pattern starts.&lt;br /&gt;
&lt;br /&gt;
The recurrence rule is calculated from this date forward.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
RRULE_START_DATE: 01 January&lt;br /&gt;
RRULE: monthly on the 15th&lt;br /&gt;
&lt;br /&gt;
The system uses these values to determine valid planned execution dates.&lt;br /&gt;
&lt;br /&gt;
=== RRULE_UNTIL_DATE ===&lt;br /&gt;
&lt;br /&gt;
RRULE_UNTIL_DATE is an optional end date for the recurrence.&lt;br /&gt;
&lt;br /&gt;
If this date is configured, no further occurrences are generated after this date.&lt;br /&gt;
&lt;br /&gt;
This can be used for maintenance plans that should only run until a certain date.&lt;br /&gt;
&lt;br /&gt;
=== RRULE_COUNT ===&lt;br /&gt;
&lt;br /&gt;
RRULE_COUNT limits how many work packages can be created from the plan.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
RRULE_COUNT: 10&lt;br /&gt;
&lt;br /&gt;
When the number of related generated work packages reaches RRULE_COUNT, the system no longer calculates new occurrences for the plan.&lt;br /&gt;
&lt;br /&gt;
=== SCHEDULING_MODE ===&lt;br /&gt;
&lt;br /&gt;
SCHEDULING_MODE defines how NEXT_DATE is calculated for a cyclic maintenance plan.&lt;br /&gt;
&lt;br /&gt;
SCHEDULING_MODE is only relevant for concrete maintenance plan types that use recurrence logic, such as CyclicMaintenancePlan and RoundMaintenancePlan.&lt;br /&gt;
&lt;br /&gt;
The supported scheduling modes are:&lt;br /&gt;
&lt;br /&gt;
* Calendar-Based&lt;br /&gt;
* Completion-Based&lt;br /&gt;
&lt;br /&gt;
This property is one of the most important settings because it defines whether future dates follow the calendar or depend on the actual completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
== Calendar-based scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling is used when maintenance should follow fixed calendar occurrences.&lt;br /&gt;
&lt;br /&gt;
The next planned execution date is calculated according to RRULE and the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
This means that delays in completing a work package do not automatically shift the whole future schedule.&lt;br /&gt;
&lt;br /&gt;
Use calendar-based scheduling when the maintenance should happen on fixed dates or fixed calendar intervals.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* inspection every 15th day of the month&lt;br /&gt;
* safety check every Monday&lt;br /&gt;
* yearly inspection every January&lt;br /&gt;
* quarterly maintenance in fixed maintenance windows&lt;br /&gt;
&lt;br /&gt;
=== How calendar-based scheduling works ===&lt;br /&gt;
&lt;br /&gt;
In calendar-based scheduling, the system calculates NEXT_DATE based on the recurrence rule and the relevant dates of existing generated work packages.&lt;br /&gt;
&lt;br /&gt;
The system determines the highest relevant planned or finished date of generated work packages linked to the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
Then it uses the recurrence rule to calculate the next valid occurrence after that date.&lt;br /&gt;
&lt;br /&gt;
This means the schedule continues according to the recurrence pattern.&lt;br /&gt;
&lt;br /&gt;
If a work package is completed later than planned, the future schedule does not necessarily move with that completion date.&lt;br /&gt;
&lt;br /&gt;
=== Example: calendar-based scheduling ===&lt;br /&gt;
&lt;br /&gt;
A pump must be inspected on the 15th of every month.&lt;br /&gt;
&lt;br /&gt;
Configuration:&lt;br /&gt;
&lt;br /&gt;
Plan Type: CyclicMaintenancePlan&lt;br /&gt;
LK_ASSET: Pump 1&lt;br /&gt;
LK_WP_TMPL: Pump Inspection Template&lt;br /&gt;
LK_REPLICATION_CONFIG: Pump Inspection Replication&lt;br /&gt;
SCHEDULING_MODE: Calendar-Based&lt;br /&gt;
RRULE: monthly on the 15th&lt;br /&gt;
RRULE_START_DATE: 01 January&lt;br /&gt;
NEXT_DATE: 15 March&lt;br /&gt;
LEAD_DAYS: 3&lt;br /&gt;
PLAN_STATUS: Active&lt;br /&gt;
AUTO_CREATE: enabled&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
EARLIEST_GENERATION_DATE: 12 March&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
PLANNED_START: 15 March&lt;br /&gt;
&lt;br /&gt;
After the work package is planned, the system can calculate the next occurrence.&lt;br /&gt;
&lt;br /&gt;
NEXT_DATE: 15 April&lt;br /&gt;
&lt;br /&gt;
If the March work package is completed on 20 March, the next date still follows the monthly recurrence.&lt;br /&gt;
&lt;br /&gt;
The next planned execution date remains 15 April.&lt;br /&gt;
&lt;br /&gt;
The late completion does not shift the future schedule to 20 April.&lt;br /&gt;
&lt;br /&gt;
== Completion-based scheduling ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling is used when the next maintenance date should depend on the actual completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
This means that the interval starts after the work has actually been completed.&lt;br /&gt;
&lt;br /&gt;
Use completion-based scheduling when the maintenance should repeat based on the time since the last completed maintenance activity.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* service every 30 days after the last service&lt;br /&gt;
* inspection 6 months after the previous inspection was completed&lt;br /&gt;
* replacement 90 days after the previous replacement&lt;br /&gt;
* maintenance where a delay should also delay the next cycle&lt;br /&gt;
&lt;br /&gt;
=== How completion-based scheduling works ===&lt;br /&gt;
&lt;br /&gt;
In completion-based scheduling, the system recalculates NEXT_DATE after a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
The completion date becomes the basis for the next occurrence.&lt;br /&gt;
&lt;br /&gt;
Planning changes alone do not define the next recurrence in the same way as calendar-based scheduling.&lt;br /&gt;
&lt;br /&gt;
The important point is:&lt;br /&gt;
&lt;br /&gt;
The plan waits for the generated work package to be completed. Then the system calculates the next date from the completion date.&lt;br /&gt;
&lt;br /&gt;
=== Example: completion-based scheduling ===&lt;br /&gt;
&lt;br /&gt;
A machine must be serviced every 30 days after the previous service was completed.&lt;br /&gt;
&lt;br /&gt;
Configuration:&lt;br /&gt;
&lt;br /&gt;
Plan Type: CyclicMaintenancePlan&lt;br /&gt;
LK_ASSET: Machine 1&lt;br /&gt;
LK_WP_TMPL: Machine Service Template&lt;br /&gt;
LK_REPLICATION_CONFIG: Machine Service Replication&lt;br /&gt;
SCHEDULING_MODE: Completion-Based&lt;br /&gt;
RRULE: every 30 days&lt;br /&gt;
RRULE_START_DATE: 01 March&lt;br /&gt;
NEXT_DATE: 15 March&lt;br /&gt;
LEAD_DAYS: 3&lt;br /&gt;
PLAN_STATUS: Active&lt;br /&gt;
AUTO_CREATE: enabled&lt;br /&gt;
&lt;br /&gt;
The system calculates:&lt;br /&gt;
&lt;br /&gt;
EARLIEST_GENERATION_DATE: 12 March&lt;br /&gt;
&lt;br /&gt;
On or after 12 March, the system can create the work package.&lt;br /&gt;
&lt;br /&gt;
Generated work package:&lt;br /&gt;
&lt;br /&gt;
PLANNED_START: 15 March&lt;br /&gt;
&lt;br /&gt;
The work package is completed on 20 March.&lt;br /&gt;
&lt;br /&gt;
Because the plan is completion-based, the system calculates the next date from 20 March.&lt;br /&gt;
&lt;br /&gt;
If the recurrence is every 30 days:&lt;br /&gt;
&lt;br /&gt;
NEXT_DATE: around 19 April&lt;br /&gt;
LEAD_DAYS: 3&lt;br /&gt;
EARLIEST_GENERATION_DATE: around 16 April&lt;br /&gt;
&lt;br /&gt;
In this mode, the delay from 15 March to 20 March shifts the future schedule.&lt;br /&gt;
&lt;br /&gt;
== Difference between calendar-based and completion-based scheduling ==&lt;br /&gt;
&lt;br /&gt;
The difference is the date that is used as the basis for calculating NEXT_DATE.&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling follows the recurrence defined by RRULE.&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling follows the actual completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
=== Calendar-based ===&lt;br /&gt;
&lt;br /&gt;
Calendar-based scheduling should be used when the maintenance must follow fixed planned dates.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan follows the RRULE calendar pattern.&lt;br /&gt;
* Future dates are not automatically shifted just because a work package was completed late.&lt;br /&gt;
* NEXT_DATE can be recalculated after planning updates.&lt;br /&gt;
* It is useful for fixed maintenance windows and legally or organizationally fixed inspection dates.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Planned inspection: 15 March&lt;br /&gt;
Completed: 20 March&lt;br /&gt;
Next date: 15 April&lt;br /&gt;
&lt;br /&gt;
The future date stays aligned with the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
=== Completion-based ===&lt;br /&gt;
&lt;br /&gt;
Completion-based scheduling should be used when the next maintenance interval starts after the previous work was completed.&lt;br /&gt;
&lt;br /&gt;
Characteristics:&lt;br /&gt;
&lt;br /&gt;
* The plan waits for completion.&lt;br /&gt;
* The completion date is used as the basis for NEXT_DATE.&lt;br /&gt;
* If the work is completed late, the future schedule moves.&lt;br /&gt;
* It is useful for service intervals that depend on the actual last maintenance.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Planned service: 15 March&lt;br /&gt;
Completed: 20 March&lt;br /&gt;
Interval: 30 days&lt;br /&gt;
Next date: around 19 April&lt;br /&gt;
&lt;br /&gt;
The future date shifts because the work was completed later.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose ===&lt;br /&gt;
&lt;br /&gt;
A RoundMaintenancePlan is used for recurring maintenance rounds.&lt;br /&gt;
&lt;br /&gt;
It is a specialized type of cyclic maintenance plan. This means that it also uses RRULE and SCHEDULING_MODE.&lt;br /&gt;
&lt;br /&gt;
In addition to the cyclic scheduling logic, a round maintenance plan includes child maintenance plans linked via SYSREL_ROUND_RELATION.&lt;br /&gt;
&lt;br /&gt;
When the round maintenance plan is due, the system creates the main work package for the round.&lt;br /&gt;
&lt;br /&gt;
Then it creates additional work packages from the child maintenance plans linked via SYSREL_ROUND_RELATION.&lt;br /&gt;
&lt;br /&gt;
For the child plans, the system does not care whether they are due, active, auto-created, or whether they have a valid RRULE. The round maintenance plan uses the child plans as configuration for the additional work packages that should be created as part of the round.&lt;br /&gt;
&lt;br /&gt;
The important configuration on the child plans is therefore their work package generation setup, especially the configured template work package and replication setup.&lt;br /&gt;
&lt;br /&gt;
=== Generated result ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Round Maintenance Plan: Machine Room Round&lt;br /&gt;
&lt;br /&gt;
Linked child plans under SYSREL_ROUND_RELATION:&lt;br /&gt;
&lt;br /&gt;
* Pump 1 Inspection&lt;br /&gt;
* Pump 2 Inspection&lt;br /&gt;
* Pump 3 Inspection&lt;br /&gt;
&lt;br /&gt;
Generated main work package:&lt;br /&gt;
&lt;br /&gt;
* Machine Room Round&lt;br /&gt;
&lt;br /&gt;
Additional generated work packages inside the main round work package:&lt;br /&gt;
&lt;br /&gt;
* Pump 1 Inspection&lt;br /&gt;
* Pump 2 Inspection&lt;br /&gt;
* Pump 3 Inspection&lt;br /&gt;
&lt;br /&gt;
The additional work packages are assigned to the main round work package. This allows the result of the round maintenance plan to be structured as one complete maintenance round.&lt;br /&gt;
&lt;br /&gt;
== RoundMaintenancePlan properties and relations ==&lt;br /&gt;
&lt;br /&gt;
=== SYSREL_ROUND_RELATION ===&lt;br /&gt;
&lt;br /&gt;
SYSREL_ROUND_RELATION links the round maintenance plan to its child maintenance plans.&lt;br /&gt;
&lt;br /&gt;
The linked child plans define which additional work packages should be generated when the round maintenance plan is due.&lt;br /&gt;
&lt;br /&gt;
When the round plan generates work packages, the system creates:&lt;br /&gt;
&lt;br /&gt;
* one main work package from the round plan’s own LK_WP_TMPL&lt;br /&gt;
* one additional work package for each child maintenance plan linked via SYSREL_ROUND_RELATION&lt;br /&gt;
&lt;br /&gt;
The child maintenance plans do not need to be due themselves for the round maintenance plan to use them during round generation.&lt;br /&gt;
&lt;br /&gt;
=== PLAN_SELECTION_RULE ===&lt;br /&gt;
&lt;br /&gt;
PLAN_SELECTION_RULE exists on RoundMaintenancePlan.&lt;br /&gt;
&lt;br /&gt;
The exact runtime effect of this property should be documented after the implementation behavior has been verified.&lt;br /&gt;
&lt;br /&gt;
Until that behavior is confirmed, the wiki should not claim that PLAN_SELECTION_RULE filters child plans by due date, asset, or priority.&lt;br /&gt;
&lt;br /&gt;
=== ORDERID and GROUPID ===&lt;br /&gt;
&lt;br /&gt;
The relation between the round maintenance plan and a linked child maintenance plan can contain ORDERID and GROUPID.&lt;br /&gt;
&lt;br /&gt;
When the system creates an additional work package from a linked child maintenance plan, these values can be copied to the generated work package.&lt;br /&gt;
&lt;br /&gt;
This can be used to structure, order, or group the additional work packages in the generated round.&lt;br /&gt;
&lt;br /&gt;
== Properties calculated or updated by the system ==&lt;br /&gt;
&lt;br /&gt;
=== EARLIEST_GENERATION_DATE ===&lt;br /&gt;
&lt;br /&gt;
EARLIEST_GENERATION_DATE is calculated by the system from NEXT_DATE and LEAD_DAYS.&lt;br /&gt;
&lt;br /&gt;
Formula:&lt;br /&gt;
&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&lt;br /&gt;
This value is recalculated when:&lt;br /&gt;
&lt;br /&gt;
* NEXT_DATE changes&lt;br /&gt;
* LEAD_DAYS changes&lt;br /&gt;
* NEXT_DATE is recalculated after planning or completion&lt;br /&gt;
* recurrence settings cause a new NEXT_DATE to be calculated&lt;br /&gt;
&lt;br /&gt;
=== NEXT_DATE ===&lt;br /&gt;
&lt;br /&gt;
For CyclicMaintenancePlan and RoundMaintenancePlan, NEXT_DATE can be calculated or recalculated by the system.&lt;br /&gt;
&lt;br /&gt;
The calculation depends on:&lt;br /&gt;
&lt;br /&gt;
* RRULE&lt;br /&gt;
* RRULE_START_DATE&lt;br /&gt;
* RRULE_UNTIL_DATE&lt;br /&gt;
* RRULE_COUNT&lt;br /&gt;
* SCHEDULING_MODE&lt;br /&gt;
* related generated work packages&lt;br /&gt;
* planning events&lt;br /&gt;
* completion events&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling, NEXT_DATE is calculated from the recurrence pattern and the highest relevant planned or finished date of related generated work packages.&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling, NEXT_DATE is calculated from the completion date of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
=== LAST_DATE ===&lt;br /&gt;
&lt;br /&gt;
LAST_DATE is updated by the system when a generated work package is completed.&lt;br /&gt;
&lt;br /&gt;
It stores the latest completion date of a generated work package related to the maintenance plan.&lt;br /&gt;
&lt;br /&gt;
This value is especially relevant for completion-based scheduling.&lt;br /&gt;
&lt;br /&gt;
=== PLANNED_START on generated work packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package from a maintenance plan, it sets the generated work package’s PLANNED_START to the maintenance plan’s NEXT_DATE.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
MaintenancePlan.NEXT_DATE: 15 March&lt;br /&gt;
Generated WorkPackage.PLANNED_START: 15 March&lt;br /&gt;
&lt;br /&gt;
=== Links on generated work packages ===&lt;br /&gt;
&lt;br /&gt;
When the system generates a work package, it automatically sets the required links on the generated work package.&lt;br /&gt;
&lt;br /&gt;
The generated work package is linked to:&lt;br /&gt;
&lt;br /&gt;
* the source maintenance plan via LK_MAINTENANCE_PLAN&lt;br /&gt;
* the template work package via LK_WP_TMPL&lt;br /&gt;
* the assigned asset via LK_ASSET&lt;br /&gt;
&lt;br /&gt;
For round maintenance plans, additional generated work packages from linked child maintenance plans are assigned to the main round work package via TASK_OWNER.&lt;br /&gt;
&lt;br /&gt;
== Properties and events that trigger recalculation ==&lt;br /&gt;
&lt;br /&gt;
=== NEXT_DATE changed ===&lt;br /&gt;
&lt;br /&gt;
When NEXT_DATE changes, the system recalculates EARLIEST_GENERATION_DATE.&lt;br /&gt;
&lt;br /&gt;
Formula:&lt;br /&gt;
&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&lt;br /&gt;
=== LEAD_DAYS changed ===&lt;br /&gt;
&lt;br /&gt;
When LEAD_DAYS changes, the system recalculates EARLIEST_GENERATION_DATE.&lt;br /&gt;
&lt;br /&gt;
Formula:&lt;br /&gt;
&lt;br /&gt;
EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS&lt;br /&gt;
&lt;br /&gt;
=== RRULE changed ===&lt;br /&gt;
&lt;br /&gt;
When RRULE changes, the recurrence pattern changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates NEXT_DATE based on the new recurrence rule and the selected SCHEDULING_MODE.&lt;br /&gt;
&lt;br /&gt;
After NEXT_DATE is recalculated, EARLIEST_GENERATION_DATE is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== RRULE_START_DATE changed ===&lt;br /&gt;
&lt;br /&gt;
When RRULE_START_DATE changes, the start point of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system recalculates the schedule.&lt;br /&gt;
&lt;br /&gt;
This can change NEXT_DATE.&lt;br /&gt;
&lt;br /&gt;
If NEXT_DATE changes, EARLIEST_GENERATION_DATE is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== RRULE_UNTIL_DATE changed ===&lt;br /&gt;
&lt;br /&gt;
When RRULE_UNTIL_DATE changes, the end boundary of the recurrence changes.&lt;br /&gt;
&lt;br /&gt;
The system checks whether future occurrences are still available.&lt;br /&gt;
&lt;br /&gt;
If no further occurrence is possible because of RRULE_UNTIL_DATE, the system cannot calculate a new NEXT_DATE.&lt;br /&gt;
&lt;br /&gt;
=== RRULE_COUNT changed ===&lt;br /&gt;
&lt;br /&gt;
When RRULE_COUNT changes, the system checks whether the maximum number of generated work packages has already been reached.&lt;br /&gt;
&lt;br /&gt;
If the number of related generated work packages is greater than or equal to RRULE_COUNT, the system does not calculate further occurrences.&lt;br /&gt;
&lt;br /&gt;
=== SCHEDULING_MODE changed ===&lt;br /&gt;
&lt;br /&gt;
When SCHEDULING_MODE changes, the logic for calculating future dates changes.&lt;br /&gt;
&lt;br /&gt;
Changing to Calendar-Based means that the plan follows the calendar recurrence.&lt;br /&gt;
&lt;br /&gt;
Changing to Completion-Based means that the plan calculates NEXT_DATE from the completion of the previous generated work package.&lt;br /&gt;
&lt;br /&gt;
Because this changes the calculation logic, the system recalculates NEXT_DATE according to the selected SCHEDULING_MODE.&lt;br /&gt;
&lt;br /&gt;
If NEXT_DATE changes, EARLIEST_GENERATION_DATE is recalculated as well.&lt;br /&gt;
&lt;br /&gt;
=== Generated work package PLANNED_START changed ===&lt;br /&gt;
&lt;br /&gt;
When PLANNED_START of a generated work package is set or changed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
For calendar-based cyclic maintenance plans, this can trigger recalculation of NEXT_DATE.&lt;br /&gt;
&lt;br /&gt;
The system uses the planning information to continue the calendar-based recurrence.&lt;br /&gt;
&lt;br /&gt;
For completion-based cyclic maintenance plans, a PLANNED_START change does not drive the recurrence in the same way. NEXT_DATE is mainly calculated after the work package is completed.&lt;br /&gt;
&lt;br /&gt;
=== Generated work package completed ===&lt;br /&gt;
&lt;br /&gt;
When a generated work package is completed, the work package notifies the linked maintenance plan.&lt;br /&gt;
&lt;br /&gt;
A work package is considered completed when:&lt;br /&gt;
&lt;br /&gt;
ORGA_STATUS == 100&lt;br /&gt;
&lt;br /&gt;
The system updates LAST_DATE.&lt;br /&gt;
&lt;br /&gt;
Then the system recalculates NEXT_DATE according to SCHEDULING_MODE.&lt;br /&gt;
&lt;br /&gt;
For calendar-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the system continues according to the calendar recurrence&lt;br /&gt;
* NEXT_DATE is calculated from the recurrence pattern and relevant planned or finished dates&lt;br /&gt;
&lt;br /&gt;
For completion-based scheduling:&lt;br /&gt;
&lt;br /&gt;
* the completion date becomes the basis for the next occurrence&lt;br /&gt;
* NEXT_DATE is calculated from the completion date&lt;br /&gt;
&lt;br /&gt;
After NEXT_DATE is updated, EARLIEST_GENERATION_DATE is recalculated.&lt;br /&gt;
&lt;br /&gt;
== Work package generation logic ==&lt;br /&gt;
&lt;br /&gt;
=== When is a plan ready to create a work package? ===&lt;br /&gt;
&lt;br /&gt;
A cyclic or round maintenance plan can create a work package only if all required conditions are fulfilled.&lt;br /&gt;
&lt;br /&gt;
The plan must be valid.&lt;br /&gt;
&lt;br /&gt;
For cyclic maintenance plans, this means:&lt;br /&gt;
&lt;br /&gt;
* RRULE is valid&lt;br /&gt;
* LK_ASSET is assigned&lt;br /&gt;
* NEXT_DATE is available&lt;br /&gt;
&lt;br /&gt;
The plan must be active:&lt;br /&gt;
&lt;br /&gt;
PLAN_STATUS == Active&lt;br /&gt;
&lt;br /&gt;
AUTO_CREATE must be enabled.&lt;br /&gt;
&lt;br /&gt;
A template work package must be assigned:&lt;br /&gt;
&lt;br /&gt;
LK_WP_TMPL must be set.&lt;br /&gt;
&lt;br /&gt;
A replication configuration must be assigned:&lt;br /&gt;
&lt;br /&gt;
LK_REPLICATION_CONFIG must be set.&lt;br /&gt;
&lt;br /&gt;
The earliest generation date must be reached:&lt;br /&gt;
&lt;br /&gt;
EARLIEST_GENERATION_DATE &amp;lt;= current date&lt;br /&gt;
&lt;br /&gt;
There must be no open work package for the plan.&lt;br /&gt;
&lt;br /&gt;
This means there must be no generated work package linked via LK_MAINTENANCE_PLAN where ORGA_STATUS != 100.&lt;br /&gt;
&lt;br /&gt;
This prevents the system from creating multiple open work packages for the same maintenance plan.&lt;br /&gt;
&lt;br /&gt;
== Round work package generation ==&lt;br /&gt;
&lt;br /&gt;
A round maintenance plan creates a main work package for the round.&lt;br /&gt;
&lt;br /&gt;
After the main work package has been created, the system processes the maintenance plans linked via SYSREL_ROUND_RELATION.&lt;br /&gt;
&lt;br /&gt;
For each linked child maintenance plan, the system creates an additional work package.&lt;br /&gt;
&lt;br /&gt;
These additional generated work packages are assigned to the main round work package via TASK_OWNER.&lt;br /&gt;
&lt;br /&gt;
For child plans used in a round, the system does not care whether the child plan:&lt;br /&gt;
&lt;br /&gt;
* has PLAN_STATUS == Active&lt;br /&gt;
* has AUTO_CREATE == true&lt;br /&gt;
* has a valid RRULE&lt;br /&gt;
* has a valid NEXT_DATE&lt;br /&gt;
* is due based on its own EARLIEST_GENERATION_DATE&lt;br /&gt;
&lt;br /&gt;
The round plan controls the timing. The child plans define what additional work packages should be created as part of the round.&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29897</id>
		<title>MRO Implemented Objects</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29897"/>
				<updated>2026-05-26T07:20:11Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Pick List Task */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MRO Implemented Objects are pre-configured standard MRO objects enhanced with additional logic and features. For most tasks, value properties are pre-set, and many of them also implement additional MRO-relevant classifications.&lt;br /&gt;
&lt;br /&gt;
== Workpackage ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
MetaClass Name: PROCEDURE_WORKPACKAGE | MetaClass UID: 007c78f8-fafd-4bde-8add-e11990625e7a&lt;br /&gt;
&lt;br /&gt;
A Procedure Workpackage serves as a container for tasks and other procedures. It stores its entire structure in a JSON format, which is predefined using a workflow editor. When a specific state is triggered, the corresponding sub-tasks and procedures are created or updated accordingly.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PROCEDURE]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || Represents the current state: Draft = 10, ReadyToUse = 20, Published = 30, Open = 40, Executing = 50, Completed = 60, Approved = 70, Rejected = 80&lt;br /&gt;
|-&lt;br /&gt;
| JSON || {{String}} || JSON representation of the procedure&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the procedure is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Task ==&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
MetaClass Name: SWITCH_START_TASK | MetaClass UID: 3c3614e2-635f-4e07-b02a-a72c81b9e328&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task confirms task completion by the system after an expression calculation. The task is automatically marked as complete once the calculation finishes successfully. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_START_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state: Undefined = 0, Ongoing = 10, Finished = 20, Error = 30&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_TRUE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || DisplayString for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || DisplayString for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
MetaClass Name: SWITCH_END_TASK | MetaClass UID: 261a3e63-2b8e-4f3e-ab22-295bbe421e7a&lt;br /&gt;
&lt;br /&gt;
A Switch End Task confirms task completion by the system. The task is invisible to the user and is always automatically marked as complete. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_END_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to Switch task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
MetaClass Name: CHECK_TASK | Metaclass UID: A360287D-2979-4D91-8B1A-6086FC1BEDA1 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CHECK_TASK | Metaclass UID: DF61A1DB-5238-4A87-85A6-B9C09B54B242&lt;br /&gt;
&lt;br /&gt;
A Check Task confirms task completion. The task is complete once a value is selected (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_CHECK_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
MetaClass Name: NUMERIC_TASK | MetaClass UID: b1789da3-bd67-4f93-b14b-22fd41afb215 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_NUMERIC_TASK | MetaClass UID: 047d05f3-a876-4f9d-a40e-2a098e9ba49b&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a numeric double value (e.g., from a temperature sensor). Once a value is entered (including Not Applicable), the task is considered complete.&lt;br /&gt;
An acceptability range and measurement unit can be defined. If the value falls outside the acceptable range, a red alert and/or a technical status update can be triggered.&lt;br /&gt;
The behaviour of the previous value indicator must be defined separately.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_NUMERIC_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded double numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Measurment unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
MetaClass Name: INSPECTION_TASK | MetaClass UID: 08571b05-a093-479a-a10a-9d03c435b1b5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INSPECTION_TASK | MetaClass UID: a0123b54-ddcf-49be-8c66-7ca86c4c5277&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a binary decision. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Custom labels can override the default icons: Checkmark (✔) and Cross (✘).&lt;br /&gt;
Label behavior must be defined separately in the customization settings.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_INSPECTION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for negative outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for positive outcome&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
MetaClass Name: TEXT_TASK | MetaClass UID: 7298d038-003a-41d5-bc24-c97018ca7e85 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_TEXT_TASK | MetaClass UID: c0a95da8-8e32-4036-8db4-ef438deb14de&lt;br /&gt;
&lt;br /&gt;
A Text Task allows entry of free-form text. Once a value is entered (including Not Applicable), the task is complete.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
MetaClass Name: PICTURE_TASK | MetaClass UID: bee0b281-7da1-470e-9838-46724d47b621 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICTURE_TASK | MetaClass UID: e58c6957-ecb2-4e3f-a4b7-6953b917d7d4&lt;br /&gt;
&lt;br /&gt;
A Picture Task confirms whether a photo has been taken. The task is only complete once a value is entered (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
A button must be available to add a photo as a child object. Task confirmation is blocked unless at least one photo is attached.&lt;br /&gt;
The behavior for photo addition and confirmation blocking must be defined in customization.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PICTURE_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task ===&lt;br /&gt;
MetaClass Name: PICKLIST_TASK | MetaClass UID: 78651014-f41e-4254-987f-6cf55c687d35 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICKLIST_TASK | MetaClass UID: 83551c77-554e-4715-b327-16f0a6ee196a&lt;br /&gt;
&lt;br /&gt;
A Pick List Task allows the user to select one value from a list of available items. It looks and behaves similarly to a standard Integer Task with a Selective List, but its selectable values are provided by an [[UBIK_Active_Lists|Active List]] defined on instance level.&lt;br /&gt;
&lt;br /&gt;
Once a list item is selected, the task is considered complete. Alternatively, the task can be completed by selecting Not Applicable, if this option is available.&lt;br /&gt;
&lt;br /&gt;
Pick List Tasks are intended for MRO workflows where the available options depend on the concrete task instance or workflow context instead of being defined globally.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Selected list item value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task ===&lt;br /&gt;
MetaClass Name: SUPERVISOR_CHECK_TASK | MetaClass UID: 76910d64-5bc0-4674-9c43-108959119846 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SUPERVISOR_CHECK_TASK | MetaClass UID: 1e4a5506-0c6f-4447-bd0a-d5c87282a0e9&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task confirms task completion by a supervisor. The task is complete once a value is selected.&amp;lt;br/&amp;gt;&lt;br /&gt;
Confirmation is only possible after NFC recognition of the supervisor and PIN entry.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Supervisor permissions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
MetaClass Name: INTERFACE_TASK | MetaClass UID: d9a80e3d-02f6-4f0c-b243-7ece9ad82849 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INTERFACE_TASK | MetaClass UID: e437ef02-d49b-4f23-9ab8-9a9836366c3d&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
MetaClass Name: CALCULATION_TASK | Metaclass UID: 3ec9d0f2-9d0f-4c1b-80bd-1efeaf010fa0 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CALCULATION_TASK | Metaclass UID: e2b24a28-2382-46d2-8f4b-5f52168a9e27&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_CALCULATION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Pending = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_NAME || {{String}} || Name of Target Property (on owner)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Type of Target Property (Undefined = 0, Bool = 1, Int = 3, Double = 4)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
MetaClass Name: SIGNATURE_TASK | Metaclass UID: 66D6A529-E233-4CE2-9E11-B65984D5B0DA &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SIGNATURE_TASK | Metaclass UID: ECE1E20F-2BA3-4BC4-A0DD-9AFFDBB23790&lt;br /&gt;
&lt;br /&gt;
A Signature Task captures a sign-off action to confirm the completion of a procedure. The task is complete once a written signature is provided.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Procedure Tasks ==&lt;br /&gt;
The following tasks are specialized versions intended for use within procedures. They implement both the [[MROCLS_SEQUENTIALTASK]] and [[MROCLS_GROUPEDTASK]] classifications.&lt;br /&gt;
&lt;br /&gt;
MetaClass Name: PROCEDURE_CHECK_TASK | MetaClass UID: 63D68EA4-E78C-4A33-A35A-301A01A2568E &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_NUMERIC_TASK | MetaClass UID: f578f50b-eecd-4734-929b-43e1f1f246fa &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INSPECTION_TASK | MetaClass UID: 9369b841-c5bf-43df-909f-3a5063763f81 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_TEXT_TASK | MetaClass UID: 4dd8fee2-9d3e-4fa1-9a61-d580f5d4201c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_PICTURE_TASK | MetaClass UID: 4c0db9da-dfcc-48ad-9d89-6c958a5ac39f  &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SUPERVISOR_CHECK_TASK | MetaClass UID: 9bb8e1b1-04f8-46f0-a9c9-0bb2960a49e5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INTERFACE_TASK | MetaClass UID: 8d9ff119-510b-425c-b917-f72783e4570c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_CALCULATION_TASK | Metaclass UID: ed31735c-c807-40e9-b9a4-254e77445dd5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SIGNATURE_TASK | Metaclass UID: 202CDB9D-BEEB-4E5A-A333-5235A9E6FF94 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_PICK_LIST_TASK | MetaClass UID: 241a2248-36f6-44ab-9c8d-0357b7cbe24c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
== File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== JSON File Document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_JSON | MetaClass UID: 016e57d5-37b3-42e0-a753-f675d4cbf338&lt;br /&gt;
&lt;br /&gt;
File Document for JSON file of a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_PICTURE_TASK | MetaClass UID: 2488fd79-4729-4090-9587-82103a9869e0&lt;br /&gt;
&lt;br /&gt;
File Document for image files of a Picture Task.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO_(Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29896</id>
		<title>MRO Implemented Objects</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29896"/>
				<updated>2026-05-26T07:19:40Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MRO Implemented Objects are pre-configured standard MRO objects enhanced with additional logic and features. For most tasks, value properties are pre-set, and many of them also implement additional MRO-relevant classifications.&lt;br /&gt;
&lt;br /&gt;
== Workpackage ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
MetaClass Name: PROCEDURE_WORKPACKAGE | MetaClass UID: 007c78f8-fafd-4bde-8add-e11990625e7a&lt;br /&gt;
&lt;br /&gt;
A Procedure Workpackage serves as a container for tasks and other procedures. It stores its entire structure in a JSON format, which is predefined using a workflow editor. When a specific state is triggered, the corresponding sub-tasks and procedures are created or updated accordingly.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PROCEDURE]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || Represents the current state: Draft = 10, ReadyToUse = 20, Published = 30, Open = 40, Executing = 50, Completed = 60, Approved = 70, Rejected = 80&lt;br /&gt;
|-&lt;br /&gt;
| JSON || {{String}} || JSON representation of the procedure&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the procedure is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Task ==&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
MetaClass Name: SWITCH_START_TASK | MetaClass UID: 3c3614e2-635f-4e07-b02a-a72c81b9e328&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task confirms task completion by the system after an expression calculation. The task is automatically marked as complete once the calculation finishes successfully. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_START_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state: Undefined = 0, Ongoing = 10, Finished = 20, Error = 30&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_TRUE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || DisplayString for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || DisplayString for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
MetaClass Name: SWITCH_END_TASK | MetaClass UID: 261a3e63-2b8e-4f3e-ab22-295bbe421e7a&lt;br /&gt;
&lt;br /&gt;
A Switch End Task confirms task completion by the system. The task is invisible to the user and is always automatically marked as complete. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_END_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to Switch task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
MetaClass Name: CHECK_TASK | Metaclass UID: A360287D-2979-4D91-8B1A-6086FC1BEDA1 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CHECK_TASK | Metaclass UID: DF61A1DB-5238-4A87-85A6-B9C09B54B242&lt;br /&gt;
&lt;br /&gt;
A Check Task confirms task completion. The task is complete once a value is selected (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_CHECK_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
MetaClass Name: NUMERIC_TASK | MetaClass UID: b1789da3-bd67-4f93-b14b-22fd41afb215 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_NUMERIC_TASK | MetaClass UID: 047d05f3-a876-4f9d-a40e-2a098e9ba49b&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a numeric double value (e.g., from a temperature sensor). Once a value is entered (including Not Applicable), the task is considered complete.&lt;br /&gt;
An acceptability range and measurement unit can be defined. If the value falls outside the acceptable range, a red alert and/or a technical status update can be triggered.&lt;br /&gt;
The behaviour of the previous value indicator must be defined separately.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_NUMERIC_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded double numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Measurment unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
MetaClass Name: INSPECTION_TASK | MetaClass UID: 08571b05-a093-479a-a10a-9d03c435b1b5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INSPECTION_TASK | MetaClass UID: a0123b54-ddcf-49be-8c66-7ca86c4c5277&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a binary decision. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Custom labels can override the default icons: Checkmark (✔) and Cross (✘).&lt;br /&gt;
Label behavior must be defined separately in the customization settings.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_INSPECTION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for negative outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for positive outcome&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
MetaClass Name: TEXT_TASK | MetaClass UID: 7298d038-003a-41d5-bc24-c97018ca7e85 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_TEXT_TASK | MetaClass UID: c0a95da8-8e32-4036-8db4-ef438deb14de&lt;br /&gt;
&lt;br /&gt;
A Text Task allows entry of free-form text. Once a value is entered (including Not Applicable), the task is complete.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
MetaClass Name: PICTURE_TASK | MetaClass UID: bee0b281-7da1-470e-9838-46724d47b621 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICTURE_TASK | MetaClass UID: e58c6957-ecb2-4e3f-a4b7-6953b917d7d4&lt;br /&gt;
&lt;br /&gt;
A Picture Task confirms whether a photo has been taken. The task is only complete once a value is entered (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
A button must be available to add a photo as a child object. Task confirmation is blocked unless at least one photo is attached.&lt;br /&gt;
The behavior for photo addition and confirmation blocking must be defined in customization.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PICTURE_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task ===&lt;br /&gt;
MetaClass Name: PICKLIST_TASK | MetaClass UID: 78651014-f41e-4254-987f-6cf55c687d35 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICKLIST_TASK | MetaClass UID: 83551c77-554e-4715-b327-16f0a6ee196a&lt;br /&gt;
&lt;br /&gt;
A Pick List Task allows the user to select one value from a list of available items. It looks and behaves similarly to a standard Integer Task with a Selective List, but its selectable values are provided by an Active List defined on instance level.&lt;br /&gt;
&lt;br /&gt;
Once a list item is selected, the task is considered complete. Alternatively, the task can be completed by selecting Not Applicable, if this option is available.&lt;br /&gt;
&lt;br /&gt;
Pick List Tasks are intended for MRO workflows where the available options depend on the concrete task instance or workflow context instead of being defined globally.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Selected list item value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task ===&lt;br /&gt;
MetaClass Name: SUPERVISOR_CHECK_TASK | MetaClass UID: 76910d64-5bc0-4674-9c43-108959119846 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SUPERVISOR_CHECK_TASK | MetaClass UID: 1e4a5506-0c6f-4447-bd0a-d5c87282a0e9&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task confirms task completion by a supervisor. The task is complete once a value is selected.&amp;lt;br/&amp;gt;&lt;br /&gt;
Confirmation is only possible after NFC recognition of the supervisor and PIN entry.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Supervisor permissions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
MetaClass Name: INTERFACE_TASK | MetaClass UID: d9a80e3d-02f6-4f0c-b243-7ece9ad82849 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INTERFACE_TASK | MetaClass UID: e437ef02-d49b-4f23-9ab8-9a9836366c3d&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
MetaClass Name: CALCULATION_TASK | Metaclass UID: 3ec9d0f2-9d0f-4c1b-80bd-1efeaf010fa0 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CALCULATION_TASK | Metaclass UID: e2b24a28-2382-46d2-8f4b-5f52168a9e27&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_CALCULATION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Pending = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_NAME || {{String}} || Name of Target Property (on owner)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Type of Target Property (Undefined = 0, Bool = 1, Int = 3, Double = 4)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
MetaClass Name: SIGNATURE_TASK | Metaclass UID: 66D6A529-E233-4CE2-9E11-B65984D5B0DA &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SIGNATURE_TASK | Metaclass UID: ECE1E20F-2BA3-4BC4-A0DD-9AFFDBB23790&lt;br /&gt;
&lt;br /&gt;
A Signature Task captures a sign-off action to confirm the completion of a procedure. The task is complete once a written signature is provided.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Procedure Tasks ==&lt;br /&gt;
The following tasks are specialized versions intended for use within procedures. They implement both the [[MROCLS_SEQUENTIALTASK]] and [[MROCLS_GROUPEDTASK]] classifications.&lt;br /&gt;
&lt;br /&gt;
MetaClass Name: PROCEDURE_CHECK_TASK | MetaClass UID: 63D68EA4-E78C-4A33-A35A-301A01A2568E &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_NUMERIC_TASK | MetaClass UID: f578f50b-eecd-4734-929b-43e1f1f246fa &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INSPECTION_TASK | MetaClass UID: 9369b841-c5bf-43df-909f-3a5063763f81 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_TEXT_TASK | MetaClass UID: 4dd8fee2-9d3e-4fa1-9a61-d580f5d4201c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_PICTURE_TASK | MetaClass UID: 4c0db9da-dfcc-48ad-9d89-6c958a5ac39f  &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SUPERVISOR_CHECK_TASK | MetaClass UID: 9bb8e1b1-04f8-46f0-a9c9-0bb2960a49e5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INTERFACE_TASK | MetaClass UID: 8d9ff119-510b-425c-b917-f72783e4570c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_CALCULATION_TASK | Metaclass UID: ed31735c-c807-40e9-b9a4-254e77445dd5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SIGNATURE_TASK | Metaclass UID: 202CDB9D-BEEB-4E5A-A333-5235A9E6FF94 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_PICK_LIST_TASK | MetaClass UID: 241a2248-36f6-44ab-9c8d-0357b7cbe24c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
== File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== JSON File Document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_JSON | MetaClass UID: 016e57d5-37b3-42e0-a753-f675d4cbf338&lt;br /&gt;
&lt;br /&gt;
File Document for JSON file of a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_PICTURE_TASK | MetaClass UID: 2488fd79-4729-4090-9587-82103a9869e0&lt;br /&gt;
&lt;br /&gt;
File Document for image files of a Picture Task.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO_(Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)&amp;diff=29895</id>
		<title>MRO Objects (Client)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)&amp;diff=29895"/>
				<updated>2026-05-26T07:19:30Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:MRO_WinX.png|thumb|alt=MRO Child List UI (WinX)|MRO UI (WinX)]]&lt;br /&gt;
[[File:MRO_MAUI1.jpeg|thumb|alt=MRO Child List UI (Android)|MRO UI (Android)]]&lt;br /&gt;
The WinX client UI displays MRO configured objects like any other root- or child-object enriched by some additional logic and features.&lt;br /&gt;
&lt;br /&gt;
== Basic User Interface ==&lt;br /&gt;
The representation of MRO features comprises some indicators and interactive controls. In the {{UBIK}} child list, the main object displays cumulated technical and organisational status as well as the overall work progress based on the underlying data branch. Objects classified as MRO objects in general provide indicators for the MRO status. This means the status is shown next to the main icon of a child-/details-/documents-page as well as next to the icons of the child list items:&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&lt;br /&gt;
The technical status indicator is shown on all objects that represent a technical state or receive the technical status from subsequent objects in the underlying data branch. If e.g. a inventory object is reported as damaged, its parent objects will all display the exclamation mark symbol to indicate that a problem was reported in the child items.&lt;br /&gt;
&lt;br /&gt;
[[File:TechStats_WinX.png|100px|Technical Status Indicator (Winx &amp;amp; Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
The organisational status indicates the amount of confirmed work within the data branch, including already confirmed work packages as well as tasks that are locked by their owning work package. The organisational status indicator is displayed on all objects that represent an organisational state or receive the organisational status from subsequent objects in the underlying data branch, and visualizes the amount of confirmed work performed within that branch.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:OrgaStatusIndicatorWinX.PNG|Organisational Status Indicator (WinX)&lt;br /&gt;
File:ConfirmedWP_WinX.png|MRO Workpackage Confirmed (Flag) Indicator (WinX)&lt;br /&gt;
File:ConfirmedWP_MAUI.jpeg|MRO Workpackage Confirmed Indicator (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
The work progress is calculated from the current work progress and from the progress cumulated from subsequent objects in the underlying data branch. This indicator shows the amount of work done in the data branch.&lt;br /&gt;
&lt;br /&gt;
{{Version/WinXSince|5.0}} {{Version/MobileSince|5.0}} By default, the progress is displayed with maximum one decimal place. For example, 99.75% is displayed as 99.8%. The format string used to achieve this is &amp;lt;code&amp;gt;{0:0.#}%&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If other numeric formats are preferred in your usecases, you can refer to [https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings custom numeric format strings] for more information. The template to customize for this is the UBIKMROProgressBadge within UBIKThemes.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
A set of specific objects can be used to provide the required structure for MRO:&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object having a substructure of jobs to be done. It can have a tree of other task owners or work packages underneath that will update the status of the task owner. This status consists of technical, organisational and progress information. With a task owner a user can get an overview of all the work to be done in the underlying job structure.&lt;br /&gt;
&lt;br /&gt;
=== Work Package===&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] is a collection of objects to collect and summarize other task owning objects, workpackages, or tasks. A simple workpackage has a certain amount of tasks that have to be finished in order to confirm the workpackage as done. More complex workpackages can also own other underlying workpackages that have to be confirmed.  Confirming a workpackage itself requires a progress of 100% of all related tasks, as well as 100% confirmed sub work packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:ConfirmingWP_WinX.png|MRO Workpackage confirm button (WinX)&lt;br /&gt;
File:MRORevoke_WinX.png|MRO Workpackage revoke confirmation button (WinX)&lt;br /&gt;
File:ConfirmingWP_MAUI.jpeg|MRO Workpackage confirm button (Android)&lt;br /&gt;
File:MRORevoke_MAUI.jpeg|MRO Workpackage revoke confirmation button (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] is an object reporting a certain progress to the owning workpackage. There are several specialized types of task objects. All kinds of tasks have a property called '''VALUE''' in common. It is very important, that this property is able to be validated. Therefore, a MetaAttribute (providing a validation timestamp by default) has to be attached on the used MetaProperty.&lt;br /&gt;
&lt;br /&gt;
On both clients, a Task can be reverted by clicking twice on the Not Applicable button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|The MetaProperty ''VALUE'' has to use [[Attributes]] in order to be validated. Otherwise, the calculation of work progress will not be possible.}}&lt;br /&gt;
&lt;br /&gt;
==== Measurement Task ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] inherits from [[MROCLS_MRO_TASK|Task]] and documents a measured value (e.g. read from a pressure gauge). Therefore, clicking the value on the shown task opens an editor to enter the desired value. If no value was entered before, an empty line will be shown. Once a value has been entered, the task is finished. Alternatively, the task can also be closed by the option ''Not Applicable'' to document the situation of not being able to fullfill the measurement (e.g. the pressure gauge is broken). An additional small value indicator below the main value can report e.g. the previously entered value. The behaviour of this previous value indicator has to be specified separately in the customizing.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Measurment Task Empty UWP.png|Measurement Task without a reported value (WinX)&lt;br /&gt;
File:Measurment Task Not Empty UWP.png|Measurement Task with a reported value (WinX)&lt;br /&gt;
File:Measurment Task Empty Android.jpg|Measurement Task without a reported value (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Progress Task ====&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_PROGRESS_TASK| Progress Task]] inherits from [[MROCLS_MRO_MEASUREMENT_TASK|Task]] and reports a certain progress while fullfilling a task. The progress will influence the overall progress of the owning workpackage. If the task cannot be fullfilled, it can also be finished with the option ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
There is also an [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] available for progress tasks.{{Version/WinXSince|2.5.4}}&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Progress Task UWP.png|Progress Task with a reported work progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with a reported work progress and a previous progress(Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Check Task ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_CHECK_TASK|Check Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished by reporting ''Done'' or ''Not Applicable''. This is intended for a simple To-Do task that is either done or not.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Unfinished MRO CheckTask (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable MRO CheckTask (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Inspection Task ====&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished, when the user reports with a positive or negative answer or ''Not Applicable'' (e.g. reporting a yes/no answer for existing equipment).&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Finished Inspection Task UWP.png|Finished MRO InspectionTask (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished MRO InspectionTask (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sequential Task ====&lt;br /&gt;
The [[MROCLS_SEQUENTIALTASK|sequential task classification]] allows you to pre-define a sequence in which tasks are to be resolved by users. This means that it is required for one or multiple tasks to be finished in order for other tasks to become &amp;quot;unlocked&amp;quot; and editable. A task can have any number of &amp;quot;predecessors&amp;quot;. Predecessors are the tasks that are required to be finished first.&lt;br /&gt;
&lt;br /&gt;
A task can have predecessors that live anywhere else in the object hierarchy. It is not necessary for a task and its predecessors to be part of the same work package, even though this is likely the most common use case.&lt;br /&gt;
&lt;br /&gt;
The state of a sequential task is evaluated both offline and online to get the best possible user experience. The user will see dependent tasks update immediately if their successors were finished, if those tasks are currently visible in the UI. There is 1 case in which the server-side state will override the client-side (offline) evaluation, discussed below.&lt;br /&gt;
The state of each sequential task is evaluated the following way:&lt;br /&gt;
&lt;br /&gt;
# If the server-side state says the task is open, we consider this as the truthful state and don't do any other evaluation.&lt;br /&gt;
# Check if the task has any predecessors.&lt;br /&gt;
# Try to load each predecessor task.&lt;br /&gt;
#* If loading of any predecessor fails (the object is not available offline), the task will be locked.&lt;br /&gt;
# If all predecessor tasks are finished, the task is open and can be edited. Otherwise, the task is locked.&lt;br /&gt;
&lt;br /&gt;
The customizer setting up the task dependency relations needs to ensure that the dependencies are not cyclical. In this case, it would be impossible for any tasks in the &amp;quot;cycle&amp;quot; to be finished.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
As a demonstration of this feature, see [[Media:Sequential_tasks_winx.mp4|this video]]. The relations between tasks are defined as in [[Media:Task_relations.png|this image]], starting at A1 and A2, which are not dependent on any other tasks. The lines (from left to right) indicate dependencies. This means that B2 has tasks A1 and A2 as its predecessors, for example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Grouped Task {{Version/WinXSince|4.2}}{{Version/XamarinSince|4.2}} ====&lt;br /&gt;
Sometimes, not all tasks have to be finished. More specifically, there might be a predefined condition where you only need to finish a certain number of tasks among a group of them. These are known in {{UBIK}} as [[MROCLS_GROUPEDTASK|grouped tasks]].&lt;br /&gt;
&lt;br /&gt;
The idea is, a group of tasks can be defined as siblings to each other and they also share the same server configured threshold. When the number of finished tasks among that group exceeds the threshold, the entire group is considered as no longer necessary. When reflected in the overall status of the task owner(s), these tasks would appear as if they are finished.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, the finished status is completely independent from the not necessary status on a task. A grouped task which is no longer necessary can be both finished or not yet finished. In other words, users don't have to finish a not necessary grouped task, but they still can.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The precise status calculation for grouped tasks and their task owners requires the knowledge of all siblings tasks. Imagine 2 out of 3 tasks must be finished but the client only knows 1 in total and the others are only available at the server at that time. This makes it impossible to draw conclusions whether the task(s) should be necessary or not. Under such circumstances, the local status calculation is done as if these are just regular tasks.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|Like with the other MRO objects, the client always chooses the best available statuses for grouped tasks to present to the users. More specifically, it uses the statuses calculated by the server when the client is not offline and there are no uncommitted local changes on the involved objects. Otherwise, it uses the statuses calculated locally to the best of its knowledge.}}&lt;br /&gt;
&lt;br /&gt;
A task can also be a grouped and a sequential one at the same time. In such a case, the grouped nature of the sibling tasks will affect the way the task sequence completes.&lt;br /&gt;
&lt;br /&gt;
For example, task A1, A2 and A3 are 3 grouped sibling tasks and only 1 of them needs to be finished. At the same time, they are all predecessors of task B. Normally, all predecessors must be finished (and locked) before task B becomes the next one in the sequence and therefore unlocked. In this case, however, as soon as one of the predecessors is finished, all three become unnecessary (and locked) and task B unlocks as a result of that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Supervisor Task {{Version/XamarinSince|4.8}} ====&lt;br /&gt;
As the name suggests, supervisor tasks are those that must be finished under supervision. When users want to finish a [[MROCLS_MRO_SUPERVISOR_TASK|supervisor task]], they must hand over their work devices to a supervisor. The latter checks the work status and scans an NFC tag if the work is approved. If the [[MROCLS_MRO_SUPERVISOR|supervisor]] has sufficient permissions for the task and the correct supervisor PIN is given, the task gets unlocked and the users can proceed to finish it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300px heights=300px&amp;gt;&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Before_Verification.jpg|Supervisor Task Before Verification/Unlocking (Mobile)&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor Task Enter PIN (Mobile)&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Task After Verification/Unlocking (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A thing to note is that while the need to verify a supervisor task can be seen as a type of locking, it's certainly not the only reason for a [[Locked_Objects|locked object]]. This means a supervisor task can remain locked (although for different reasons) even after a supervisor has successfully verified it. This can often be the case if you use it in combination with other features such as [[MRO_Objects_(Client)#Sequential_Task|sequential tasks]], [[User_Rights|user rights]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|For security reasons, the verification process is cancelled if the supervisor enters the wrong PIN for three times. Scanning the tag again is required in that case.}}&lt;br /&gt;
{{Hint|A setting controls [[RFID_tags#Choose_which_information_to_use_from_a_tag|which information in a scanned tag is used]] during this process.}}&lt;br /&gt;
&lt;br /&gt;
==== Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
The Signature Task is a task type that is completed by capturing a handwritten signature from the user. The task contains an editor field that serves as the entry point for the signing process. When the user clicks (or taps) on the editor field, a signature dialog opens. Within this dialog, the user can provide their signature. After confirming the input, the signature is saved and the task is automatically marked as completed.&lt;br /&gt;
&lt;br /&gt;
If the task is signed while the client is online:&lt;br /&gt;
* The User (signee) is resolved immediately by the server and displayed.&lt;br /&gt;
* The ValidationTimestamp is generated and displayed.&lt;br /&gt;
* Both values are shown directly in the editor field after signing.&lt;br /&gt;
&lt;br /&gt;
{{Hint|The User only gets resolved by the server and displayed once you're in online mode}}&lt;br /&gt;
&lt;br /&gt;
If the displayed User and/or ValidationTimestamp cannot be fully shown due to limited space in the editor field, the complete information can be accessed via a Popup.&lt;br /&gt;
To show the Popup displaying the full User and ValidationTimestamp without truncation, click on the editor field.&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;br /&gt;
&lt;br /&gt;
==== Picture Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICTURE_TASK|picture task]] is a check task which can only be finished when it has at least one child document containing a valid file. In the UI, an additional photo button is presented next to the check so users can easily take photos before finishing the tasks.&lt;br /&gt;
* As any other objects, picture tasks can carry and display [[SYSCLS_CHILDINFOOWNER|child count information]]. But that is not a mandatory part of the feature. Even when it's not configured and not visible in the UI, you can still finish the tasks.&lt;br /&gt;
* In WinX/UWP, the UI also presents an expander which allows you to display the child documents of picture tasks. This is not present by default in the Mobile app due to the screen size limit but [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|can be easily customized]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|The task is named as such because pictures are the most commonly used types, but the child documents can be of other types as well. }}&lt;br /&gt;
&lt;br /&gt;
When a user tries to finish a picture task by tapping the check, the app might perform some data synchronization first if in online mode, which includes&lt;br /&gt;
* Syncing the child objects (including documents) of the task.&lt;br /&gt;
* Downloading the file(s) of the child documents.&lt;br /&gt;
During data synchronization, the check button on that task turns into a wait indicator. Afterwards, the app checks if the prerequisites to finish the task are met.&lt;br /&gt;
* If there are no child documents or no local files for the child documents, the task remains unfinished and the user gets informed about the reasons.&lt;br /&gt;
* Otherwise, the task gets finished and the photo button gets disabled.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Setting NA (not applicable) on a picture task is always possible, regardless of the condition of child documents.}}&lt;br /&gt;
&lt;br /&gt;
==== Numeric Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_NUMERIC_TASK|numeric task]] is a task which records a double value (e.g. from a temperature sensor). Entering the value (including Not Applicable) completes the task.&lt;br /&gt;
* The value is compared against an accaptable value range which is not editable on the client.&lt;br /&gt;
* Deviation from this range results in visual feedback as well as the [[#Tech Status|tech status]] being set to display an issue.&lt;br /&gt;
* If the configured value range is invalid (e.g. min &amp;gt; max) and the user enters a value, the [[#Tech Status|tech status]] will also be set to display an issue.&lt;br /&gt;
* A numeric task also has a special value unit that can be set per task instance. If set, it overrides the standard value unit defined on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
==== Pick List Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICK_LIST_TASK|Pick List task]] looks and behaves the same like a standard Integer Task with SelectiveList. Other than the standard Integer Task, the Pick List Task has an [[UBIK_Active_Lists|Active List]] defined on instance level to pick from for its value property. The task counts as finished as soon as a list item has been selected, or when pressing ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedStartTag|parameter=Please refer to [[Main_Page]] for the most recent information.}}&lt;br /&gt;
=== MRO objects with project information (WinX only) {{Version/WinXSince|2.5.4}} ===&lt;br /&gt;
[[File:UI_WinX_MRO_ProjectInfo.png|thumb|MRO Object with Project Info (WinX)]]&lt;br /&gt;
An MRO object (except tasks) might also bring along [[MROCLS_PROJECTINFORMATION|project information]]. In this case, the project information together with the MRO progress are displayed in a bar chart. The start &amp;amp; end dates of the MRO object are displayed on the progress bar. The length and the position of the progress bar, together with the current date mark indicate the timeline.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
{{DeprecatedEndTag}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
When an (MRO) object is locked, editing it becomes impossible. More details about [[Locked_Objects|locked objects]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MROCLS_PROJECT]]&lt;br /&gt;
* [[MROCLS_PROJECTINFORMATION]]&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]]&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]]&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]]&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)&amp;diff=29894</id>
		<title>MRO Objects (Client)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)&amp;diff=29894"/>
				<updated>2026-05-26T07:19:13Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:MRO_WinX.png|thumb|alt=MRO Child List UI (WinX)|MRO UI (WinX)]]&lt;br /&gt;
[[File:MRO_MAUI1.jpeg|thumb|alt=MRO Child List UI (Android)|MRO UI (Android)]]&lt;br /&gt;
The WinX client UI displays MRO configured objects like any other root- or child-object enriched by some additional logic and features.&lt;br /&gt;
&lt;br /&gt;
== Basic User Interface ==&lt;br /&gt;
The representation of MRO features comprises some indicators and interactive controls. In the {{UBIK}} child list, the main object displays cumulated technical and organisational status as well as the overall work progress based on the underlying data branch. Objects classified as MRO objects in general provide indicators for the MRO status. This means the status is shown next to the main icon of a child-/details-/documents-page as well as next to the icons of the child list items:&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&lt;br /&gt;
The technical status indicator is shown on all objects that represent a technical state or receive the technical status from subsequent objects in the underlying data branch. If e.g. a inventory object is reported as damaged, its parent objects will all display the exclamation mark symbol to indicate that a problem was reported in the child items.&lt;br /&gt;
&lt;br /&gt;
[[File:TechStats_WinX.png|100px|Technical Status Indicator (Winx &amp;amp; Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
The organisational status indicates the amount of confirmed work within the data branch, including already confirmed work packages as well as tasks that are locked by their owning work package. The organisational status indicator is displayed on all objects that represent an organisational state or receive the organisational status from subsequent objects in the underlying data branch, and visualizes the amount of confirmed work performed within that branch.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:OrgaStatusIndicatorWinX.PNG|Organisational Status Indicator (WinX)&lt;br /&gt;
File:ConfirmedWP_WinX.png|MRO Workpackage Confirmed (Flag) Indicator (WinX)&lt;br /&gt;
File:ConfirmedWP_MAUI.jpeg|MRO Workpackage Confirmed Indicator (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
The work progress is calculated from the current work progress and from the progress cumulated from subsequent objects in the underlying data branch. This indicator shows the amount of work done in the data branch.&lt;br /&gt;
&lt;br /&gt;
{{Version/WinXSince|5.0}} {{Version/MobileSince|5.0}} By default, the progress is displayed with maximum one decimal place. For example, 99.75% is displayed as 99.8%. The format string used to achieve this is &amp;lt;code&amp;gt;{0:0.#}%&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If other numeric formats are preferred in your usecases, you can refer to [https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings custom numeric format strings] for more information. The template to customize for this is the UBIKMROProgressBadge within UBIKThemes.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
A set of specific objects can be used to provide the required structure for MRO:&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object having a substructure of jobs to be done. It can have a tree of other task owners or work packages underneath that will update the status of the task owner. This status consists of technical, organisational and progress information. With a task owner a user can get an overview of all the work to be done in the underlying job structure.&lt;br /&gt;
&lt;br /&gt;
=== Work Package===&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] is a collection of objects to collect and summarize other task owning objects, workpackages, or tasks. A simple workpackage has a certain amount of tasks that have to be finished in order to confirm the workpackage as done. More complex workpackages can also own other underlying workpackages that have to be confirmed.  Confirming a workpackage itself requires a progress of 100% of all related tasks, as well as 100% confirmed sub work packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:ConfirmingWP_WinX.png|MRO Workpackage confirm button (WinX)&lt;br /&gt;
File:MRORevoke_WinX.png|MRO Workpackage revoke confirmation button (WinX)&lt;br /&gt;
File:ConfirmingWP_MAUI.jpeg|MRO Workpackage confirm button (Android)&lt;br /&gt;
File:MRORevoke_MAUI.jpeg|MRO Workpackage revoke confirmation button (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] is an object reporting a certain progress to the owning workpackage. There are several specialized types of task objects. All kinds of tasks have a property called '''VALUE''' in common. It is very important, that this property is able to be validated. Therefore, a MetaAttribute (providing a validation timestamp by default) has to be attached on the used MetaProperty.&lt;br /&gt;
&lt;br /&gt;
On both clients, a Task can be reverted by clicking twice on the Not Applicable button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|The MetaProperty ''VALUE'' has to use [[Attributes]] in order to be validated. Otherwise, the calculation of work progress will not be possible.}}&lt;br /&gt;
&lt;br /&gt;
==== Measurement Task ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] inherits from [[MROCLS_MRO_TASK|Task]] and documents a measured value (e.g. read from a pressure gauge). Therefore, clicking the value on the shown task opens an editor to enter the desired value. If no value was entered before, an empty line will be shown. Once a value has been entered, the task is finished. Alternatively, the task can also be closed by the option ''Not Applicable'' to document the situation of not being able to fullfill the measurement (e.g. the pressure gauge is broken). An additional small value indicator below the main value can report e.g. the previously entered value. The behaviour of this previous value indicator has to be specified separately in the customizing.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Measurment Task Empty UWP.png|Measurement Task without a reported value (WinX)&lt;br /&gt;
File:Measurment Task Not Empty UWP.png|Measurement Task with a reported value (WinX)&lt;br /&gt;
File:Measurment Task Empty Android.jpg|Measurement Task without a reported value (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Progress Task ====&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_PROGRESS_TASK| Progress Task]] inherits from [[MROCLS_MRO_MEASUREMENT_TASK|Task]] and reports a certain progress while fullfilling a task. The progress will influence the overall progress of the owning workpackage. If the task cannot be fullfilled, it can also be finished with the option ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
There is also an [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] available for progress tasks.{{Version/WinXSince|2.5.4}}&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Progress Task UWP.png|Progress Task with a reported work progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with a reported work progress and a previous progress(Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Check Task ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_CHECK_TASK|Check Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished by reporting ''Done'' or ''Not Applicable''. This is intended for a simple To-Do task that is either done or not.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Unfinished MRO CheckTask (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable MRO CheckTask (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Inspection Task ====&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished, when the user reports with a positive or negative answer or ''Not Applicable'' (e.g. reporting a yes/no answer for existing equipment).&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Finished Inspection Task UWP.png|Finished MRO InspectionTask (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished MRO InspectionTask (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sequential Task ====&lt;br /&gt;
The [[MROCLS_SEQUENTIALTASK|sequential task classification]] allows you to pre-define a sequence in which tasks are to be resolved by users. This means that it is required for one or multiple tasks to be finished in order for other tasks to become &amp;quot;unlocked&amp;quot; and editable. A task can have any number of &amp;quot;predecessors&amp;quot;. Predecessors are the tasks that are required to be finished first.&lt;br /&gt;
&lt;br /&gt;
A task can have predecessors that live anywhere else in the object hierarchy. It is not necessary for a task and its predecessors to be part of the same work package, even though this is likely the most common use case.&lt;br /&gt;
&lt;br /&gt;
The state of a sequential task is evaluated both offline and online to get the best possible user experience. The user will see dependent tasks update immediately if their successors were finished, if those tasks are currently visible in the UI. There is 1 case in which the server-side state will override the client-side (offline) evaluation, discussed below.&lt;br /&gt;
The state of each sequential task is evaluated the following way:&lt;br /&gt;
&lt;br /&gt;
# If the server-side state says the task is open, we consider this as the truthful state and don't do any other evaluation.&lt;br /&gt;
# Check if the task has any predecessors.&lt;br /&gt;
# Try to load each predecessor task.&lt;br /&gt;
#* If loading of any predecessor fails (the object is not available offline), the task will be locked.&lt;br /&gt;
# If all predecessor tasks are finished, the task is open and can be edited. Otherwise, the task is locked.&lt;br /&gt;
&lt;br /&gt;
The customizer setting up the task dependency relations needs to ensure that the dependencies are not cyclical. In this case, it would be impossible for any tasks in the &amp;quot;cycle&amp;quot; to be finished.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
As a demonstration of this feature, see [[Media:Sequential_tasks_winx.mp4|this video]]. The relations between tasks are defined as in [[Media:Task_relations.png|this image]], starting at A1 and A2, which are not dependent on any other tasks. The lines (from left to right) indicate dependencies. This means that B2 has tasks A1 and A2 as its predecessors, for example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Grouped Task {{Version/WinXSince|4.2}}{{Version/XamarinSince|4.2}} ====&lt;br /&gt;
Sometimes, not all tasks have to be finished. More specifically, there might be a predefined condition where you only need to finish a certain number of tasks among a group of them. These are known in {{UBIK}} as [[MROCLS_GROUPEDTASK|grouped tasks]].&lt;br /&gt;
&lt;br /&gt;
The idea is, a group of tasks can be defined as siblings to each other and they also share the same server configured threshold. When the number of finished tasks among that group exceeds the threshold, the entire group is considered as no longer necessary. When reflected in the overall status of the task owner(s), these tasks would appear as if they are finished.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, the finished status is completely independent from the not necessary status on a task. A grouped task which is no longer necessary can be both finished or not yet finished. In other words, users don't have to finish a not necessary grouped task, but they still can.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The precise status calculation for grouped tasks and their task owners requires the knowledge of all siblings tasks. Imagine 2 out of 3 tasks must be finished but the client only knows 1 in total and the others are only available at the server at that time. This makes it impossible to draw conclusions whether the task(s) should be necessary or not. Under such circumstances, the local status calculation is done as if these are just regular tasks.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|Like with the other MRO objects, the client always chooses the best available statuses for grouped tasks to present to the users. More specifically, it uses the statuses calculated by the server when the client is not offline and there are no uncommitted local changes on the involved objects. Otherwise, it uses the statuses calculated locally to the best of its knowledge.}}&lt;br /&gt;
&lt;br /&gt;
A task can also be a grouped and a sequential one at the same time. In such a case, the grouped nature of the sibling tasks will affect the way the task sequence completes.&lt;br /&gt;
&lt;br /&gt;
For example, task A1, A2 and A3 are 3 grouped sibling tasks and only 1 of them needs to be finished. At the same time, they are all predecessors of task B. Normally, all predecessors must be finished (and locked) before task B becomes the next one in the sequence and therefore unlocked. In this case, however, as soon as one of the predecessors is finished, all three become unnecessary (and locked) and task B unlocks as a result of that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Supervisor Task {{Version/XamarinSince|4.8}} ====&lt;br /&gt;
As the name suggests, supervisor tasks are those that must be finished under supervision. When users want to finish a [[MROCLS_MRO_SUPERVISOR_TASK|supervisor task]], they must hand over their work devices to a supervisor. The latter checks the work status and scans an NFC tag if the work is approved. If the [[MROCLS_MRO_SUPERVISOR|supervisor]] has sufficient permissions for the task and the correct supervisor PIN is given, the task gets unlocked and the users can proceed to finish it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300px heights=300px&amp;gt;&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Before_Verification.jpg|Supervisor Task Before Verification/Unlocking (Mobile)&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor Task Enter PIN (Mobile)&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Task After Verification/Unlocking (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A thing to note is that while the need to verify a supervisor task can be seen as a type of locking, it's certainly not the only reason for a [[Locked_Objects|locked object]]. This means a supervisor task can remain locked (although for different reasons) even after a supervisor has successfully verified it. This can often be the case if you use it in combination with other features such as [[MRO_Objects_(Client)#Sequential_Task|sequential tasks]], [[User_Rights|user rights]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|For security reasons, the verification process is cancelled if the supervisor enters the wrong PIN for three times. Scanning the tag again is required in that case.}}&lt;br /&gt;
{{Hint|A setting controls [[RFID_tags#Choose_which_information_to_use_from_a_tag|which information in a scanned tag is used]] during this process.}}&lt;br /&gt;
&lt;br /&gt;
==== Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
The Signature Task is a task type that is completed by capturing a handwritten signature from the user. The task contains an editor field that serves as the entry point for the signing process. When the user clicks (or taps) on the editor field, a signature dialog opens. Within this dialog, the user can provide their signature. After confirming the input, the signature is saved and the task is automatically marked as completed.&lt;br /&gt;
&lt;br /&gt;
If the task is signed while the client is online:&lt;br /&gt;
* The User (signee) is resolved immediately by the server and displayed.&lt;br /&gt;
* The ValidationTimestamp is generated and displayed.&lt;br /&gt;
* Both values are shown directly in the editor field after signing.&lt;br /&gt;
&lt;br /&gt;
{{Hint|The User only gets resolved by the server and displayed once you're in online mode}}&lt;br /&gt;
&lt;br /&gt;
If the displayed User and/or ValidationTimestamp cannot be fully shown due to limited space in the editor field, the complete information can be accessed via a Popup.&lt;br /&gt;
To show the Popup displaying the full User and ValidationTimestamp without truncation, click on the editor field.&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;br /&gt;
&lt;br /&gt;
==== Picture Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICTURE_TASK|picture task]] is a check task which can only be finished when it has at least one child document containing a valid file. In the UI, an additional photo button is presented next to the check so users can easily take photos before finishing the tasks.&lt;br /&gt;
* As any other objects, picture tasks can carry and display [[SYSCLS_CHILDINFOOWNER|child count information]]. But that is not a mandatory part of the feature. Even when it's not configured and not visible in the UI, you can still finish the tasks.&lt;br /&gt;
* In WinX/UWP, the UI also presents an expander which allows you to display the child documents of picture tasks. This is not present by default in the Mobile app due to the screen size limit but [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|can be easily customized]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|The task is named as such because pictures are the most commonly used types, but the child documents can be of other types as well. }}&lt;br /&gt;
&lt;br /&gt;
When a user tries to finish a picture task by tapping the check, the app might perform some data synchronization first if in online mode, which includes&lt;br /&gt;
* Syncing the child objects (including documents) of the task.&lt;br /&gt;
* Downloading the file(s) of the child documents.&lt;br /&gt;
During data synchronization, the check button on that task turns into a wait indicator. Afterwards, the app checks if the prerequisites to finish the task are met.&lt;br /&gt;
* If there are no child documents or no local files for the child documents, the task remains unfinished and the user gets informed about the reasons.&lt;br /&gt;
* Otherwise, the task gets finished and the photo button gets disabled.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Setting NA (not applicable) on a picture task is always possible, regardless of the condition of child documents.}}&lt;br /&gt;
&lt;br /&gt;
==== Numeric Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_NUMERIC_TASK|numeric task]] is a task which records a double value (e.g. from a temperature sensor). Entering the value (including Not Applicable) completes the task.&lt;br /&gt;
* The value is compared against an accaptable value range which is not editable on the client.&lt;br /&gt;
* Deviation from this range results in visual feedback as well as the [[#Tech Status|tech status]] being set to display an issue.&lt;br /&gt;
* If the configured value range is invalid (e.g. min &amp;gt; max) and the user enters a value, the [[#Tech Status|tech status]] will also be set to display an issue.&lt;br /&gt;
* A numeric task also has a special value unit that can be set per task instance. If set, it overrides the standard value unit defined on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
==== Pick List Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICK_LIST_TASK|Pick List task]] looks and behaves the same like a standard Integer Task with SelectiveList. Other than the standard Integer Task, the Pick List Task has an [[UBIK_Active_Lists|Active List]] defined on instance level to pick from for its value property. The task counts as finished as soon as a list item has been selected, or when pressing ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedStartTag|parameter=Please refer to [[Main_Page]] for the most recent information.}}&lt;br /&gt;
=== MRO objects with project information (WinX only) {{Version/WinXSince|2.5.4}} ===&lt;br /&gt;
[[File:UI_WinX_MRO_ProjectInfo.png|thumb|MRO Object with Project Info (WinX)]]&lt;br /&gt;
An MRO object (except tasks) might also bring along [[MROCLS_PROJECTINFORMATION|project information]]. In this case, the project information together with the MRO progress are displayed in a bar chart. The start &amp;amp; end dates of the MRO object are displayed on the progress bar. The length and the position of the progress bar, together with the current date mark indicate the timeline.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
{{DeprecatedEndTag}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
When an (MRO) object is locked, editing it becomes impossible. More details about [[Locked_Objects|locked objects]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MROCLS_PROJECT]]&lt;br /&gt;
* [[MROCLS_PROJECTINFORMATION]]&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]]&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]]&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]]&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29893</id>
		<title>MRO Implemented Objects</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29893"/>
				<updated>2026-05-26T07:18:17Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Procedure Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MRO Implemented Objects are pre-configured standard MRO objects enhanced with additional logic and features. For most tasks, value properties are pre-set, and many of them also implement additional MRO-relevant classifications.&lt;br /&gt;
&lt;br /&gt;
== Workpackage ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
MetaClass Name: PROCEDURE_WORKPACKAGE | MetaClass UID: 007c78f8-fafd-4bde-8add-e11990625e7a&lt;br /&gt;
&lt;br /&gt;
A Procedure Workpackage serves as a container for tasks and other procedures. It stores its entire structure in a JSON format, which is predefined using a workflow editor. When a specific state is triggered, the corresponding sub-tasks and procedures are created or updated accordingly.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PROCEDURE]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || Represents the current state: Draft = 10, ReadyToUse = 20, Published = 30, Open = 40, Executing = 50, Completed = 60, Approved = 70, Rejected = 80&lt;br /&gt;
|-&lt;br /&gt;
| JSON || {{String}} || JSON representation of the procedure&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the procedure is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Task ==&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
MetaClass Name: SWITCH_START_TASK | MetaClass UID: 3c3614e2-635f-4e07-b02a-a72c81b9e328&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task confirms task completion by the system after an expression calculation. The task is automatically marked as complete once the calculation finishes successfully. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_START_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state: Undefined = 0, Ongoing = 10, Finished = 20, Error = 30&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_TRUE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || DisplayString for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || DisplayString for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
MetaClass Name: SWITCH_END_TASK | MetaClass UID: 261a3e63-2b8e-4f3e-ab22-295bbe421e7a&lt;br /&gt;
&lt;br /&gt;
A Switch End Task confirms task completion by the system. The task is invisible to the user and is always automatically marked as complete. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_END_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to Switch task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
MetaClass Name: CHECK_TASK | Metaclass UID: A360287D-2979-4D91-8B1A-6086FC1BEDA1 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CHECK_TASK | Metaclass UID: DF61A1DB-5238-4A87-85A6-B9C09B54B242&lt;br /&gt;
&lt;br /&gt;
A Check Task confirms task completion. The task is complete once a value is selected (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_CHECK_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
MetaClass Name: NUMERIC_TASK | MetaClass UID: b1789da3-bd67-4f93-b14b-22fd41afb215 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_NUMERIC_TASK | MetaClass UID: 047d05f3-a876-4f9d-a40e-2a098e9ba49b&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a numeric double value (e.g., from a temperature sensor). Once a value is entered (including Not Applicable), the task is considered complete.&lt;br /&gt;
An acceptability range and measurement unit can be defined. If the value falls outside the acceptable range, a red alert and/or a technical status update can be triggered.&lt;br /&gt;
The behaviour of the previous value indicator must be defined separately.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_NUMERIC_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded double numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Measurment unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
MetaClass Name: INSPECTION_TASK | MetaClass UID: 08571b05-a093-479a-a10a-9d03c435b1b5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INSPECTION_TASK | MetaClass UID: a0123b54-ddcf-49be-8c66-7ca86c4c5277&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a binary decision. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Custom labels can override the default icons: Checkmark (✔) and Cross (✘).&lt;br /&gt;
Label behavior must be defined separately in the customization settings.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_INSPECTION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for negative outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for positive outcome&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
MetaClass Name: TEXT_TASK | MetaClass UID: 7298d038-003a-41d5-bc24-c97018ca7e85 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_TEXT_TASK | MetaClass UID: c0a95da8-8e32-4036-8db4-ef438deb14de&lt;br /&gt;
&lt;br /&gt;
A Text Task allows entry of free-form text. Once a value is entered (including Not Applicable), the task is complete.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
MetaClass Name: PICTURE_TASK | MetaClass UID: bee0b281-7da1-470e-9838-46724d47b621 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICTURE_TASK | MetaClass UID: e58c6957-ecb2-4e3f-a4b7-6953b917d7d4&lt;br /&gt;
&lt;br /&gt;
A Picture Task confirms whether a photo has been taken. The task is only complete once a value is entered (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
A button must be available to add a photo as a child object. Task confirmation is blocked unless at least one photo is attached.&lt;br /&gt;
The behavior for photo addition and confirmation blocking must be defined in customization.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PICTURE_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task ===&lt;br /&gt;
MetaClass Name: PICKLIST_TASK | MetaClass UID: 78651014-f41e-4254-987f-6cf55c687d35 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICKLIST_TASK | MetaClass UID: 83551c77-554e-4715-b327-16f0a6ee196a&lt;br /&gt;
&lt;br /&gt;
A Pick List Task allows the user to select one value from a list of available items. It looks and behaves similarly to a standard Integer Task with a Selective List, but its selectable values are provided by an Active List defined on instance level.&lt;br /&gt;
&lt;br /&gt;
Once a list item is selected, the task is considered complete. Alternatively, the task can be completed by selecting Not Applicable, if this option is available.&lt;br /&gt;
&lt;br /&gt;
Pick List Tasks are intended for MRO workflows where the available options depend on the concrete task instance or workflow context instead of being defined globally.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Selected list item value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task ===&lt;br /&gt;
MetaClass Name: SUPERVISOR_CHECK_TASK | MetaClass UID: 76910d64-5bc0-4674-9c43-108959119846 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SUPERVISOR_CHECK_TASK | MetaClass UID: 1e4a5506-0c6f-4447-bd0a-d5c87282a0e9&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task confirms task completion by a supervisor. The task is complete once a value is selected.&amp;lt;br/&amp;gt;&lt;br /&gt;
Confirmation is only possible after NFC recognition of the supervisor and PIN entry.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Supervisor permissions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
MetaClass Name: INTERFACE_TASK | MetaClass UID: d9a80e3d-02f6-4f0c-b243-7ece9ad82849 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INTERFACE_TASK | MetaClass UID: e437ef02-d49b-4f23-9ab8-9a9836366c3d&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
MetaClass Name: CALCULATION_TASK | Metaclass UID: 3ec9d0f2-9d0f-4c1b-80bd-1efeaf010fa0 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CALCULATION_TASK | Metaclass UID: e2b24a28-2382-46d2-8f4b-5f52168a9e27&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_CALCULATION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Pending = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_NAME || {{String}} || Name of Target Property (on owner)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Type of Target Property (Undefined = 0, Bool = 1, Int = 3, Double = 4)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
MetaClass Name: SIGNATURE_TASK | Metaclass UID: 66D6A529-E233-4CE2-9E11-B65984D5B0DA &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SIGNATURE_TASK | Metaclass UID: ECE1E20F-2BA3-4BC4-A0DD-9AFFDBB23790&lt;br /&gt;
&lt;br /&gt;
A Signature Task captures a sign-off action to confirm the completion of a procedure. The task is complete once a written signature is provided.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Procedure Tasks ==&lt;br /&gt;
The following tasks are specialized versions intended for use within procedures. They implement both the [[MROCLS_SEQUENTIALTASK]] and [[MROCLS_GROUPEDTASK]] classifications.&lt;br /&gt;
&lt;br /&gt;
MetaClass Name: PROCEDURE_CHECK_TASK | MetaClass UID: 63D68EA4-E78C-4A33-A35A-301A01A2568E &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_NUMERIC_TASK | MetaClass UID: f578f50b-eecd-4734-929b-43e1f1f246fa &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INSPECTION_TASK | MetaClass UID: 9369b841-c5bf-43df-909f-3a5063763f81 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_TEXT_TASK | MetaClass UID: 4dd8fee2-9d3e-4fa1-9a61-d580f5d4201c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_PICTURE_TASK | MetaClass UID: 4c0db9da-dfcc-48ad-9d89-6c958a5ac39f  &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SUPERVISOR_CHECK_TASK | MetaClass UID: 9bb8e1b1-04f8-46f0-a9c9-0bb2960a49e5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INTERFACE_TASK | MetaClass UID: 8d9ff119-510b-425c-b917-f72783e4570c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_CALCULATION_TASK | Metaclass UID: ed31735c-c807-40e9-b9a4-254e77445dd5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SIGNATURE_TASK | Metaclass UID: 202CDB9D-BEEB-4E5A-A333-5235A9E6FF94 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_PICK_LIST_TASK | MetaClass UID: 241a2248-36f6-44ab-9c8d-0357b7cbe24c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
== File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== JSON File Document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_JSON | MetaClass UID: 016e57d5-37b3-42e0-a753-f675d4cbf338&lt;br /&gt;
&lt;br /&gt;
File Document for JSON file of a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_PICTURE_TASK | MetaClass UID: 2488fd79-4729-4090-9587-82103a9869e0&lt;br /&gt;
&lt;br /&gt;
File Document for image files of a Picture Task.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO_(Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29892</id>
		<title>MRO Implemented Objects</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29892"/>
				<updated>2026-05-26T07:16:53Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Dynamic List Task */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MRO Implemented Objects are pre-configured standard MRO objects enhanced with additional logic and features. For most tasks, value properties are pre-set, and many of them also implement additional MRO-relevant classifications.&lt;br /&gt;
&lt;br /&gt;
== Workpackage ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
MetaClass Name: PROCEDURE_WORKPACKAGE | MetaClass UID: 007c78f8-fafd-4bde-8add-e11990625e7a&lt;br /&gt;
&lt;br /&gt;
A Procedure Workpackage serves as a container for tasks and other procedures. It stores its entire structure in a JSON format, which is predefined using a workflow editor. When a specific state is triggered, the corresponding sub-tasks and procedures are created or updated accordingly.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PROCEDURE]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || Represents the current state: Draft = 10, ReadyToUse = 20, Published = 30, Open = 40, Executing = 50, Completed = 60, Approved = 70, Rejected = 80&lt;br /&gt;
|-&lt;br /&gt;
| JSON || {{String}} || JSON representation of the procedure&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the procedure is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Task ==&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
MetaClass Name: SWITCH_START_TASK | MetaClass UID: 3c3614e2-635f-4e07-b02a-a72c81b9e328&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task confirms task completion by the system after an expression calculation. The task is automatically marked as complete once the calculation finishes successfully. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_START_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state: Undefined = 0, Ongoing = 10, Finished = 20, Error = 30&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_TRUE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || DisplayString for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || DisplayString for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
MetaClass Name: SWITCH_END_TASK | MetaClass UID: 261a3e63-2b8e-4f3e-ab22-295bbe421e7a&lt;br /&gt;
&lt;br /&gt;
A Switch End Task confirms task completion by the system. The task is invisible to the user and is always automatically marked as complete. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_END_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to Switch task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
MetaClass Name: CHECK_TASK | Metaclass UID: A360287D-2979-4D91-8B1A-6086FC1BEDA1 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CHECK_TASK | Metaclass UID: DF61A1DB-5238-4A87-85A6-B9C09B54B242&lt;br /&gt;
&lt;br /&gt;
A Check Task confirms task completion. The task is complete once a value is selected (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_CHECK_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
MetaClass Name: NUMERIC_TASK | MetaClass UID: b1789da3-bd67-4f93-b14b-22fd41afb215 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_NUMERIC_TASK | MetaClass UID: 047d05f3-a876-4f9d-a40e-2a098e9ba49b&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a numeric double value (e.g., from a temperature sensor). Once a value is entered (including Not Applicable), the task is considered complete.&lt;br /&gt;
An acceptability range and measurement unit can be defined. If the value falls outside the acceptable range, a red alert and/or a technical status update can be triggered.&lt;br /&gt;
The behaviour of the previous value indicator must be defined separately.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_NUMERIC_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded double numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Measurment unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
MetaClass Name: INSPECTION_TASK | MetaClass UID: 08571b05-a093-479a-a10a-9d03c435b1b5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INSPECTION_TASK | MetaClass UID: a0123b54-ddcf-49be-8c66-7ca86c4c5277&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a binary decision. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Custom labels can override the default icons: Checkmark (✔) and Cross (✘).&lt;br /&gt;
Label behavior must be defined separately in the customization settings.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_INSPECTION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for negative outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for positive outcome&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
MetaClass Name: TEXT_TASK | MetaClass UID: 7298d038-003a-41d5-bc24-c97018ca7e85 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_TEXT_TASK | MetaClass UID: c0a95da8-8e32-4036-8db4-ef438deb14de&lt;br /&gt;
&lt;br /&gt;
A Text Task allows entry of free-form text. Once a value is entered (including Not Applicable), the task is complete.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
MetaClass Name: PICTURE_TASK | MetaClass UID: bee0b281-7da1-470e-9838-46724d47b621 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICTURE_TASK | MetaClass UID: e58c6957-ecb2-4e3f-a4b7-6953b917d7d4&lt;br /&gt;
&lt;br /&gt;
A Picture Task confirms whether a photo has been taken. The task is only complete once a value is entered (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
A button must be available to add a photo as a child object. Task confirmation is blocked unless at least one photo is attached.&lt;br /&gt;
The behavior for photo addition and confirmation blocking must be defined in customization.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PICTURE_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task ===&lt;br /&gt;
MetaClass Name: PICKLIST_TASK | MetaClass UID: 78651014-f41e-4254-987f-6cf55c687d35 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICKLIST_TASK | MetaClass UID: 83551c77-554e-4715-b327-16f0a6ee196a&lt;br /&gt;
&lt;br /&gt;
A Pick List Task allows the user to select one value from a list of available items. It looks and behaves similarly to a standard Integer Task with a Selective List, but its selectable values are provided by an Active List defined on instance level.&lt;br /&gt;
&lt;br /&gt;
Once a list item is selected, the task is considered complete. Alternatively, the task can be completed by selecting Not Applicable, if this option is available.&lt;br /&gt;
&lt;br /&gt;
Pick List Tasks are intended for MRO workflows where the available options depend on the concrete task instance or workflow context instead of being defined globally.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Selected list item value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task ===&lt;br /&gt;
MetaClass Name: SUPERVISOR_CHECK_TASK | MetaClass UID: 76910d64-5bc0-4674-9c43-108959119846 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SUPERVISOR_CHECK_TASK | MetaClass UID: 1e4a5506-0c6f-4447-bd0a-d5c87282a0e9&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task confirms task completion by a supervisor. The task is complete once a value is selected.&amp;lt;br/&amp;gt;&lt;br /&gt;
Confirmation is only possible after NFC recognition of the supervisor and PIN entry.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Supervisor permissions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
MetaClass Name: INTERFACE_TASK | MetaClass UID: d9a80e3d-02f6-4f0c-b243-7ece9ad82849 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INTERFACE_TASK | MetaClass UID: e437ef02-d49b-4f23-9ab8-9a9836366c3d&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
MetaClass Name: CALCULATION_TASK | Metaclass UID: 3ec9d0f2-9d0f-4c1b-80bd-1efeaf010fa0 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CALCULATION_TASK | Metaclass UID: e2b24a28-2382-46d2-8f4b-5f52168a9e27&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_CALCULATION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Pending = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_NAME || {{String}} || Name of Target Property (on owner)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Type of Target Property (Undefined = 0, Bool = 1, Int = 3, Double = 4)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
MetaClass Name: SIGNATURE_TASK | Metaclass UID: 66D6A529-E233-4CE2-9E11-B65984D5B0DA &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SIGNATURE_TASK | Metaclass UID: ECE1E20F-2BA3-4BC4-A0DD-9AFFDBB23790&lt;br /&gt;
&lt;br /&gt;
A Signature Task captures a sign-off action to confirm the completion of a procedure. The task is complete once a written signature is provided.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Procedure Tasks ==&lt;br /&gt;
The following tasks are specialized versions intended for use within procedures. They implement both the [[MROCLS_SEQUENTIALTASK]] and [[MROCLS_GROUPEDTASK]] classifications.&lt;br /&gt;
&lt;br /&gt;
MetaClass Name: PROCEDURE_CHECK_TASK | MetaClass UID: 63D68EA4-E78C-4A33-A35A-301A01A2568E &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_NUMERIC_TASK | MetaClass UID: f578f50b-eecd-4734-929b-43e1f1f246fa &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INSPECTION_TASK | MetaClass UID: 9369b841-c5bf-43df-909f-3a5063763f81 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_TEXT_TASK | MetaClass UID: 4dd8fee2-9d3e-4fa1-9a61-d580f5d4201c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_PICTURE_TASK | MetaClass UID: 4c0db9da-dfcc-48ad-9d89-6c958a5ac39f  &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_DYNAMIC_LIST_TASK | MetaClass UID: 241a2248-36f6-44ab-9c8d-0357b7cbe24c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SUPERVISOR_CHECK_TASK | MetaClass UID: 9bb8e1b1-04f8-46f0-a9c9-0bb2960a49e5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INTERFACE_TASK | MetaClass UID: 8d9ff119-510b-425c-b917-f72783e4570c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_CALCULATION_TASK | Metaclass UID: ed31735c-c807-40e9-b9a4-254e77445dd5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SIGNATURE_TASK | Metaclass UID: 202CDB9D-BEEB-4E5A-A333-5235A9E6FF94 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== JSON File Document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_JSON | MetaClass UID: 016e57d5-37b3-42e0-a753-f675d4cbf338&lt;br /&gt;
&lt;br /&gt;
File Document for JSON file of a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_PICTURE_TASK | MetaClass UID: 2488fd79-4729-4090-9587-82103a9869e0&lt;br /&gt;
&lt;br /&gt;
File Document for image files of a Picture Task.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO_(Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=29891</id>
		<title>MRO (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=29891"/>
				<updated>2026-05-26T07:08:33Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Pick List Task */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MRO plugin provides a set of {{UBIK}} objects which allow to represent and document maintenance, repair and operations work on the mobile client. An respective implementation of this set of features is available on {{UBIK WinX}}.&lt;br /&gt;
&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
Objects classified as MRO objects in general provide a technical and organisational status as well as the overall work progress based on the underlying data branch.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Technical Status|Technical Status]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Organisational Status|Organisational Status]]&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Work Progress|Work Progress]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
A set of specific objects can be used to provide the required structure for MRO:&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object having a substructure of jobs to be done. It can have a tree of other task owners or work packages underneath that will update the status of the task owner. This status consists of technical, organisational and progress information. With a task owner a user can get an overview of all the work to be done in the underlying job structure.&lt;br /&gt;
&lt;br /&gt;
=== Work Package===&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] is a collection of objects to collect and summarize other task owning objects, workpackages, or tasks. A simple workpackage has a certain amount of tasks that have to be finished in order to confirm the workpackage as done. More complex workpackages can also own other underlying workpackages that have to be confirmed.  Confirming a workpackage itself requires a progress of 100% of all related tasks, as well as 100% confirmed sub work packages.&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] is an object reporting a certain progress to the owning workpackage. There are several specialized types of task objects. All kinds of tasks have a property called '''VALUE''' in common. It is very important, that this property is able to be validated. Therefore, a MetaAttribute (providing a validation timestamp by default) has to be attached on the used MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{Attention|The MetaProperty ''VALUE'' has to use [[Attributes]] in order to be validated. Otherwise, the calculation of work progress will not be possible.}}&lt;br /&gt;
&lt;br /&gt;
==== Measurement Task ====&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] inherits from [[MROCLS_MRO_TASK|Task]] and documents a measured value (e.g. read from a pressure gauge). Once a value has been entered, the task is finished. Alternatively, the task can also be closed by the option ''Not Applicable'' to document the situation of not being able to fullfill the measurement (e.g. the pressure gauge is broken). &lt;br /&gt;
&lt;br /&gt;
==== Progress Task ====&lt;br /&gt;
[[MROCLS_MRO_PROGRESS_TASK| Progress Task]] inherits from [[MROCLS_MRO_MEASUREMENT_TASK|Task]] and reports a certain progress while fullfilling a task. The progress will influence the overall progress of the owning workpackage. If the task cannot be fullfilled, it can also be finished with the option ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
==== Check Task ====&lt;br /&gt;
[[MROCLS_MRO_CHECK_TASK|Check Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished by reporting ''Done'' or ''Not Applicable''. This is intended for a simple To-Do task that is either done or not.&lt;br /&gt;
&lt;br /&gt;
==== Inspection Task ====&lt;br /&gt;
A [[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished, when the user reports with a positive or negative answer or ''Not Applicable'' (e.g. reporting a yes/no answer for existing equipment).&lt;br /&gt;
&lt;br /&gt;
== MRO Implemented Objects ==&lt;br /&gt;
A set of specific objects extending functionalities of existing MRO elements.&amp;lt;br /&amp;gt;&lt;br /&gt;
For Task Objects, Value properties are assigned by default and implement necessary classifications.&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
A [[MROCLS_PROCEDURE|Procedure Workpackage]] is a specialized type of [[MROCLS_MRO_WORKPACKAGE|Work Package]] designed to model complex workflows. It consists of sequential tasks that can include branching logic, modular structures, and references to linked data. Procedure Workpackages allow the execution of structured processes that may adapt dynamically depending on conditions. They support both online and offline execution, with certain steps (e.g. data exchange) triggered once connectivity is available.&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
A [[MROCLS_SWITCH_START_TASK|Switch Start Task]] is a type of sequential task used within a Procedure Workpackage to define branching logic. It evaluates a predefined (boolean) condition, which can be checked by the client, to determine which branch (true or false) of the workflow will be followed. Each branch represents a different execution path composed of its own set of tasks. A Switch Start Task always requires a corresponding [[MROCLS_SWITCH_END_TASK|Switch End Task]], where all branches converge and the unified procedure continues.&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
A [[MROCLS_SWITCH_END_TASK|Switch End Task]] marks the end of a branching structure initiated by a [[MROCLS_SWITCH_TASK|Switch Task]]. It is a sequential task that connects the different branches back into a single workflow path. Each Switch End Task is directly linked to its respective Switch Task and ensures that, regardless of which branch was taken, the overall procedure continues in a consistent and controlled manner.&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Check Task]] allows the user to check the task as completed or Not Applicable.&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Numeric Task]] allows the user to input a numeric value (double). It includes a defined value range, and if the entered value falls outside this range, the task is visually marked as problematic.&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
An [[MRO_Implemented_Objects|Inspection Task]] presents the user with two customizable buttons representing different inspection outcomes, along with a Not Applicable option. The labels of the buttons can be defined during the procedure creation.&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Text Task]] provides a text input field for the user to enter free-form information. This task is useful for capturing qualitative data or comments during the procedure.&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Picture Task]] enables the user to take and attach one or more photos. It includes a button to initiate the camera and another to confirm the task. The confirmation button remains disabled until at least one picture has been successfully captured.&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task ===&lt;br /&gt;
Technical object name: PICKLIST_TASK&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A  [[MRO_Implemented_Objects|Pick List Task]] allows the user to select one value from a list of available items. It looks and behaves similarly to a standard Integer Task with a Selective List, but its selectable values are provided by an [[UBIK_Active_Lists|Active List]] defined on instance level. No classification is needed on the server side.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The task is considered finished as soon as a list item has been selected. Alternatively, the task can be completed by selecting Not Applicable, if this option is available in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Supervisor Task]] includes a button for NFC reading. If a supervisor successfully authenticates, it enables confirmation buttons, input fields, or other interactive elements.&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
An [[MRO_Implemented_Objects|Interface Task]] performs a REST API request automatically when it becomes active. It does not include any visible buttons or user interaction. Once the server responds, the task is automatically confirmed based on the response.&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Calculation Task]] is used to evaluate a predefined expression and apply its result to a predefined property on its owner. It supports logical or numerical expressions. The result type is defined explicitly to ensure correct handling and validation by the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
Signature Task prompts the user to provide a written signature to confirm task completion. The task is marked complete once the signature is submitted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER#Task Owner]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE#Work Package]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK#Measurement Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK# Progress Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PROJECT]] (Classification)&lt;br /&gt;
* [[MROCLS_PROJECTINFORMATION]] (Classification)&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_START_TASK#Switch Start Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=29890</id>
		<title>MRO (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=29890"/>
				<updated>2026-05-26T07:07:47Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MRO plugin provides a set of {{UBIK}} objects which allow to represent and document maintenance, repair and operations work on the mobile client. An respective implementation of this set of features is available on {{UBIK WinX}}.&lt;br /&gt;
&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
Objects classified as MRO objects in general provide a technical and organisational status as well as the overall work progress based on the underlying data branch.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Technical Status|Technical Status]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Organisational Status|Organisational Status]]&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Work Progress|Work Progress]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
A set of specific objects can be used to provide the required structure for MRO:&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object having a substructure of jobs to be done. It can have a tree of other task owners or work packages underneath that will update the status of the task owner. This status consists of technical, organisational and progress information. With a task owner a user can get an overview of all the work to be done in the underlying job structure.&lt;br /&gt;
&lt;br /&gt;
=== Work Package===&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] is a collection of objects to collect and summarize other task owning objects, workpackages, or tasks. A simple workpackage has a certain amount of tasks that have to be finished in order to confirm the workpackage as done. More complex workpackages can also own other underlying workpackages that have to be confirmed.  Confirming a workpackage itself requires a progress of 100% of all related tasks, as well as 100% confirmed sub work packages.&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] is an object reporting a certain progress to the owning workpackage. There are several specialized types of task objects. All kinds of tasks have a property called '''VALUE''' in common. It is very important, that this property is able to be validated. Therefore, a MetaAttribute (providing a validation timestamp by default) has to be attached on the used MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{Attention|The MetaProperty ''VALUE'' has to use [[Attributes]] in order to be validated. Otherwise, the calculation of work progress will not be possible.}}&lt;br /&gt;
&lt;br /&gt;
==== Measurement Task ====&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] inherits from [[MROCLS_MRO_TASK|Task]] and documents a measured value (e.g. read from a pressure gauge). Once a value has been entered, the task is finished. Alternatively, the task can also be closed by the option ''Not Applicable'' to document the situation of not being able to fullfill the measurement (e.g. the pressure gauge is broken). &lt;br /&gt;
&lt;br /&gt;
==== Progress Task ====&lt;br /&gt;
[[MROCLS_MRO_PROGRESS_TASK| Progress Task]] inherits from [[MROCLS_MRO_MEASUREMENT_TASK|Task]] and reports a certain progress while fullfilling a task. The progress will influence the overall progress of the owning workpackage. If the task cannot be fullfilled, it can also be finished with the option ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
==== Check Task ====&lt;br /&gt;
[[MROCLS_MRO_CHECK_TASK|Check Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished by reporting ''Done'' or ''Not Applicable''. This is intended for a simple To-Do task that is either done or not.&lt;br /&gt;
&lt;br /&gt;
==== Inspection Task ====&lt;br /&gt;
A [[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished, when the user reports with a positive or negative answer or ''Not Applicable'' (e.g. reporting a yes/no answer for existing equipment).&lt;br /&gt;
&lt;br /&gt;
== MRO Implemented Objects ==&lt;br /&gt;
A set of specific objects extending functionalities of existing MRO elements.&amp;lt;br /&amp;gt;&lt;br /&gt;
For Task Objects, Value properties are assigned by default and implement necessary classifications.&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
A [[MROCLS_PROCEDURE|Procedure Workpackage]] is a specialized type of [[MROCLS_MRO_WORKPACKAGE|Work Package]] designed to model complex workflows. It consists of sequential tasks that can include branching logic, modular structures, and references to linked data. Procedure Workpackages allow the execution of structured processes that may adapt dynamically depending on conditions. They support both online and offline execution, with certain steps (e.g. data exchange) triggered once connectivity is available.&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
A [[MROCLS_SWITCH_START_TASK|Switch Start Task]] is a type of sequential task used within a Procedure Workpackage to define branching logic. It evaluates a predefined (boolean) condition, which can be checked by the client, to determine which branch (true or false) of the workflow will be followed. Each branch represents a different execution path composed of its own set of tasks. A Switch Start Task always requires a corresponding [[MROCLS_SWITCH_END_TASK|Switch End Task]], where all branches converge and the unified procedure continues.&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
A [[MROCLS_SWITCH_END_TASK|Switch End Task]] marks the end of a branching structure initiated by a [[MROCLS_SWITCH_TASK|Switch Task]]. It is a sequential task that connects the different branches back into a single workflow path. Each Switch End Task is directly linked to its respective Switch Task and ensures that, regardless of which branch was taken, the overall procedure continues in a consistent and controlled manner.&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Check Task]] allows the user to check the task as completed or Not Applicable.&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Numeric Task]] allows the user to input a numeric value (double). It includes a defined value range, and if the entered value falls outside this range, the task is visually marked as problematic.&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
An [[MRO_Implemented_Objects|Inspection Task]] presents the user with two customizable buttons representing different inspection outcomes, along with a Not Applicable option. The labels of the buttons can be defined during the procedure creation.&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Text Task]] provides a text input field for the user to enter free-form information. This task is useful for capturing qualitative data or comments during the procedure.&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Picture Task]] enables the user to take and attach one or more photos. It includes a button to initiate the camera and another to confirm the task. The confirmation button remains disabled until at least one picture has been successfully captured.&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task ===&lt;br /&gt;
Technical object name: PICKLIST_TASK&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A  [[MRO_Implemented_Objects|Pick List Task]] allows the user to select one value from a list of available items. It looks and behaves similarly to a standard Integer Task with a Selective List, but its selectable values are provided by an [[UBIK_Active_Lists|Active List]] defined on instance level.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The task is considered finished as soon as a list item has been selected. Alternatively, the task can be completed by selecting Not Applicable, if this option is available in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Supervisor Task]] includes a button for NFC reading. If a supervisor successfully authenticates, it enables confirmation buttons, input fields, or other interactive elements.&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
An [[MRO_Implemented_Objects|Interface Task]] performs a REST API request automatically when it becomes active. It does not include any visible buttons or user interaction. Once the server responds, the task is automatically confirmed based on the response.&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Calculation Task]] is used to evaluate a predefined expression and apply its result to a predefined property on its owner. It supports logical or numerical expressions. The result type is defined explicitly to ensure correct handling and validation by the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
Signature Task prompts the user to provide a written signature to confirm task completion. The task is marked complete once the signature is submitted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER#Task Owner]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE#Work Package]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK#Measurement Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK# Progress Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PROJECT]] (Classification)&lt;br /&gt;
* [[MROCLS_PROJECTINFORMATION]] (Classification)&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_START_TASK#Switch Start Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=29889</id>
		<title>MRO (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=29889"/>
				<updated>2026-05-26T07:06:36Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Pick List Task */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MRO plugin provides a set of {{UBIK}} objects which allow to represent and document maintenance, repair and operations work on the mobile client. An respective implementation of this set of features is available on {{UBIK WinX}}.&lt;br /&gt;
&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
Objects classified as MRO objects in general provide a technical and organisational status as well as the overall work progress based on the underlying data branch.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Technical Status|Technical Status]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Organisational Status|Organisational Status]]&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Work Progress|Work Progress]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
A set of specific objects can be used to provide the required structure for MRO:&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object having a substructure of jobs to be done. It can have a tree of other task owners or work packages underneath that will update the status of the task owner. This status consists of technical, organisational and progress information. With a task owner a user can get an overview of all the work to be done in the underlying job structure.&lt;br /&gt;
&lt;br /&gt;
=== Work Package===&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] is a collection of objects to collect and summarize other task owning objects, workpackages, or tasks. A simple workpackage has a certain amount of tasks that have to be finished in order to confirm the workpackage as done. More complex workpackages can also own other underlying workpackages that have to be confirmed.  Confirming a workpackage itself requires a progress of 100% of all related tasks, as well as 100% confirmed sub work packages.&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] is an object reporting a certain progress to the owning workpackage. There are several specialized types of task objects. All kinds of tasks have a property called '''VALUE''' in common. It is very important, that this property is able to be validated. Therefore, a MetaAttribute (providing a validation timestamp by default) has to be attached on the used MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{Attention|The MetaProperty ''VALUE'' has to use [[Attributes]] in order to be validated. Otherwise, the calculation of work progress will not be possible.}}&lt;br /&gt;
&lt;br /&gt;
==== Measurement Task ====&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] inherits from [[MROCLS_MRO_TASK|Task]] and documents a measured value (e.g. read from a pressure gauge). Once a value has been entered, the task is finished. Alternatively, the task can also be closed by the option ''Not Applicable'' to document the situation of not being able to fullfill the measurement (e.g. the pressure gauge is broken). &lt;br /&gt;
&lt;br /&gt;
==== Progress Task ====&lt;br /&gt;
[[MROCLS_MRO_PROGRESS_TASK| Progress Task]] inherits from [[MROCLS_MRO_MEASUREMENT_TASK|Task]] and reports a certain progress while fullfilling a task. The progress will influence the overall progress of the owning workpackage. If the task cannot be fullfilled, it can also be finished with the option ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
==== Check Task ====&lt;br /&gt;
[[MROCLS_MRO_CHECK_TASK|Check Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished by reporting ''Done'' or ''Not Applicable''. This is intended for a simple To-Do task that is either done or not.&lt;br /&gt;
&lt;br /&gt;
==== Inspection Task ====&lt;br /&gt;
A [[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished, when the user reports with a positive or negative answer or ''Not Applicable'' (e.g. reporting a yes/no answer for existing equipment).&lt;br /&gt;
&lt;br /&gt;
== MRO Implemented Objects ==&lt;br /&gt;
A set of specific objects extending functionalities of existing MRO elements.&amp;lt;br /&amp;gt;&lt;br /&gt;
For Task Objects, Value properties are assigned by default and implement necessary classifications.&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
A [[MROCLS_PROCEDURE|Procedure Workpackage]] is a specialized type of [[MROCLS_MRO_WORKPACKAGE|Work Package]] designed to model complex workflows. It consists of sequential tasks that can include branching logic, modular structures, and references to linked data. Procedure Workpackages allow the execution of structured processes that may adapt dynamically depending on conditions. They support both online and offline execution, with certain steps (e.g. data exchange) triggered once connectivity is available.&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
A [[MROCLS_SWITCH_START_TASK|Switch Start Task]] is a type of sequential task used within a Procedure Workpackage to define branching logic. It evaluates a predefined (boolean) condition, which can be checked by the client, to determine which branch (true or false) of the workflow will be followed. Each branch represents a different execution path composed of its own set of tasks. A Switch Start Task always requires a corresponding [[MROCLS_SWITCH_END_TASK|Switch End Task]], where all branches converge and the unified procedure continues.&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
A [[MROCLS_SWITCH_END_TASK|Switch End Task]] marks the end of a branching structure initiated by a [[MROCLS_SWITCH_TASK|Switch Task]]. It is a sequential task that connects the different branches back into a single workflow path. Each Switch End Task is directly linked to its respective Switch Task and ensures that, regardless of which branch was taken, the overall procedure continues in a consistent and controlled manner.&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Check Task]] allows the user to check the task as completed or Not Applicable.&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Numeric Task]] allows the user to input a numeric value (double). It includes a defined value range, and if the entered value falls outside this range, the task is visually marked as problematic.&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
An [[MRO_Implemented_Objects|Inspection Task]] presents the user with two customizable buttons representing different inspection outcomes, along with a Not Applicable option. The labels of the buttons can be defined during the procedure creation.&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Text Task]] provides a text input field for the user to enter free-form information. This task is useful for capturing qualitative data or comments during the procedure.&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Picture Task]] enables the user to take and attach one or more photos. It includes a button to initiate the camera and another to confirm the task. The confirmation button remains disabled until at least one picture has been successfully captured.&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task ===&lt;br /&gt;
Technical object name: PICKLIST_TASK&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A  [[MRO_Implemented_Objects|Pick List Task]] allows the user to select one value from a list of available items. It looks and behaves similarly to a standard Integer Task with a Selective List, but its selectable values are provided by an [[UBIK_Active_Lists|Active List]] defined on instance level.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The task is considered finished as soon as a list item has been selected. Alternatively, the task can be completed by selecting Not Applicable, if this option is available in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Supervisor Task]] includes a button for NFC reading. If a supervisor successfully authenticates, it enables confirmation buttons, input fields, or other interactive elements.&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
An [[MRO_Implemented_Objects|Interface Task]] performs a REST API request automatically when it becomes active. It does not include any visible buttons or user interaction. Once the server responds, the task is automatically confirmed based on the response.&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Calculation Task]] is used to evaluate a predefined expression and apply its result to a predefined property on its owner. It supports logical or numerical expressions. The result type is defined explicitly to ensure correct handling and validation by the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
Signature Task prompts the user to provide a written signature to confirm task completion. The task is marked complete once the signature is submitted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER#Task Owner]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE#Work Package]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK#Measurement Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK# Progress Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PROJECT]] (Classification)&lt;br /&gt;
* [[MROCLS_PROJECTINFORMATION]] (Classification)&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_START_TASK#Switch Start Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=29888</id>
		<title>MRO (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=29888"/>
				<updated>2026-05-26T07:05:45Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Pick List Task */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MRO plugin provides a set of {{UBIK}} objects which allow to represent and document maintenance, repair and operations work on the mobile client. An respective implementation of this set of features is available on {{UBIK WinX}}.&lt;br /&gt;
&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
Objects classified as MRO objects in general provide a technical and organisational status as well as the overall work progress based on the underlying data branch.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Technical Status|Technical Status]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Organisational Status|Organisational Status]]&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Work Progress|Work Progress]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
A set of specific objects can be used to provide the required structure for MRO:&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object having a substructure of jobs to be done. It can have a tree of other task owners or work packages underneath that will update the status of the task owner. This status consists of technical, organisational and progress information. With a task owner a user can get an overview of all the work to be done in the underlying job structure.&lt;br /&gt;
&lt;br /&gt;
=== Work Package===&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] is a collection of objects to collect and summarize other task owning objects, workpackages, or tasks. A simple workpackage has a certain amount of tasks that have to be finished in order to confirm the workpackage as done. More complex workpackages can also own other underlying workpackages that have to be confirmed.  Confirming a workpackage itself requires a progress of 100% of all related tasks, as well as 100% confirmed sub work packages.&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] is an object reporting a certain progress to the owning workpackage. There are several specialized types of task objects. All kinds of tasks have a property called '''VALUE''' in common. It is very important, that this property is able to be validated. Therefore, a MetaAttribute (providing a validation timestamp by default) has to be attached on the used MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{Attention|The MetaProperty ''VALUE'' has to use [[Attributes]] in order to be validated. Otherwise, the calculation of work progress will not be possible.}}&lt;br /&gt;
&lt;br /&gt;
==== Measurement Task ====&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] inherits from [[MROCLS_MRO_TASK|Task]] and documents a measured value (e.g. read from a pressure gauge). Once a value has been entered, the task is finished. Alternatively, the task can also be closed by the option ''Not Applicable'' to document the situation of not being able to fullfill the measurement (e.g. the pressure gauge is broken). &lt;br /&gt;
&lt;br /&gt;
==== Progress Task ====&lt;br /&gt;
[[MROCLS_MRO_PROGRESS_TASK| Progress Task]] inherits from [[MROCLS_MRO_MEASUREMENT_TASK|Task]] and reports a certain progress while fullfilling a task. The progress will influence the overall progress of the owning workpackage. If the task cannot be fullfilled, it can also be finished with the option ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
==== Check Task ====&lt;br /&gt;
[[MROCLS_MRO_CHECK_TASK|Check Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished by reporting ''Done'' or ''Not Applicable''. This is intended for a simple To-Do task that is either done or not.&lt;br /&gt;
&lt;br /&gt;
==== Inspection Task ====&lt;br /&gt;
A [[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished, when the user reports with a positive or negative answer or ''Not Applicable'' (e.g. reporting a yes/no answer for existing equipment).&lt;br /&gt;
&lt;br /&gt;
== MRO Implemented Objects ==&lt;br /&gt;
A set of specific objects extending functionalities of existing MRO elements.&amp;lt;br /&amp;gt;&lt;br /&gt;
For Task Objects, Value properties are assigned by default and implement necessary classifications.&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
A [[MROCLS_PROCEDURE|Procedure Workpackage]] is a specialized type of [[MROCLS_MRO_WORKPACKAGE|Work Package]] designed to model complex workflows. It consists of sequential tasks that can include branching logic, modular structures, and references to linked data. Procedure Workpackages allow the execution of structured processes that may adapt dynamically depending on conditions. They support both online and offline execution, with certain steps (e.g. data exchange) triggered once connectivity is available.&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
A [[MROCLS_SWITCH_START_TASK|Switch Start Task]] is a type of sequential task used within a Procedure Workpackage to define branching logic. It evaluates a predefined (boolean) condition, which can be checked by the client, to determine which branch (true or false) of the workflow will be followed. Each branch represents a different execution path composed of its own set of tasks. A Switch Start Task always requires a corresponding [[MROCLS_SWITCH_END_TASK|Switch End Task]], where all branches converge and the unified procedure continues.&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
A [[MROCLS_SWITCH_END_TASK|Switch End Task]] marks the end of a branching structure initiated by a [[MROCLS_SWITCH_TASK|Switch Task]]. It is a sequential task that connects the different branches back into a single workflow path. Each Switch End Task is directly linked to its respective Switch Task and ensures that, regardless of which branch was taken, the overall procedure continues in a consistent and controlled manner.&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Check Task]] allows the user to check the task as completed or Not Applicable.&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Numeric Task]] allows the user to input a numeric value (double). It includes a defined value range, and if the entered value falls outside this range, the task is visually marked as problematic.&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
An [[MRO_Implemented_Objects|Inspection Task]] presents the user with two customizable buttons representing different inspection outcomes, along with a Not Applicable option. The labels of the buttons can be defined during the procedure creation.&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Text Task]] provides a text input field for the user to enter free-form information. This task is useful for capturing qualitative data or comments during the procedure.&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Picture Task]] enables the user to take and attach one or more photos. It includes a button to initiate the camera and another to confirm the task. The confirmation button remains disabled until at least one picture has been successfully captured.&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task ===&lt;br /&gt;
Technical object name: PICKLIST_TASK&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A  [[MRO_Implemented_Objects|Pick List Task]] allows the user to select one value from a list of available items. It looks and behaves similarly to a standard Integer Task with a Selective List, but its selectable values are provided by an Active List defined on instance level.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The task is considered finished as soon as a list item has been selected. Alternatively, the task can be completed by selecting Not Applicable, if this option is available in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Supervisor Task]] includes a button for NFC reading. If a supervisor successfully authenticates, it enables confirmation buttons, input fields, or other interactive elements.&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
An [[MRO_Implemented_Objects|Interface Task]] performs a REST API request automatically when it becomes active. It does not include any visible buttons or user interaction. Once the server responds, the task is automatically confirmed based on the response.&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Calculation Task]] is used to evaluate a predefined expression and apply its result to a predefined property on its owner. It supports logical or numerical expressions. The result type is defined explicitly to ensure correct handling and validation by the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
Signature Task prompts the user to provide a written signature to confirm task completion. The task is marked complete once the signature is submitted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER#Task Owner]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE#Work Package]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK#Measurement Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK# Progress Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PROJECT]] (Classification)&lt;br /&gt;
* [[MROCLS_PROJECTINFORMATION]] (Classification)&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_START_TASK#Switch Start Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=29887</id>
		<title>MRO (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=29887"/>
				<updated>2026-05-26T07:02:53Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Dynamic List Task */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MRO plugin provides a set of {{UBIK}} objects which allow to represent and document maintenance, repair and operations work on the mobile client. An respective implementation of this set of features is available on {{UBIK WinX}}.&lt;br /&gt;
&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
Objects classified as MRO objects in general provide a technical and organisational status as well as the overall work progress based on the underlying data branch.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Technical Status|Technical Status]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Organisational Status|Organisational Status]]&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Work Progress|Work Progress]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
A set of specific objects can be used to provide the required structure for MRO:&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object having a substructure of jobs to be done. It can have a tree of other task owners or work packages underneath that will update the status of the task owner. This status consists of technical, organisational and progress information. With a task owner a user can get an overview of all the work to be done in the underlying job structure.&lt;br /&gt;
&lt;br /&gt;
=== Work Package===&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] is a collection of objects to collect and summarize other task owning objects, workpackages, or tasks. A simple workpackage has a certain amount of tasks that have to be finished in order to confirm the workpackage as done. More complex workpackages can also own other underlying workpackages that have to be confirmed.  Confirming a workpackage itself requires a progress of 100% of all related tasks, as well as 100% confirmed sub work packages.&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] is an object reporting a certain progress to the owning workpackage. There are several specialized types of task objects. All kinds of tasks have a property called '''VALUE''' in common. It is very important, that this property is able to be validated. Therefore, a MetaAttribute (providing a validation timestamp by default) has to be attached on the used MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{Attention|The MetaProperty ''VALUE'' has to use [[Attributes]] in order to be validated. Otherwise, the calculation of work progress will not be possible.}}&lt;br /&gt;
&lt;br /&gt;
==== Measurement Task ====&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] inherits from [[MROCLS_MRO_TASK|Task]] and documents a measured value (e.g. read from a pressure gauge). Once a value has been entered, the task is finished. Alternatively, the task can also be closed by the option ''Not Applicable'' to document the situation of not being able to fullfill the measurement (e.g. the pressure gauge is broken). &lt;br /&gt;
&lt;br /&gt;
==== Progress Task ====&lt;br /&gt;
[[MROCLS_MRO_PROGRESS_TASK| Progress Task]] inherits from [[MROCLS_MRO_MEASUREMENT_TASK|Task]] and reports a certain progress while fullfilling a task. The progress will influence the overall progress of the owning workpackage. If the task cannot be fullfilled, it can also be finished with the option ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
==== Check Task ====&lt;br /&gt;
[[MROCLS_MRO_CHECK_TASK|Check Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished by reporting ''Done'' or ''Not Applicable''. This is intended for a simple To-Do task that is either done or not.&lt;br /&gt;
&lt;br /&gt;
==== Inspection Task ====&lt;br /&gt;
A [[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished, when the user reports with a positive or negative answer or ''Not Applicable'' (e.g. reporting a yes/no answer for existing equipment).&lt;br /&gt;
&lt;br /&gt;
== MRO Implemented Objects ==&lt;br /&gt;
A set of specific objects extending functionalities of existing MRO elements.&amp;lt;br /&amp;gt;&lt;br /&gt;
For Task Objects, Value properties are assigned by default and implement necessary classifications.&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
A [[MROCLS_PROCEDURE|Procedure Workpackage]] is a specialized type of [[MROCLS_MRO_WORKPACKAGE|Work Package]] designed to model complex workflows. It consists of sequential tasks that can include branching logic, modular structures, and references to linked data. Procedure Workpackages allow the execution of structured processes that may adapt dynamically depending on conditions. They support both online and offline execution, with certain steps (e.g. data exchange) triggered once connectivity is available.&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
A [[MROCLS_SWITCH_START_TASK|Switch Start Task]] is a type of sequential task used within a Procedure Workpackage to define branching logic. It evaluates a predefined (boolean) condition, which can be checked by the client, to determine which branch (true or false) of the workflow will be followed. Each branch represents a different execution path composed of its own set of tasks. A Switch Start Task always requires a corresponding [[MROCLS_SWITCH_END_TASK|Switch End Task]], where all branches converge and the unified procedure continues.&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
A [[MROCLS_SWITCH_END_TASK|Switch End Task]] marks the end of a branching structure initiated by a [[MROCLS_SWITCH_TASK|Switch Task]]. It is a sequential task that connects the different branches back into a single workflow path. Each Switch End Task is directly linked to its respective Switch Task and ensures that, regardless of which branch was taken, the overall procedure continues in a consistent and controlled manner.&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Check Task]] allows the user to check the task as completed or Not Applicable.&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Numeric Task]] allows the user to input a numeric value (double). It includes a defined value range, and if the entered value falls outside this range, the task is visually marked as problematic.&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
An [[MRO_Implemented_Objects|Inspection Task]] presents the user with two customizable buttons representing different inspection outcomes, along with a Not Applicable option. The labels of the buttons can be defined during the procedure creation.&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Text Task]] provides a text input field for the user to enter free-form information. This task is useful for capturing qualitative data or comments during the procedure.&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Picture Task]] enables the user to take and attach one or more photos. It includes a button to initiate the camera and another to confirm the task. The confirmation button remains disabled until at least one picture has been successfully captured.&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Pick List Task]] presents a selection box that, when clicked, displays a list of selectable options. These options are defined by the procedure creator and can vary depending on the context. This task is ideal for scenarios requiring user selection from a predefined but flexible set of choices.&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Supervisor Task]] includes a button for NFC reading. If a supervisor successfully authenticates, it enables confirmation buttons, input fields, or other interactive elements.&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
An [[MRO_Implemented_Objects|Interface Task]] performs a REST API request automatically when it becomes active. It does not include any visible buttons or user interaction. Once the server responds, the task is automatically confirmed based on the response.&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
A [[MRO_Implemented_Objects|Calculation Task]] is used to evaluate a predefined expression and apply its result to a predefined property on its owner. It supports logical or numerical expressions. The result type is defined explicitly to ensure correct handling and validation by the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
Signature Task prompts the user to provide a written signature to confirm task completion. The task is marked complete once the signature is submitted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER#Task Owner]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE#Work Package]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK#Measurement Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK# Progress Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PROJECT]] (Classification)&lt;br /&gt;
* [[MROCLS_PROJECTINFORMATION]] (Classification)&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MRO_Implemented_Objects]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_START_TASK#Switch Start Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29886</id>
		<title>MRO Implemented Objects</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29886"/>
				<updated>2026-05-22T10:11:42Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Switch Start Task */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MRO Implemented Objects are pre-configured standard MRO objects enhanced with additional logic and features. For most tasks, value properties are pre-set, and many of them also implement additional MRO-relevant classifications.&lt;br /&gt;
&lt;br /&gt;
== Workpackage ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
MetaClass Name: PROCEDURE_WORKPACKAGE | MetaClass UID: 007c78f8-fafd-4bde-8add-e11990625e7a&lt;br /&gt;
&lt;br /&gt;
A Procedure Workpackage serves as a container for tasks and other procedures. It stores its entire structure in a JSON format, which is predefined using a workflow editor. When a specific state is triggered, the corresponding sub-tasks and procedures are created or updated accordingly.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PROCEDURE]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || Represents the current state: Draft = 10, ReadyToUse = 20, Published = 30, Open = 40, Executing = 50, Completed = 60, Approved = 70, Rejected = 80&lt;br /&gt;
|-&lt;br /&gt;
| JSON || {{String}} || JSON representation of the procedure&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the procedure is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Task ==&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
MetaClass Name: SWITCH_START_TASK | MetaClass UID: 3c3614e2-635f-4e07-b02a-a72c81b9e328&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task confirms task completion by the system after an expression calculation. The task is automatically marked as complete once the calculation finishes successfully. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_START_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state: Undefined = 0, Ongoing = 10, Finished = 20, Error = 30&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_TRUE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || DisplayString for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || DisplayString for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
MetaClass Name: SWITCH_END_TASK | MetaClass UID: 261a3e63-2b8e-4f3e-ab22-295bbe421e7a&lt;br /&gt;
&lt;br /&gt;
A Switch End Task confirms task completion by the system. The task is invisible to the user and is always automatically marked as complete. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_END_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to Switch task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
MetaClass Name: CHECK_TASK | Metaclass UID: A360287D-2979-4D91-8B1A-6086FC1BEDA1 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CHECK_TASK | Metaclass UID: DF61A1DB-5238-4A87-85A6-B9C09B54B242&lt;br /&gt;
&lt;br /&gt;
A Check Task confirms task completion. The task is complete once a value is selected (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_CHECK_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
MetaClass Name: NUMERIC_TASK | MetaClass UID: b1789da3-bd67-4f93-b14b-22fd41afb215 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_NUMERIC_TASK | MetaClass UID: 047d05f3-a876-4f9d-a40e-2a098e9ba49b&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a numeric double value (e.g., from a temperature sensor). Once a value is entered (including Not Applicable), the task is considered complete.&lt;br /&gt;
An acceptability range and measurement unit can be defined. If the value falls outside the acceptable range, a red alert and/or a technical status update can be triggered.&lt;br /&gt;
The behaviour of the previous value indicator must be defined separately.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_NUMERIC_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded double numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Measurment unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
MetaClass Name: INSPECTION_TASK | MetaClass UID: 08571b05-a093-479a-a10a-9d03c435b1b5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INSPECTION_TASK | MetaClass UID: a0123b54-ddcf-49be-8c66-7ca86c4c5277&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a binary decision. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Custom labels can override the default icons: Checkmark (✔) and Cross (✘).&lt;br /&gt;
Label behavior must be defined separately in the customization settings.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_INSPECTION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for negative outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for positive outcome&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
MetaClass Name: TEXT_TASK | MetaClass UID: 7298d038-003a-41d5-bc24-c97018ca7e85 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_TEXT_TASK | MetaClass UID: c0a95da8-8e32-4036-8db4-ef438deb14de&lt;br /&gt;
&lt;br /&gt;
A Text Task allows entry of free-form text. Once a value is entered (including Not Applicable), the task is complete.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
MetaClass Name: PICTURE_TASK | MetaClass UID: bee0b281-7da1-470e-9838-46724d47b621 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICTURE_TASK | MetaClass UID: e58c6957-ecb2-4e3f-a4b7-6953b917d7d4&lt;br /&gt;
&lt;br /&gt;
A Picture Task confirms whether a photo has been taken. The task is only complete once a value is entered (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
A button must be available to add a photo as a child object. Task confirmation is blocked unless at least one photo is attached.&lt;br /&gt;
The behavior for photo addition and confirmation blocking must be defined in customization.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PICTURE_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dynamic List Task ===&lt;br /&gt;
MetaClass Name: DYNAMIC_LIST_TASK | MetaClass UID: 78651014-f41e-4254-987f-6cf55c687d35 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_DYNAMIC_LIST_TASK | MetaClass UID: 83551c77-554e-4715-b327-16f0a6ee196a&lt;br /&gt;
&lt;br /&gt;
A Dynamic List Task allows selection from a list of options. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Selection behaviour must be defined in the data model and requires implementation of [[SYSCLS_DYNAMIC_SELECTIVE_LIST|Dynamic Selective List]].&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Guid}} || Selected item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task ===&lt;br /&gt;
MetaClass Name: SUPERVISOR_CHECK_TASK | MetaClass UID: 76910d64-5bc0-4674-9c43-108959119846 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SUPERVISOR_CHECK_TASK | MetaClass UID: 1e4a5506-0c6f-4447-bd0a-d5c87282a0e9&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task confirms task completion by a supervisor. The task is complete once a value is selected.&amp;lt;br/&amp;gt;&lt;br /&gt;
Confirmation is only possible after NFC recognition of the supervisor and PIN entry.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Supervisor permissions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
MetaClass Name: INTERFACE_TASK | MetaClass UID: d9a80e3d-02f6-4f0c-b243-7ece9ad82849 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INTERFACE_TASK | MetaClass UID: e437ef02-d49b-4f23-9ab8-9a9836366c3d&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
MetaClass Name: CALCULATION_TASK | Metaclass UID: 3ec9d0f2-9d0f-4c1b-80bd-1efeaf010fa0 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CALCULATION_TASK | Metaclass UID: e2b24a28-2382-46d2-8f4b-5f52168a9e27&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_CALCULATION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Pending = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_NAME || {{String}} || Name of Target Property (on owner)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Type of Target Property (Undefined = 0, Bool = 1, Int = 3, Double = 4)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
MetaClass Name: SIGNATURE_TASK | Metaclass UID: 66D6A529-E233-4CE2-9E11-B65984D5B0DA &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SIGNATURE_TASK | Metaclass UID: ECE1E20F-2BA3-4BC4-A0DD-9AFFDBB23790&lt;br /&gt;
&lt;br /&gt;
A Signature Task captures a sign-off action to confirm the completion of a procedure. The task is complete once a written signature is provided.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Procedure Tasks ==&lt;br /&gt;
The following tasks are specialized versions intended for use within procedures. They implement both the [[MROCLS_SEQUENTIALTASK]] and [[MROCLS_GROUPEDTASK]] classifications.&lt;br /&gt;
&lt;br /&gt;
MetaClass Name: PROCEDURE_CHECK_TASK | MetaClass UID: 63D68EA4-E78C-4A33-A35A-301A01A2568E &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_NUMERIC_TASK | MetaClass UID: f578f50b-eecd-4734-929b-43e1f1f246fa &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INSPECTION_TASK | MetaClass UID: 9369b841-c5bf-43df-909f-3a5063763f81 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_TEXT_TASK | MetaClass UID: 4dd8fee2-9d3e-4fa1-9a61-d580f5d4201c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_PICTURE_TASK | MetaClass UID: 4c0db9da-dfcc-48ad-9d89-6c958a5ac39f  &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_DYNAMIC_LIST_TASK | MetaClass UID: 241a2248-36f6-44ab-9c8d-0357b7cbe24c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SUPERVISOR_CHECK_TASK | MetaClass UID: 9bb8e1b1-04f8-46f0-a9c9-0bb2960a49e5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INTERFACE_TASK | MetaClass UID: 8d9ff119-510b-425c-b917-f72783e4570c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_CALCULATION_TASK | Metaclass UID: ed31735c-c807-40e9-b9a4-254e77445dd5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SIGNATURE_TASK | Metaclass UID: 202CDB9D-BEEB-4E5A-A333-5235A9E6FF94 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== JSON File Document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_JSON | MetaClass UID: 016e57d5-37b3-42e0-a753-f675d4cbf338&lt;br /&gt;
&lt;br /&gt;
File Document for JSON file of a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_PICTURE_TASK | MetaClass UID: 2488fd79-4729-4090-9587-82103a9869e0&lt;br /&gt;
&lt;br /&gt;
File Document for image files of a Picture Task.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO_(Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROCLS_SWITCH_START_TASK&amp;diff=29826</id>
		<title>MROCLS SWITCH START TASK</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROCLS_SWITCH_START_TASK&amp;diff=29826"/>
				<updated>2026-05-08T09:07:42Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* MetaProperties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ClassificationInfoBox&lt;br /&gt;
| title = Switch Task classification object&lt;br /&gt;
| name = {{PAGENAMEE}}&lt;br /&gt;
| inheritance = [[MROCLS_SEQUENTIALTASK]] &lt;br /&gt;
| namespace = MRO.Classification&lt;br /&gt;
| purpose = Classify tasks as switch tasks&lt;br /&gt;
| version = 5.0.0&lt;br /&gt;
| id = {FE4C6189-DD7D-4B42-83C6-7594CCB91D00}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Classifies an object as a Switch Task. &lt;br /&gt;
This classification is an [[AutonomousClassification|Autonomous Classification]] where the defined properties are autonomously added to the MetaDefinitions. A Switch Task is a sequential task used within Procedure Workpackages to introduce branching logic. It evaluates a predefined condition/expression, which can be evaluated by the client, to determine which branch of the workflow to execute. Each branch represents a different path of tasks. Every Switch Task must be followed by a Switch End Task, where the two branches merge again and the procedure continues.&lt;br /&gt;
&lt;br /&gt;
== MetaProperties ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Pending = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_TRUE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || DisplayString for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || DisplayString for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| EVALUATION_RESULT || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Classifications|MROCLS SWITCH TASK]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER#Task Owner]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK#Measurement Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK# Progress Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE#Work Package]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK#Sequential Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MRO_Objects_(Client)#Work_Package]]&lt;br /&gt;
* [[MRO_(Plugin)#Work_Package]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Classifications|MROCLS SWITCH TASK]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29825</id>
		<title>MRO Implemented Objects</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29825"/>
				<updated>2026-05-08T09:07:11Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Calculation Task */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MRO Implemented Objects are pre-configured standard MRO objects enhanced with additional logic and features. For most tasks, value properties are pre-set, and many of them also implement additional MRO-relevant classifications.&lt;br /&gt;
&lt;br /&gt;
== Workpackage ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
MetaClass Name: PROCEDURE_WORKPACKAGE | MetaClass UID: 007c78f8-fafd-4bde-8add-e11990625e7a&lt;br /&gt;
&lt;br /&gt;
A Procedure Workpackage serves as a container for tasks and other procedures. It stores its entire structure in a JSON format, which is predefined using a workflow editor. When a specific state is triggered, the corresponding sub-tasks and procedures are created or updated accordingly.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PROCEDURE]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || Represents the current state: Draft = 10, ReadyToUse = 20, Published = 30, Open = 40, Executing = 50, Completed = 60, Approved = 70, Rejected = 80&lt;br /&gt;
|-&lt;br /&gt;
| JSON || {{String}} || JSON representation of the procedure&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the procedure is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Task ==&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
MetaClass Name: SWITCH_START_TASK | MetaClass UID: 3c3614e2-635f-4e07-b02a-a72c81b9e328&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task confirms task completion by the system after an expression calculation. The task is automatically marked as complete once the calculation finishes successfully. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_START_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state: Undefined = 0, Ongoing = 10, Finished = 20, Error = 30&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_TRUE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || DisplayString for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || DisplayString for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| EVALUATION_RESULT || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
MetaClass Name: SWITCH_END_TASK | MetaClass UID: 261a3e63-2b8e-4f3e-ab22-295bbe421e7a&lt;br /&gt;
&lt;br /&gt;
A Switch End Task confirms task completion by the system. The task is invisible to the user and is always automatically marked as complete. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_END_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to Switch task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
MetaClass Name: CHECK_TASK | Metaclass UID: A360287D-2979-4D91-8B1A-6086FC1BEDA1 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CHECK_TASK | Metaclass UID: DF61A1DB-5238-4A87-85A6-B9C09B54B242&lt;br /&gt;
&lt;br /&gt;
A Check Task confirms task completion. The task is complete once a value is selected (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_CHECK_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
MetaClass Name: NUMERIC_TASK | MetaClass UID: b1789da3-bd67-4f93-b14b-22fd41afb215 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_NUMERIC_TASK | MetaClass UID: 047d05f3-a876-4f9d-a40e-2a098e9ba49b&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a numeric double value (e.g., from a temperature sensor). Once a value is entered (including Not Applicable), the task is considered complete.&lt;br /&gt;
An acceptability range and measurement unit can be defined. If the value falls outside the acceptable range, a red alert and/or a technical status update can be triggered.&lt;br /&gt;
The behaviour of the previous value indicator must be defined separately.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_NUMERIC_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded double numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Measurment unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
MetaClass Name: INSPECTION_TASK | MetaClass UID: 08571b05-a093-479a-a10a-9d03c435b1b5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INSPECTION_TASK | MetaClass UID: a0123b54-ddcf-49be-8c66-7ca86c4c5277&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a binary decision. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Custom labels can override the default icons: Checkmark (✔) and Cross (✘).&lt;br /&gt;
Label behavior must be defined separately in the customization settings.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_INSPECTION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for negative outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for positive outcome&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
MetaClass Name: TEXT_TASK | MetaClass UID: 7298d038-003a-41d5-bc24-c97018ca7e85 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_TEXT_TASK | MetaClass UID: c0a95da8-8e32-4036-8db4-ef438deb14de&lt;br /&gt;
&lt;br /&gt;
A Text Task allows entry of free-form text. Once a value is entered (including Not Applicable), the task is complete.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
MetaClass Name: PICTURE_TASK | MetaClass UID: bee0b281-7da1-470e-9838-46724d47b621 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICTURE_TASK | MetaClass UID: e58c6957-ecb2-4e3f-a4b7-6953b917d7d4&lt;br /&gt;
&lt;br /&gt;
A Picture Task confirms whether a photo has been taken. The task is only complete once a value is entered (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
A button must be available to add a photo as a child object. Task confirmation is blocked unless at least one photo is attached.&lt;br /&gt;
The behavior for photo addition and confirmation blocking must be defined in customization.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PICTURE_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dynamic List Task ===&lt;br /&gt;
MetaClass Name: DYNAMIC_LIST_TASK | MetaClass UID: 78651014-f41e-4254-987f-6cf55c687d35 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_DYNAMIC_LIST_TASK | MetaClass UID: 83551c77-554e-4715-b327-16f0a6ee196a&lt;br /&gt;
&lt;br /&gt;
A Dynamic List Task allows selection from a list of options. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Selection behaviour must be defined in the data model and requires implementation of [[SYSCLS_DYNAMIC_SELECTIVE_LIST|Dynamic Selective List]].&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Guid}} || Selected item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task ===&lt;br /&gt;
MetaClass Name: SUPERVISOR_CHECK_TASK | MetaClass UID: 76910d64-5bc0-4674-9c43-108959119846 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SUPERVISOR_CHECK_TASK | MetaClass UID: 1e4a5506-0c6f-4447-bd0a-d5c87282a0e9&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task confirms task completion by a supervisor. The task is complete once a value is selected.&amp;lt;br/&amp;gt;&lt;br /&gt;
Confirmation is only possible after NFC recognition of the supervisor and PIN entry.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Supervisor permissions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
MetaClass Name: INTERFACE_TASK | MetaClass UID: d9a80e3d-02f6-4f0c-b243-7ece9ad82849 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INTERFACE_TASK | MetaClass UID: e437ef02-d49b-4f23-9ab8-9a9836366c3d&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
MetaClass Name: CALCULATION_TASK | Metaclass UID: 3ec9d0f2-9d0f-4c1b-80bd-1efeaf010fa0 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CALCULATION_TASK | Metaclass UID: e2b24a28-2382-46d2-8f4b-5f52168a9e27&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_CALCULATION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Pending = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_NAME || {{String}} || Name of Target Property (on owner)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Type of Target Property (Undefined = 0, Bool = 1, Int = 3, Double = 4)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
MetaClass Name: SIGNATURE_TASK | Metaclass UID: 66D6A529-E233-4CE2-9E11-B65984D5B0DA &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SIGNATURE_TASK | Metaclass UID: ECE1E20F-2BA3-4BC4-A0DD-9AFFDBB23790&lt;br /&gt;
&lt;br /&gt;
A Signature Task captures a sign-off action to confirm the completion of a procedure. The task is complete once a written signature is provided.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Procedure Tasks ==&lt;br /&gt;
The following tasks are specialized versions intended for use within procedures. They implement both the [[MROCLS_SEQUENTIALTASK]] and [[MROCLS_GROUPEDTASK]] classifications.&lt;br /&gt;
&lt;br /&gt;
MetaClass Name: PROCEDURE_CHECK_TASK | MetaClass UID: 63D68EA4-E78C-4A33-A35A-301A01A2568E &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_NUMERIC_TASK | MetaClass UID: f578f50b-eecd-4734-929b-43e1f1f246fa &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INSPECTION_TASK | MetaClass UID: 9369b841-c5bf-43df-909f-3a5063763f81 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_TEXT_TASK | MetaClass UID: 4dd8fee2-9d3e-4fa1-9a61-d580f5d4201c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_PICTURE_TASK | MetaClass UID: 4c0db9da-dfcc-48ad-9d89-6c958a5ac39f  &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_DYNAMIC_LIST_TASK | MetaClass UID: 241a2248-36f6-44ab-9c8d-0357b7cbe24c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SUPERVISOR_CHECK_TASK | MetaClass UID: 9bb8e1b1-04f8-46f0-a9c9-0bb2960a49e5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INTERFACE_TASK | MetaClass UID: 8d9ff119-510b-425c-b917-f72783e4570c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_CALCULATION_TASK | Metaclass UID: ed31735c-c807-40e9-b9a4-254e77445dd5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SIGNATURE_TASK | Metaclass UID: 202CDB9D-BEEB-4E5A-A333-5235A9E6FF94 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== JSON File Document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_JSON | MetaClass UID: 016e57d5-37b3-42e0-a753-f675d4cbf338&lt;br /&gt;
&lt;br /&gt;
File Document for JSON file of a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_PICTURE_TASK | MetaClass UID: 2488fd79-4729-4090-9587-82103a9869e0&lt;br /&gt;
&lt;br /&gt;
File Document for image files of a Picture Task.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO_(Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROCLS_CALCULATION_TASK&amp;diff=29824</id>
		<title>MROCLS CALCULATION TASK</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROCLS_CALCULATION_TASK&amp;diff=29824"/>
				<updated>2026-05-08T09:06:32Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* MetaProperties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ClassificationInfoBox&lt;br /&gt;
| title = Calculation classification object&lt;br /&gt;
| name = {{PAGENAMEE}}&lt;br /&gt;
| inheritance = [[MROCLS_MRO_TASK]] &lt;br /&gt;
| namespace = MRO.Classification&lt;br /&gt;
| purpose = Classify tasks as calculation tasks&lt;br /&gt;
| version = 5.0.0&lt;br /&gt;
| id = {7A23F6C1-11B4-48A1-AB98-374E01C727BA}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Classifies an object as a Calculation Task. &lt;br /&gt;
This classification is an [[AutonomousClassification|Autonomous Classification]] where the defined properties are autonomously added to the MetaDefinitions. A Calculation Task needs a predefined condition/expression, which can be evaluated by the client, to determine a result. The Task also needs a target property name and target property type to be able to write the result to the owner.&lt;br /&gt;
&lt;br /&gt;
== MetaProperties ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Pending = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_NAME || {{String}} || Name of Target Property&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Type of Target Property (Undefined = 0, Bool = 1, Int = 3, Double = 4)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Classifications|MROCLS CALCULATION TASK]]&lt;br /&gt;
[[Category:Injecting|MROCLS CALCULATION TASK]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER#Task Owner]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK#Measurement Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK# Progress Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE#Work Package]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK#Sequential Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Start Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MRO_Objects_(Client)#Work_Package]]&lt;br /&gt;
* [[MRO_(Plugin)#Work_Package]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK#Pick List Task]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Classifications|MROCLS CALCULATION TASK]]&lt;br /&gt;
[[Category:Injecting|MROCLS CALCULATION TASK]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29802</id>
		<title>MRO Implemented Objects</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29802"/>
				<updated>2026-05-06T09:24:19Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Switch Start Task */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MRO Implemented Objects are pre-configured standard MRO objects enhanced with additional logic and features. For most tasks, value properties are pre-set, and many of them also implement additional MRO-relevant classifications.&lt;br /&gt;
&lt;br /&gt;
== Workpackage ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
MetaClass Name: PROCEDURE_WORKPACKAGE | MetaClass UID: 007c78f8-fafd-4bde-8add-e11990625e7a&lt;br /&gt;
&lt;br /&gt;
A Procedure Workpackage serves as a container for tasks and other procedures. It stores its entire structure in a JSON format, which is predefined using a workflow editor. When a specific state is triggered, the corresponding sub-tasks and procedures are created or updated accordingly.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PROCEDURE]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || Represents the current state: Draft = 10, ReadyToUse = 20, Published = 30, Open = 40, Executing = 50, Completed = 60, Approved = 70, Rejected = 80&lt;br /&gt;
|-&lt;br /&gt;
| JSON || {{String}} || JSON representation of the procedure&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the procedure is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Task ==&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
MetaClass Name: SWITCH_START_TASK | MetaClass UID: 3c3614e2-635f-4e07-b02a-a72c81b9e328&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task confirms task completion by the system after an expression calculation. The task is automatically marked as complete once the calculation finishes successfully. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_START_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state: Undefined = 0, Ongoing = 10, Finished = 20, Error = 30&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_TRUE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || DisplayString for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || DisplayString for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| EVALUATION_RESULT || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
MetaClass Name: SWITCH_END_TASK | MetaClass UID: 261a3e63-2b8e-4f3e-ab22-295bbe421e7a&lt;br /&gt;
&lt;br /&gt;
A Switch End Task confirms task completion by the system. The task is invisible to the user and is always automatically marked as complete. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_END_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to Switch task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
MetaClass Name: CHECK_TASK | Metaclass UID: A360287D-2979-4D91-8B1A-6086FC1BEDA1 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CHECK_TASK | Metaclass UID: DF61A1DB-5238-4A87-85A6-B9C09B54B242&lt;br /&gt;
&lt;br /&gt;
A Check Task confirms task completion. The task is complete once a value is selected (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_CHECK_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
MetaClass Name: NUMERIC_TASK | MetaClass UID: b1789da3-bd67-4f93-b14b-22fd41afb215 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_NUMERIC_TASK | MetaClass UID: 047d05f3-a876-4f9d-a40e-2a098e9ba49b&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a numeric double value (e.g., from a temperature sensor). Once a value is entered (including Not Applicable), the task is considered complete.&lt;br /&gt;
An acceptability range and measurement unit can be defined. If the value falls outside the acceptable range, a red alert and/or a technical status update can be triggered.&lt;br /&gt;
The behaviour of the previous value indicator must be defined separately.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_NUMERIC_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded double numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Measurment unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
MetaClass Name: INSPECTION_TASK | MetaClass UID: 08571b05-a093-479a-a10a-9d03c435b1b5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INSPECTION_TASK | MetaClass UID: a0123b54-ddcf-49be-8c66-7ca86c4c5277&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a binary decision. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Custom labels can override the default icons: Checkmark (✔) and Cross (✘).&lt;br /&gt;
Label behavior must be defined separately in the customization settings.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_INSPECTION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for negative outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for positive outcome&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
MetaClass Name: TEXT_TASK | MetaClass UID: 7298d038-003a-41d5-bc24-c97018ca7e85 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_TEXT_TASK | MetaClass UID: c0a95da8-8e32-4036-8db4-ef438deb14de&lt;br /&gt;
&lt;br /&gt;
A Text Task allows entry of free-form text. Once a value is entered (including Not Applicable), the task is complete.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
MetaClass Name: PICTURE_TASK | MetaClass UID: bee0b281-7da1-470e-9838-46724d47b621 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICTURE_TASK | MetaClass UID: e58c6957-ecb2-4e3f-a4b7-6953b917d7d4&lt;br /&gt;
&lt;br /&gt;
A Picture Task confirms whether a photo has been taken. The task is only complete once a value is entered (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
A button must be available to add a photo as a child object. Task confirmation is blocked unless at least one photo is attached.&lt;br /&gt;
The behavior for photo addition and confirmation blocking must be defined in customization.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PICTURE_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dynamic List Task ===&lt;br /&gt;
MetaClass Name: DYNAMIC_LIST_TASK | MetaClass UID: 78651014-f41e-4254-987f-6cf55c687d35 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_DYNAMIC_LIST_TASK | MetaClass UID: 83551c77-554e-4715-b327-16f0a6ee196a&lt;br /&gt;
&lt;br /&gt;
A Dynamic List Task allows selection from a list of options. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Selection behaviour must be defined in the data model and requires implementation of [[SYSCLS_DYNAMIC_SELECTIVE_LIST|Dynamic Selective List]].&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Guid}} || Selected item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task ===&lt;br /&gt;
MetaClass Name: SUPERVISOR_CHECK_TASK | MetaClass UID: 76910d64-5bc0-4674-9c43-108959119846 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SUPERVISOR_CHECK_TASK | MetaClass UID: 1e4a5506-0c6f-4447-bd0a-d5c87282a0e9&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task confirms task completion by a supervisor. The task is complete once a value is selected.&amp;lt;br/&amp;gt;&lt;br /&gt;
Confirmation is only possible after NFC recognition of the supervisor and PIN entry.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Supervisor permissions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
MetaClass Name: INTERFACE_TASK | MetaClass UID: d9a80e3d-02f6-4f0c-b243-7ece9ad82849 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INTERFACE_TASK | MetaClass UID: e437ef02-d49b-4f23-9ab8-9a9836366c3d&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
MetaClass Name: CALCULATION_TASK | Metaclass UID: 3ec9d0f2-9d0f-4c1b-80bd-1efeaf010fa0 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CALCULATION_TASK | Metaclass UID: e2b24a28-2382-46d2-8f4b-5f52168a9e27&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_CALCULATION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Ongoing = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_NAME || {{String}} || Name of Target Property (on owner)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Type of Target Property (Undefined = 0, Bool = 1, Int = 3, Double = 4)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
MetaClass Name: SIGNATURE_TASK | Metaclass UID: 66D6A529-E233-4CE2-9E11-B65984D5B0DA &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SIGNATURE_TASK | Metaclass UID: ECE1E20F-2BA3-4BC4-A0DD-9AFFDBB23790&lt;br /&gt;
&lt;br /&gt;
A Signature Task captures a sign-off action to confirm the completion of a procedure. The task is complete once a written signature is provided.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Procedure Tasks ==&lt;br /&gt;
The following tasks are specialized versions intended for use within procedures. They implement both the [[MROCLS_SEQUENTIALTASK]] and [[MROCLS_GROUPEDTASK]] classifications.&lt;br /&gt;
&lt;br /&gt;
MetaClass Name: PROCEDURE_CHECK_TASK | MetaClass UID: 63D68EA4-E78C-4A33-A35A-301A01A2568E &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_NUMERIC_TASK | MetaClass UID: f578f50b-eecd-4734-929b-43e1f1f246fa &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INSPECTION_TASK | MetaClass UID: 9369b841-c5bf-43df-909f-3a5063763f81 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_TEXT_TASK | MetaClass UID: 4dd8fee2-9d3e-4fa1-9a61-d580f5d4201c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_PICTURE_TASK | MetaClass UID: 4c0db9da-dfcc-48ad-9d89-6c958a5ac39f  &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_DYNAMIC_LIST_TASK | MetaClass UID: 241a2248-36f6-44ab-9c8d-0357b7cbe24c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SUPERVISOR_CHECK_TASK | MetaClass UID: 9bb8e1b1-04f8-46f0-a9c9-0bb2960a49e5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INTERFACE_TASK | MetaClass UID: 8d9ff119-510b-425c-b917-f72783e4570c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_CALCULATION_TASK | Metaclass UID: ed31735c-c807-40e9-b9a4-254e77445dd5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SIGNATURE_TASK | Metaclass UID: 202CDB9D-BEEB-4E5A-A333-5235A9E6FF94 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== JSON File Document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_JSON | MetaClass UID: 016e57d5-37b3-42e0-a753-f675d4cbf338&lt;br /&gt;
&lt;br /&gt;
File Document for JSON file of a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_PICTURE_TASK | MetaClass UID: 2488fd79-4729-4090-9587-82103a9869e0&lt;br /&gt;
&lt;br /&gt;
File Document for image files of a Picture Task.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO_(Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROCLS_SWITCH_START_TASK&amp;diff=29801</id>
		<title>MROCLS SWITCH START TASK</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROCLS_SWITCH_START_TASK&amp;diff=29801"/>
				<updated>2026-05-06T09:23:31Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* MetaProperties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ClassificationInfoBox&lt;br /&gt;
| title = Switch Task classification object&lt;br /&gt;
| name = {{PAGENAMEE}}&lt;br /&gt;
| inheritance = [[MROCLS_SEQUENTIALTASK]] &lt;br /&gt;
| namespace = MRO.Classification&lt;br /&gt;
| purpose = Classify tasks as switch tasks&lt;br /&gt;
| version = 5.0.0&lt;br /&gt;
| id = {FE4C6189-DD7D-4B42-83C6-7594CCB91D00}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Classifies an object as a Switch Task. &lt;br /&gt;
This classification is an [[AutonomousClassification|Autonomous Classification]] where the defined properties are autonomously added to the MetaDefinitions. A Switch Task is a sequential task used within Procedure Workpackages to introduce branching logic. It evaluates a predefined condition/expression, which can be evaluated by the client, to determine which branch of the workflow to execute. Each branch represents a different path of tasks. Every Switch Task must be followed by a Switch End Task, where the two branches merge again and the procedure continues.&lt;br /&gt;
&lt;br /&gt;
== MetaProperties ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Ongoing = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_TRUE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || DisplayString for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || DisplayString for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| EVALUATION_RESULT || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Classifications|MROCLS SWITCH TASK]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER#Task Owner]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK#Measurement Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK# Progress Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE#Work Package]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK#Sequential Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MRO_Objects_(Client)#Work_Package]]&lt;br /&gt;
* [[MRO_(Plugin)#Work_Package]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Classifications|MROCLS SWITCH TASK]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29798</id>
		<title>MRO Implemented Objects</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29798"/>
				<updated>2026-05-05T07:27:05Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MRO Implemented Objects are pre-configured standard MRO objects enhanced with additional logic and features. For most tasks, value properties are pre-set, and many of them also implement additional MRO-relevant classifications.&lt;br /&gt;
&lt;br /&gt;
== Workpackage ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
MetaClass Name: PROCEDURE_WORKPACKAGE | MetaClass UID: 007c78f8-fafd-4bde-8add-e11990625e7a&lt;br /&gt;
&lt;br /&gt;
A Procedure Workpackage serves as a container for tasks and other procedures. It stores its entire structure in a JSON format, which is predefined using a workflow editor. When a specific state is triggered, the corresponding sub-tasks and procedures are created or updated accordingly.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PROCEDURE]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || Represents the current state: Draft = 10, ReadyToUse = 20, Published = 30, Open = 40, Executing = 50, Completed = 60, Approved = 70, Rejected = 80&lt;br /&gt;
|-&lt;br /&gt;
| JSON || {{String}} || JSON representation of the procedure&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the procedure is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Task ==&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
MetaClass Name: SWITCH_START_TASK | MetaClass UID: 3c3614e2-635f-4e07-b02a-a72c81b9e328&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task confirms task completion by the system after an expression calculation. The task is automatically marked as complete once the calculation finishes successfully. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_START_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state: Undefined = 0, Ongoing = 10, Finished = 20, Error = 30&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_TRUE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || DisplayString for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || DisplayString for the case the expression is evaluated as false&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
MetaClass Name: SWITCH_END_TASK | MetaClass UID: 261a3e63-2b8e-4f3e-ab22-295bbe421e7a&lt;br /&gt;
&lt;br /&gt;
A Switch End Task confirms task completion by the system. The task is invisible to the user and is always automatically marked as complete. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_END_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to Switch task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
MetaClass Name: CHECK_TASK | Metaclass UID: A360287D-2979-4D91-8B1A-6086FC1BEDA1 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CHECK_TASK | Metaclass UID: DF61A1DB-5238-4A87-85A6-B9C09B54B242&lt;br /&gt;
&lt;br /&gt;
A Check Task confirms task completion. The task is complete once a value is selected (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_CHECK_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
MetaClass Name: NUMERIC_TASK | MetaClass UID: b1789da3-bd67-4f93-b14b-22fd41afb215 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_NUMERIC_TASK | MetaClass UID: 047d05f3-a876-4f9d-a40e-2a098e9ba49b&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a numeric double value (e.g., from a temperature sensor). Once a value is entered (including Not Applicable), the task is considered complete.&lt;br /&gt;
An acceptability range and measurement unit can be defined. If the value falls outside the acceptable range, a red alert and/or a technical status update can be triggered.&lt;br /&gt;
The behaviour of the previous value indicator must be defined separately.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_NUMERIC_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded double numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Measurment unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
MetaClass Name: INSPECTION_TASK | MetaClass UID: 08571b05-a093-479a-a10a-9d03c435b1b5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INSPECTION_TASK | MetaClass UID: a0123b54-ddcf-49be-8c66-7ca86c4c5277&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a binary decision. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Custom labels can override the default icons: Checkmark (✔) and Cross (✘).&lt;br /&gt;
Label behavior must be defined separately in the customization settings.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_INSPECTION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for negative outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for positive outcome&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
MetaClass Name: TEXT_TASK | MetaClass UID: 7298d038-003a-41d5-bc24-c97018ca7e85 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_TEXT_TASK | MetaClass UID: c0a95da8-8e32-4036-8db4-ef438deb14de&lt;br /&gt;
&lt;br /&gt;
A Text Task allows entry of free-form text. Once a value is entered (including Not Applicable), the task is complete.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
MetaClass Name: PICTURE_TASK | MetaClass UID: bee0b281-7da1-470e-9838-46724d47b621 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICTURE_TASK | MetaClass UID: e58c6957-ecb2-4e3f-a4b7-6953b917d7d4&lt;br /&gt;
&lt;br /&gt;
A Picture Task confirms whether a photo has been taken. The task is only complete once a value is entered (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
A button must be available to add a photo as a child object. Task confirmation is blocked unless at least one photo is attached.&lt;br /&gt;
The behavior for photo addition and confirmation blocking must be defined in customization.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PICTURE_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dynamic List Task ===&lt;br /&gt;
MetaClass Name: DYNAMIC_LIST_TASK | MetaClass UID: 78651014-f41e-4254-987f-6cf55c687d35 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_DYNAMIC_LIST_TASK | MetaClass UID: 83551c77-554e-4715-b327-16f0a6ee196a&lt;br /&gt;
&lt;br /&gt;
A Dynamic List Task allows selection from a list of options. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Selection behaviour must be defined in the data model and requires implementation of [[SYSCLS_DYNAMIC_SELECTIVE_LIST|Dynamic Selective List]].&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Guid}} || Selected item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task ===&lt;br /&gt;
MetaClass Name: SUPERVISOR_CHECK_TASK | MetaClass UID: 76910d64-5bc0-4674-9c43-108959119846 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SUPERVISOR_CHECK_TASK | MetaClass UID: 1e4a5506-0c6f-4447-bd0a-d5c87282a0e9&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task confirms task completion by a supervisor. The task is complete once a value is selected.&amp;lt;br/&amp;gt;&lt;br /&gt;
Confirmation is only possible after NFC recognition of the supervisor and PIN entry.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Supervisor permissions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
MetaClass Name: INTERFACE_TASK | MetaClass UID: d9a80e3d-02f6-4f0c-b243-7ece9ad82849 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INTERFACE_TASK | MetaClass UID: e437ef02-d49b-4f23-9ab8-9a9836366c3d&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
MetaClass Name: CALCULATION_TASK | Metaclass UID: 3ec9d0f2-9d0f-4c1b-80bd-1efeaf010fa0 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CALCULATION_TASK | Metaclass UID: e2b24a28-2382-46d2-8f4b-5f52168a9e27&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_CALCULATION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Ongoing = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_NAME || {{String}} || Name of Target Property (on owner)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Type of Target Property (Undefined = 0, Bool = 1, Int = 3, Double = 4)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
MetaClass Name: SIGNATURE_TASK | Metaclass UID: 66D6A529-E233-4CE2-9E11-B65984D5B0DA &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SIGNATURE_TASK | Metaclass UID: ECE1E20F-2BA3-4BC4-A0DD-9AFFDBB23790&lt;br /&gt;
&lt;br /&gt;
A Signature Task captures a sign-off action to confirm the completion of a procedure. The task is complete once a written signature is provided.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Procedure Tasks ==&lt;br /&gt;
The following tasks are specialized versions intended for use within procedures. They implement both the [[MROCLS_SEQUENTIALTASK]] and [[MROCLS_GROUPEDTASK]] classifications.&lt;br /&gt;
&lt;br /&gt;
MetaClass Name: PROCEDURE_CHECK_TASK | MetaClass UID: 63D68EA4-E78C-4A33-A35A-301A01A2568E &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_NUMERIC_TASK | MetaClass UID: f578f50b-eecd-4734-929b-43e1f1f246fa &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INSPECTION_TASK | MetaClass UID: 9369b841-c5bf-43df-909f-3a5063763f81 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_TEXT_TASK | MetaClass UID: 4dd8fee2-9d3e-4fa1-9a61-d580f5d4201c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_PICTURE_TASK | MetaClass UID: 4c0db9da-dfcc-48ad-9d89-6c958a5ac39f  &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_DYNAMIC_LIST_TASK | MetaClass UID: 241a2248-36f6-44ab-9c8d-0357b7cbe24c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SUPERVISOR_CHECK_TASK | MetaClass UID: 9bb8e1b1-04f8-46f0-a9c9-0bb2960a49e5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INTERFACE_TASK | MetaClass UID: 8d9ff119-510b-425c-b917-f72783e4570c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_CALCULATION_TASK | Metaclass UID: ed31735c-c807-40e9-b9a4-254e77445dd5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SIGNATURE_TASK | Metaclass UID: 202CDB9D-BEEB-4E5A-A333-5235A9E6FF94 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== JSON File Document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_JSON | MetaClass UID: 016e57d5-37b3-42e0-a753-f675d4cbf338&lt;br /&gt;
&lt;br /&gt;
File Document for JSON file of a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_PICTURE_TASK | MetaClass UID: 2488fd79-4729-4090-9587-82103a9869e0&lt;br /&gt;
&lt;br /&gt;
File Document for image files of a Picture Task.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO_(Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29797</id>
		<title>MRO Implemented Objects</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Implemented_Objects&amp;diff=29797"/>
				<updated>2026-05-05T07:26:07Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MRO Implemented Objects are pre-configured standard MRO objects enhanced with additional logic and features. For most tasks, value properties are pre-set, and many of them also implement additional MRO-relevant classifications.&lt;br /&gt;
&lt;br /&gt;
== Workpackage ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
MetaClass Name: PROCEDURE_WORKPACKAGE | MetaClass UID: 007c78f8-fafd-4bde-8add-e11990625e7a&lt;br /&gt;
&lt;br /&gt;
A Procedure Workpackage serves as a container for tasks and other procedures. It stores its entire structure in a JSON format, which is predefined using a workflow editor. When a specific state is triggered, the corresponding sub-tasks and procedures are created or updated accordingly.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PROCEDURE]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || Represents the current state: Draft = 10, ReadyToUse = 20, Published = 30, Open = 40, Executing = 50, Completed = 60, Approved = 70, Rejected = 80&lt;br /&gt;
|-&lt;br /&gt;
| JSON || {{String}} || JSON representation of the procedure&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the procedure is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Task ==&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
MetaClass Name: SWITCH_START_TASK | MetaClass UID: 3c3614e2-635f-4e07-b02a-a72c81b9e328&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task confirms task completion by the system after an expression calculation. The task is automatically marked as complete once the calculation finishes successfully. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_START_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state: Undefined = 0, Ongoing = 10, Finished = 20, Error = 30&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_TRUE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || DisplayString for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || DisplayString for the case the expression is evaluated as false&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
MetaClass Name: SWITCH_END_TASK | MetaClass UID: 261a3e63-2b8e-4f3e-ab22-295bbe421e7a&lt;br /&gt;
&lt;br /&gt;
A Switch End Task confirms task completion by the system. The task is invisible to the user and is always automatically marked as complete. No user input is required.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_SWITCH_END_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to Switch task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
MetaClass Name: CHECK_TASK | Metaclass UID: A360287D-2979-4D91-8B1A-6086FC1BEDA1 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CHECK_TASK | Metaclass UID: DF61A1DB-5238-4A87-85A6-B9C09B54B242&lt;br /&gt;
&lt;br /&gt;
A Check Task confirms task completion. The task is complete once a value is selected (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_CHECK_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
MetaClass Name: NUMERIC_TASK | MetaClass UID: b1789da3-bd67-4f93-b14b-22fd41afb215 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_NUMERIC_TASK | MetaClass UID: 047d05f3-a876-4f9d-a40e-2a098e9ba49b&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a numeric double value (e.g., from a temperature sensor). Once a value is entered (including Not Applicable), the task is considered complete.&lt;br /&gt;
An acceptability range and measurement unit can be defined. If the value falls outside the acceptable range, a red alert and/or a technical status update can be triggered.&lt;br /&gt;
The behaviour of the previous value indicator must be defined separately.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_NUMERIC_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded double numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Measurment unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
MetaClass Name: INSPECTION_TASK | MetaClass UID: 08571b05-a093-479a-a10a-9d03c435b1b5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INSPECTION_TASK | MetaClass UID: a0123b54-ddcf-49be-8c66-7ca86c4c5277&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a binary decision. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Custom labels can override the default icons: Checkmark (✔) and Cross (✘).&lt;br /&gt;
Label behavior must be defined separately in the customization settings.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_INSPECTION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for negative outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for positive outcome&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
MetaClass Name: TEXT_TASK | MetaClass UID: 7298d038-003a-41d5-bc24-c97018ca7e85 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_TEXT_TASK | MetaClass UID: c0a95da8-8e32-4036-8db4-ef438deb14de&lt;br /&gt;
&lt;br /&gt;
A Text Task allows entry of free-form text. Once a value is entered (including Not Applicable), the task is complete.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
MetaClass Name: PICTURE_TASK | MetaClass UID: bee0b281-7da1-470e-9838-46724d47b621 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_PICTURE_TASK | MetaClass UID: e58c6957-ecb2-4e3f-a4b7-6953b917d7d4&lt;br /&gt;
&lt;br /&gt;
A Picture Task confirms whether a photo has been taken. The task is only complete once a value is entered (including Not Applicable).&amp;lt;br/&amp;gt;&lt;br /&gt;
A button must be available to add a photo as a child object. Task confirmation is blocked unless at least one photo is attached.&lt;br /&gt;
The behavior for photo addition and confirmation blocking must be defined in customization.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_PICTURE_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dynamic List Task ===&lt;br /&gt;
MetaClass Name: DYNAMIC_LIST_TASK | MetaClass UID: 78651014-f41e-4254-987f-6cf55c687d35 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_DYNAMIC_LIST_TASK | MetaClass UID: 83551c77-554e-4715-b327-16f0a6ee196a&lt;br /&gt;
&lt;br /&gt;
A Dynamic List Task allows selection from a list of options. Once a value is selected (including Not Applicable), the task is complete.&amp;lt;br/&amp;gt;&lt;br /&gt;
Selection behaviour must be defined in the data model and requires implementation of [[SYSCLS_DYNAMIC_SELECTIVE_LIST|Dynamic Selective List]].&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Guid}} || Selected item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task ===&lt;br /&gt;
MetaClass Name: SUPERVISOR_CHECK_TASK | MetaClass UID: 76910d64-5bc0-4674-9c43-108959119846 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SUPERVISOR_CHECK_TASK | MetaClass UID: 1e4a5506-0c6f-4447-bd0a-d5c87282a0e9&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task confirms task completion by a supervisor. The task is complete once a value is selected.&amp;lt;br/&amp;gt;&lt;br /&gt;
Confirmation is only possible after NFC recognition of the supervisor and PIN entry.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Supervisor permissions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
MetaClass Name: INTERFACE_TASK | MetaClass UID: d9a80e3d-02f6-4f0c-b243-7ece9ad82849 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_INTERFACE_TASK | MetaClass UID: e437ef02-d49b-4f23-9ab8-9a9836366c3d&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_MRO_SUPERVISOR_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented  Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
MetaClass Name: CALCULATION_TASK | Metaclass UID: 3ec9d0f2-9d0f-4c1b-80bd-1efeaf010fa0 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_CALCULATION_TASK | Metaclass UID: e2b24a28-2382-46d2-8f4b-5f52168a9e27&lt;br /&gt;
&lt;br /&gt;
Currently under development.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: [[MROCLS_CALCULATION_TASK]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Ongoing = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_NAME || {{String}} || Name of Target Property (on owner)&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Type of Target Property (Undefined = 0, Bool = 1, Int = 3, Double = 4)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
MetaClass Name: SIGNATURE_TASK | Metaclass UID: 66D6A529-E233-4CE2-9E11-B65984D5B0DA &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: CUSTOM_SIGNATURE_TASK | Metaclass UID: ECE1E20F-2BA3-4BC4-A0DD-9AFFDBB23790&lt;br /&gt;
&lt;br /&gt;
A Signature Task captures a sign-off action to confirm the completion of a procedure. The task is complete once a written signature is provided.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Procedure Tasks ==&lt;br /&gt;
The following tasks are specialized versions intended for use within procedures. They implement both the [[MROCLS_SEQUENTIALTASK]] and [[MROCLS_GROUPEDTASK]] classifications.&lt;br /&gt;
&lt;br /&gt;
MetaClass Name: PROCEDURE_CHECK_TASK | MetaClass UID: 63D68EA4-E78C-4A33-A35A-301A01A2568E &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_NUMERIC_TASK | MetaClass UID: f578f50b-eecd-4734-929b-43e1f1f246fa &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INSPECTION_TASK | MetaClass UID: 9369b841-c5bf-43df-909f-3a5063763f81 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_TEXT_TASK | MetaClass UID: 4dd8fee2-9d3e-4fa1-9a61-d580f5d4201c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_PICTURE_TASK | MetaClass UID: 4c0db9da-dfcc-48ad-9d89-6c958a5ac39f  &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_DYNAMIC_LIST_TASK | MetaClass UID: 241a2248-36f6-44ab-9c8d-0357b7cbe24c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SUPERVISOR_CHECK_TASK | MetaClass UID: 9bb8e1b1-04f8-46f0-a9c9-0bb2960a49e5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_INTERFACE_TASK | MetaClass UID: 8d9ff119-510b-425c-b917-f72783e4570c &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_CALCULATION_TASK | Metaclass UID: ed31735c-c807-40e9-b9a4-254e77445dd5 &amp;lt;br&amp;gt;&lt;br /&gt;
MetaClass Name: PROCEDURE_SIGNATURE_TASK | Metaclass UID: 202CDB9D-BEEB-4E5A-A333-5235A9E6FF94 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== JSON File Document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_JSON | MetaClass UID: 016e57d5-37b3-42e0-a753-f675d4cbf338&lt;br /&gt;
&lt;br /&gt;
File Document for JSON file of a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File document ===&lt;br /&gt;
MetaClass Name: FILEDOCUMENT_MRO_PICTURE_TASK | MetaClass UID: 2488fd79-4729-4090-9587-82103a9869e0&lt;br /&gt;
&lt;br /&gt;
File Document for image files of a Picture Task.&lt;br /&gt;
&lt;br /&gt;
Extra Classifications: none&amp;lt;br/&amp;gt;&lt;br /&gt;
Implemented Properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO_(Plugin)]]&lt;br /&gt;
* [[MRO_Objects_(Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin|MRO Implemented Objects]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROCLS_SWITCH_START_TASK&amp;diff=29794</id>
		<title>MROCLS SWITCH START TASK</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROCLS_SWITCH_START_TASK&amp;diff=29794"/>
				<updated>2026-05-04T11:37:45Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ClassificationInfoBox&lt;br /&gt;
| title = Switch Task classification object&lt;br /&gt;
| name = {{PAGENAMEE}}&lt;br /&gt;
| inheritance = [[MROCLS_SEQUENTIALTASK]] &lt;br /&gt;
| namespace = MRO.Classification&lt;br /&gt;
| purpose = Classify tasks as switch tasks&lt;br /&gt;
| version = 5.0.0&lt;br /&gt;
| id = {FE4C6189-DD7D-4B42-83C6-7594CCB91D00}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Classifies an object as a Switch Task. &lt;br /&gt;
This classification is an [[AutonomousClassification|Autonomous Classification]] where the defined properties are autonomously added to the MetaDefinitions. A Switch Task is a sequential task used within Procedure Workpackages to introduce branching logic. It evaluates a predefined condition/expression, which can be evaluated by the client, to determine which branch of the workflow to execute. Each branch represents a different path of tasks. Every Switch Task must be followed by a Switch End Task, where the two branches merge again and the procedure continues.&lt;br /&gt;
&lt;br /&gt;
== MetaProperties ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=50%&lt;br /&gt;
|-&lt;br /&gt;
! width=30% | Name !! width=20% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Condition that will be evaluated by the client&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Evaluation state (Undefined = 0, Ongoing = 10, Finished = 20, Error = 30)&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_TRUE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to another task or task owner for the case the expression is evaluated as false&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || DisplayString for the case the expression is evaluated as true&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || DisplayString for the case the expression is evaluated as false&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER#Task Owner]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK#Measurement Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK# Progress Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK#Check Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK#Inspection Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE#Work Package]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK#Sequential Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MRO_Objects_(Client)#Work_Package]]&lt;br /&gt;
* [[MRO_(Plugin)#Work_Package]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Classifications|MROCLS SWITCH TASK]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Import_Runs&amp;diff=29203</id>
		<title>Import Runs</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Import_Runs&amp;diff=29203"/>
				<updated>2025-11-28T10:28:07Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Naming Convention =&lt;br /&gt;
&lt;br /&gt;
'''General file naming convention:'''&lt;br /&gt;
All import Excel files must follow the pattern:&lt;br /&gt;
&lt;br /&gt;
xxxx.&amp;lt;import-type&amp;gt;.xlsx&lt;br /&gt;
&lt;br /&gt;
Where xxxx can be any project- or customer-specific identifier.&lt;br /&gt;
&lt;br /&gt;
Supported import types:&lt;br /&gt;
&lt;br /&gt;
* Equipment Import&lt;br /&gt;
xxxx.equipment.xlsx&lt;br /&gt;
&lt;br /&gt;
* Workorder Import&lt;br /&gt;
xxxx.workorder.xlsx&lt;br /&gt;
&lt;br /&gt;
* Progress Operation Import&lt;br /&gt;
xxxx.progress-op.xlsx&lt;br /&gt;
&lt;br /&gt;
* QRF Operation Import&lt;br /&gt;
xxxx.qrf-op.xlsx&lt;br /&gt;
&lt;br /&gt;
* Check Operation Import&lt;br /&gt;
xxxx.check-op.xlsx&lt;br /&gt;
&lt;br /&gt;
* Joint Operation Import&lt;br /&gt;
xxxx.joint-op.xlsx&lt;br /&gt;
&lt;br /&gt;
* Blinding Operation Import&lt;br /&gt;
xxxx.blinding-op.xlsx&lt;br /&gt;
&lt;br /&gt;
* Scheduling Import&lt;br /&gt;
xxxx.scheduling.xlsx&lt;br /&gt;
&lt;br /&gt;
* User Import&lt;br /&gt;
xxxx.user.xlsx&lt;br /&gt;
&lt;br /&gt;
* Company Import&lt;br /&gt;
xxxx.company.xlsx&lt;br /&gt;
&lt;br /&gt;
* Material Import&lt;br /&gt;
xxxx.material.xlsx&lt;br /&gt;
&lt;br /&gt;
* Preparation Document Import&lt;br /&gt;
xxxx.preparation-document.xlsx&lt;br /&gt;
&lt;br /&gt;
* Joint Location Import&lt;br /&gt;
xxxx.joint-location.xlsx&lt;br /&gt;
&lt;br /&gt;
* Blinding Location Import&lt;br /&gt;
xxxx.blinding-location.xlsx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Equipment Import =&lt;br /&gt;
&lt;br /&gt;
To import Equipments following columns are required:&lt;br /&gt;
* EquipmentID (Text)&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' “CoordinateLong”, “CoordinateLat” and “CoordinateAltitude” must be formatted as Number!&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* PIDNumber (Text)&lt;br /&gt;
* Medium (Text)&lt;br /&gt;
* System (Text)&lt;br /&gt;
* SystemDescription (Text)&lt;br /&gt;
* PlanNumber (Text)&lt;br /&gt;
* GridCode (Text)&lt;br /&gt;
* Location (Text)&lt;br /&gt;
* LocationStage (Text)&lt;br /&gt;
* LocationHeight (Text)&lt;br /&gt;
* Plant (Text)&lt;br /&gt;
* Tag_Nr (Text)&lt;br /&gt;
* EquipmentDescription (Text)&lt;br /&gt;
* Maint_Plant (Text)&lt;br /&gt;
* AssistingSystem1 (Text)&lt;br /&gt;
* AssistingSystem2 (Text)&lt;br /&gt;
* Subsystem (Text)&lt;br /&gt;
* SubsystemDescription (Text)&lt;br /&gt;
* Zone (Text)&lt;br /&gt;
* CoordinateLong (Number)&lt;br /&gt;
* CoordinateLat (Number)&lt;br /&gt;
* CoordinateAltitude (Number)&lt;br /&gt;
* PrioritySAP (Text)&lt;br /&gt;
* EquipmentType (Text)&lt;br /&gt;
* EquipmentGroup (Text)&lt;br /&gt;
&lt;br /&gt;
= Workorder Import =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To import WorkOrders following column is required:&lt;br /&gt;
* Workorder (Text)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* EquipmentID (Text)&lt;br /&gt;
* Description (Text)&lt;br /&gt;
* WBS (Text)&lt;br /&gt;
* Comment (Text)&lt;br /&gt;
* Longtext (Text)&lt;br /&gt;
* DrainlistDocument (Text)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Following columns are optional, as we recommend to import them directly using the Equipment.import instead:&lt;br /&gt;
* EquipmentType (Text)&lt;br /&gt;
* EquipmentGroup (Text)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Progress Operation Import =&lt;br /&gt;
&lt;br /&gt;
To import Operations following columns are required:&lt;br /&gt;
* OperationID (Text)&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' “Number” and “NormalDuration” must be formatted as Number and all dates must be formatted as TT/MM/JJJJ hh:mm!&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* Workorder (Text)&lt;br /&gt;
* Operation (Text)&lt;br /&gt;
* ShortText (Text)&lt;br /&gt;
* Number (Number)&lt;br /&gt;
* NormalDuration (Number)&lt;br /&gt;
* NormalDurationUnit (Text)&lt;br /&gt;
* Work (Number)&lt;br /&gt;
* WorkUnit (Text)&lt;br /&gt;
* Workcenter (Text)&lt;br /&gt;
* ActivityCode (Text)&lt;br /&gt;
* eStart (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* eFinish (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* lStart (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* lFinish (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* Company (Text)&lt;br /&gt;
* CompanyCode (Text)&lt;br /&gt;
* LongText (Text)&lt;br /&gt;
* Comment (Text)&lt;br /&gt;
* PermitCode (Text)&lt;br /&gt;
* Planner (Text)&lt;br /&gt;
* Suboperation (Text)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= QRF Operation Import =&lt;br /&gt;
&lt;br /&gt;
To import Operations following columns are required:&lt;br /&gt;
* OperationID (Text)&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' “Number” and “NormalDuration” must be formatted as Number and all dates must be formatted as TT/MM/JJJJ hh:mm!&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* Workorder (Text)&lt;br /&gt;
* Operation (Text)&lt;br /&gt;
* ShortText (Text)&lt;br /&gt;
* Number (Number)&lt;br /&gt;
* NormalDuration (Number)&lt;br /&gt;
* NormalDurationUnit (Text)&lt;br /&gt;
* Work (Number)&lt;br /&gt;
* WorkUnit (Text)&lt;br /&gt;
* Workcenter (Text)&lt;br /&gt;
* ActivityCode (Text)&lt;br /&gt;
* eStart (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* eFinish (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* lStart (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* lFinish (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* Company (Text)&lt;br /&gt;
* CompanyCode (Text)&lt;br /&gt;
* LongText (Text)&lt;br /&gt;
* Comment (Text)&lt;br /&gt;
* PermitCode (Text)&lt;br /&gt;
* Planner (Text)&lt;br /&gt;
* Suboperation (Text)&lt;br /&gt;
* QRFKey (Text)&lt;br /&gt;
* QRFDescription (Text)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Check Operation Import =&lt;br /&gt;
&lt;br /&gt;
To import Operations following columns are required:&lt;br /&gt;
* OperationID (Text)&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' “Number” and “NormalDuration” must be formatted as Number and all dates must be formatted as TT/MM/JJJJ hh:mm!&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* Workorder (Text)&lt;br /&gt;
* Operation (Text)&lt;br /&gt;
* ShortText (Text)&lt;br /&gt;
* Number (Number)&lt;br /&gt;
* NormalDuration (Number)&lt;br /&gt;
* NormalDurationUnit (Text)&lt;br /&gt;
* Work (Number)&lt;br /&gt;
* WorkUnit (Text)&lt;br /&gt;
* Workcenter (Text)&lt;br /&gt;
* ActivityCode (Text)&lt;br /&gt;
* eStart (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* eFinish (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* lStart (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* lFinish (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* Company (Text)&lt;br /&gt;
* CompanyCode (Text)&lt;br /&gt;
* LongText (Text)&lt;br /&gt;
* Comment (Text)&lt;br /&gt;
* PermitCode (Text)&lt;br /&gt;
* Planner (Text)&lt;br /&gt;
* Suboperation (Text)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Joint Operation Import =&lt;br /&gt;
&lt;br /&gt;
To import Operations following columns are required:&lt;br /&gt;
* OperationID (Text)&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' “Number” and “NormalDuration” must be formatted as Number and all dates must be formatted as TT/MM/JJJJ hh:mm!&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* Workorder (Text)&lt;br /&gt;
* Operation (Text)&lt;br /&gt;
* ShortText (Text)&lt;br /&gt;
* Number (Number)&lt;br /&gt;
* NormalDuration (Number)&lt;br /&gt;
* NormalDurationUnit (Text)&lt;br /&gt;
* Work (Number)&lt;br /&gt;
* WorkUnit (Text)&lt;br /&gt;
* Workcenter (Text)&lt;br /&gt;
* ActivityCode (Text)&lt;br /&gt;
* eStart (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* eFinish (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* lStart (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* lFinish (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* Company (Text)&lt;br /&gt;
* CompanyCode (Text)&lt;br /&gt;
* LongText (Text)&lt;br /&gt;
* Comment (Text)&lt;br /&gt;
* PermitCode (Text)&lt;br /&gt;
* Planner (Text)&lt;br /&gt;
* Suboperation (Text)&lt;br /&gt;
* JointLocation (Text)&lt;br /&gt;
&lt;br /&gt;
= Blinding Operation Import =&lt;br /&gt;
&lt;br /&gt;
To import Blinding Operations following columns are required:&lt;br /&gt;
* OperationID (Text)&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' “Number” and “NormalDuration” must be formatted as Number and all dates must be formatted as TT/MM/JJJJ hh:mm!&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* Workorder (Text)&lt;br /&gt;
* Operation (Text)&lt;br /&gt;
* ShortText (Text)&lt;br /&gt;
* Number (Number)&lt;br /&gt;
* NormalDuration (Number)&lt;br /&gt;
* NormalDurationUnit (Text)&lt;br /&gt;
* Work (Number)&lt;br /&gt;
* WorkUnit (Text)&lt;br /&gt;
* Workcenter (Text)&lt;br /&gt;
* ActivityCode (Text)&lt;br /&gt;
* eStart (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* eFinish (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* lStart (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* lFinish (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* Company (Text)&lt;br /&gt;
* CompanyCode (Text)&lt;br /&gt;
* LongText (Text)&lt;br /&gt;
* Comment (Text)&lt;br /&gt;
* PermitCode (Text)&lt;br /&gt;
* Planner (Text)&lt;br /&gt;
* Suboperation (Text)&lt;br /&gt;
* BlindingLocation (Text)&lt;br /&gt;
* Type (Text)&lt;br /&gt;
* BlindingPackage (Text)&lt;br /&gt;
&lt;br /&gt;
= Scheduling Import  (for Operations)=&lt;br /&gt;
&lt;br /&gt;
To import scheduling data of Operations the following columns are required:&lt;br /&gt;
* OperationID (Text)&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' All dates must be formatted as TT/MM/JJJJ hh:mm!&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* eStart (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* eFinish (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* lStart (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* lFinish (TT/MM/JJJJ hh:mm)&lt;br /&gt;
&lt;br /&gt;
= User Import =&lt;br /&gt;
&lt;br /&gt;
To import users following columns are required:&lt;br /&gt;
* DesktopLogin (Text)&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* Name (Text) &lt;br /&gt;
* NFC (Text)&lt;br /&gt;
* MobileLogin (Text)&lt;br /&gt;
* Password (Text) &lt;br /&gt;
* CompanyCode (Text)&lt;br /&gt;
* ReportingUserrights (Text)&lt;br /&gt;
* PunchpointUserrights (Text) &lt;br /&gt;
* ScopechangeUserrights (Text) &lt;br /&gt;
* SuperuserUserrights (Text) &lt;br /&gt;
* Comment (Text)&lt;br /&gt;
* Position (Text) &lt;br /&gt;
* Availability (Text) &lt;br /&gt;
* Adress (Text) &lt;br /&gt;
* Skype (Text)&lt;br /&gt;
* Telephone (Text)&lt;br /&gt;
* Email (Text)&lt;br /&gt;
&lt;br /&gt;
= Company Import =&lt;br /&gt;
&lt;br /&gt;
To import companies following columns are required:&lt;br /&gt;
* CompanyCode (Text)&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* Company (Text)&lt;br /&gt;
&lt;br /&gt;
= Material Import =&lt;br /&gt;
&lt;br /&gt;
To import materials following columns are required:&lt;br /&gt;
* OperationId (Text)&lt;br /&gt;
* MaterialNr (Text)&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' “Quantity” must be formatted as Number!&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* MaterialDescr (Text)&lt;br /&gt;
* BOMItemNr (Text)&lt;br /&gt;
* ItemCategory (Text)&lt;br /&gt;
'''NOTE:''' To ensure the correct icon is displayed on the client, the “ItemCategory” must have a value of either '0' which is translated to Category Stock or '1' which is translated to Category Skid!&lt;br /&gt;
* Quantity (Number)&lt;br /&gt;
* Unit (Text)&lt;br /&gt;
* ReservationStatus (Text)&lt;br /&gt;
&lt;br /&gt;
= Preparation Document Import =&lt;br /&gt;
&lt;br /&gt;
To import materials following columns are required:&lt;br /&gt;
* Workorder (Text)&lt;br /&gt;
* FilePath (Text)&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* FileName (Text)&lt;br /&gt;
&lt;br /&gt;
= Joint Location Import =&lt;br /&gt;
&lt;br /&gt;
To import joint locations following columns are required:&lt;br /&gt;
* Joint_ID (Text)&lt;br /&gt;
&lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* Joint_Location_Number (Text)&lt;br /&gt;
* Name (Text)&lt;br /&gt;
* Remark (Text)&lt;br /&gt;
* Tag_Number (Text)&lt;br /&gt;
* Gasket_Type (Text)&lt;br /&gt;
* Flange_Spec (Text)&lt;br /&gt;
* Flange_Size (Text)&lt;br /&gt;
* Flange_Rating (Text)&lt;br /&gt;
* Bolt_Size (Text)&lt;br /&gt;
* Bolt_Number (Text)&lt;br /&gt;
* Bolt_Material (Text)&lt;br /&gt;
* Torque_Value (Text)&lt;br /&gt;
* Pressure (Text)&lt;br /&gt;
* Assembled_By (Text)&lt;br /&gt;
* Assembled Date  (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* Inspected_By (Text)&lt;br /&gt;
* Inspected_Date  (TT/MM/JJJJ hh:mm)&lt;br /&gt;
* Equipment  (Text)&lt;br /&gt;
&lt;br /&gt;
= Blinding Location Import =&lt;br /&gt;
 &lt;br /&gt;
To import joint locations following columns are required:&lt;br /&gt;
* BlindingLocation_ID (Text)&lt;br /&gt;
 &lt;br /&gt;
Columns that can be imported additionally:&lt;br /&gt;
* No (Text)&lt;br /&gt;
* Equipment (Text)&lt;br /&gt;
* SOP (Text)&lt;br /&gt;
* Description (Text)&lt;br /&gt;
* BlindingNumber (Text)&lt;br /&gt;
* PID (Text)&lt;br /&gt;
* Size (Text)&lt;br /&gt;
* Type (Text)&lt;br /&gt;
* LocationType (Text)&lt;br /&gt;
* NormalPosition (Text)&lt;br /&gt;
* OnSite (Text)&lt;br /&gt;
* ICCNumber (Text)&lt;br /&gt;
* BlindSapNumber (Text)&lt;br /&gt;
* BlindQuantity (Number)&lt;br /&gt;
* GasketSAPNumber (Text)&lt;br /&gt;
* GasketQuantity (Number)&lt;br /&gt;
* Stage (Text)&lt;br /&gt;
* Height (Text)&lt;br /&gt;
* Scaff (Text)&lt;br /&gt;
* Insul (Text)&lt;br /&gt;
* Crane (Text)&lt;br /&gt;
* Remarks (Text)&lt;br /&gt;
&lt;br /&gt;
[[Category:MaTaP|Import Runs]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Entry_Points_%26_Use_Cases_(Admin_Tool)&amp;diff=29168</id>
		<title>Entry Points &amp; Use Cases (Admin Tool)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Entry_Points_%26_Use_Cases_(Admin_Tool)&amp;diff=29168"/>
				<updated>2025-11-19T13:15:38Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Entry Points ==&lt;br /&gt;
&lt;br /&gt;
To display various data in the Admin Tool, we have the following Entry Points with Use Cases under them:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab Name=&amp;quot;00 - All Important&amp;quot;&amp;gt;&lt;br /&gt;
Under Entry Point 00 - All Important are the following Use Cases:&lt;br /&gt;
* All Icons: Displays all icons that have already been created / set up.”&lt;br /&gt;
* Job Runs: Displays all jobs that have been initialized for all turnaround projects.&lt;br /&gt;
* Project: Shows all Turnaround Projects in the database. It is important for the execution of jobs.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab Name=&amp;quot;01 - All Other&amp;quot;&amp;gt;&lt;br /&gt;
For the 01 - All Other Entry Point, its Use Cases show all Data, regardless of whether instances are Templates or belong to a Project or not. Under Entry Point 01 - All Other, there are the following Use Cases:&lt;br /&gt;
* Activity Codes&lt;br /&gt;
* All Locations&lt;br /&gt;
* Blinding Location &lt;br /&gt;
* Blinding Operation &lt;br /&gt;
* Commissioning Codes&lt;br /&gt;
* Commissioning Packages&lt;br /&gt;
* Commissioning Tasks&lt;br /&gt;
* Companies&lt;br /&gt;
* Company Icons&lt;br /&gt;
* Daily HSE&lt;br /&gt;
* Daily Meetings&lt;br /&gt;
* Equipment Groups&lt;br /&gt;
* Equipment Types&lt;br /&gt;
* Equipment’s&lt;br /&gt;
* Execution Documents&lt;br /&gt;
* Joint Locations&lt;br /&gt;
* Joint Operations&lt;br /&gt;
* Functional Locations&lt;br /&gt;
* Functionalities&lt;br /&gt;
* Material&lt;br /&gt;
* Media&lt;br /&gt;
* Notifications&lt;br /&gt;
* Progress Operations&lt;br /&gt;
* QRF Operations&lt;br /&gt;
* Check Operations&lt;br /&gt;
* Plants&lt;br /&gt;
* Plot Plans&lt;br /&gt;
* Predefined Filters&lt;br /&gt;
* Predefined Views&lt;br /&gt;
* Preparation Documents&lt;br /&gt;
* Punchpoint Attachments&lt;br /&gt;
* Punchpoints&lt;br /&gt;
* Quick Access Items&lt;br /&gt;
* Reports&lt;br /&gt;
* Scope Change attachments&lt;br /&gt;
* Scope Changes&lt;br /&gt;
* Subsystems&lt;br /&gt;
* Systems&lt;br /&gt;
* Timesheets&lt;br /&gt;
* Users&lt;br /&gt;
* Workorders&lt;br /&gt;
* Zones&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab Name=&amp;quot;02 - Templates&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Use Cases under this entry point are for displaying data that is only marked as a template. By default, there are already pre-made Use Cases for displaying template data, which are the following:&lt;br /&gt;
* Activity Codes&lt;br /&gt;
* Commissioning Codes&lt;br /&gt;
* Equipment Group&lt;br /&gt;
* Equipment Type&lt;br /&gt;
* Functionalities&lt;br /&gt;
* Users&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab Name=&amp;quot;Project&amp;quot;&amp;gt;&lt;br /&gt;
===Project-specific Entry Points===&lt;br /&gt;
These entry points display data that belongs to the respective project. For example, if the TurnaroundProjectCreationJob is executed for a Turnaround Project, there will be a new Entry Point created for this Turnaround Project. All Use Cases under such an entry point only display instances belonging to this specific project. There is also a difference between the TA Project Entry Points and the 01 - All Other, in that the TA Project Entry Point has one more use case, the Turnaround Project Use Case. This use case displays only the Turnaround Project in which it has been opened.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Cases  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab Name=&amp;quot;All Icons&amp;quot; collapsed&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under this use case, it is possible to create icons, which can then be assigned to Contractors / Companies.&lt;br /&gt;
&lt;br /&gt;
[[File:MatapIcons.png]]&lt;br /&gt;
&lt;br /&gt;
To be able to upload a photo, the name and description properties must be filled out and press “Enter”. Then a double click has to be made on the instances &amp;quot;Icon&amp;quot; property (without a sign on the left side) and then on the button with the three dots. After that a Windows Explorer will open and a selection can be made for the desired image. When the selection is uploaded the icon field will be filled automatically and the last step is to save everything. The icon is now successfully created and could now be assigned to a contractor/company.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab Name=&amp;quot;Companies&amp;quot; collapsed&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the &amp;quot;Companies&amp;quot; use case we display all Companies/Contractors that are created in total (Entry Point 01 - All Other) or are linked to a specific project (Entry Points Project).&lt;br /&gt;
&lt;br /&gt;
[[File:Companies_MATAP_Picture.png]]&lt;br /&gt;
&lt;br /&gt;
The assigning of custom icons to the company/contractor is also done here. This will be done by double-clicking on the &amp;quot;Icon&amp;quot; property shown in the picture below. After pressing the &amp;quot;three dots&amp;quot; button, a pop-up window will open and one of all available icons can be selected. Operations will automatically get the same custom icon after the selection is made.&lt;br /&gt;
&lt;br /&gt;
[[File:Company_Icon_query.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab Name=&amp;quot;Functionalities&amp;quot; collapsed&amp;gt;&lt;br /&gt;
Under this use case, you can view and edit the root items (tiles) that are delivered to the clients.&lt;br /&gt;
&lt;br /&gt;
The following Functionalities are displayed:&lt;br /&gt;
&lt;br /&gt;
* Commissioning Wallpaper&lt;br /&gt;
* Communication&lt;br /&gt;
* Daily HSE&lt;br /&gt;
* Daily Meetings&lt;br /&gt;
* Plant Layouts&lt;br /&gt;
* Precom&lt;br /&gt;
* Punchpoints&lt;br /&gt;
* Quick access&lt;br /&gt;
* Reports&lt;br /&gt;
* Scope Changes&lt;br /&gt;
* Turnaround Wallpaper&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
You can also change the default Branch Download Configruation for every functionality. The corresponding properties are &amp;quot;Branchdownload Levels&amp;quot; and &amp;quot;Offline Sync Configuration&amp;quot;. By default the auto branch download for Turnaround Wallpaper and Commissioning Wallpaper is enabled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Functionalities.png|alt=Functionalities|Functionalities]]&lt;br /&gt;
&lt;br /&gt;
== ORDERID &amp;amp; GROUPID ==&lt;br /&gt;
With these two properties, you can set the order (sorting) of the Functionalities (RootItems) on the client. &lt;br /&gt;
See the [[SYSCLS SORTEDITEM]] and [[HowTo:Sort_Objects_on_Mobile_Client]] articles for instructions on how to set up the sorting.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visibility on Client ==&lt;br /&gt;
With this property, you can set the visibility of individual functionalities for the UWP and Mobile client.&lt;br /&gt;
There are 5 options available that can be chosen: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Undefined&lt;br /&gt;
  undefined&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Fully Visible&lt;br /&gt;
   UWP and Mobile users can see this functionality&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Only Desktop&lt;br /&gt;
   Only Desktop (UWP) users can see this functionality&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Only Mobile&lt;br /&gt;
   Only mobile users can see this functionality&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Hidden&lt;br /&gt;
   No one can see this functionality &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on these options you can control and change the visibility of the functionalities for different clients depending on the application use. If this property changes for a functionality, the user group rights are adjusted in the background, and only users who are in the groups that have the rights can then see the functionality on the client.&lt;br /&gt;
The users must be added to one of the following groups in order to make the visibility of the functionalities applicable to them:&lt;br /&gt;
* G1 General WallpaperWrite Group (UWP)&lt;br /&gt;
* G30 General ReadProject Group (Mobile).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab Name=&amp;quot;Project (Use Case)&amp;quot; collapsed&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Project&amp;quot; use case, we either display all projects ( [[#Entry Points|See Entry Points =&amp;gt; 00 - All Important]] ) or only the project for which replication has been performed ( [[#Entry Points|See Entry Points =&amp;gt; Project]] ).&lt;br /&gt;
In both cases, the following properties are displayed in the columns:&lt;br /&gt;
&lt;br /&gt;
* Archived&lt;br /&gt;
* Backup Export Path&lt;br /&gt;
* Create Timestamp&lt;br /&gt;
* Critical delay buffer&lt;br /&gt;
* Cultural Settings&lt;br /&gt;
* Description&lt;br /&gt;
* Document Export Path&lt;br /&gt;
* Handover to Contractor Activity Code&lt;br /&gt;
* Handover to Contractor Activity Code Order&lt;br /&gt;
* Handover to Contractor Commissioning Code&lt;br /&gt;
* Handover to Contractor Commissioning Code Order&lt;br /&gt;
* Icon&lt;br /&gt;
* Interface is active&lt;br /&gt;
* Location&lt;br /&gt;
* Name&lt;br /&gt;
* Planned Project End&lt;br /&gt;
* Planned Project Start&lt;br /&gt;
* Planning Plant&lt;br /&gt;
* Precom ready Activity Code&lt;br /&gt;
* Precom ready Activity Code Order&lt;br /&gt;
* Precom Ready Commissioning Code&lt;br /&gt;
* Precom Ready Commissioning Code Order&lt;br /&gt;
* Primavera Export Path&lt;br /&gt;
* Project ID&lt;br /&gt;
* Project Status&lt;br /&gt;
* Project System Status&lt;br /&gt;
* Project Type&lt;br /&gt;
* Revision Codes&lt;br /&gt;
* SAP Interface Is Active&lt;br /&gt;
* SAP System&lt;br /&gt;
* Scheduling Option&lt;br /&gt;
* Show On Wallpaper&lt;br /&gt;
* System&lt;br /&gt;
* Show on Wallpaper&lt;br /&gt;
* Timesheet decline limit&lt;br /&gt;
* Update timestamp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:Turnaround_Project_Use_Case_Columns_Admin_Tool.png|1200px]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Project Status ==&lt;br /&gt;
This property allows you to define the status of the project.&lt;br /&gt;
&lt;br /&gt;
It is important to note that the preparations for the Project must be completed before changing the value of this property. Once all preparations are finalized (all jobs have been executed), the Admin Tool user must manually change this value to &amp;quot;Execution&amp;quot;; otherwise, the push will not work.&lt;br /&gt;
&lt;br /&gt;
In the case of the Recalculate Project Job, the [[#SAP Interface Is Active|SAP Interface Is Active]] is also important.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are 4 options available that can be chosen: &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Preparation (initial value)&lt;br /&gt;
  - Here, the Excel files are imported, and the project is prepared.&lt;br /&gt;
  - The current scheduling from Primavera is retrieved and also imported.&lt;br /&gt;
  - Then the project can be assigned to a slot for testing. (Doesn't have to be live eg. push not active)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Execution&lt;br /&gt;
  - The project remains on the slot and can then be executed live on the wallpaper.&lt;br /&gt;
  - Changes are only allowed outside of service hours.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Aftercare&lt;br /&gt;
  - The project is removed from the slot but remains in the current MaTaP database for possible discussions, reports, etc.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Ready For Archive&lt;br /&gt;
  - The project can be moved to an archive database—it is no longer assigned to any slot.&lt;br /&gt;
  - If there is a backup of the database, it is stored in parallel to PROD with a .archive extension and can still be analyzed with the admin tool. &lt;br /&gt;
&lt;br /&gt;
== Show On Wallpaper ==&lt;br /&gt;
This property allows you to assign the project to a slot, which is displayed on the wallpaper at the client depending on the Matap context.&lt;br /&gt;
&lt;br /&gt;
== SAP Interface Is Active ==&lt;br /&gt;
This property allows you to control whether the SAP interface is active, i.e., whether SAP imports are enabled.&lt;br /&gt;
As long as this property is set to active (true), the Recalculate Project Job cannot be executed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Whitelist ==&lt;br /&gt;
&lt;br /&gt;
Using the whitelist relation (REL_COLUMN_WHITELIST), the customizer can configure, which columns (properties) will be seen for each use case in the Bulk Editor. Moreover, it is possible/necessary to edit the order, editability and info text of a column (property). For the Use Cases provided via the system definitions, we already have defined whitelists that can be adapted when needed.&lt;br /&gt;
&lt;br /&gt;
Now we come to the configuration of the whitelist for a use case:&amp;lt;br&amp;gt;&lt;br /&gt;
1. Open your UBIK.Studio. &amp;lt;br&amp;gt;&lt;br /&gt;
2. Navigate to the following point: System =&amp;gt; System.Matap =&amp;gt; System.Matap.AdminTool =&amp;gt; USE_CASE_ADMIN_TOOL_QUERY. &amp;lt;br&amp;gt;&lt;br /&gt;
3. Open the USE_CASE_ADMIN_TOOL_QUERY in the Bulk Editor. &amp;lt;br&amp;gt;&lt;br /&gt;
4. Open the use case whose columns you want to change in the Relation Editor. &amp;lt;br&amp;gt;&lt;br /&gt;
5. Drag and drop the Meta Property that you want to have shown into the REL_COLUMN_WHITELIST Section. &amp;lt;br&amp;gt;&lt;br /&gt;
6. Click on the MetaProperty that is now under the relation. &amp;lt;br&amp;gt;&lt;br /&gt;
7. On the left side you can define the order (COLUMN_ORDER), if it is locked (LOCKED), the information text (INFORMATION_TEXT) and if it should be preloaded (MP_PRELOAD). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MP_PRELOAD ==&lt;br /&gt;
&lt;br /&gt;
There is also the possibility to preload properties, and this can be set with “MP_PRELOAD”. Just check this, and the property where the “MP_PRELOAD” was set will be preloaded. This can be set individually for each property.&lt;br /&gt;
&lt;br /&gt;
== COLUMN_ORDER ==&lt;br /&gt;
&lt;br /&gt;
COLUMN_ORDER stores the column position order of a UseCase's property that is shown in the Admin Tool.&lt;br /&gt;
&lt;br /&gt;
== LOCKED ==&lt;br /&gt;
&lt;br /&gt;
LOCKED defines if a property will be editable or not in the Admin Tool.&lt;br /&gt;
&lt;br /&gt;
== INFORMATION_TEXT ==&lt;br /&gt;
&lt;br /&gt;
 INFORMATION_TEXT stores the additional text shown for a column in the Admin Tool.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Admin Tool|Entry Points &amp;amp; Use Cases (Admin Tool)]]&lt;br /&gt;
[[Category:MaTaP|Entry Points &amp;amp; Use Cases]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	</feed>