<?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-08-23T06:50:20Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=30467</id>
		<title>MRO (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=30467"/>
				<updated>2026-08-18T13:50:36Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Work Package */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MRO plugin provides a set of {{UBIK}} objects for representing and documenting maintenance, repair and operations work. The MRO features are available in the supported Mobile and {{UBIK WinX}} clients.&lt;br /&gt;
&lt;br /&gt;
This page is the main documentation for the MRO object model and its task types. Common client behaviour, such as status indicators, locking, and the general evaluation of sequential and grouped tasks, is documented in [[MRO Objects (Client)]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO (Plugin)''' || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO Objects (Client)]] || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
&lt;br /&gt;
Objects classified as MRO objects generally provide a technical and organisational status as well as an overall work progress based on their underlying data branch.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&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;
&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;
&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Work Progress|Work Progress]].&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
MRO uses Task Owners, Work Packages, Tasks, and Procedure Workpackages to represent maintenance workflows.&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object with an underlying structure of work to be performed. It can contain other Task Owners or Work Packages. Their technical status, organisational status, and work progress are accumulated and reported to the Task Owner.&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] collects and summarizes other Work Packages or Tasks. A Work Package can be confirmed when all associated Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
For Work Package presentation and confirmation in the clients, see [[MRO Objects (Client)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO (Plugin)]]&lt;br /&gt;
[[Category:Client|MRO (Plugin)]]&lt;br /&gt;
[[Category:Mobile|MRO (Plugin)]]&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;br /&gt;
[[Category:WinX|MRO (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports work progress to its owning Work Package. The available task types provide different input, validation, or automatic workflow behaviour.&lt;br /&gt;
&lt;br /&gt;
MRO task values must be validated for work progress to be calculated. A MetaAttribute providing a validation timestamp must therefore be attached to the relevant MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{Attention|A task value property has to use [[Attributes]] so that its value can be validated. Otherwise, work progress cannot be calculated.}}&lt;br /&gt;
&lt;br /&gt;
All user-editable MRO task types can be set to ''Not Applicable''. In the clients, a completed user-editable task can be reset by selecting ''Not Applicable'' twice. General client behaviour is documented in [[MRO Objects (Client)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROCEDURE_WORKPACKAGE'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PROCEDURE|Procedure Workpackage]] is a specialized Work Package for structured workflows. Its structure is defined in JSON using a workflow editor and can contain Tasks as well as subordinate Procedure Workpackages. Depending on its state, the corresponding objects are created or updated.&lt;br /&gt;
&lt;br /&gt;
Procedure Workpackages can use [[MRO Objects (Client)#Sequential Task|sequential execution]], [[MRO Objects (Client)#Grouped Task|grouped Tasks]], [[#Switch Start Task|branching]], [[#Calculation Task|calculations]], and references to linked data. Their workflows support online and offline use. Steps that require data exchange wait until connectivity is available.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || 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 Workpackage&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the Procedure Workpackage is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MRO Task Types ==&lt;br /&gt;
&lt;br /&gt;
The following task types are available in MRO. The technical object names are included to make the task types discoverable through the wiki search.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task type !! Technical object name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| [[#Blinding Task|Blinding Task]] || BLINDING_TASK || Documents a blinding or deblinding operation&lt;br /&gt;
|-&lt;br /&gt;
| [[#Calculation Task|Calculation Task]] || CALCULATION_TASK || Evaluates an expression and writes its result to a target property&lt;br /&gt;
|-&lt;br /&gt;
| [[#Check Task|Check Task]] || CHECK_TASK || Confirms a Boolean task using a checkbox&lt;br /&gt;
|-&lt;br /&gt;
| [[#Commissioning Task|Commissioning Task]] || COMMISSIONING_TASK || Represents a task in an MRO commissioning workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Inspection Task|Inspection Task]] || INSPECTION_TASK || Records a Boolean inspection result with configurable labels&lt;br /&gt;
|-&lt;br /&gt;
| [[#Interface Task|Interface Task]] || INTERFACE_TASK || Waits for completion information from another software system&lt;br /&gt;
|-&lt;br /&gt;
| [[#Joint Task|Joint Task]] || JOINT_TASK || Documents the state of a joint location&lt;br /&gt;
|-&lt;br /&gt;
| [[#Measurement Task|Measurement Task]] || MROCLS_MRO_MEASUREMENT_TASK || Records a measured Double value&lt;br /&gt;
|-&lt;br /&gt;
| [[#Numeric Task|Numeric Task]] || NUMERIC_TASK || Records a numeric value and evaluates it against a configured range&lt;br /&gt;
|-&lt;br /&gt;
| [[#Pick List Task|Pick List Task]] || PICKLIST_TASK || Selects one integer value from an instance-specific Active List&lt;br /&gt;
|-&lt;br /&gt;
| [[#Picture Task|Picture Task]] || PICTURE_TASK || Requires at least one child document containing a valid file&lt;br /&gt;
|-&lt;br /&gt;
| [[#Progress Task|Progress Task]] || PROGRESS_TASK || Reports progress between 0% and 100%&lt;br /&gt;
|-&lt;br /&gt;
| [[#Signature Task|Signature Task]] || SIGNATURE_TASK || Captures a handwritten signature&lt;br /&gt;
|-&lt;br /&gt;
| [[#Supervisor Check Task|Supervisor Check Task]] || SUPERVISOR_CHECK_TASK || Applies the four-eyes principle to a [[#Check Task|Check Task]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch End Task|Switch End Task]] || SWITCH_END_TASK || Rejoins the branches of a Procedure workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch Start Task|Switch Start Task]] || SWITCH_START_TASK || Selects a Procedure branch by evaluating a Boolean expression&lt;br /&gt;
|-&lt;br /&gt;
| [[#Text Task|Text Task]] || TEXT_TASK || Records free-form text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the available Procedure variants and their workflow execution, see [[#Procedure Task Variants and Workflow Execution|Procedure Tasks]].}}&lt;br /&gt;
&lt;br /&gt;
=== Blinding Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''BLINDING_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_BLINDINGTASK]]&lt;br /&gt;
&lt;br /&gt;
A Blinding Task documents either a blinding or deblinding operation at a linked blinding location. The configured operation type determines the state that must be reported to complete the task.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| BLINDING_TYPE || Configured operation type: Blinding or DeBlinding&lt;br /&gt;
|-&lt;br /&gt;
| LK_BLINDING_LOCATION || Link to the associated blinding location&lt;br /&gt;
|-&lt;br /&gt;
| LK_PREVIOUS_TASK || Link to the preceding Blinding Task&lt;br /&gt;
|-&lt;br /&gt;
| LOCKED || Prevents the task from being edited&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Reported blinding state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is complete only when '''VALUE''' matches the configured '''BLINDING_TYPE'''.&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CALCULATION_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_CALCULATION_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Calculation Task automatically evaluates a predefined expression on the client and writes the result to a configured property on its owner. No user input is required.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the target property on the owner&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Target type: Undefined = 0, Boolean = 1, Integer = 3, Double = 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is automatically finished after successful evaluation. The clients display an indicator for a successful evaluation or an evaluation error. A Pending state does not receive an additional indicator.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Check Task is a simple Boolean task represented by a checkbox. Clicking the checkbox sets its value and completes the task. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task value and completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Check Task (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable Check Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commissioning Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''COMMISSIONING_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_COMMISSIONINGCHECK]]&lt;br /&gt;
&lt;br /&gt;
A Commissioning Task is a specialized task type used in MRO commissioning workflows.&lt;br /&gt;
&lt;br /&gt;
'''Relevant property'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| NOTAPPLICABLE || {{Boolean}} || Not Applicable state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INSPECTION_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_INSPECTION_TASK]]&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a Boolean inspection result. The client presents a positive and a negative option as well as ''Not Applicable''. Selecting an option completes the task.&lt;br /&gt;
&lt;br /&gt;
The labels for the positive and negative outcomes can be configured. Selecting the negative outcome displays the configured false label.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Selected inspection result&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for the positive outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for the negative outcome&lt;br /&gt;
|}&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 Inspection Task (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished Inspection Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INTERFACE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
&lt;br /&gt;
An Interface Task waits for another software system to provide its completion value. The task is complete when its Boolean '''VALUE''' becomes true. If the client is offline, the task waits until connectivity and synchronization are available again.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion supplied by the external software system&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Joint Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''JOINT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_JOINTTASK]]&lt;br /&gt;
&lt;br /&gt;
A Joint Task documents the state of a linked joint location. The user selects one of the available Joint States.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_JOINT_LOCATION || Link to the associated joint location&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Selected Joint State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The available states are:&lt;br /&gt;
&lt;br /&gt;
* Closed&lt;br /&gt;
* Disconnected&lt;br /&gt;
* Open&lt;br /&gt;
* Planned&lt;br /&gt;
* Reconnected&lt;br /&gt;
* Torqued&lt;br /&gt;
* Undefined&lt;br /&gt;
* Verified&lt;br /&gt;
&lt;br /&gt;
The Joint Task is complete when its state is '''Planned''' or '''Closed'''.&lt;br /&gt;
&lt;br /&gt;
=== Measurement Task ===&lt;br /&gt;
&lt;br /&gt;
Technical classification name: '''MROCLS_MRO_MEASUREMENT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_MEASUREMENT_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Measurement Task records a measured Double value, for example a value read from a pressure gauge. Selecting the displayed value opens an editor. If no value has been entered, the editor initially displays an empty value. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
An optional secondary value indicator can display a previously recorded value. Its behaviour has to be configured separately.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently recorded measurement&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously recorded measurement&lt;br /&gt;
|}&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 recorded value (WinX)&lt;br /&gt;
File:Measurment Task Not Empty UWP.png|Measurement Task with a recorded value (WinX)&lt;br /&gt;
File:Measurment Task Empty Android.jpg|Measurement Task without a recorded value (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''NUMERIC_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_NUMERIC_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a Double value, for example a value read from a temperature sensor. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
The value is compared against a configured acceptable range that cannot be edited on the client. A value outside the range produces visual feedback and sets the [[MRO Objects (Client)#Technical Status|technical status]] to indicate an issue. An invalid configured range, such as a minimum greater than the maximum, also produces an issue when a value is entered.&lt;br /&gt;
&lt;br /&gt;
A value unit can be configured for an individual task. When present, it overrides the standard unit configured on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Instance-specific value unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICKLIST_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_PICK_LIST_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Pick List Task allows the user to select one value from an [[UBIK Active Lists|Active List]] configured on the task instance. It behaves similarly to a standard Integer Task with a Selective List, but the selectable values are supplied by the Active List rather than being defined globally.&lt;br /&gt;
&lt;br /&gt;
Every list item has an Integer value. Selecting an item or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Value of the selected Active List item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_PICTURE_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Picture Task is a Boolean task that can only be finished when it has at least one child document containing a valid file. Multiple child documents can be attached. Although pictures are the most common files, the child document can contain another file type.&lt;br /&gt;
&lt;br /&gt;
The clients display a file or photo button next to the task checkbox. The task cannot be completed through the checkbox until the file requirement is satisfied. Selecting ''Not Applicable'' is always possible and bypasses the child-document requirement.&lt;br /&gt;
&lt;br /&gt;
When the user attempts to finish the task while online, the client may first synchronize the task's child objects and download the files of its child documents. During synchronization, the checkbox is replaced by a wait indicator.&lt;br /&gt;
&lt;br /&gt;
* If no child document or no local file is available, the task remains unfinished and the user is informed.&lt;br /&gt;
* If at least one child document with a valid local file is available, the task is finished and the file or photo button is disabled.&lt;br /&gt;
&lt;br /&gt;
Child-count information can be configured but is not required. WinX can display the child documents in an expander. This is not shown by default on Mobile due to the available screen size, but it can be customized using [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|Show NextLevel Children/Documents]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Progress Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROGRESS_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_PROGRESS_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Progress Task reports progress between 0% and 100%. The reported value contributes to the progress of the owning Work Package. Values below 100% represent partial progress; the task is finished only when the reported progress reaches 100%. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently reported progress&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously reported progress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] is available for Progress Tasks.{{Version/WinXSince|2.5.4}}&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 reported progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with current and previous progress (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SIGNATURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SIGNATURE_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Signature Task is completed by capturing a handwritten signature. Selecting the signature editor opens an in-app dialog in which the user can sign. Confirming the signature saves it and automatically completes the task.&lt;br /&gt;
&lt;br /&gt;
When signing while online, the server resolves and displays the signee and generates the validation timestamp. When signing offline, the signee is resolved and displayed once the client is online again. If the complete signee or validation timestamp cannot be displayed in the editor field, selecting the field opens a popup with the complete information.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Signature || Captured signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task {{Version/XamarinSince|4.8}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_SUPERVISOR_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task applies the four-eyes principle to a Boolean [[#Check Task|Check Task]] on one device. The worker hands the device to a supervisor. The supervisor scans an NFC tag and enters the supervisor PIN. After successful authentication, the checkbox is enabled and must still be selected to finish the task.&lt;br /&gt;
&lt;br /&gt;
Selecting ''Not Applicable'' does not require supervisor authentication.&lt;br /&gt;
&lt;br /&gt;
Successful supervisor authentication removes only the supervisor-related lock. The task can remain locked for another reason, such as sequential dependencies or user rights. If an incorrect PIN is entered three times, authentication is cancelled and the NFC tag has to be scanned again. A setting controls [[RFID tags#Choose which information to use from a tag|which tag information is used]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || [[#Check Task|Check Task]] completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Authenticated supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Required supervisor permission&lt;br /&gt;
|}&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 Check Task before verification&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor PIN entry&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Check Task after verification&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_END_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SWITCH_END_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Switch End Task marks the point at which the two branches created by a [[#Switch Start Task|Switch Start Task]] merge again. It is linked to exactly one corresponding [[#Switch Start Task|Switch Start Task]]. It is not shown to the user and completes automatically after the selected branch has finished, allowing the common Procedure workflow to continue.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to the corresponding [[#Switch Start Task|Switch Start Task]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_START_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SWITCH_START_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task is a sequential workflow-control task used in a Procedure Workpackage. It automatically evaluates a Boolean expression on the client and selects either the true or false branch. Each branch represents a different path of Tasks and must lead to a corresponding [[#Switch End Task|Switch End Task]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the Task or Task Owner that starts the true branch&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to the Task or Task Owner that starts the false branch&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || Display string for a true result&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || Display string for a false result&lt;br /&gt;
|-&lt;br /&gt;
| EVALUATION_RESULT || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After evaluation, only the selected branch is executed. The other branch remains hidden and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''TEXT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_TEXT_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Text Task allows the user to enter free-form text. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Supervisor Base Type {{Version/XamarinSince|4.8}} ==&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_SUPERVISOR_TASK]]&lt;br /&gt;
&lt;br /&gt;
Supervisor Task is a base type that provides supervisor authentication behaviour. It is not used as a standalone user task. The concrete task type using this behaviour is [[#Supervisor Check Task|Supervisor Check Task]].&lt;br /&gt;
&lt;br /&gt;
== Procedure Task Variants and Workflow Execution {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ==&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of base task types and their task-specific behaviour, see [[#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
Procedure variants are specialized versions of task types for use within Procedure Workpackages. They retain the behaviour of their corresponding task type and additionally implement the [[MROCLS_SEQUENTIALTASK|Sequential Task]] and [[MROCLS_GROUPEDTASK|Grouped Task]] classifications.&lt;br /&gt;
&lt;br /&gt;
Procedure variants are available for:&lt;br /&gt;
&lt;br /&gt;
* [[#Calculation Task|Calculation Task]]&lt;br /&gt;
* [[#Check Task|Check Task]]&lt;br /&gt;
* [[#Inspection Task|Inspection Task]]&lt;br /&gt;
* [[#Interface Task|Interface Task]]&lt;br /&gt;
* [[#Numeric Task|Numeric Task]]&lt;br /&gt;
* [[#Pick List Task|Pick List Task]]&lt;br /&gt;
* [[#Picture Task|Picture Task]]&lt;br /&gt;
* [[#Signature Task|Signature Task]]&lt;br /&gt;
* [[#Supervisor Check Task|Supervisor Check Task]]&lt;br /&gt;
* [[#Text Task|Text Task]]&lt;br /&gt;
&lt;br /&gt;
[[#Switch Start Task|Switch Start Tasks]], [[#Switch End Task|Switch End Tasks]], and [[#Calculation Task|Calculation Tasks]] provide automatic workflow-control behaviour in a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
For automatic [[#Calculation Task|Calculation Tasks]] and [[#Switch Start Task|Switch Start Tasks]], the clients display an evaluation indicator:&lt;br /&gt;
&lt;br /&gt;
* '''Finished:''' The Task was automatically evaluated successfully.&lt;br /&gt;
* '''Error:''' The Task was evaluated but resulted in an error.&lt;br /&gt;
* '''Pending:''' The Task has not yet been evaluated. No additional indicator is displayed for this state.&lt;br /&gt;
&lt;br /&gt;
When a predecessor [[#Switch Start Task|Switch Start Task]] has not yet finished, its follow-up Procedure Tasks are hidden because the relevant branch is not yet known. After evaluation, the selected branch becomes visible. The other branch remains hidden, is not executed, and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
For example, several predecessor [[#Numeric Task|Numeric Tasks]] can record temperatures from different parts of an equipment. A subsequent [[#Calculation Task|Calculation Task]] can calculate their average. A [[#Switch Start Task|Switch Start Task]] can then select a branch based on whether the average exceeds a configured temperature. One branch can contain a Task for activating a cooling mechanism, while the other branch can lead directly to the [[#Switch End Task|Switch End Task]] or contain further [[#Switch Start Task|Switch Tasks]].&lt;br /&gt;
&lt;br /&gt;
Procedure Tasks are intended to execute automatically when their predecessors are finished. However, the completion of the predecessor has to be triggered by a user. If a predecessor becomes finished only because of a server update, the follow-up Procedure workflow is not triggered. This prevents a workflow from executing in the name of users who did not initiate or observe the completion.&lt;br /&gt;
&lt;br /&gt;
The general online and offline evaluation rules for sequential and grouped Tasks are documented in [[MRO Objects (Client)#Sequential Task|Sequential Task]] and [[MRO Objects (Client)#Grouped Task|Grouped Task]].&lt;br /&gt;
&lt;br /&gt;
== Supporting File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure JSON File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_JSON'''&lt;br /&gt;
&lt;br /&gt;
This File Document stores the JSON definition of a [[#Procedure Workpackage|Procedure Workpackage]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || Link to the associated [[#Procedure Workpackage|Procedure Workpackage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
This is a dedicated File Document linked to a [[#Picture Task|Picture Task]]. A [[#Picture Task|Picture Task]] can also use another child-document type, provided that the child document contains a valid file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || Link to the associated [[#Picture Task|Picture Task]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[MRO Objects (Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_START_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICTURE_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_BLINDINGTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_COMMISSIONINGCHECK]] (Classification)&lt;br /&gt;
* [[MROCLS_JOINTTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SIGNATURE_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_TEXT_TASK]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;br /&gt;
[[Category:Android|MRO (Plugin)]]&lt;br /&gt;
[[Category:Mobile|MRO (Plugin)]]&lt;br /&gt;
[[Category:Client|MRO (Plugin)]]&lt;br /&gt;
[[Category:WinX|MRO (Plugin)]]&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROCLS_SIGNATURE_TASK&amp;diff=30466</id>
		<title>MROCLS SIGNATURE TASK</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROCLS_SIGNATURE_TASK&amp;diff=30466"/>
				<updated>2026-08-18T12:47:09Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: Created page with &amp;quot;{{ClassificationInfoBox | title = Signature Task classification | name = {{PAGENAMEE}} | inheritance = MROCLS_MRO_TASK#Task | namespace = UBIK.MRO.Classification | purpose...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ClassificationInfoBox&lt;br /&gt;
| title = Signature Task classification&lt;br /&gt;
| name = {{PAGENAMEE}}&lt;br /&gt;
| inheritance = [[MROCLS_MRO_TASK#Task]]&lt;br /&gt;
| namespace = UBIK.MRO.Classification&lt;br /&gt;
| purpose = Classify objects as Signature Tasks&lt;br /&gt;
| version = 5.2.0+&lt;br /&gt;
| id = {37CC32F9-0113-4AF1-8A02-E21F5E7472F0}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A [[MRO_Objects_(Client)#Signature_Task|Signature Task]] object is an {{UBIK}} content object which is used to document work by providing a signature.&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=30% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| ''VALUE'' || Signature || The signature entered for the task&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK#Measurement 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;
* [[MRO_Objects_(Client)#Signature_Task]]&lt;br /&gt;
* [[MRO_(Plugin)#Signature_Task]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MROCLS_TEXT_TASK&amp;diff=30465</id>
		<title>MROCLS TEXT TASK</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MROCLS_TEXT_TASK&amp;diff=30465"/>
				<updated>2026-08-18T12:46:44Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: Created page with &amp;quot;{{ClassificationInfoBox | title = Text Task classification | name = {{PAGENAMEE}} | inheritance = MROCLS_MRO_TASK#Task | namespace = UBIK.MRO.Classification | purpose = Cl...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ClassificationInfoBox&lt;br /&gt;
| title = Text Task classification&lt;br /&gt;
| name = {{PAGENAMEE}}&lt;br /&gt;
| inheritance = [[MROCLS_MRO_TASK#Task]]&lt;br /&gt;
| namespace = UBIK.MRO.Classification&lt;br /&gt;
| purpose = Classify objects as Text Tasks&lt;br /&gt;
| version = 5.2.0+&lt;br /&gt;
| id = {6042083C-54A2-434C-8318-2CFC8A2BCEE2}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A [[MRO_Objects_(Client)#Text_Task|Text Task]] object is an {{UBIK}} content object which is used to document work by entering text.&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=30% | Data type !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| ''VALUE'' || {{String}} || The text entered for the task&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[MROCLS_MRO_TASK#Task]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK#Measurement 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;
* [[MRO_Objects_(Client)#Text_Task]]&lt;br /&gt;
* [[MRO_(Plugin)#Text_Task]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;/div&gt;</summary>
		<author><name>LMA</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=30464</id>
		<title>MRO (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=30464"/>
				<updated>2026-08-18T09:38:17Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MRO plugin provides a set of {{UBIK}} objects for representing and documenting maintenance, repair and operations work. The MRO features are available in the supported Mobile and {{UBIK WinX}} clients.&lt;br /&gt;
&lt;br /&gt;
This page is the main documentation for the MRO object model and its task types. Common client behaviour, such as status indicators, locking, and the general evaluation of sequential and grouped tasks, is documented in [[MRO Objects (Client)]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO (Plugin)''' || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO Objects (Client)]] || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
&lt;br /&gt;
Objects classified as MRO objects generally provide a technical and organisational status as well as an overall work progress based on their underlying data branch.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&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;
&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;
&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Work Progress|Work Progress]].&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
MRO uses Task Owners, Work Packages, Tasks, and Procedure Workpackages to represent maintenance workflows.&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object with an underlying structure of work to be performed. It can contain other Task Owners or Work Packages. Their technical status, organisational status, and work progress are accumulated and reported to the Task Owner.&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] collects and summarizes Task Owners, other Work Packages, or Tasks. A Work Package can be confirmed when all associated Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
For Work Package presentation and confirmation in the clients, see [[MRO Objects (Client)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports work progress to its owning Work Package. The available task types provide different input, validation, or automatic workflow behaviour.&lt;br /&gt;
&lt;br /&gt;
MRO task values must be validated for work progress to be calculated. A MetaAttribute providing a validation timestamp must therefore be attached to the relevant MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{Attention|A task value property has to use [[Attributes]] so that its value can be validated. Otherwise, work progress cannot be calculated.}}&lt;br /&gt;
&lt;br /&gt;
All user-editable MRO task types can be set to ''Not Applicable''. In the clients, a completed user-editable task can be reset by selecting ''Not Applicable'' twice. General client behaviour is documented in [[MRO Objects (Client)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROCEDURE_WORKPACKAGE'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PROCEDURE|Procedure Workpackage]] is a specialized Work Package for structured workflows. Its structure is defined in JSON using a workflow editor and can contain Tasks as well as subordinate Procedure Workpackages. Depending on its state, the corresponding objects are created or updated.&lt;br /&gt;
&lt;br /&gt;
Procedure Workpackages can use [[MRO Objects (Client)#Sequential Task|sequential execution]], [[MRO Objects (Client)#Grouped Task|grouped Tasks]], [[#Switch Start Task|branching]], [[#Calculation Task|calculations]], and references to linked data. Their workflows support online and offline use. Steps that require data exchange wait until connectivity is available.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || 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 Workpackage&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the Procedure Workpackage is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MRO Task Types ==&lt;br /&gt;
&lt;br /&gt;
The following task types are available in MRO. The technical object names are included to make the task types discoverable through the wiki search.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task type !! Technical object name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| [[#Blinding Task|Blinding Task]] || BLINDING_TASK || Documents a blinding or deblinding operation&lt;br /&gt;
|-&lt;br /&gt;
| [[#Calculation Task|Calculation Task]] || CALCULATION_TASK || Evaluates an expression and writes its result to a target property&lt;br /&gt;
|-&lt;br /&gt;
| [[#Check Task|Check Task]] || CHECK_TASK || Confirms a Boolean task using a checkbox&lt;br /&gt;
|-&lt;br /&gt;
| [[#Commissioning Task|Commissioning Task]] || COMMISSIONING_TASK || Represents a task in an MRO commissioning workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Inspection Task|Inspection Task]] || INSPECTION_TASK || Records a Boolean inspection result with configurable labels&lt;br /&gt;
|-&lt;br /&gt;
| [[#Interface Task|Interface Task]] || INTERFACE_TASK || Waits for completion information from another software system&lt;br /&gt;
|-&lt;br /&gt;
| [[#Joint Task|Joint Task]] || JOINT_TASK || Documents the state of a joint location&lt;br /&gt;
|-&lt;br /&gt;
| [[#Measurement Task|Measurement Task]] || MROCLS_MRO_MEASUREMENT_TASK || Records a measured Double value&lt;br /&gt;
|-&lt;br /&gt;
| [[#Numeric Task|Numeric Task]] || NUMERIC_TASK || Records a numeric value and evaluates it against a configured range&lt;br /&gt;
|-&lt;br /&gt;
| [[#Pick List Task|Pick List Task]] || PICKLIST_TASK || Selects one integer value from an instance-specific Active List&lt;br /&gt;
|-&lt;br /&gt;
| [[#Picture Task|Picture Task]] || PICTURE_TASK || Requires at least one child document containing a valid file&lt;br /&gt;
|-&lt;br /&gt;
| [[#Progress Task|Progress Task]] || PROGRESS_TASK || Reports progress between 0% and 100%&lt;br /&gt;
|-&lt;br /&gt;
| [[#Signature Task|Signature Task]] || SIGNATURE_TASK || Captures a handwritten signature&lt;br /&gt;
|-&lt;br /&gt;
| [[#Supervisor Check Task|Supervisor Check Task]] || SUPERVISOR_CHECK_TASK || Applies the four-eyes principle to a [[#Check Task|Check Task]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch End Task|Switch End Task]] || SWITCH_END_TASK || Rejoins the branches of a Procedure workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch Start Task|Switch Start Task]] || SWITCH_START_TASK || Selects a Procedure branch by evaluating a Boolean expression&lt;br /&gt;
|-&lt;br /&gt;
| [[#Text Task|Text Task]] || TEXT_TASK || Records free-form text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the available Procedure variants and their workflow execution, see [[#Procedure Task Variants and Workflow Execution|Procedure Tasks]].}}&lt;br /&gt;
&lt;br /&gt;
=== Blinding Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''BLINDING_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_BLINDINGTASK]]&lt;br /&gt;
&lt;br /&gt;
A Blinding Task documents either a blinding or deblinding operation at a linked blinding location. The configured operation type determines the state that must be reported to complete the task.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| BLINDING_TYPE || Configured operation type: Blinding or DeBlinding&lt;br /&gt;
|-&lt;br /&gt;
| LK_BLINDING_LOCATION || Link to the associated blinding location&lt;br /&gt;
|-&lt;br /&gt;
| LK_PREVIOUS_TASK || Link to the preceding Blinding Task&lt;br /&gt;
|-&lt;br /&gt;
| LOCKED || Prevents the task from being edited&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Reported blinding state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is complete only when '''VALUE''' matches the configured '''BLINDING_TYPE'''.&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CALCULATION_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_CALCULATION_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Calculation Task automatically evaluates a predefined expression on the client and writes the result to a configured property on its owner. No user input is required.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the target property on the owner&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Target type: Undefined = 0, Boolean = 1, Integer = 3, Double = 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is automatically finished after successful evaluation. The clients display an indicator for a successful evaluation or an evaluation error. A Pending state does not receive an additional indicator.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Check Task is a simple Boolean task represented by a checkbox. Clicking the checkbox sets its value and completes the task. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task value and completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Check Task (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable Check Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commissioning Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''COMMISSIONING_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_COMMISSIONINGCHECK]]&lt;br /&gt;
&lt;br /&gt;
A Commissioning Task is a specialized task type used in MRO commissioning workflows.&lt;br /&gt;
&lt;br /&gt;
'''Relevant property'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| NOTAPPLICABLE || {{Boolean}} || Not Applicable state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INSPECTION_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_INSPECTION_TASK]]&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a Boolean inspection result. The client presents a positive and a negative option as well as ''Not Applicable''. Selecting an option completes the task.&lt;br /&gt;
&lt;br /&gt;
The labels for the positive and negative outcomes can be configured. Selecting the negative outcome displays the configured false label.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Selected inspection result&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for the positive outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for the negative outcome&lt;br /&gt;
|}&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 Inspection Task (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished Inspection Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INTERFACE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
&lt;br /&gt;
An Interface Task waits for another software system to provide its completion value. The task is complete when its Boolean '''VALUE''' becomes true. If the client is offline, the task waits until connectivity and synchronization are available again.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion supplied by the external software system&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Joint Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''JOINT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_JOINTTASK]]&lt;br /&gt;
&lt;br /&gt;
A Joint Task documents the state of a linked joint location. The user selects one of the available Joint States.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_JOINT_LOCATION || Link to the associated joint location&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Selected Joint State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The available states are:&lt;br /&gt;
&lt;br /&gt;
* Closed&lt;br /&gt;
* Disconnected&lt;br /&gt;
* Open&lt;br /&gt;
* Planned&lt;br /&gt;
* Reconnected&lt;br /&gt;
* Torqued&lt;br /&gt;
* Undefined&lt;br /&gt;
* Verified&lt;br /&gt;
&lt;br /&gt;
The Joint Task is complete when its state is '''Planned''' or '''Closed'''.&lt;br /&gt;
&lt;br /&gt;
=== Measurement Task ===&lt;br /&gt;
&lt;br /&gt;
Technical classification name: '''MROCLS_MRO_MEASUREMENT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_MEASUREMENT_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Measurement Task records a measured Double value, for example a value read from a pressure gauge. Selecting the displayed value opens an editor. If no value has been entered, the editor initially displays an empty value. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
An optional secondary value indicator can display a previously recorded value. Its behaviour has to be configured separately.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently recorded measurement&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously recorded measurement&lt;br /&gt;
|}&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 recorded value (WinX)&lt;br /&gt;
File:Measurment Task Not Empty UWP.png|Measurement Task with a recorded value (WinX)&lt;br /&gt;
File:Measurment Task Empty Android.jpg|Measurement Task without a recorded value (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''NUMERIC_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_NUMERIC_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a Double value, for example a value read from a temperature sensor. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
The value is compared against a configured acceptable range that cannot be edited on the client. A value outside the range produces visual feedback and sets the [[MRO Objects (Client)#Technical Status|technical status]] to indicate an issue. An invalid configured range, such as a minimum greater than the maximum, also produces an issue when a value is entered.&lt;br /&gt;
&lt;br /&gt;
A value unit can be configured for an individual task. When present, it overrides the standard unit configured on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Instance-specific value unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICKLIST_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_PICK_LIST_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Pick List Task allows the user to select one value from an [[UBIK Active Lists|Active List]] configured on the task instance. It behaves similarly to a standard Integer Task with a Selective List, but the selectable values are supplied by the Active List rather than being defined globally.&lt;br /&gt;
&lt;br /&gt;
Every list item has an Integer value. Selecting an item or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Value of the selected Active List item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_PICTURE_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Picture Task is a Boolean task that can only be finished when it has at least one child document containing a valid file. Multiple child documents can be attached. Although pictures are the most common files, the child document can contain another file type.&lt;br /&gt;
&lt;br /&gt;
The clients display a file or photo button next to the task checkbox. The task cannot be completed through the checkbox until the file requirement is satisfied. Selecting ''Not Applicable'' is always possible and bypasses the child-document requirement.&lt;br /&gt;
&lt;br /&gt;
When the user attempts to finish the task while online, the client may first synchronize the task's child objects and download the files of its child documents. During synchronization, the checkbox is replaced by a wait indicator.&lt;br /&gt;
&lt;br /&gt;
* If no child document or no local file is available, the task remains unfinished and the user is informed.&lt;br /&gt;
* If at least one child document with a valid local file is available, the task is finished and the file or photo button is disabled.&lt;br /&gt;
&lt;br /&gt;
Child-count information can be configured but is not required. WinX can display the child documents in an expander. This is not shown by default on Mobile due to the available screen size, but it can be customized using [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|Show NextLevel Children/Documents]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Progress Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROGRESS_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_PROGRESS_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Progress Task reports progress between 0% and 100%. The reported value contributes to the progress of the owning Work Package. Values below 100% represent partial progress; the task is finished only when the reported progress reaches 100%. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently reported progress&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously reported progress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] is available for Progress Tasks.{{Version/WinXSince|2.5.4}}&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 reported progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with current and previous progress (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SIGNATURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SIGNATURE_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Signature Task is completed by capturing a handwritten signature. Selecting the signature editor opens an in-app dialog in which the user can sign. Confirming the signature saves it and automatically completes the task.&lt;br /&gt;
&lt;br /&gt;
When signing while online, the server resolves and displays the signee and generates the validation timestamp. When signing offline, the signee is resolved and displayed once the client is online again. If the complete signee or validation timestamp cannot be displayed in the editor field, selecting the field opens a popup with the complete information.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Signature || Captured signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task {{Version/XamarinSince|4.8}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_SUPERVISOR_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task applies the four-eyes principle to a Boolean [[#Check Task|Check Task]] on one device. The worker hands the device to a supervisor. The supervisor scans an NFC tag and enters the supervisor PIN. After successful authentication, the checkbox is enabled and must still be selected to finish the task.&lt;br /&gt;
&lt;br /&gt;
Selecting ''Not Applicable'' does not require supervisor authentication.&lt;br /&gt;
&lt;br /&gt;
Successful supervisor authentication removes only the supervisor-related lock. The task can remain locked for another reason, such as sequential dependencies or user rights. If an incorrect PIN is entered three times, authentication is cancelled and the NFC tag has to be scanned again. A setting controls [[RFID tags#Choose which information to use from a tag|which tag information is used]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || [[#Check Task|Check Task]] completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Authenticated supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Required supervisor permission&lt;br /&gt;
|}&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 Check Task before verification&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor PIN entry&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Check Task after verification&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_END_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SWITCH_END_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Switch End Task marks the point at which the two branches created by a [[#Switch Start Task|Switch Start Task]] merge again. It is linked to exactly one corresponding [[#Switch Start Task|Switch Start Task]]. It is not shown to the user and completes automatically after the selected branch has finished, allowing the common Procedure workflow to continue.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to the corresponding [[#Switch Start Task|Switch Start Task]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_START_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SWITCH_START_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task is a sequential workflow-control task used in a Procedure Workpackage. It automatically evaluates a Boolean expression on the client and selects either the true or false branch. Each branch represents a different path of Tasks and must lead to a corresponding [[#Switch End Task|Switch End Task]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the Task or Task Owner that starts the true branch&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to the Task or Task Owner that starts the false branch&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || Display string for a true result&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || Display string for a false result&lt;br /&gt;
|-&lt;br /&gt;
| EVALUATION_RESULT || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After evaluation, only the selected branch is executed. The other branch remains hidden and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''TEXT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_TEXT_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Text Task allows the user to enter free-form text. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Supervisor Base Type {{Version/XamarinSince|4.8}} ==&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_SUPERVISOR_TASK]]&lt;br /&gt;
&lt;br /&gt;
Supervisor Task is a base type that provides supervisor authentication behaviour. It is not used as a standalone user task. The concrete task type using this behaviour is [[#Supervisor Check Task|Supervisor Check Task]].&lt;br /&gt;
&lt;br /&gt;
== Procedure Task Variants and Workflow Execution {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ==&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of base task types and their task-specific behaviour, see [[#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
Procedure variants are specialized versions of task types for use within Procedure Workpackages. They retain the behaviour of their corresponding task type and additionally implement the [[MROCLS_SEQUENTIALTASK|Sequential Task]] and [[MROCLS_GROUPEDTASK|Grouped Task]] classifications.&lt;br /&gt;
&lt;br /&gt;
Procedure variants are available for:&lt;br /&gt;
&lt;br /&gt;
* [[#Calculation Task|Calculation Task]]&lt;br /&gt;
* [[#Check Task|Check Task]]&lt;br /&gt;
* [[#Inspection Task|Inspection Task]]&lt;br /&gt;
* [[#Interface Task|Interface Task]]&lt;br /&gt;
* [[#Numeric Task|Numeric Task]]&lt;br /&gt;
* [[#Pick List Task|Pick List Task]]&lt;br /&gt;
* [[#Picture Task|Picture Task]]&lt;br /&gt;
* [[#Signature Task|Signature Task]]&lt;br /&gt;
* [[#Supervisor Check Task|Supervisor Check Task]]&lt;br /&gt;
* [[#Text Task|Text Task]]&lt;br /&gt;
&lt;br /&gt;
[[#Switch Start Task|Switch Start Tasks]], [[#Switch End Task|Switch End Tasks]], and [[#Calculation Task|Calculation Tasks]] provide automatic workflow-control behaviour in a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
For automatic [[#Calculation Task|Calculation Tasks]] and [[#Switch Start Task|Switch Start Tasks]], the clients display an evaluation indicator:&lt;br /&gt;
&lt;br /&gt;
* '''Finished:''' The Task was automatically evaluated successfully.&lt;br /&gt;
* '''Error:''' The Task was evaluated but resulted in an error.&lt;br /&gt;
* '''Pending:''' The Task has not yet been evaluated. No additional indicator is displayed for this state.&lt;br /&gt;
&lt;br /&gt;
When a predecessor [[#Switch Start Task|Switch Start Task]] has not yet finished, its follow-up Procedure Tasks are hidden because the relevant branch is not yet known. After evaluation, the selected branch becomes visible. The other branch remains hidden, is not executed, and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
For example, several predecessor [[#Numeric Task|Numeric Tasks]] can record temperatures from different parts of an equipment. A subsequent [[#Calculation Task|Calculation Task]] can calculate their average. A [[#Switch Start Task|Switch Start Task]] can then select a branch based on whether the average exceeds a configured temperature. One branch can contain a Task for activating a cooling mechanism, while the other branch can lead directly to the [[#Switch End Task|Switch End Task]] or contain further [[#Switch Start Task|Switch Tasks]].&lt;br /&gt;
&lt;br /&gt;
Procedure Tasks are intended to execute automatically when their predecessors are finished. However, the completion of the predecessor has to be triggered by a user. If a predecessor becomes finished only because of a server update, the follow-up Procedure workflow is not triggered. This prevents a workflow from executing in the name of users who did not initiate or observe the completion.&lt;br /&gt;
&lt;br /&gt;
The general online and offline evaluation rules for sequential and grouped Tasks are documented in [[MRO Objects (Client)#Sequential Task|Sequential Task]] and [[MRO Objects (Client)#Grouped Task|Grouped Task]].&lt;br /&gt;
&lt;br /&gt;
== Supporting File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure JSON File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_JSON'''&lt;br /&gt;
&lt;br /&gt;
This File Document stores the JSON definition of a [[#Procedure Workpackage|Procedure Workpackage]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || Link to the associated [[#Procedure Workpackage|Procedure Workpackage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
This is a dedicated File Document linked to a [[#Picture Task|Picture Task]]. A [[#Picture Task|Picture Task]] can also use another child-document type, provided that the child document contains a valid file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || Link to the associated [[#Picture Task|Picture Task]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[MRO Objects (Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_START_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICTURE_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_BLINDINGTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_COMMISSIONINGCHECK]] (Classification)&lt;br /&gt;
* [[MROCLS_JOINTTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SIGNATURE_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_TEXT_TASK]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;br /&gt;
[[Category:Android|MRO (Plugin)]]&lt;br /&gt;
[[Category:Mobile|MRO (Plugin)]]&lt;br /&gt;
[[Category:Client|MRO (Plugin)]]&lt;br /&gt;
[[Category:WinX|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=30456</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=30456"/>
				<updated>2026-08-17T14:35:04Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: Redirected page to MRO (Plugin)#MRO Task Types&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[MRO (Plugin)#MRO Task Types]]&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=30455</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=30455"/>
				<updated>2026-08-17T14:31:15Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Work Progress */&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 (Mobile)|MRO UI (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
The WinX and Mobile clients display MRO objects like other root or child objects, with additional MRO-specific indicators, controls, and evaluation logic.&lt;br /&gt;
&lt;br /&gt;
This page documents behaviour that is shared by multiple MRO objects in the clients. The MRO object model, task-specific behaviour, and relevant technical properties are documented on [[MRO (Plugin)]]. For the complete task-type catalog, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO (Plugin)]] || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO Objects (Client)''' || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Basic User Interface ==&lt;br /&gt;
&lt;br /&gt;
The MRO user interface provides status indicators and interactive controls. In the {{UBIK}} child list, an MRO object can display its accumulated technical status, organisational status, and overall work progress based on its underlying data branch. These indicators are shown next to the main icon on child, details, and documents pages as well as next to the icons of child-list items.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&lt;br /&gt;
The technical status indicator is shown on objects that represent a technical state or receive the technical status from subsequent objects in the underlying data branch. For example, if an inventory object is reported as damaged, its parent objects display an exclamation-mark indicator to show that a problem was reported by a child object.&lt;br /&gt;
&lt;br /&gt;
[[File:TechStats_WinX.png|100px|Technical Status Indicator (WinX and Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
&lt;br /&gt;
The organisational status represents the amount of confirmed work in the data branch. This includes confirmed Work Packages as well as Tasks that are locked by their owning Work Package. The indicator is shown on objects that represent an organisational state or receive the organisational status from subsequent objects.&lt;br /&gt;
&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|Confirmed Work Package flag (WinX)&lt;br /&gt;
File:ConfirmedWP_MAUI.jpeg|Confirmed Work Package indicator (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
&lt;br /&gt;
Work progress is calculated from the object's current progress and the progress accumulated from subsequent objects in the underlying data branch. The indicator shows the amount of work completed in that branch.&lt;br /&gt;
&lt;br /&gt;
{{Version/WinXSince|5.0}} {{Version/MobileSince|5.0}} By default, progress is displayed with no more than one decimal place. For example, 99.75% is displayed as 99.8%. The format string used for this is &amp;lt;code&amp;gt;{0:0.#}%&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For other numeric formats, see [https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings custom numeric format strings]. The template used to customize the presentation is '''UBIKMROProgressBadge''' in '''UBIKThemes'''.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&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;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
The MRO object model consists of Task Owners, Work Packages, Tasks, and specialized task types. For the object definitions and technical properties, see [[MRO (Plugin)#MRO Objects|MRO Objects]].&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] gives users an overview of the work in its underlying structure. The client displays the technical status, organisational status, and work progress accumulated from its subordinate Task Owners and Work Packages.&lt;br /&gt;
&lt;br /&gt;
For the Task Owner definition, see [[MRO (Plugin)#Task Owner|Task Owner]].&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
The clients provide controls for confirming and revoking the confirmation of a [[MROCLS_MRO_WORKPACKAGE|Work Package]]. A Work Package can be confirmed when its related Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:ConfirmingWP_WinX.png|Work Package confirmation button (WinX)&lt;br /&gt;
File:MRORevoke_WinX.png|Revoke Work Package confirmation (WinX)&lt;br /&gt;
File:ConfirmingWP_MAUI.jpeg|Work Package confirmation button (Mobile)&lt;br /&gt;
File:MRORevoke_MAUI.jpeg|Revoke Work Package confirmation (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the Work Package definition, see [[MRO (Plugin)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports progress to its owning Work Package. All user-editable MRO Tasks support ''Not Applicable''. In both clients, a completed user-editable Task can be reset by selecting ''Not Applicable'' twice.&lt;br /&gt;
&lt;br /&gt;
For the common Task model and value-validation requirement, see [[MRO (Plugin)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of MRO task types, their properties, and their task-specific client behaviour, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]]. For the available Procedure variants and their workflow execution, see [[MRO (Plugin)#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].}}&lt;br /&gt;
&lt;br /&gt;
==== Sequential Task ====&lt;br /&gt;
&lt;br /&gt;
The [[MROCLS_SEQUENTIALTASK|Sequential Task classification]] defines an order in which Tasks are to be completed. One or more predecessor Tasks can be required to finish before a dependent Task becomes unlocked and editable. A Task can have any number of predecessors.&lt;br /&gt;
&lt;br /&gt;
A Task and its predecessors do not have to belong to the same Work Package. A predecessor can be located elsewhere in the object hierarchy.&lt;br /&gt;
&lt;br /&gt;
The state of a Sequential Task is evaluated both online and offline. This allows visible dependent Tasks to update immediately when their predecessors are finished. The server-side state takes precedence in the case described by the first step below.&lt;br /&gt;
&lt;br /&gt;
The state is evaluated as follows:&lt;br /&gt;
&lt;br /&gt;
# If the server-side state says that the Task is open, it is treated as open and no further local evaluation is performed.&lt;br /&gt;
# The client checks whether the Task has predecessors.&lt;br /&gt;
# The client attempts to load every predecessor Task.&lt;br /&gt;
#* If any predecessor cannot be loaded because it is not available offline, the Task is locked.&lt;br /&gt;
# If every predecessor is finished, the Task is open and editable. Otherwise, it is locked.&lt;br /&gt;
&lt;br /&gt;
The configured dependency graph must not contain cycles. Tasks within a dependency cycle could never become available for completion.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
See [[Media:Sequential_tasks_winx.mp4|this video]] for a demonstration. The Task relations are illustrated in [[Media:Task_relations.png|this image]]. Tasks A1 and A2 do not depend on other Tasks. The lines from left to right represent dependencies; for example, B2 has A1 and A2 as predecessors.&lt;br /&gt;
&lt;br /&gt;
==== Grouped Task {{Version/WinXSince|4.2}}{{Version/XamarinSince|4.2}} ====&lt;br /&gt;
&lt;br /&gt;
The [[MROCLS_GROUPEDTASK|Grouped Task classification]] is used when only a configured number of Tasks from a group have to be finished. The Tasks are siblings and share a server-configured threshold. When the number of finished Tasks reaches the threshold, the remaining Tasks in the group are considered no longer necessary. For the accumulated status of the owning objects, those Tasks are treated as if they were finished.&lt;br /&gt;
&lt;br /&gt;
{{Hint|The finished state and the no-longer-necessary state are independent. A Grouped Task that is no longer necessary can be either finished or unfinished. Users do not have to finish it, but they still can.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The precise status calculation requires information about all sibling Tasks. If some siblings are not available offline, the client cannot determine whether the threshold has been reached. In this situation, the local status calculation treats the available objects as regular Tasks.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The client uses the best available status. It uses the status calculated by the server when the client is online and there are no uncommitted local changes on the involved objects. Otherwise, it calculates the status locally based on the available information.}}&lt;br /&gt;
&lt;br /&gt;
A Task can be both grouped and sequential. In this case, the group threshold affects when a dependent Task becomes available.&lt;br /&gt;
&lt;br /&gt;
For example, Tasks A1, A2, and A3 can form a group in which only one Task has to be finished. If all three are predecessors of Task B, finishing one of them causes the group threshold to be reached. All three predecessors become no longer necessary and locked, and Task B becomes unlocked.&lt;br /&gt;
&lt;br /&gt;
==== Procedure Tasks {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
Procedure Tasks are specialized [[#Sequential Task|Sequential Tasks]] that can also use [[#Grouped Task|Grouped Task]] behaviour and branching within a Procedure Workpackage. Their task-specific behaviour and workflow execution are documented on the Plugin page to avoid duplicating the canonical task documentation.&lt;br /&gt;
&lt;br /&gt;
{{Hint|For Procedure variants and workflow execution, see [[MRO (Plugin)#Procedure Task Variants and Workflow Execution|Procedure Tasks]]. For the complete list of base task types, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
=== MRO Objects with Project Information (WinX only) {{Version/WinXSince|2.5.4}} ===&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedStartTag|parameter=Please refer to [[Main_Page]] for the most recent information.}}&lt;br /&gt;
&lt;br /&gt;
[[File:UI_WinX_MRO_ProjectInfo.png|thumb|MRO Object with Project Information (WinX)]]&lt;br /&gt;
&lt;br /&gt;
An MRO object other than a Task can contain [[MROCLS_PROJECTINFORMATION|project information]]. In this case, the project information and MRO progress are displayed in a bar chart. The start and end dates are displayed on the progress bar. Its length and position, together with the current-date marker, indicate the timeline.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedEndTag}}&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
&lt;br /&gt;
When an MRO object is locked, it cannot be edited. For further information, see [[Locked Objects|Locked Objects]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&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;
* [[MRO (Plugin)#Procedure Task Variants and Workflow Execution|Procedure Tasks]]&lt;br /&gt;
* [[MROCLS_MRO_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]]&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]]&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=30454</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=30454"/>
				<updated>2026-08-17T14:30:33Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &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 (Mobile)|MRO UI (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
The WinX and Mobile clients display MRO objects like other root or child objects, with additional MRO-specific indicators, controls, and evaluation logic.&lt;br /&gt;
&lt;br /&gt;
This page documents behaviour that is shared by multiple MRO objects in the clients. The MRO object model, task-specific behaviour, and relevant technical properties are documented on [[MRO (Plugin)]]. For the complete task-type catalog, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO (Plugin)]] || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO Objects (Client)''' || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Basic User Interface ==&lt;br /&gt;
&lt;br /&gt;
The MRO user interface provides status indicators and interactive controls. In the {{UBIK}} child list, an MRO object can display its accumulated technical status, organisational status, and overall work progress based on its underlying data branch. These indicators are shown next to the main icon on child, details, and documents pages as well as next to the icons of child-list items.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&lt;br /&gt;
The technical status indicator is shown on objects that represent a technical state or receive the technical status from subsequent objects in the underlying data branch. For example, if an inventory object is reported as damaged, its parent objects display an exclamation-mark indicator to show that a problem was reported by a child object.&lt;br /&gt;
&lt;br /&gt;
[[File:TechStats_WinX.png|100px|Technical Status Indicator (WinX and Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
&lt;br /&gt;
The organisational status represents the amount of confirmed work in the data branch. This includes confirmed Work Packages as well as Tasks that are locked by their owning Work Package. The indicator is shown on objects that represent an organisational state or receive the organisational status from subsequent objects.&lt;br /&gt;
&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|Confirmed Work Package flag (WinX)&lt;br /&gt;
File:ConfirmedWP_MAUI.jpeg|Confirmed Work Package indicator (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
&lt;br /&gt;
Work progress is calculated from the object's current progress and the progress accumulated from subsequent objects in the underlying data branch. The indicator shows the amount of work completed in that branch.&lt;br /&gt;
&lt;br /&gt;
{{Version/WinXSince|5.0}} {{Version/MobileSince|5.0}} By default, progress is displayed with no more than one decimal place. For example, 99.75% is displayed as 99.8%. The format string used for this is ''{0:0.#}%''.&lt;br /&gt;
&lt;br /&gt;
For other numeric formats, see [https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings custom numeric format strings]. The template used to customize the presentation is '''UBIKMROProgressBadge''' in '''UBIKThemes'''.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
The MRO object model consists of Task Owners, Work Packages, Tasks, and specialized task types. For the object definitions and technical properties, see [[MRO (Plugin)#MRO Objects|MRO Objects]].&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] gives users an overview of the work in its underlying structure. The client displays the technical status, organisational status, and work progress accumulated from its subordinate Task Owners and Work Packages.&lt;br /&gt;
&lt;br /&gt;
For the Task Owner definition, see [[MRO (Plugin)#Task Owner|Task Owner]].&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
The clients provide controls for confirming and revoking the confirmation of a [[MROCLS_MRO_WORKPACKAGE|Work Package]]. A Work Package can be confirmed when its related Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:ConfirmingWP_WinX.png|Work Package confirmation button (WinX)&lt;br /&gt;
File:MRORevoke_WinX.png|Revoke Work Package confirmation (WinX)&lt;br /&gt;
File:ConfirmingWP_MAUI.jpeg|Work Package confirmation button (Mobile)&lt;br /&gt;
File:MRORevoke_MAUI.jpeg|Revoke Work Package confirmation (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the Work Package definition, see [[MRO (Plugin)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports progress to its owning Work Package. All user-editable MRO Tasks support ''Not Applicable''. In both clients, a completed user-editable Task can be reset by selecting ''Not Applicable'' twice.&lt;br /&gt;
&lt;br /&gt;
For the common Task model and value-validation requirement, see [[MRO (Plugin)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of MRO task types, their properties, and their task-specific client behaviour, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]]. For the available Procedure variants and their workflow execution, see [[MRO (Plugin)#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].}}&lt;br /&gt;
&lt;br /&gt;
==== Sequential Task ====&lt;br /&gt;
&lt;br /&gt;
The [[MROCLS_SEQUENTIALTASK|Sequential Task classification]] defines an order in which Tasks are to be completed. One or more predecessor Tasks can be required to finish before a dependent Task becomes unlocked and editable. A Task can have any number of predecessors.&lt;br /&gt;
&lt;br /&gt;
A Task and its predecessors do not have to belong to the same Work Package. A predecessor can be located elsewhere in the object hierarchy.&lt;br /&gt;
&lt;br /&gt;
The state of a Sequential Task is evaluated both online and offline. This allows visible dependent Tasks to update immediately when their predecessors are finished. The server-side state takes precedence in the case described by the first step below.&lt;br /&gt;
&lt;br /&gt;
The state is evaluated as follows:&lt;br /&gt;
&lt;br /&gt;
# If the server-side state says that the Task is open, it is treated as open and no further local evaluation is performed.&lt;br /&gt;
# The client checks whether the Task has predecessors.&lt;br /&gt;
# The client attempts to load every predecessor Task.&lt;br /&gt;
#* If any predecessor cannot be loaded because it is not available offline, the Task is locked.&lt;br /&gt;
# If every predecessor is finished, the Task is open and editable. Otherwise, it is locked.&lt;br /&gt;
&lt;br /&gt;
The configured dependency graph must not contain cycles. Tasks within a dependency cycle could never become available for completion.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
See [[Media:Sequential_tasks_winx.mp4|this video]] for a demonstration. The Task relations are illustrated in [[Media:Task_relations.png|this image]]. Tasks A1 and A2 do not depend on other Tasks. The lines from left to right represent dependencies; for example, B2 has A1 and A2 as predecessors.&lt;br /&gt;
&lt;br /&gt;
==== Grouped Task {{Version/WinXSince|4.2}}{{Version/XamarinSince|4.2}} ====&lt;br /&gt;
&lt;br /&gt;
The [[MROCLS_GROUPEDTASK|Grouped Task classification]] is used when only a configured number of Tasks from a group have to be finished. The Tasks are siblings and share a server-configured threshold. When the number of finished Tasks reaches the threshold, the remaining Tasks in the group are considered no longer necessary. For the accumulated status of the owning objects, those Tasks are treated as if they were finished.&lt;br /&gt;
&lt;br /&gt;
{{Hint|The finished state and the no-longer-necessary state are independent. A Grouped Task that is no longer necessary can be either finished or unfinished. Users do not have to finish it, but they still can.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The precise status calculation requires information about all sibling Tasks. If some siblings are not available offline, the client cannot determine whether the threshold has been reached. In this situation, the local status calculation treats the available objects as regular Tasks.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The client uses the best available status. It uses the status calculated by the server when the client is online and there are no uncommitted local changes on the involved objects. Otherwise, it calculates the status locally based on the available information.}}&lt;br /&gt;
&lt;br /&gt;
A Task can be both grouped and sequential. In this case, the group threshold affects when a dependent Task becomes available.&lt;br /&gt;
&lt;br /&gt;
For example, Tasks A1, A2, and A3 can form a group in which only one Task has to be finished. If all three are predecessors of Task B, finishing one of them causes the group threshold to be reached. All three predecessors become no longer necessary and locked, and Task B becomes unlocked.&lt;br /&gt;
&lt;br /&gt;
==== Procedure Tasks {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
Procedure Tasks are specialized [[#Sequential Task|Sequential Tasks]] that can also use [[#Grouped Task|Grouped Task]] behaviour and branching within a Procedure Workpackage. Their task-specific behaviour and workflow execution are documented on the Plugin page to avoid duplicating the canonical task documentation.&lt;br /&gt;
&lt;br /&gt;
{{Hint|For Procedure variants and workflow execution, see [[MRO (Plugin)#Procedure Task Variants and Workflow Execution|Procedure Tasks]]. For the complete list of base task types, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
=== MRO Objects with Project Information (WinX only) {{Version/WinXSince|2.5.4}} ===&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedStartTag|parameter=Please refer to [[Main_Page]] for the most recent information.}}&lt;br /&gt;
&lt;br /&gt;
[[File:UI_WinX_MRO_ProjectInfo.png|thumb|MRO Object with Project Information (WinX)]]&lt;br /&gt;
&lt;br /&gt;
An MRO object other than a Task can contain [[MROCLS_PROJECTINFORMATION|project information]]. In this case, the project information and MRO progress are displayed in a bar chart. The start and end dates are displayed on the progress bar. Its length and position, together with the current-date marker, indicate the timeline.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedEndTag}}&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
&lt;br /&gt;
When an MRO object is locked, it cannot be edited. For further information, see [[Locked Objects|Locked Objects]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&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;
* [[MRO (Plugin)#Procedure Task Variants and Workflow Execution|Procedure Tasks]]&lt;br /&gt;
* [[MROCLS_MRO_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]]&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]]&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=30453</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=30453"/>
				<updated>2026-08-17T14:24:10Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &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 (Mobile)|MRO UI (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
The WinX and Mobile clients display MRO objects like other root or child objects, with additional MRO-specific indicators, controls, and evaluation logic.&lt;br /&gt;
&lt;br /&gt;
This page documents behaviour that is shared by multiple MRO objects in the clients. The MRO object model, task-specific behaviour, and relevant technical properties are documented on [[MRO (Plugin)]]. For the complete task-type catalog, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO (Plugin)]] || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO Objects (Client)''' || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of MRO task types and their task-specific behaviour, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
== Basic User Interface ==&lt;br /&gt;
&lt;br /&gt;
The MRO user interface provides status indicators and interactive controls. In the {{UBIK}} child list, an MRO object can display its accumulated technical status, organisational status, and overall work progress based on its underlying data branch. These indicators are shown next to the main icon on child, details, and documents pages as well as next to the icons of child-list items.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&lt;br /&gt;
The technical status indicator is shown on objects that represent a technical state or receive the technical status from subsequent objects in the underlying data branch. For example, if an inventory object is reported as damaged, its parent objects display an exclamation-mark indicator to show that a problem was reported by a child object.&lt;br /&gt;
&lt;br /&gt;
[[File:TechStats_WinX.png|100px|Technical Status Indicator (WinX and Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
&lt;br /&gt;
The organisational status represents the amount of confirmed work in the data branch. This includes confirmed Work Packages as well as Tasks that are locked by their owning Work Package. The indicator is shown on objects that represent an organisational state or receive the organisational status from subsequent objects.&lt;br /&gt;
&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|Confirmed Work Package flag (WinX)&lt;br /&gt;
File:ConfirmedWP_MAUI.jpeg|Confirmed Work Package indicator (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
&lt;br /&gt;
Work progress is calculated from the object's current progress and the progress accumulated from subsequent objects in the underlying data branch. The indicator shows the amount of work completed in that branch.&lt;br /&gt;
&lt;br /&gt;
{{Version/WinXSince|5.0}} {{Version/MobileSince|5.0}} By default, progress is displayed with no more than one decimal place. For example, 99.75% is displayed as 99.8%. The format string used for this is ''{0:0.#}%''.&lt;br /&gt;
&lt;br /&gt;
For other numeric formats, see [https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings custom numeric format strings]. The template used to customize the presentation is '''UBIKMROProgressBadge''' in '''UBIKThemes'''.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
The MRO object model consists of Task Owners, Work Packages, Tasks, and specialized task types. For the object definitions and technical properties, see [[MRO (Plugin)#MRO Objects|MRO Objects]].&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] gives users an overview of the work in its underlying structure. The client displays the technical status, organisational status, and work progress accumulated from its subordinate Task Owners and Work Packages.&lt;br /&gt;
&lt;br /&gt;
For the Task Owner definition, see [[MRO (Plugin)#Task Owner|Task Owner]].&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
The clients provide controls for confirming and revoking the confirmation of a [[MROCLS_MRO_WORKPACKAGE|Work Package]]. A Work Package can be confirmed when its related Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:ConfirmingWP_WinX.png|Work Package confirmation button (WinX)&lt;br /&gt;
File:MRORevoke_WinX.png|Revoke Work Package confirmation (WinX)&lt;br /&gt;
File:ConfirmingWP_MAUI.jpeg|Work Package confirmation button (Mobile)&lt;br /&gt;
File:MRORevoke_MAUI.jpeg|Revoke Work Package confirmation (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the Work Package definition, see [[MRO (Plugin)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports progress to its owning Work Package. All user-editable MRO Tasks support ''Not Applicable''. In both clients, a completed user-editable Task can be reset by selecting ''Not Applicable'' twice.&lt;br /&gt;
&lt;br /&gt;
For the common Task model and value-validation requirement, see [[MRO (Plugin)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of MRO task types, their properties, and their task-specific client behaviour, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
==== Sequential Task ====&lt;br /&gt;
&lt;br /&gt;
The [[MROCLS_SEQUENTIALTASK|Sequential Task classification]] defines an order in which Tasks are to be completed. One or more predecessor Tasks can be required to finish before a dependent Task becomes unlocked and editable. A Task can have any number of predecessors.&lt;br /&gt;
&lt;br /&gt;
A Task and its predecessors do not have to belong to the same Work Package. A predecessor can be located elsewhere in the object hierarchy.&lt;br /&gt;
&lt;br /&gt;
The state of a Sequential Task is evaluated both online and offline. This allows visible dependent Tasks to update immediately when their predecessors are finished. The server-side state takes precedence in the case described by the first step below.&lt;br /&gt;
&lt;br /&gt;
The state is evaluated as follows:&lt;br /&gt;
&lt;br /&gt;
# If the server-side state says that the Task is open, it is treated as open and no further local evaluation is performed.&lt;br /&gt;
# The client checks whether the Task has predecessors.&lt;br /&gt;
# The client attempts to load every predecessor Task.&lt;br /&gt;
#* If any predecessor cannot be loaded because it is not available offline, the Task is locked.&lt;br /&gt;
# If every predecessor is finished, the Task is open and editable. Otherwise, it is locked.&lt;br /&gt;
&lt;br /&gt;
The configured dependency graph must not contain cycles. Tasks within a dependency cycle could never become available for completion.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
See [[Media:Sequential_tasks_winx.mp4|this video]] for a demonstration. The Task relations are illustrated in [[Media:Task_relations.png|this image]]. Tasks A1 and A2 do not depend on other Tasks. The lines from left to right represent dependencies; for example, B2 has A1 and A2 as predecessors.&lt;br /&gt;
&lt;br /&gt;
==== Grouped Task {{Version/WinXSince|4.2}}{{Version/XamarinSince|4.2}} ====&lt;br /&gt;
&lt;br /&gt;
The [[MROCLS_GROUPEDTASK|Grouped Task classification]] is used when only a configured number of Tasks from a group have to be finished. The Tasks are siblings and share a server-configured threshold. When the number of finished Tasks reaches the threshold, the remaining Tasks in the group are considered no longer necessary. For the accumulated status of the owning objects, those Tasks are treated as if they were finished.&lt;br /&gt;
&lt;br /&gt;
{{Hint|The finished state and the no-longer-necessary state are independent. A Grouped Task that is no longer necessary can be either finished or unfinished. Users do not have to finish it, but they still can.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The precise status calculation requires information about all sibling Tasks. If some siblings are not available offline, the client cannot determine whether the threshold has been reached. In this situation, the local status calculation treats the available objects as regular Tasks.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The client uses the best available status. It uses the status calculated by the server when the client is online and there are no uncommitted local changes on the involved objects. Otherwise, it calculates the status locally based on the available information.}}&lt;br /&gt;
&lt;br /&gt;
A Task can be both grouped and sequential. In this case, the group threshold affects when a dependent Task becomes available.&lt;br /&gt;
&lt;br /&gt;
For example, Tasks A1, A2, and A3 can form a group in which only one Task has to be finished. If all three are predecessors of Task B, finishing one of them causes the group threshold to be reached. All three predecessors become no longer necessary and locked, and Task B becomes unlocked.&lt;br /&gt;
&lt;br /&gt;
==== Procedure Tasks {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
Procedure Tasks are specialized [[#Sequential Task|Sequential Tasks]] that can also use [[#Grouped Task|Grouped Task]] behaviour and branching within a Procedure Workpackage. Their task-specific behaviour and workflow execution are documented on the Plugin page to avoid duplicating the canonical task documentation.&lt;br /&gt;
&lt;br /&gt;
{{Hint|For Procedure variants and workflow execution, see [[MRO (Plugin)#Procedure Task Variants and Workflow Execution|Procedure Tasks]]. For the complete list of base task types, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
=== MRO Objects with Project Information (WinX only) {{Version/WinXSince|2.5.4}} ===&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedStartTag|parameter=Please refer to [[Main_Page]] for the most recent information.}}&lt;br /&gt;
&lt;br /&gt;
[[File:UI_WinX_MRO_ProjectInfo.png|thumb|MRO Object with Project Information (WinX)]]&lt;br /&gt;
&lt;br /&gt;
An MRO object other than a Task can contain [[MROCLS_PROJECTINFORMATION|project information]]. In this case, the project information and MRO progress are displayed in a bar chart. The start and end dates are displayed on the progress bar. Its length and position, together with the current-date marker, indicate the timeline.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedEndTag}}&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
&lt;br /&gt;
When an MRO object is locked, it cannot be edited. For further information, see [[Locked Objects|Locked Objects]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&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;
* [[MRO (Plugin)#Procedure Task Variants and Workflow Execution|Procedure Tasks]]&lt;br /&gt;
* [[MROCLS_MRO_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]]&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]]&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_(Plugin)&amp;diff=30452</id>
		<title>MRO (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=30452"/>
				<updated>2026-08-17T14:22:51Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MRO plugin provides a set of {{UBIK}} objects for representing and documenting maintenance, repair and operations work. The MRO features are available in the supported Mobile and {{UBIK WinX}} clients.&lt;br /&gt;
&lt;br /&gt;
This page is the main documentation for the MRO object model and its task types. Common client behaviour, such as status indicators, locking, and the general evaluation of sequential and grouped tasks, is documented in [[MRO Objects (Client)]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO (Plugin)''' || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO Objects (Client)]] || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
&lt;br /&gt;
Objects classified as MRO objects generally provide a technical and organisational status as well as an overall work progress based on their underlying data branch.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&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;
&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;
&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Work Progress|Work Progress]].&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
MRO uses Task Owners, Work Packages, Tasks, and Procedure Workpackages to represent maintenance workflows.&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object with an underlying structure of work to be performed. It can contain other Task Owners or Work Packages. Their technical status, organisational status, and work progress are accumulated and reported to the Task Owner.&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] collects and summarizes Task Owners, other Work Packages, or Tasks. A Work Package can be confirmed when all associated Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
For Work Package presentation and confirmation in the clients, see [[MRO Objects (Client)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports work progress to its owning Work Package. The available task types provide different input, validation, or automatic workflow behaviour.&lt;br /&gt;
&lt;br /&gt;
MRO task values must be validated for work progress to be calculated. A MetaAttribute providing a validation timestamp must therefore be attached to the relevant MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{Attention|A task value property has to use [[Attributes]] so that its value can be validated. Otherwise, work progress cannot be calculated.}}&lt;br /&gt;
&lt;br /&gt;
All user-editable MRO task types can be set to ''Not Applicable''. In the clients, a completed user-editable task can be reset by selecting ''Not Applicable'' twice. General client behaviour is documented in [[MRO Objects (Client)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROCEDURE_WORKPACKAGE'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PROCEDURE|Procedure Workpackage]] is a specialized Work Package for structured workflows. Its structure is defined in JSON using a workflow editor and can contain Tasks as well as subordinate Procedure Workpackages. Depending on its state, the corresponding objects are created or updated.&lt;br /&gt;
&lt;br /&gt;
Procedure Workpackages can use [[MRO Objects (Client)#Sequential Task|sequential execution]], [[MRO Objects (Client)#Grouped Task|grouped Tasks]], [[#Switch Start Task|branching]], [[#Calculation Task|calculations]], and references to linked data. Their workflows support online and offline use. Steps that require data exchange wait until connectivity is available.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || 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 Workpackage&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the Procedure Workpackage is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MRO Task Types ==&lt;br /&gt;
&lt;br /&gt;
The following task types are available in MRO. The technical object names are included to make the task types discoverable through the wiki search.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task type !! Technical object name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| [[#Blinding Task|Blinding Task]] || BLINDING_TASK || Documents a blinding or deblinding operation&lt;br /&gt;
|-&lt;br /&gt;
| [[#Calculation Task|Calculation Task]] || CALCULATION_TASK || Evaluates an expression and writes its result to a target property&lt;br /&gt;
|-&lt;br /&gt;
| [[#Check Task|Check Task]] || CHECK_TASK || Confirms a Boolean task using a checkbox&lt;br /&gt;
|-&lt;br /&gt;
| [[#Commissioning Task|Commissioning Task]] || COMMISSIONING_TASK || Represents a task in an MRO commissioning workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Inspection Task|Inspection Task]] || INSPECTION_TASK || Records a Boolean inspection result with configurable labels&lt;br /&gt;
|-&lt;br /&gt;
| [[#Interface Task|Interface Task]] || INTERFACE_TASK || Waits for completion information from another software system&lt;br /&gt;
|-&lt;br /&gt;
| [[#Joint Task|Joint Task]] || JOINT_TASK || Documents the state of a joint location&lt;br /&gt;
|-&lt;br /&gt;
| [[#Measurement Task|Measurement Task]] || MROCLS_MRO_MEASUREMENT_TASK || Records a measured Double value&lt;br /&gt;
|-&lt;br /&gt;
| [[#Numeric Task|Numeric Task]] || NUMERIC_TASK || Records a numeric value and evaluates it against a configured range&lt;br /&gt;
|-&lt;br /&gt;
| [[#Pick List Task|Pick List Task]] || PICKLIST_TASK || Selects one integer value from an instance-specific Active List&lt;br /&gt;
|-&lt;br /&gt;
| [[#Picture Task|Picture Task]] || PICTURE_TASK || Requires at least one child document containing a valid file&lt;br /&gt;
|-&lt;br /&gt;
| [[#Progress Task|Progress Task]] || PROGRESS_TASK || Reports progress between 0% and 100%&lt;br /&gt;
|-&lt;br /&gt;
| [[#Signature Task|Signature Task]] || SIGNATURE_TASK || Captures a handwritten signature&lt;br /&gt;
|-&lt;br /&gt;
| [[#Supervisor Check Task|Supervisor Check Task]] || SUPERVISOR_CHECK_TASK || Applies the four-eyes principle to a [[#Check Task|Check Task]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch End Task|Switch End Task]] || SWITCH_END_TASK || Rejoins the branches of a Procedure workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch Start Task|Switch Start Task]] || SWITCH_START_TASK || Selects a Procedure branch by evaluating a Boolean expression&lt;br /&gt;
|-&lt;br /&gt;
| [[#Text Task|Text Task]] || TEXT_TASK || Records free-form text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the available Procedure variants and their workflow execution, see [[#Procedure Task Variants and Workflow Execution|Procedure Tasks]].}}&lt;br /&gt;
&lt;br /&gt;
=== Blinding Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''BLINDING_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_BLINDINGTASK]]&lt;br /&gt;
&lt;br /&gt;
A Blinding Task documents either a blinding or deblinding operation at a linked blinding location. The configured operation type determines the state that must be reported to complete the task.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| BLINDING_TYPE || Configured operation type: Blinding or DeBlinding&lt;br /&gt;
|-&lt;br /&gt;
| LK_BLINDING_LOCATION || Link to the associated blinding location&lt;br /&gt;
|-&lt;br /&gt;
| LK_PREVIOUS_TASK || Link to the preceding Blinding Task&lt;br /&gt;
|-&lt;br /&gt;
| LOCKED || Prevents the task from being edited&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Reported blinding state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is complete only when '''VALUE''' matches the configured '''BLINDING_TYPE'''.&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CALCULATION_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_CALCULATION_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Calculation Task automatically evaluates a predefined expression on the client and writes the result to a configured property on its owner. No user input is required.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the target property on the owner&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Target type: Undefined = 0, Boolean = 1, Integer = 3, Double = 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is automatically finished after successful evaluation. The clients display an indicator for a successful evaluation or an evaluation error. A Pending state does not receive an additional indicator.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Check Task is a simple Boolean task represented by a checkbox. Clicking the checkbox sets its value and completes the task. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task value and completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Check Task (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable Check Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commissioning Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''COMMISSIONING_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_COMMISSIONINGCHECK]]&lt;br /&gt;
&lt;br /&gt;
A Commissioning Task is a specialized task type used in MRO commissioning workflows.&lt;br /&gt;
&lt;br /&gt;
'''Relevant property'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| NOTAPPLICABLE || {{Boolean}} || Not Applicable state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INSPECTION_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_INSPECTION_TASK]]&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a Boolean inspection result. The client presents a positive and a negative option as well as ''Not Applicable''. Selecting an option completes the task.&lt;br /&gt;
&lt;br /&gt;
The labels for the positive and negative outcomes can be configured. Selecting the negative outcome displays the configured false label.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Selected inspection result&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for the positive outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for the negative outcome&lt;br /&gt;
|}&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 Inspection Task (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished Inspection Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INTERFACE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
&lt;br /&gt;
An Interface Task waits for another software system to provide its completion value. The task is complete when its Boolean '''VALUE''' becomes true. If the client is offline, the task waits until connectivity and synchronization are available again.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion supplied by the external software system&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Joint Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''JOINT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_JOINTTASK]]&lt;br /&gt;
&lt;br /&gt;
A Joint Task documents the state of a linked joint location. The user selects one of the available Joint States.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_JOINT_LOCATION || Link to the associated joint location&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Selected Joint State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The available states are:&lt;br /&gt;
&lt;br /&gt;
* Closed&lt;br /&gt;
* Disconnected&lt;br /&gt;
* Open&lt;br /&gt;
* Planned&lt;br /&gt;
* Reconnected&lt;br /&gt;
* Torqued&lt;br /&gt;
* Undefined&lt;br /&gt;
* Verified&lt;br /&gt;
&lt;br /&gt;
The Joint Task is complete when its state is '''Planned''' or '''Closed'''.&lt;br /&gt;
&lt;br /&gt;
=== Measurement Task ===&lt;br /&gt;
&lt;br /&gt;
Technical classification name: '''MROCLS_MRO_MEASUREMENT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_MEASUREMENT_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Measurement Task records a measured Double value, for example a value read from a pressure gauge. Selecting the displayed value opens an editor. If no value has been entered, the editor initially displays an empty value. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
An optional secondary value indicator can display a previously recorded value. Its behaviour has to be configured separately.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently recorded measurement&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously recorded measurement&lt;br /&gt;
|}&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 recorded value (WinX)&lt;br /&gt;
File:Measurment Task Not Empty UWP.png|Measurement Task with a recorded value (WinX)&lt;br /&gt;
File:Measurment Task Empty Android.jpg|Measurement Task without a recorded value (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''NUMERIC_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_NUMERIC_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a Double value, for example a value read from a temperature sensor. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
The value is compared against a configured acceptable range that cannot be edited on the client. A value outside the range produces visual feedback and sets the [[MRO Objects (Client)#Technical Status|technical status]] to indicate an issue. An invalid configured range, such as a minimum greater than the maximum, also produces an issue when a value is entered.&lt;br /&gt;
&lt;br /&gt;
A value unit can be configured for an individual task. When present, it overrides the standard unit configured on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Instance-specific value unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICKLIST_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_PICK_LIST_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Pick List Task allows the user to select one value from an [[UBIK Active Lists|Active List]] configured on the task instance. It behaves similarly to a standard Integer Task with a Selective List, but the selectable values are supplied by the Active List rather than being defined globally.&lt;br /&gt;
&lt;br /&gt;
Every list item has an Integer value. Selecting an item or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Value of the selected Active List item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_PICTURE_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Picture Task is a Boolean task that can only be finished when it has at least one child document containing a valid file. Multiple child documents can be attached. Although pictures are the most common files, the child document can contain another file type.&lt;br /&gt;
&lt;br /&gt;
The clients display a file or photo button next to the task checkbox. The task cannot be completed through the checkbox until the file requirement is satisfied. Selecting ''Not Applicable'' is always possible and bypasses the child-document requirement.&lt;br /&gt;
&lt;br /&gt;
When the user attempts to finish the task while online, the client may first synchronize the task's child objects and download the files of its child documents. During synchronization, the checkbox is replaced by a wait indicator.&lt;br /&gt;
&lt;br /&gt;
* If no child document or no local file is available, the task remains unfinished and the user is informed.&lt;br /&gt;
* If at least one child document with a valid local file is available, the task is finished and the file or photo button is disabled.&lt;br /&gt;
&lt;br /&gt;
Child-count information can be configured but is not required. WinX can display the child documents in an expander. This is not shown by default on Mobile due to the available screen size, but it can be customized using [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|Show NextLevel Children/Documents]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Progress Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROGRESS_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_PROGRESS_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Progress Task reports progress between 0% and 100%. The reported value contributes to the progress of the owning Work Package. Values below 100% represent partial progress; the task is finished only when the reported progress reaches 100%. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently reported progress&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously reported progress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] is available for Progress Tasks.{{Version/WinXSince|2.5.4}}&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 reported progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with current and previous progress (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SIGNATURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SIGNATURE_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Signature Task is completed by capturing a handwritten signature. Selecting the signature editor opens an in-app dialog in which the user can sign. Confirming the signature saves it and automatically completes the task.&lt;br /&gt;
&lt;br /&gt;
When signing while online, the server resolves and displays the signee and generates the validation timestamp. When signing offline, the signee is resolved and displayed once the client is online again. If the complete signee or validation timestamp cannot be displayed in the editor field, selecting the field opens a popup with the complete information.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Signature || Captured signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Module|MRO (Plugin)]]&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task {{Version/XamarinSince|4.8}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_SUPERVISOR_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task applies the four-eyes principle to a Boolean [[#Check Task|Check Task]] on one device. The worker hands the device to a supervisor. The supervisor scans an NFC tag and enters the supervisor PIN. After successful authentication, the checkbox is enabled and must still be selected to finish the task.&lt;br /&gt;
&lt;br /&gt;
Selecting ''Not Applicable'' does not require supervisor authentication.&lt;br /&gt;
&lt;br /&gt;
Successful supervisor authentication removes only the supervisor-related lock. The task can remain locked for another reason, such as sequential dependencies or user rights. If an incorrect PIN is entered three times, authentication is cancelled and the NFC tag has to be scanned again. A setting controls [[RFID tags#Choose which information to use from a tag|which tag information is used]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || [[#Check Task|Check Task]] completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Authenticated supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Required supervisor permission&lt;br /&gt;
|}&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 Check Task before verification&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor PIN entry&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Check Task after verification&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_END_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SWITCH_END_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Switch End Task marks the point at which the two branches created by a [[#Switch Start Task|Switch Start Task]] merge again. It is linked to exactly one corresponding [[#Switch Start Task|Switch Start Task]]. It is not shown to the user and completes automatically after the selected branch has finished, allowing the common Procedure workflow to continue.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to the corresponding [[#Switch Start Task|Switch Start Task]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_START_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SWITCH_START_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task is a sequential workflow-control task used in a Procedure Workpackage. It automatically evaluates a Boolean expression on the client and selects either the true or false branch. Each branch represents a different path of Tasks and must lead to a corresponding [[#Switch End Task|Switch End Task]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the Task or Task Owner that starts the true branch&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to the Task or Task Owner that starts the false branch&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || Display string for a true result&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || Display string for a false result&lt;br /&gt;
|-&lt;br /&gt;
| EVALUATION_RESULT || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After evaluation, only the selected branch is executed. The other branch remains hidden and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''TEXT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_TEXT_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Text Task allows the user to enter free-form text. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Supervisor Base Type {{Version/XamarinSince|4.8}} ==&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_SUPERVISOR_TASK]]&lt;br /&gt;
&lt;br /&gt;
Supervisor Task is a base type that provides supervisor authentication behaviour. It is not used as a standalone user task. The concrete task type using this behaviour is [[#Supervisor Check Task|Supervisor Check Task]].&lt;br /&gt;
&lt;br /&gt;
== Procedure Task Variants and Workflow Execution {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ==&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of base task types and their task-specific behaviour, see [[#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
Procedure variants are specialized versions of task types for use within Procedure Workpackages. They retain the behaviour of their corresponding task type and additionally implement the [[MROCLS_SEQUENTIALTASK|Sequential Task]] and [[MROCLS_GROUPEDTASK|Grouped Task]] classifications.&lt;br /&gt;
&lt;br /&gt;
Procedure variants are available for:&lt;br /&gt;
&lt;br /&gt;
* [[#Calculation Task|Calculation Task]]&lt;br /&gt;
* [[#Check Task|Check Task]]&lt;br /&gt;
* [[#Inspection Task|Inspection Task]]&lt;br /&gt;
* [[#Interface Task|Interface Task]]&lt;br /&gt;
* [[#Numeric Task|Numeric Task]]&lt;br /&gt;
* [[#Pick List Task|Pick List Task]]&lt;br /&gt;
* [[#Picture Task|Picture Task]]&lt;br /&gt;
* [[#Signature Task|Signature Task]]&lt;br /&gt;
* [[#Supervisor Check Task|Supervisor Check Task]]&lt;br /&gt;
* [[#Text Task|Text Task]]&lt;br /&gt;
&lt;br /&gt;
[[#Switch Start Task|Switch Start Tasks]], [[#Switch End Task|Switch End Tasks]], and [[#Calculation Task|Calculation Tasks]] provide automatic workflow-control behaviour in a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
For automatic [[#Calculation Task|Calculation Tasks]] and [[#Switch Start Task|Switch Start Tasks]], the clients display an evaluation indicator:&lt;br /&gt;
&lt;br /&gt;
* '''Finished:''' The Task was automatically evaluated successfully.&lt;br /&gt;
* '''Error:''' The Task was evaluated but resulted in an error.&lt;br /&gt;
* '''Pending:''' The Task has not yet been evaluated. No additional indicator is displayed for this state.&lt;br /&gt;
&lt;br /&gt;
When a predecessor [[#Switch Start Task|Switch Start Task]] has not yet finished, its follow-up Procedure Tasks are hidden because the relevant branch is not yet known. After evaluation, the selected branch becomes visible. The other branch remains hidden, is not executed, and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
For example, several predecessor [[#Numeric Task|Numeric Tasks]] can record temperatures from different parts of an equipment. A subsequent [[#Calculation Task|Calculation Task]] can calculate their average. A [[#Switch Start Task|Switch Start Task]] can then select a branch based on whether the average exceeds a configured temperature. One branch can contain a Task for activating a cooling mechanism, while the other branch can lead directly to the [[#Switch End Task|Switch End Task]] or contain further [[#Switch Start Task|Switch Tasks]].&lt;br /&gt;
&lt;br /&gt;
Procedure Tasks are intended to execute automatically when their predecessors are finished. However, the completion of the predecessor has to be triggered by a user. If a predecessor becomes finished only because of a server update, the follow-up Procedure workflow is not triggered. This prevents a workflow from executing in the name of users who did not initiate or observe the completion.&lt;br /&gt;
&lt;br /&gt;
The general online and offline evaluation rules for sequential and grouped Tasks are documented in [[MRO Objects (Client)#Sequential Task|Sequential Task]] and [[MRO Objects (Client)#Grouped Task|Grouped Task]].&lt;br /&gt;
&lt;br /&gt;
== Supporting File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure JSON File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_JSON'''&lt;br /&gt;
&lt;br /&gt;
This File Document stores the JSON definition of a [[#Procedure Workpackage|Procedure Workpackage]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || Link to the associated [[#Procedure Workpackage|Procedure Workpackage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
This is a dedicated File Document linked to a [[#Picture Task|Picture Task]]. A [[#Picture Task|Picture Task]] can also use another child-document type, provided that the child document contains a valid file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || Link to the associated [[#Picture Task|Picture Task]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[MRO Objects (Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_START_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICTURE_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_BLINDINGTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_COMMISSIONINGCHECK]] (Classification)&lt;br /&gt;
* [[MROCLS_JOINTTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SIGNATURE_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_TEXT_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=30451</id>
		<title>MRO (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=30451"/>
				<updated>2026-08-17T14:21:47Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MRO plugin provides a set of {{UBIK}} objects for representing and documenting maintenance, repair and operations work. The MRO features are available in the supported Mobile and {{UBIK WinX}} clients.&lt;br /&gt;
&lt;br /&gt;
This page is the main documentation for the MRO object model and its task types. Common client behaviour, such as status indicators, locking, and the general evaluation of sequential and grouped tasks, is documented in [[MRO Objects (Client)]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO (Plugin)''' || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO Objects (Client)]] || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
&lt;br /&gt;
Objects classified as MRO objects generally provide a technical and organisational status as well as an overall work progress based on their underlying data branch.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&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;
&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;
&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Work Progress|Work Progress]].&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
MRO uses Task Owners, Work Packages, Tasks, and Procedure Workpackages to represent maintenance workflows.&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object with an underlying structure of work to be performed. It can contain other Task Owners or Work Packages. Their technical status, organisational status, and work progress are accumulated and reported to the Task Owner.&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] collects and summarizes Task Owners, other Work Packages, or Tasks. A Work Package can be confirmed when all associated Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
For Work Package presentation and confirmation in the clients, see [[MRO Objects (Client)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports work progress to its owning Work Package. The available task types provide different input, validation, or automatic workflow behaviour.&lt;br /&gt;
&lt;br /&gt;
MRO task values must be validated for work progress to be calculated. A MetaAttribute providing a validation timestamp must therefore be attached to the relevant MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{Attention|A task value property has to use [[Attributes]] so that its value can be validated. Otherwise, work progress cannot be calculated.}}&lt;br /&gt;
&lt;br /&gt;
All user-editable MRO task types can be set to ''Not Applicable''. In the clients, a completed user-editable task can be reset by selecting ''Not Applicable'' twice. General client behaviour is documented in [[MRO Objects (Client)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROCEDURE_WORKPACKAGE'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PROCEDURE|Procedure Workpackage]] is a specialized Work Package for structured workflows. Its structure is defined in JSON using a workflow editor and can contain Tasks as well as subordinate Procedure Workpackages. Depending on its state, the corresponding objects are created or updated.&lt;br /&gt;
&lt;br /&gt;
Procedure Workpackages can use [[MRO Objects (Client)#Sequential Task|sequential execution]], [[MRO Objects (Client)#Grouped Task|grouped Tasks]], [[#Switch Start Task|branching]], [[#Calculation Task|calculations]], and references to linked data. Their workflows support online and offline use. Steps that require data exchange wait until connectivity is available.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || 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 Workpackage&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the Procedure Workpackage is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MRO Task Types ==&lt;br /&gt;
&lt;br /&gt;
The following task types are available in MRO. The technical object names are included to make the task types discoverable through the wiki search.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task type !! Technical object name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| [[#Blinding Task|Blinding Task]] || BLINDING_TASK || Documents a blinding or deblinding operation&lt;br /&gt;
|-&lt;br /&gt;
| [[#Calculation Task|Calculation Task]] || CALCULATION_TASK || Evaluates an expression and writes its result to a target property&lt;br /&gt;
|-&lt;br /&gt;
| [[#Check Task|Check Task]] || CHECK_TASK || Confirms a Boolean task using a checkbox&lt;br /&gt;
|-&lt;br /&gt;
| [[#Commissioning Task|Commissioning Task]] || COMMISSIONING_TASK || Represents a task in an MRO commissioning workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Inspection Task|Inspection Task]] || INSPECTION_TASK || Records a Boolean inspection result with configurable labels&lt;br /&gt;
|-&lt;br /&gt;
| [[#Interface Task|Interface Task]] || INTERFACE_TASK || Waits for completion information from another software system&lt;br /&gt;
|-&lt;br /&gt;
| [[#Joint Task|Joint Task]] || JOINT_TASK || Documents the state of a joint location&lt;br /&gt;
|-&lt;br /&gt;
| [[#Measurement Task|Measurement Task]] || MROCLS_MRO_MEASUREMENT_TASK || Records a measured Double value&lt;br /&gt;
|-&lt;br /&gt;
| [[#Numeric Task|Numeric Task]] || NUMERIC_TASK || Records a numeric value and evaluates it against a configured range&lt;br /&gt;
|-&lt;br /&gt;
| [[#Pick List Task|Pick List Task]] || PICKLIST_TASK || Selects one integer value from an instance-specific Active List&lt;br /&gt;
|-&lt;br /&gt;
| [[#Picture Task|Picture Task]] || PICTURE_TASK || Requires at least one child document containing a valid file&lt;br /&gt;
|-&lt;br /&gt;
| [[#Progress Task|Progress Task]] || PROGRESS_TASK || Reports progress between 0% and 100%&lt;br /&gt;
|-&lt;br /&gt;
| [[#Signature Task|Signature Task]] || SIGNATURE_TASK || Captures a handwritten signature&lt;br /&gt;
|-&lt;br /&gt;
| [[#Supervisor Check Task|Supervisor Check Task]] || SUPERVISOR_CHECK_TASK || Applies the four-eyes principle to a [[#Check Task|Check Task]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch End Task|Switch End Task]] || SWITCH_END_TASK || Rejoins the branches of a Procedure workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch Start Task|Switch Start Task]] || SWITCH_START_TASK || Selects a Procedure branch by evaluating a Boolean expression&lt;br /&gt;
|-&lt;br /&gt;
| [[#Text Task|Text Task]] || TEXT_TASK || Records free-form text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the available Procedure variants and their workflow execution, see [[#Procedure Task Variants and Workflow Execution|Procedure Tasks]].}}&lt;br /&gt;
&lt;br /&gt;
=== Blinding Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''BLINDING_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_BLINDINGTASK]]&lt;br /&gt;
&lt;br /&gt;
A Blinding Task documents either a blinding or deblinding operation at a linked blinding location. The configured operation type determines the state that must be reported to complete the task.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| BLINDING_TYPE || Configured operation type: Blinding or DeBlinding&lt;br /&gt;
|-&lt;br /&gt;
| LK_BLINDING_LOCATION || Link to the associated blinding location&lt;br /&gt;
|-&lt;br /&gt;
| LK_PREVIOUS_TASK || Link to the preceding Blinding Task&lt;br /&gt;
|-&lt;br /&gt;
| LOCKED || Prevents the task from being edited&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Reported blinding state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is complete only when '''VALUE''' matches the configured '''BLINDING_TYPE'''.&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CALCULATION_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_CALCULATION_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Calculation Task automatically evaluates a predefined expression on the client and writes the result to a configured property on its owner. No user input is required.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the target property on the owner&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Target type: Undefined = 0, Boolean = 1, Integer = 3, Double = 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is automatically finished after successful evaluation. The clients display an indicator for a successful evaluation or an evaluation error. A Pending state does not receive an additional indicator.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Check Task is a simple Boolean task represented by a checkbox. Clicking the checkbox sets its value and completes the task. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task value and completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Check Task (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable Check Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commissioning Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''COMMISSIONING_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_COMMISSIONINGCHECK]]&lt;br /&gt;
&lt;br /&gt;
A Commissioning Task is a specialized task type used in MRO commissioning workflows.&lt;br /&gt;
&lt;br /&gt;
'''Relevant property'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| NOTAPPLICABLE || {{Boolean}} || Not Applicable state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INSPECTION_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_INSPECTION_TASK]]&lt;br /&gt;
&lt;br /&gt;
An Inspection Task captures a Boolean inspection result. The client presents a positive and a negative option as well as ''Not Applicable''. Selecting an option completes the task.&lt;br /&gt;
&lt;br /&gt;
The labels for the positive and negative outcomes can be configured. Selecting the negative outcome displays the configured false label.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Selected inspection result&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for the positive outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for the negative outcome&lt;br /&gt;
|}&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 Inspection Task (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished Inspection Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INTERFACE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
&lt;br /&gt;
An Interface Task waits for another software system to provide its completion value. The task is complete when its Boolean '''VALUE''' becomes true. If the client is offline, the task waits until connectivity and synchronization are available again.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion supplied by the external software system&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Joint Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''JOINT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_JOINTTASK]]&lt;br /&gt;
&lt;br /&gt;
A Joint Task documents the state of a linked joint location. The user selects one of the available Joint States.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_JOINT_LOCATION || Link to the associated joint location&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Selected Joint State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The available states are:&lt;br /&gt;
&lt;br /&gt;
* Closed&lt;br /&gt;
* Disconnected&lt;br /&gt;
* Open&lt;br /&gt;
* Planned&lt;br /&gt;
* Reconnected&lt;br /&gt;
* Torqued&lt;br /&gt;
* Undefined&lt;br /&gt;
* Verified&lt;br /&gt;
&lt;br /&gt;
The Joint Task is complete when its state is '''Planned''' or '''Closed'''.&lt;br /&gt;
&lt;br /&gt;
=== Measurement Task ===&lt;br /&gt;
&lt;br /&gt;
Technical classification name: '''MROCLS_MRO_MEASUREMENT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_MEASUREMENT_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Measurement Task records a measured Double value, for example a value read from a pressure gauge. Selecting the displayed value opens an editor. If no value has been entered, the editor initially displays an empty value. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
An optional secondary value indicator can display a previously recorded value. Its behaviour has to be configured separately.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently recorded measurement&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously recorded measurement&lt;br /&gt;
|}&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 recorded value (WinX)&lt;br /&gt;
File:Measurment Task Not Empty UWP.png|Measurement Task with a recorded value (WinX)&lt;br /&gt;
File:Measurment Task Empty Android.jpg|Measurement Task without a recorded value (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''NUMERIC_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_NUMERIC_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Numeric Task records a Double value, for example a value read from a temperature sensor. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
The value is compared against a configured acceptable range that cannot be edited on the client. A value outside the range produces visual feedback and sets the [[MRO Objects (Client)#Technical Status|technical status]] to indicate an issue. An invalid configured range, such as a minimum greater than the maximum, also produces an issue when a value is entered.&lt;br /&gt;
&lt;br /&gt;
A value unit can be configured for an individual task. When present, it overrides the standard unit configured on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Instance-specific value unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICKLIST_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_PICK_LIST_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Pick List Task allows the user to select one value from an [[UBIK Active Lists|Active List]] configured on the task instance. It behaves similarly to a standard Integer Task with a Selective List, but the selectable values are supplied by the Active List rather than being defined globally.&lt;br /&gt;
&lt;br /&gt;
Every list item has an Integer value. Selecting an item or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Value of the selected Active List item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_PICTURE_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Picture Task is a Boolean task that can only be finished when it has at least one child document containing a valid file. Multiple child documents can be attached. Although pictures are the most common files, the child document can contain another file type.&lt;br /&gt;
&lt;br /&gt;
The clients display a file or photo button next to the task checkbox. The task cannot be completed through the checkbox until the file requirement is satisfied. Selecting ''Not Applicable'' is always possible and bypasses the child-document requirement.&lt;br /&gt;
&lt;br /&gt;
When the user attempts to finish the task while online, the client may first synchronize the task's child objects and download the files of its child documents. During synchronization, the checkbox is replaced by a wait indicator.&lt;br /&gt;
&lt;br /&gt;
* If no child document or no local file is available, the task remains unfinished and the user is informed.&lt;br /&gt;
* If at least one child document with a valid local file is available, the task is finished and the file or photo button is disabled.&lt;br /&gt;
&lt;br /&gt;
Child-count information can be configured but is not required. WinX can display the child documents in an expander. This is not shown by default on Mobile due to the available screen size, but it can be customized using [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|Show NextLevel Children/Documents]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Progress Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROGRESS_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_PROGRESS_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Progress Task reports progress between 0% and 100%. The reported value contributes to the progress of the owning Work Package. Values below 100% represent partial progress; the task is finished only when the reported progress reaches 100%. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently reported progress&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously reported progress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] is available for Progress Tasks.{{Version/WinXSince|2.5.4}}&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 reported progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with current and previous progress (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SIGNATURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SIGNATURE_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Signature Task is completed by capturing a handwritten signature. Selecting the signature editor opens an in-app dialog in which the user can sign. Confirming the signature saves it and automatically completes the task.&lt;br /&gt;
&lt;br /&gt;
When signing while online, the server resolves and displays the signee and generates the validation timestamp. When signing offline, the signee is resolved and displayed once the client is online again. If the complete signee or validation timestamp cannot be displayed in the editor field, selecting the field opens a popup with the complete information.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Captured signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task {{Version/XamarinSince|4.8}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_SUPERVISOR_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task applies the four-eyes principle to a Boolean [[#Check Task|Check Task]] on one device. The worker hands the device to a supervisor. The supervisor scans an NFC tag and enters the supervisor PIN. After successful authentication, the checkbox is enabled and must still be selected to finish the task.&lt;br /&gt;
&lt;br /&gt;
Selecting ''Not Applicable'' does not require supervisor authentication.&lt;br /&gt;
&lt;br /&gt;
Successful supervisor authentication removes only the supervisor-related lock. The task can remain locked for another reason, such as sequential dependencies or user rights. If an incorrect PIN is entered three times, authentication is cancelled and the NFC tag has to be scanned again. A setting controls [[RFID tags#Choose which information to use from a tag|which tag information is used]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || [[#Check Task|Check Task]] completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Authenticated supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Required supervisor permission&lt;br /&gt;
|}&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 Check Task before verification&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor PIN entry&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Check Task after verification&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_END_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SWITCH_END_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Switch End Task marks the point at which the two branches created by a [[#Switch Start Task|Switch Start Task]] merge again. It is linked to exactly one corresponding [[#Switch Start Task|Switch Start Task]]. It is not shown to the user and completes automatically after the selected branch has finished, allowing the common Procedure workflow to continue.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to the corresponding [[#Switch Start Task|Switch Start Task]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_START_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SWITCH_START_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Switch Start Task is a sequential workflow-control task used in a Procedure Workpackage. It automatically evaluates a Boolean expression on the client and selects either the true or false branch. Each branch represents a different path of Tasks and must lead to a corresponding [[#Switch End Task|Switch End Task]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the Task or Task Owner that starts the true branch&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to the Task or Task Owner that starts the false branch&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || Display string for a true result&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || Display string for a false result&lt;br /&gt;
|-&lt;br /&gt;
| EVALUATION_RESULT || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After evaluation, only the selected branch is executed. The other branch remains hidden and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''TEXT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_TEXT_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Text Task allows the user to enter free-form text. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Supervisor Base Type {{Version/XamarinSince|4.8}} ==&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_SUPERVISOR_TASK]]&lt;br /&gt;
&lt;br /&gt;
Supervisor Task is a base type that provides supervisor authentication behaviour. It is not used as a standalone user task. The concrete task type using this behaviour is [[#Supervisor Check Task|Supervisor Check Task]].&lt;br /&gt;
&lt;br /&gt;
== Procedure Task Variants and Workflow Execution {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ==&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of base task types and their task-specific behaviour, see [[#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
Procedure variants are specialized versions of task types for use within Procedure Workpackages. They retain the behaviour of their corresponding task type and additionally implement the [[MROCLS_SEQUENTIALTASK|Sequential Task]] and [[MROCLS_GROUPEDTASK|Grouped Task]] classifications.&lt;br /&gt;
&lt;br /&gt;
Procedure variants are available for:&lt;br /&gt;
&lt;br /&gt;
* [[#Calculation Task|Calculation Task]]&lt;br /&gt;
* [[#Check Task|Check Task]]&lt;br /&gt;
* [[#Inspection Task|Inspection Task]]&lt;br /&gt;
* [[#Interface Task|Interface Task]]&lt;br /&gt;
* [[#Numeric Task|Numeric Task]]&lt;br /&gt;
* [[#Pick List Task|Pick List Task]]&lt;br /&gt;
* [[#Picture Task|Picture Task]]&lt;br /&gt;
* [[#Signature Task|Signature Task]]&lt;br /&gt;
* [[#Supervisor Check Task|Supervisor Check Task]]&lt;br /&gt;
* [[#Text Task|Text Task]]&lt;br /&gt;
&lt;br /&gt;
[[#Switch Start Task|Switch Start Tasks]], [[#Switch End Task|Switch End Tasks]], and [[#Calculation Task|Calculation Tasks]] provide automatic workflow-control behaviour in a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
For automatic [[#Calculation Task|Calculation Tasks]] and [[#Switch Start Task|Switch Start Tasks]], the clients display an evaluation indicator:&lt;br /&gt;
&lt;br /&gt;
* '''Finished:''' The Task was automatically evaluated successfully.&lt;br /&gt;
* '''Error:''' The Task was evaluated but resulted in an error.&lt;br /&gt;
* '''Pending:''' The Task has not yet been evaluated. No additional indicator is displayed for this state.&lt;br /&gt;
&lt;br /&gt;
When a predecessor [[#Switch Start Task|Switch Start Task]] has not yet finished, its follow-up Procedure Tasks are hidden because the relevant branch is not yet known. After evaluation, the selected branch becomes visible. The other branch remains hidden, is not executed, and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
For example, several predecessor [[#Numeric Task|Numeric Tasks]] can record temperatures from different parts of an equipment. A subsequent [[#Calculation Task|Calculation Task]] can calculate their average. A [[#Switch Start Task|Switch Start Task]] can then select a branch based on whether the average exceeds a configured temperature. One branch can contain a Task for activating a cooling mechanism, while the other branch can lead directly to the [[#Switch End Task|Switch End Task]] or contain further [[#Switch Start Task|Switch Tasks]].&lt;br /&gt;
&lt;br /&gt;
Procedure Tasks are intended to execute automatically when their predecessors are finished. However, the completion of the predecessor has to be triggered by a user. If a predecessor becomes finished only because of a server update, the follow-up Procedure workflow is not triggered. This prevents a workflow from executing in the name of users who did not initiate or observe the completion.&lt;br /&gt;
&lt;br /&gt;
The general online and offline evaluation rules for sequential and grouped Tasks are documented in [[MRO Objects (Client)#Sequential Task|Sequential Task]] and [[MRO Objects (Client)#Grouped Task|Grouped Task]].&lt;br /&gt;
&lt;br /&gt;
== Supporting File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure JSON File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_JSON'''&lt;br /&gt;
&lt;br /&gt;
This File Document stores the JSON definition of a [[#Procedure Workpackage|Procedure Workpackage]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || Link to the associated [[#Procedure Workpackage|Procedure Workpackage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
This is a dedicated File Document linked to a [[#Picture Task|Picture Task]]. A [[#Picture Task|Picture Task]] can also use another child-document type, provided that the child document contains a valid file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || Link to the associated [[#Picture Task|Picture Task]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[MRO Objects (Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_START_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICTURE_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_BLINDINGTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_COMMISSIONINGCHECK]] (Classification)&lt;br /&gt;
* [[MROCLS_JOINTTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SIGNATURE_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_TEXT_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=30450</id>
		<title>MRO (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=30450"/>
				<updated>2026-08-17T14:15:58Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MRO plugin provides a set of {{UBIK}} objects for representing and documenting maintenance, repair and operations work. The MRO features are available in the supported Mobile and {{UBIK WinX}} clients.&lt;br /&gt;
&lt;br /&gt;
This page is the main documentation for the MRO object model and its task types. Common client behaviour, such as status indicators, locking, and the general evaluation of sequential and grouped tasks, is documented in [[MRO Objects (Client)]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO (Plugin)''' || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO Objects (Client)]] || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
&lt;br /&gt;
Objects classified as MRO objects generally provide a technical and organisational status as well as an overall work progress based on their underlying data branch.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&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;
&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;
&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Work Progress|Work Progress]].&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
MRO uses Task Owners, Work Packages, Tasks, and Procedure Workpackages to represent maintenance workflows.&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object with an underlying structure of work to be performed. It can contain other Task Owners or Work Packages. Their technical status, organisational status, and work progress are accumulated and reported to the Task Owner.&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] collects and summarizes Task Owners, other Work Packages, or Tasks. A Work Package can be confirmed when all associated Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
For Work Package presentation and confirmation in the clients, see [[MRO Objects (Client)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports work progress to its owning Work Package. The available task types provide different input, validation, or automatic workflow behaviour.&lt;br /&gt;
&lt;br /&gt;
MRO task values must be validated for work progress to be calculated. A MetaAttribute providing a validation timestamp must therefore be attached to the relevant MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{Attention|A task value property has to use [[Attributes]] so that its value can be validated. Otherwise, work progress cannot be calculated.}}&lt;br /&gt;
&lt;br /&gt;
All user-editable MRO task types can be set to ''Not Applicable''. In the clients, a completed user-editable task can be reset by selecting ''Not Applicable'' twice. General client behaviour is documented in [[MRO Objects (Client)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROCEDURE_WORKPACKAGE'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PROCEDURE|Procedure Workpackage]] is a specialized Work Package for structured workflows. Its structure is defined in JSON using a workflow editor and can contain Tasks as well as subordinate Procedure Workpackages. Depending on its state, the corresponding objects are created or updated.&lt;br /&gt;
&lt;br /&gt;
Procedure Workpackages can use [[MRO Objects (Client)#Sequential Task|sequential execution]], [[MRO Objects (Client)#Grouped Task|grouped Tasks]], [[#Switch Start Task|branching]], [[#Calculation Task|calculations]], and references to linked data. Their workflows support online and offline use. Steps that require data exchange wait until connectivity is available.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || 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 Workpackage&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the Procedure Workpackage is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MRO Task Types ==&lt;br /&gt;
&lt;br /&gt;
The following task types are available in MRO. The technical object names are included to make the task types discoverable through the wiki search.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task type !! Technical object name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| [[#Blinding Task|Blinding Task]] || BLINDING_TASK || Documents a blinding or deblinding operation&lt;br /&gt;
|-&lt;br /&gt;
| [[#Calculation Task|Calculation Task]] || CALCULATION_TASK || Evaluates an expression and writes its result to a target property&lt;br /&gt;
|-&lt;br /&gt;
| [[#Check Task|Check Task]] || CHECK_TASK || Confirms a Boolean task using a checkbox&lt;br /&gt;
|-&lt;br /&gt;
| [[#Commissioning Task|Commissioning Task]] || COMMISSIONING_TASK || Represents a task in an MRO commissioning workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Inspection Task|Inspection Task]] || INSPECTION_TASK || Records a Boolean inspection result with configurable labels&lt;br /&gt;
|-&lt;br /&gt;
| [[#Interface Task|Interface Task]] || INTERFACE_TASK || Waits for completion information from another software system&lt;br /&gt;
|-&lt;br /&gt;
| [[#Joint Task|Joint Task]] || JOINT_TASK || Documents the state of a joint location&lt;br /&gt;
|-&lt;br /&gt;
| [[#Measurement Task|Measurement Task]] || MROCLS_MRO_MEASUREMENT_TASK || Records a measured Double value&lt;br /&gt;
|-&lt;br /&gt;
| [[#Numeric Task|Numeric Task]] || NUMERIC_TASK || Records a numeric value and evaluates it against a configured range&lt;br /&gt;
|-&lt;br /&gt;
| [[#Pick List Task|Pick List Task]] || PICKLIST_TASK || Selects one integer value from an instance-specific Active List&lt;br /&gt;
|-&lt;br /&gt;
| [[#Picture Task|Picture Task]] || PICTURE_TASK || Requires at least one child document containing a valid file&lt;br /&gt;
|-&lt;br /&gt;
| [[#Progress Task|Progress Task]] || PROGRESS_TASK || Reports progress between 0% and 100%&lt;br /&gt;
|-&lt;br /&gt;
| [[#Signature Task|Signature Task]] || SIGNATURE_TASK || Captures a handwritten signature&lt;br /&gt;
|-&lt;br /&gt;
| [[#Supervisor Check Task|Supervisor Check Task]] || SUPERVISOR_CHECK_TASK || Applies the four-eyes principle to a [[#Check Task|Check Task]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch End Task|Switch End Task]] || SWITCH_END_TASK || Rejoins the branches of a Procedure workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch Start Task|Switch Start Task]] || SWITCH_START_TASK || Selects a Procedure branch by evaluating a Boolean expression&lt;br /&gt;
|-&lt;br /&gt;
| [[#Text Task|Text Task]] || TEXT_TASK || Records free-form text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the available Procedure variants and their workflow execution, see [[#Procedure Task Variants and Workflow Execution|Procedure Tasks]].}}&lt;br /&gt;
&lt;br /&gt;
=== Blinding Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''BLINDING_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_BLINDINGTASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_BLINDINGTASK|Blinding Task]] documents either a blinding or deblinding operation at a linked blinding location. The configured operation type determines the state that must be reported to complete the task.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| BLINDING_TYPE || Configured operation type: Blinding or DeBlinding&lt;br /&gt;
|-&lt;br /&gt;
| LK_BLINDING_LOCATION || Link to the associated blinding location&lt;br /&gt;
|-&lt;br /&gt;
| LK_PREVIOUS_TASK || Link to the preceding [[#Blinding Task|Blinding Task]]&lt;br /&gt;
|-&lt;br /&gt;
| LOCKED || Prevents the task from being edited&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Reported blinding state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is complete only when '''VALUE''' matches the configured '''BLINDING_TYPE'''.&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CALCULATION_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_CALCULATION_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_CALCULATION_TASK|Calculation Task]] automatically evaluates a predefined expression on the client and writes the result to a configured property on its owner. No user input is required.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the target property on the owner&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Target type: Undefined = 0, Boolean = 1, Integer = 3, Double = 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is automatically finished after successful evaluation. The clients display an indicator for a successful evaluation or an evaluation error. A Pending state does not receive an additional indicator.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_CHECK_TASK|Check Task]] is a simple Boolean task represented by a checkbox. Clicking the checkbox sets its value and completes the task. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task value and completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Check Task (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable Check Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commissioning Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''COMMISSIONING_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_COMMISSIONINGCHECK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_COMMISSIONINGCHECK|Commissioning Task]] is a specialized task type used in MRO commissioning workflows.&lt;br /&gt;
&lt;br /&gt;
'''Relevant property'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| NOTAPPLICABLE || {{Boolean}} || Not Applicable state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INSPECTION_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_INSPECTION_TASK]]&lt;br /&gt;
&lt;br /&gt;
An [[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] captures a Boolean inspection result. The client presents a positive and a negative option as well as ''Not Applicable''. Selecting an option completes the task.&lt;br /&gt;
&lt;br /&gt;
The labels for the positive and negative outcomes can be configured. Selecting the negative outcome displays the configured false label.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Selected inspection result&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for the positive outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for the negative outcome&lt;br /&gt;
|}&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 Inspection Task (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished Inspection Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INTERFACE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
&lt;br /&gt;
An [[MROCLS_MRO_CHECK_TASK|Interface Task]] waits for another software system to provide its completion value. The task is complete when its Boolean '''VALUE''' becomes true. If the client is offline, the task waits until connectivity and synchronization are available again.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion supplied by the external software system&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Joint Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''JOINT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_JOINTTASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_JOINTTASK|Joint Task]] documents the state of a linked joint location. The user selects one of the available Joint States.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_JOINT_LOCATION || Link to the associated joint location&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Selected Joint State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The available states are:&lt;br /&gt;
&lt;br /&gt;
* Closed&lt;br /&gt;
* Disconnected&lt;br /&gt;
* Open&lt;br /&gt;
* Planned&lt;br /&gt;
* Reconnected&lt;br /&gt;
* Torqued&lt;br /&gt;
* Undefined&lt;br /&gt;
* Verified&lt;br /&gt;
&lt;br /&gt;
The [[#Joint Task|Joint Task]] is complete when its state is '''Planned''' or '''Closed'''.&lt;br /&gt;
&lt;br /&gt;
=== Measurement Task ===&lt;br /&gt;
&lt;br /&gt;
Technical classification name: '''MROCLS_MRO_MEASUREMENT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_MEASUREMENT_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] records a measured Double value, for example a value read from a pressure gauge. Selecting the displayed value opens an editor. If no value has been entered, the editor initially displays an empty value. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
An optional secondary value indicator can display a previously recorded value. Its behaviour has to be configured separately.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently recorded measurement&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously recorded measurement&lt;br /&gt;
|}&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 recorded value (WinX)&lt;br /&gt;
File:Measurment Task Not Empty UWP.png|Measurement Task with a recorded value (WinX)&lt;br /&gt;
File:Measurment Task Empty Android.jpg|Measurement Task without a recorded value (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''NUMERIC_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_NUMERIC_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_NUMERIC_TASK|Numeric Task]] records a Double value, for example a value read from a temperature sensor. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
The value is compared against a configured acceptable range that cannot be edited on the client. A value outside the range produces visual feedback and sets the [[MRO Objects (Client)#Technical Status|technical status]] to indicate an issue. An invalid configured range, such as a minimum greater than the maximum, also produces an issue when a value is entered.&lt;br /&gt;
&lt;br /&gt;
A value unit can be configured for an individual task. When present, it overrides the standard unit configured on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Instance-specific value unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICKLIST_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_PICK_LIST_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICK_LIST_TASK|Pick List Task]] allows the user to select one value from an [[UBIK Active Lists|Active List]] configured on the task instance. It behaves similarly to a standard Integer Task with a Selective List, but the selectable values are supplied by the Active List rather than being defined globally.&lt;br /&gt;
&lt;br /&gt;
Every list item has an Integer value. Selecting an item or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Value of the selected Active List item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_PICTURE_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICTURE_TASK|Picture Task]] is a Boolean task that can only be finished when it has at least one child document containing a valid file. Multiple child documents can be attached. Although pictures are the most common files, the child document can contain another file type.&lt;br /&gt;
&lt;br /&gt;
The clients display a file or photo button next to the task checkbox. The task cannot be completed through the checkbox until the file requirement is satisfied. Selecting ''Not Applicable'' is always possible and bypasses the child-document requirement.&lt;br /&gt;
&lt;br /&gt;
When the user attempts to finish the task while online, the client may first synchronize the task's child objects and download the files of its child documents. During synchronization, the checkbox is replaced by a wait indicator.&lt;br /&gt;
&lt;br /&gt;
* If no child document or no local file is available, the task remains unfinished and the user is informed.&lt;br /&gt;
* If at least one child document with a valid local file is available, the task is finished and the file or photo button is disabled.&lt;br /&gt;
&lt;br /&gt;
Child-count information can be configured but is not required. WinX can display the child documents in an expander. This is not shown by default on Mobile due to the available screen size, but it can be customized using [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|Show NextLevel Children/Documents]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Progress Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROGRESS_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_PROGRESS_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_PROGRESS_TASK|Progress Task]] reports progress between 0% and 100%. The reported value contributes to the progress of the owning Work Package. Values below 100% represent partial progress; the task is finished only when the reported progress reaches 100%. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently reported progress&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously reported progress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] is available for [[#Progress Task|Progress Tasks]].{{Version/WinXSince|2.5.4}}&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 reported progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with current and previous progress (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SIGNATURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SIGNATURE_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_SIGNATURE_TASK|Signature Task]] is completed by capturing a handwritten signature. Selecting the signature editor opens an in-app dialog in which the user can sign. Confirming the signature saves it and automatically completes the task.&lt;br /&gt;
&lt;br /&gt;
When signing while online, the server resolves and displays the signee and generates the validation timestamp. When signing offline, the signee is resolved and displayed once the client is online again. If the complete signee or validation timestamp cannot be displayed in the editor field, selecting the field opens a popup with the complete information.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Captured signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task {{Version/XamarinSince|4.8}} ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_SUPERVISOR_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task applies the four-eyes principle to a Boolean [[#Check Task|Check Task]] on one device. The worker hands the device to a supervisor. The supervisor scans an NFC tag and enters the supervisor PIN. After successful authentication, the checkbox is enabled and must still be selected to finish the task.&lt;br /&gt;
&lt;br /&gt;
Selecting ''Not Applicable'' does not require supervisor authentication.&lt;br /&gt;
&lt;br /&gt;
Successful supervisor authentication removes only the supervisor-related lock. The task can remain locked for another reason, such as sequential dependencies or user rights. If an incorrect PIN is entered three times, authentication is cancelled and the NFC tag has to be scanned again. A setting controls [[RFID tags#Choose which information to use from a tag|which tag information is used]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || [[#Check Task|Check Task]] completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Authenticated supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Required supervisor permission&lt;br /&gt;
|}&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 Check Task before verification&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor PIN entry&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Check Task after verification&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_END_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SWITCH_END_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_SWITCH_END_TASK|Switch End Task]] marks the point at which the two branches created by a [[#Switch Start Task|Switch Start Task]] merge again. It is linked to exactly one corresponding [[#Switch Start Task|Switch Start Task]]. It is not shown to the user and completes automatically after the selected branch has finished, allowing the common Procedure workflow to continue.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to the corresponding [[#Switch Start Task|Switch Start Task]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_START_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SWITCH_START_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_SWITCH_START_TASK|Switch Start Task]] is a sequential workflow-control task used in a Procedure Workpackage. It automatically evaluates a Boolean expression on the client and selects either the true or false branch. Each branch represents a different path of Tasks and must lead to a corresponding [[#Switch End Task|Switch End Task]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the Task or Task Owner that starts the true branch&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to the Task or Task Owner that starts the false branch&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || Display string for a true result&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || Display string for a false result&lt;br /&gt;
|-&lt;br /&gt;
| EVALUATION_RESULT || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After evaluation, only the selected branch is executed. The other branch remains hidden and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''TEXT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_TEXT_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_TEXT_TASK|Text Task]] allows the user to enter free-form text. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Supervisor Base Type {{Version/XamarinSince|4.8}} ==&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_SUPERVISOR_TASK]]&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_SUPERVISOR_TASK|Supervisor Task]] is a base type that provides supervisor authentication behaviour. It is not used as a standalone user task. The concrete task type using this behaviour is [[#Supervisor Check Task|Supervisor Check Task]].&lt;br /&gt;
&lt;br /&gt;
== Procedure Task Variants and Workflow Execution {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ==&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of base task types and their task-specific behaviour, see [[#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
Procedure variants are specialized versions of task types for use within Procedure Workpackages. They retain the behaviour of their corresponding task type and additionally implement the [[MROCLS_SEQUENTIALTASK|Sequential Task]] and [[MROCLS_GROUPEDTASK|Grouped Task]] classifications.&lt;br /&gt;
&lt;br /&gt;
Procedure variants are available for:&lt;br /&gt;
&lt;br /&gt;
* [[#Calculation Task|Calculation Task]]&lt;br /&gt;
* [[#Check Task|Check Task]]&lt;br /&gt;
* [[#Inspection Task|Inspection Task]]&lt;br /&gt;
* [[#Interface Task|Interface Task]]&lt;br /&gt;
* [[#Numeric Task|Numeric Task]]&lt;br /&gt;
* [[#Pick List Task|Pick List Task]]&lt;br /&gt;
* [[#Picture Task|Picture Task]]&lt;br /&gt;
* [[#Signature Task|Signature Task]]&lt;br /&gt;
* [[#Supervisor Check Task|Supervisor Check Task]]&lt;br /&gt;
* [[#Text Task|Text Task]]&lt;br /&gt;
&lt;br /&gt;
[[#Switch Start Task|Switch Start Tasks]], [[#Switch End Task|Switch End Tasks]], and [[#Calculation Task|Calculation Tasks]] provide automatic workflow-control behaviour in a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
For automatic [[#Calculation Task|Calculation Tasks]] and [[#Switch Start Task|Switch Start Tasks]], the clients display an evaluation indicator:&lt;br /&gt;
&lt;br /&gt;
* '''Finished:''' The Task was automatically evaluated successfully.&lt;br /&gt;
* '''Error:''' The Task was evaluated but resulted in an error.&lt;br /&gt;
* '''Pending:''' The Task has not yet been evaluated. No additional indicator is displayed for this state.&lt;br /&gt;
&lt;br /&gt;
When a predecessor [[#Switch Start Task|Switch Start Task]] has not yet finished, its follow-up Procedure Tasks are hidden because the relevant branch is not yet known. After evaluation, the selected branch becomes visible. The other branch remains hidden, is not executed, and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
For example, several predecessor [[#Numeric Task|Numeric Tasks]] can record temperatures from different parts of an equipment. A subsequent [[#Calculation Task|Calculation Task]] can calculate their average. A [[#Switch Start Task|Switch Start Task]] can then select a branch based on whether the average exceeds a configured temperature. One branch can contain a Task for activating a cooling mechanism, while the other branch can lead directly to the [[#Switch End Task|Switch End Task]] or contain further [[#Switch Start Task|Switch Tasks]].&lt;br /&gt;
&lt;br /&gt;
Procedure Tasks are intended to execute automatically when their predecessors are finished. However, the completion of the predecessor has to be triggered by a user. If a predecessor becomes finished only because of a server update, the follow-up Procedure workflow is not triggered. This prevents a workflow from executing in the name of users who did not initiate or observe the completion.&lt;br /&gt;
&lt;br /&gt;
The general online and offline evaluation rules for sequential and grouped Tasks are documented in [[MRO Objects (Client)#Sequential Task|Sequential Task]] and [[MRO Objects (Client)#Grouped Task|Grouped Task]].&lt;br /&gt;
&lt;br /&gt;
== Supporting File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure JSON File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_JSON'''&lt;br /&gt;
&lt;br /&gt;
This File Document stores the JSON definition of a [[#Procedure Workpackage|Procedure Workpackage]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || Link to the associated [[#Procedure Workpackage|Procedure Workpackage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
This is a dedicated File Document linked to a [[#Picture Task|Picture Task]]. A [[#Picture Task|Picture Task]] can also use another child-document type, provided that the child document contains a valid file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || Link to the associated [[#Picture Task|Picture Task]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[MRO Objects (Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_START_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICTURE_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_BLINDINGTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_COMMISSIONINGCHECK]] (Classification)&lt;br /&gt;
* [[MROCLS_JOINTTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SIGNATURE_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_TEXT_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_Objects_(Client)&amp;diff=30449</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=30449"/>
				<updated>2026-08-17T13:56:26Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: /* Work Progress */&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 (Mobile)|MRO UI (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
The WinX and Mobile clients display MRO objects like other root or child objects, with additional MRO-specific indicators, controls, and evaluation logic.&lt;br /&gt;
&lt;br /&gt;
This page documents behaviour that is shared by multiple MRO objects in the clients. The MRO object model, task-specific behaviour, and relevant technical properties are documented on [[MRO (Plugin)]]. For the complete task-type catalog, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO (Plugin)]] || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO Objects (Client)''' || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Basic User Interface ==&lt;br /&gt;
&lt;br /&gt;
The MRO user interface provides status indicators and interactive controls. In the {{UBIK}} child list, an MRO object can display its accumulated technical status, organisational status, and overall work progress based on its underlying data branch. These indicators are shown next to the main icon on child, details, and documents pages as well as next to the icons of child-list items.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&lt;br /&gt;
The technical status indicator is shown on objects that represent a technical state or receive the technical status from subsequent objects in the underlying data branch. For example, if an inventory object is reported as damaged, its parent objects display an exclamation-mark indicator to show that a problem was reported by a child object.&lt;br /&gt;
&lt;br /&gt;
[[File:TechStats_WinX.png|100px|Technical Status Indicator (WinX and Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
&lt;br /&gt;
The organisational status represents the amount of confirmed work in the data branch. This includes confirmed Work Packages as well as Tasks that are locked by their owning Work Package. The indicator is shown on objects that represent an organisational state or receive the organisational status from subsequent objects.&lt;br /&gt;
&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|Confirmed Work Package flag (WinX)&lt;br /&gt;
File:ConfirmedWP_MAUI.jpeg|Confirmed Work Package indicator (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
&lt;br /&gt;
Work progress is calculated from the object's current progress and the progress accumulated from subsequent objects in the underlying data branch. The indicator shows the amount of work completed in that branch.&lt;br /&gt;
&lt;br /&gt;
{{Version/WinXSince|5.0}} {{Version/MobileSince|5.0}} By default, progress is displayed with no more than one decimal place. For example, 99.75% is displayed as 99.8%. The format string used for this is &amp;lt;code&amp;gt;{0:0.#}%&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For other numeric formats, see [https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings custom numeric format strings]. The template used to customize the presentation is '''UBIKMROProgressBadge''' in '''UBIKThemes'''.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&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;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
The MRO object model consists of Task Owners, Work Packages, Tasks, and specialized task types. For the object definitions and technical properties, see [[MRO (Plugin)#MRO Objects|MRO Objects]].&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] gives users an overview of the work in its underlying structure. The client displays the technical status, organisational status, and work progress accumulated from its subordinate Task Owners and Work Packages.&lt;br /&gt;
&lt;br /&gt;
For the Task Owner definition, see [[MRO (Plugin)#Task Owner|Task Owner]].&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
The clients provide controls for confirming and revoking the confirmation of a [[MROCLS_MRO_WORKPACKAGE|Work Package]]. A Work Package can be confirmed when its related Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:ConfirmingWP_WinX.png|Work Package confirmation button (WinX)&lt;br /&gt;
File:MRORevoke_WinX.png|Revoke Work Package confirmation (WinX)&lt;br /&gt;
File:ConfirmingWP_MAUI.jpeg|Work Package confirmation button (Mobile)&lt;br /&gt;
File:MRORevoke_MAUI.jpeg|Revoke Work Package confirmation (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the Work Package definition, see [[MRO (Plugin)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports progress to its owning Work Package. All user-editable MRO Tasks support ''Not Applicable''. In both clients, a completed user-editable Task can be reset by selecting ''Not Applicable'' twice.&lt;br /&gt;
&lt;br /&gt;
For the common Task model and value-validation requirement, see [[MRO (Plugin)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of MRO task types, their properties, and their task-specific client behaviour, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
==== Sequential Task ====&lt;br /&gt;
&lt;br /&gt;
The [[MROCLS_SEQUENTIALTASK|Sequential Task classification]] defines an order in which Tasks are to be completed. One or more predecessor Tasks can be required to finish before a dependent Task becomes unlocked and editable. A Task can have any number of predecessors.&lt;br /&gt;
&lt;br /&gt;
A Task and its predecessors do not have to belong to the same Work Package. A predecessor can be located elsewhere in the object hierarchy.&lt;br /&gt;
&lt;br /&gt;
The state of a Sequential Task is evaluated both online and offline. This allows visible dependent Tasks to update immediately when their predecessors are finished. The server-side state takes precedence in the case described by the first step below.&lt;br /&gt;
&lt;br /&gt;
The state is evaluated as follows:&lt;br /&gt;
&lt;br /&gt;
# If the server-side state says that the Task is open, it is treated as open and no further local evaluation is performed.&lt;br /&gt;
# The client checks whether the Task has predecessors.&lt;br /&gt;
# The client attempts to load every predecessor Task.&lt;br /&gt;
#* If any predecessor cannot be loaded because it is not available offline, the Task is locked.&lt;br /&gt;
# If every predecessor is finished, the Task is open and editable. Otherwise, it is locked.&lt;br /&gt;
&lt;br /&gt;
The configured dependency graph must not contain cycles. Tasks within a dependency cycle could never become available for completion.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
See [[Media:Sequential_tasks_winx.mp4|this video]] for a demonstration. The Task relations are illustrated in [[Media:Task_relations.png|this image]]. Tasks A1 and A2 do not depend on other Tasks. The lines from left to right represent dependencies; for example, B2 has A1 and A2 as predecessors.&lt;br /&gt;
&lt;br /&gt;
==== Grouped Task {{Version/WinXSince|4.2}}{{Version/XamarinSince|4.2}} ====&lt;br /&gt;
&lt;br /&gt;
The [[MROCLS_GROUPEDTASK|Grouped Task classification]] is used when only a configured number of Tasks from a group have to be finished. The Tasks are siblings and share a server-configured threshold. When the number of finished Tasks reaches the threshold, the remaining Tasks in the group are considered no longer necessary. For the accumulated status of the owning objects, those Tasks are treated as if they were finished.&lt;br /&gt;
&lt;br /&gt;
{{Hint|The finished state and the no-longer-necessary state are independent. A Grouped Task that is no longer necessary can be either finished or unfinished. Users do not have to finish it, but they still can.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The precise status calculation requires information about all sibling Tasks. If some siblings are not available offline, the client cannot determine whether the threshold has been reached. In this situation, the local status calculation treats the available objects as regular Tasks.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The client uses the best available status. It uses the status calculated by the server when the client is online and there are no uncommitted local changes on the involved objects. Otherwise, it calculates the status locally based on the available information.}}&lt;br /&gt;
&lt;br /&gt;
A Task can be both grouped and sequential. In this case, the group threshold affects when a dependent Task becomes available.&lt;br /&gt;
&lt;br /&gt;
For example, Tasks A1, A2, and A3 can form a group in which only one Task has to be finished. If all three are predecessors of Task B, finishing one of them causes the group threshold to be reached. All three predecessors become no longer necessary and locked, and Task B becomes unlocked.&lt;br /&gt;
&lt;br /&gt;
=== MRO Objects with Project Information (WinX only) {{Version/WinXSince|2.5.4}} ===&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedStartTag|parameter=Please refer to [[Main_Page]] for the most recent information.}}&lt;br /&gt;
&lt;br /&gt;
[[File:UI_WinX_MRO_ProjectInfo.png|thumb|MRO Object with Project Information (WinX)]]&lt;br /&gt;
&lt;br /&gt;
An MRO object other than a Task can contain [[MROCLS_PROJECTINFORMATION|project information]]. In this case, the project information and MRO progress are displayed in a bar chart. The start and end dates are displayed on the progress bar. Its length and position, together with the current-date marker, indicate the timeline.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedEndTag}}&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
&lt;br /&gt;
When an MRO object is locked, it cannot be edited. For further information, see [[Locked Objects|Locked Objects]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&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_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]]&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]]&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=30448</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=30448"/>
				<updated>2026-08-17T13:34:42Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &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 (Mobile)|MRO UI (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
The WinX and Mobile clients display MRO objects like other root or child objects, with additional MRO-specific indicators, controls, and evaluation logic.&lt;br /&gt;
&lt;br /&gt;
This page documents behaviour that is shared by multiple MRO objects in the clients. The MRO object model, task-specific behaviour, and relevant technical properties are documented on [[MRO (Plugin)]]. For the complete task-type catalog, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO (Plugin)]] || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO Objects (Client)''' || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Basic User Interface ==&lt;br /&gt;
&lt;br /&gt;
The MRO user interface provides status indicators and interactive controls. In the {{UBIK}} child list, an MRO object can display its accumulated technical status, organisational status, and overall work progress based on its underlying data branch. These indicators are shown next to the main icon on child, details, and documents pages as well as next to the icons of child-list items.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&lt;br /&gt;
The technical status indicator is shown on objects that represent a technical state or receive the technical status from subsequent objects in the underlying data branch. For example, if an inventory object is reported as damaged, its parent objects display an exclamation-mark indicator to show that a problem was reported by a child object.&lt;br /&gt;
&lt;br /&gt;
[[File:TechStats_WinX.png|100px|Technical Status Indicator (WinX and Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
&lt;br /&gt;
The organisational status represents the amount of confirmed work in the data branch. This includes confirmed Work Packages as well as Tasks that are locked by their owning Work Package. The indicator is shown on objects that represent an organisational state or receive the organisational status from subsequent objects.&lt;br /&gt;
&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|Confirmed Work Package flag (WinX)&lt;br /&gt;
File:ConfirmedWP_MAUI.jpeg|Confirmed Work Package indicator (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
&lt;br /&gt;
Work progress is calculated from the object's current progress and the progress accumulated from subsequent objects in the underlying data branch. The indicator shows the amount of work completed in that branch.&lt;br /&gt;
&lt;br /&gt;
{{Version/WinXSince|5.0}} {{Version/MobileSince|5.0}} By default, progress is displayed with no more than one decimal place. For example, 99.75% is displayed as 99.8%. The format string used for this is ''{0:0.#}%''.&lt;br /&gt;
&lt;br /&gt;
For other numeric formats, see [https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings custom numeric format strings]. The template used to customize the presentation is '''UBIKMROProgressBadge''' in '''UBIKThemes'''.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
The MRO object model consists of Task Owners, Work Packages, Tasks, and specialized task types. For the object definitions and technical properties, see [[MRO (Plugin)#MRO Objects|MRO Objects]].&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] gives users an overview of the work in its underlying structure. The client displays the technical status, organisational status, and work progress accumulated from its subordinate Task Owners and Work Packages.&lt;br /&gt;
&lt;br /&gt;
For the Task Owner definition, see [[MRO (Plugin)#Task Owner|Task Owner]].&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
The clients provide controls for confirming and revoking the confirmation of a [[MROCLS_MRO_WORKPACKAGE|Work Package]]. A Work Package can be confirmed when its related Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:ConfirmingWP_WinX.png|Work Package confirmation button (WinX)&lt;br /&gt;
File:MRORevoke_WinX.png|Revoke Work Package confirmation (WinX)&lt;br /&gt;
File:ConfirmingWP_MAUI.jpeg|Work Package confirmation button (Mobile)&lt;br /&gt;
File:MRORevoke_MAUI.jpeg|Revoke Work Package confirmation (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the Work Package definition, see [[MRO (Plugin)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports progress to its owning Work Package. All user-editable MRO Tasks support ''Not Applicable''. In both clients, a completed user-editable Task can be reset by selecting ''Not Applicable'' twice.&lt;br /&gt;
&lt;br /&gt;
For the common Task model and value-validation requirement, see [[MRO (Plugin)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of MRO task types, their properties, and their task-specific client behaviour, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
==== Sequential Task ====&lt;br /&gt;
&lt;br /&gt;
The [[MROCLS_SEQUENTIALTASK|Sequential Task classification]] defines an order in which Tasks are to be completed. One or more predecessor Tasks can be required to finish before a dependent Task becomes unlocked and editable. A Task can have any number of predecessors.&lt;br /&gt;
&lt;br /&gt;
A Task and its predecessors do not have to belong to the same Work Package. A predecessor can be located elsewhere in the object hierarchy.&lt;br /&gt;
&lt;br /&gt;
The state of a Sequential Task is evaluated both online and offline. This allows visible dependent Tasks to update immediately when their predecessors are finished. The server-side state takes precedence in the case described by the first step below.&lt;br /&gt;
&lt;br /&gt;
The state is evaluated as follows:&lt;br /&gt;
&lt;br /&gt;
# If the server-side state says that the Task is open, it is treated as open and no further local evaluation is performed.&lt;br /&gt;
# The client checks whether the Task has predecessors.&lt;br /&gt;
# The client attempts to load every predecessor Task.&lt;br /&gt;
#* If any predecessor cannot be loaded because it is not available offline, the Task is locked.&lt;br /&gt;
# If every predecessor is finished, the Task is open and editable. Otherwise, it is locked.&lt;br /&gt;
&lt;br /&gt;
The configured dependency graph must not contain cycles. Tasks within a dependency cycle could never become available for completion.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
See [[Media:Sequential_tasks_winx.mp4|this video]] for a demonstration. The Task relations are illustrated in [[Media:Task_relations.png|this image]]. Tasks A1 and A2 do not depend on other Tasks. The lines from left to right represent dependencies; for example, B2 has A1 and A2 as predecessors.&lt;br /&gt;
&lt;br /&gt;
==== Grouped Task {{Version/WinXSince|4.2}}{{Version/XamarinSince|4.2}} ====&lt;br /&gt;
&lt;br /&gt;
The [[MROCLS_GROUPEDTASK|Grouped Task classification]] is used when only a configured number of Tasks from a group have to be finished. The Tasks are siblings and share a server-configured threshold. When the number of finished Tasks reaches the threshold, the remaining Tasks in the group are considered no longer necessary. For the accumulated status of the owning objects, those Tasks are treated as if they were finished.&lt;br /&gt;
&lt;br /&gt;
{{Hint|The finished state and the no-longer-necessary state are independent. A Grouped Task that is no longer necessary can be either finished or unfinished. Users do not have to finish it, but they still can.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The precise status calculation requires information about all sibling Tasks. If some siblings are not available offline, the client cannot determine whether the threshold has been reached. In this situation, the local status calculation treats the available objects as regular Tasks.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The client uses the best available status. It uses the status calculated by the server when the client is online and there are no uncommitted local changes on the involved objects. Otherwise, it calculates the status locally based on the available information.}}&lt;br /&gt;
&lt;br /&gt;
A Task can be both grouped and sequential. In this case, the group threshold affects when a dependent Task becomes available.&lt;br /&gt;
&lt;br /&gt;
For example, Tasks A1, A2, and A3 can form a group in which only one Task has to be finished. If all three are predecessors of Task B, finishing one of them causes the group threshold to be reached. All three predecessors become no longer necessary and locked, and Task B becomes unlocked.&lt;br /&gt;
&lt;br /&gt;
=== MRO Objects with Project Information (WinX only) {{Version/WinXSince|2.5.4}} ===&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedStartTag|parameter=Please refer to [[Main_Page]] for the most recent information.}}&lt;br /&gt;
&lt;br /&gt;
[[File:UI_WinX_MRO_ProjectInfo.png|thumb|MRO Object with Project Information (WinX)]]&lt;br /&gt;
&lt;br /&gt;
An MRO object other than a Task can contain [[MROCLS_PROJECTINFORMATION|project information]]. In this case, the project information and MRO progress are displayed in a bar chart. The start and end dates are displayed on the progress bar. Its length and position, together with the current-date marker, indicate the timeline.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedEndTag}}&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
&lt;br /&gt;
When an MRO object is locked, it cannot be edited. For further information, see [[Locked Objects|Locked Objects]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&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_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]]&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]]&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_(Plugin)&amp;diff=30447</id>
		<title>MRO (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=30447"/>
				<updated>2026-08-17T13:29:13Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MRO plugin provides a set of {{UBIK}} objects for representing and documenting maintenance, repair and operations work. The MRO features are available in the supported Mobile and {{UBIK WinX}} clients.&lt;br /&gt;
&lt;br /&gt;
This page is the main documentation for the MRO object model and its task types. Common client behaviour, such as status indicators, locking, and the general evaluation of sequential and grouped tasks, is documented in [[MRO Objects (Client)]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO (Plugin)''' || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO Objects (Client)]] || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
&lt;br /&gt;
Objects classified as MRO objects generally provide a technical and organisational status as well as an overall work progress based on their underlying data branch.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&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;
&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;
&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Work Progress|Work Progress]].&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
MRO uses Task Owners, Work Packages, Tasks, and Procedure Workpackages to represent maintenance workflows.&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object with an underlying structure of work to be performed. It can contain other Task Owners or Work Packages. Their technical status, organisational status, and work progress are accumulated and reported to the Task Owner.&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] collects and summarizes Task Owners, other Work Packages, or Tasks. A Work Package can be confirmed when all associated Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
For Work Package presentation and confirmation in the clients, see [[MRO Objects (Client)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports work progress to its owning Work Package. The available task types provide different input, validation, or automatic workflow behaviour.&lt;br /&gt;
&lt;br /&gt;
MRO task values must be validated for work progress to be calculated. A MetaAttribute providing a validation timestamp must therefore be attached to the relevant MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{Attention|A task value property has to use [[Attributes]] so that its value can be validated. Otherwise, work progress cannot be calculated.}}&lt;br /&gt;
&lt;br /&gt;
All user-editable MRO task types can be set to ''Not Applicable''. In the clients, a completed user-editable task can be reset by selecting ''Not Applicable'' twice. General client behaviour is documented in [[MRO Objects (Client)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROCEDURE_WORKPACKAGE'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PROCEDURE|Procedure Workpackage]] is a specialized Work Package for structured workflows. Its structure is defined in JSON using a workflow editor and can contain Tasks as well as subordinate Procedure Workpackages. Depending on its state, the corresponding objects are created or updated.&lt;br /&gt;
&lt;br /&gt;
Procedure Workpackages can use sequential execution, grouped Tasks, branching, calculations, and references to linked data. Their workflows support online and offline use. Steps that require data exchange wait until connectivity is available.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || 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 Workpackage&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the Procedure Workpackage is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MRO Task Types ==&lt;br /&gt;
&lt;br /&gt;
The following task types are available in MRO. The technical object names are included to make the task types discoverable through the wiki search.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task type !! Technical object name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| [[#Blinding Task|Blinding Task]] || BLINDING_TASK || Documents a blinding or deblinding operation&lt;br /&gt;
|-&lt;br /&gt;
| [[#Calculation Task|Calculation Task]] || CALCULATION_TASK || Evaluates an expression and writes its result to a target property&lt;br /&gt;
|-&lt;br /&gt;
| [[#Check Task|Check Task]] || CHECK_TASK || Confirms a Boolean task using a checkbox&lt;br /&gt;
|-&lt;br /&gt;
| [[#Commissioning Task|Commissioning Task]] || COMMISSIONING_TASK || Represents a task in an MRO commissioning workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Inspection Task|Inspection Task]] || INSPECTION_TASK || Records a Boolean inspection result with configurable labels&lt;br /&gt;
|-&lt;br /&gt;
| [[#Interface Task|Interface Task]] || INTERFACE_TASK || Waits for completion information from another software system&lt;br /&gt;
|-&lt;br /&gt;
| [[#Joint Task|Joint Task]] || JOINT_TASK || Documents the state of a joint location&lt;br /&gt;
|-&lt;br /&gt;
| [[#Measurement Task|Measurement Task]] || MROCLS_MRO_MEASUREMENT_TASK || Records a measured Double value&lt;br /&gt;
|-&lt;br /&gt;
| [[#Numeric Task|Numeric Task]] || NUMERIC_TASK || Records a numeric value and evaluates it against a configured range&lt;br /&gt;
|-&lt;br /&gt;
| [[#Pick List Task|Pick List Task]] || PICKLIST_TASK || Selects one integer value from an instance-specific Active List&lt;br /&gt;
|-&lt;br /&gt;
| [[#Picture Task|Picture Task]] || PICTURE_TASK || Requires at least one child document containing a valid file&lt;br /&gt;
|-&lt;br /&gt;
| [[#Progress Task|Progress Task]] || PROGRESS_TASK || Reports progress between 0% and 100%&lt;br /&gt;
|-&lt;br /&gt;
| [[#Signature Task|Signature Task]] || SIGNATURE_TASK || Captures a handwritten signature&lt;br /&gt;
|-&lt;br /&gt;
| [[#Supervisor Check Task|Supervisor Check Task]] || SUPERVISOR_CHECK_TASK || Applies the four-eyes principle to a Check Task&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch End Task|Switch End Task]] || SWITCH_END_TASK || Rejoins the branches of a Procedure workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch Start Task|Switch Start Task]] || SWITCH_START_TASK || Selects a Procedure branch by evaluating a Boolean expression&lt;br /&gt;
|-&lt;br /&gt;
| [[#Text Task|Text Task]] || TEXT_TASK || Records free-form text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Blinding Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''BLINDING_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_BLINDINGTASK]]&lt;br /&gt;
&lt;br /&gt;
A Blinding Task documents either a blinding or deblinding operation at a linked blinding location. The configured operation type determines the state that must be reported to complete the task.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| BLINDING_TYPE || Configured operation type: Blinding or DeBlinding&lt;br /&gt;
|-&lt;br /&gt;
| LK_BLINDING_LOCATION || Link to the associated blinding location&lt;br /&gt;
|-&lt;br /&gt;
| LK_PREVIOUS_TASK || Link to the preceding Blinding Task&lt;br /&gt;
|-&lt;br /&gt;
| LOCKED || Prevents the task from being edited&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Reported blinding state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is complete only when '''VALUE''' matches the configured '''BLINDING_TYPE'''.&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CALCULATION_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_CALCULATION_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_CALCULATION_TASK|Calculation Task]] automatically evaluates a predefined expression on the client and writes the result to a configured property on its owner. No user input is required.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the target property on the owner&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Target type: Undefined = 0, Boolean = 1, Integer = 3, Double = 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is automatically finished after successful evaluation. The clients display an indicator for a successful evaluation or an evaluation error. A Pending state does not receive an additional indicator.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_CHECK_TASK|Check Task]] is a simple Boolean task represented by a checkbox. Clicking the checkbox sets its value and completes the task. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task value and completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Check Task (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable Check Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commissioning Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''COMMISSIONING_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_COMMISSIONINGCHECK]]&lt;br /&gt;
&lt;br /&gt;
A Commissioning Task is a specialized task type used in MRO commissioning workflows.&lt;br /&gt;
&lt;br /&gt;
'''Relevant property'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| NOTAPPLICABLE || {{Boolean}} || Not Applicable state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INSPECTION_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_INSPECTION_TASK]]&lt;br /&gt;
&lt;br /&gt;
An [[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] captures a Boolean inspection result. The client presents a positive and a negative option as well as ''Not Applicable''. Selecting an option completes the task.&lt;br /&gt;
&lt;br /&gt;
The labels for the positive and negative outcomes can be configured. Selecting the negative outcome displays the configured false label.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Selected inspection result&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for the positive outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for the negative outcome&lt;br /&gt;
|}&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 Inspection Task (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished Inspection Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INTERFACE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
&lt;br /&gt;
An Interface Task waits for another software system to provide its completion value. The task is complete when its Boolean '''VALUE''' becomes true. If the client is offline, the task waits until connectivity and synchronization are available again.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion supplied by the external software system&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Joint Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''JOINT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_JOINTTASK]]&lt;br /&gt;
&lt;br /&gt;
A Joint Task documents the state of a linked joint location. The user selects one of the available Joint States.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_JOINT_LOCATION || Link to the associated joint location&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Selected Joint State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The available states are:&lt;br /&gt;
&lt;br /&gt;
* Closed&lt;br /&gt;
* Disconnected&lt;br /&gt;
* Open&lt;br /&gt;
* Planned&lt;br /&gt;
* Reconnected&lt;br /&gt;
* Torqued&lt;br /&gt;
* Undefined&lt;br /&gt;
* Verified&lt;br /&gt;
&lt;br /&gt;
The Joint Task is complete when its state is '''Planned''' or '''Closed'''.&lt;br /&gt;
&lt;br /&gt;
=== Measurement Task ===&lt;br /&gt;
&lt;br /&gt;
Technical classification name: '''MROCLS_MRO_MEASUREMENT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_MEASUREMENT_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] records a measured Double value, for example a value read from a pressure gauge. Selecting the displayed value opens an editor. If no value has been entered, the editor initially displays an empty value. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
An optional secondary value indicator can display a previously recorded value. Its behaviour has to be configured separately.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently recorded measurement&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously recorded measurement&lt;br /&gt;
|}&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 recorded value (WinX)&lt;br /&gt;
File:Measurment Task Not Empty UWP.png|Measurement Task with a recorded value (WinX)&lt;br /&gt;
File:Measurment Task Empty Android.jpg|Measurement Task without a recorded value (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''NUMERIC_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_NUMERIC_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_NUMERIC_TASK|Numeric Task]] records a Double value, for example a value read from a temperature sensor. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
The value is compared against a configured acceptable range that cannot be edited on the client. A value outside the range produces visual feedback and sets the technical status to indicate an issue. An invalid configured range, such as a minimum greater than the maximum, also produces an issue when a value is entered.&lt;br /&gt;
&lt;br /&gt;
A value unit can be configured for an individual task. When present, it overrides the standard unit configured on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Instance-specific value unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICKLIST_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_PICK_LIST_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICK_LIST_TASK|Pick List Task]] allows the user to select one value from an [[UBIK Active Lists|Active List]] configured on the task instance. It behaves similarly to a standard Integer Task with a Selective List, but the selectable values are supplied by the Active List rather than being defined globally.&lt;br /&gt;
&lt;br /&gt;
Every list item has an Integer value. Selecting an item or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Value of the selected Active List item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_PICTURE_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICTURE_TASK|Picture Task]] is a Boolean task that can only be finished when it has at least one child document containing a valid file. Multiple child documents can be attached. Although pictures are the most common files, the child document can contain another file type.&lt;br /&gt;
&lt;br /&gt;
The clients display a file or photo button next to the task checkbox. The task cannot be completed through the checkbox until the file requirement is satisfied. Selecting ''Not Applicable'' is always possible and bypasses the child-document requirement.&lt;br /&gt;
&lt;br /&gt;
When the user attempts to finish the task while online, the client may first synchronize the task's child objects and download the files of its child documents. During synchronization, the checkbox is replaced by a wait indicator.&lt;br /&gt;
&lt;br /&gt;
* If no child document or no local file is available, the task remains unfinished and the user is informed.&lt;br /&gt;
* If at least one child document with a valid local file is available, the task is finished and the file or photo button is disabled.&lt;br /&gt;
&lt;br /&gt;
Child-count information can be configured but is not required. WinX can display the child documents in an expander. This is not shown by default on Mobile due to the available screen size, but it can be customized using [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|Show NextLevel Children/Documents]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Progress Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROGRESS_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_PROGRESS_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_PROGRESS_TASK|Progress Task]] reports progress between 0% and 100%. The reported value contributes to the progress of the owning Work Package. Values below 100% represent partial progress; the task is finished only when the reported progress reaches 100%. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently reported progress&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously reported progress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] is available for Progress Tasks.&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 reported progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with current and previous progress (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SIGNATURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SIGNATURE_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Signature Task is completed by capturing a handwritten signature. Selecting the signature editor opens an in-app dialog in which the user can sign. Confirming the signature saves it and automatically completes the task.&lt;br /&gt;
&lt;br /&gt;
When signing while online, the server resolves and displays the signee and generates the validation timestamp. When signing offline, the signee is resolved and displayed once the client is online again. If the complete signee or validation timestamp cannot be displayed in the editor field, selecting the field opens a popup with the complete information.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Captured signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_SUPERVISOR_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task applies the four-eyes principle to a Boolean Check Task on one device. The worker hands the device to a supervisor. The supervisor scans an NFC tag and enters the supervisor PIN. After successful authentication, the checkbox is enabled and must still be selected to finish the task.&lt;br /&gt;
&lt;br /&gt;
Selecting ''Not Applicable'' does not require supervisor authentication.&lt;br /&gt;
&lt;br /&gt;
Successful supervisor authentication removes only the supervisor-related lock. The task can remain locked for another reason, such as sequential dependencies or user rights. If an incorrect PIN is entered three times, authentication is cancelled and the NFC tag has to be scanned again. A setting controls [[RFID tags#Choose which information to use from a tag|which tag information is used]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Check Task completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Authenticated supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Required supervisor permission&lt;br /&gt;
|}&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 Check Task before verification&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor PIN entry&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Check Task after verification&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_END_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SWITCH_END_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_SWITCH_END_TASK|Switch End Task]] marks the point at which the two branches created by a Switch Start Task merge again. It is linked to exactly one corresponding Switch Start Task. It is not shown to the user and completes automatically after the selected branch has finished, allowing the common Procedure workflow to continue.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to the corresponding Switch Start Task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_START_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_SWITCH_START_TASK]]&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_SWITCH_START_TASK|Switch Start Task]] is a sequential workflow-control task used in a Procedure Workpackage. It automatically evaluates a Boolean expression on the client and selects either the true or false branch. Each branch represents a different path of Tasks and must lead to a corresponding Switch End Task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the Task or Task Owner that starts the true branch&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to the Task or Task Owner that starts the false branch&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || Display string for a true result&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || Display string for a false result&lt;br /&gt;
|-&lt;br /&gt;
| EVALUATION_RESULT || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After evaluation, only the selected branch is executed. The other branch remains hidden and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''TEXT_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_TEXT_TASK]]&lt;br /&gt;
&lt;br /&gt;
A Text Task allows the user to enter free-form text. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Supervisor Base Type ==&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_TASK'''&lt;br /&gt;
&lt;br /&gt;
Classification: [[MROCLS_MRO_SUPERVISOR_TASK]]&lt;br /&gt;
&lt;br /&gt;
Supervisor Task is a base type that provides supervisor authentication behaviour. It is not used as a standalone user task. The concrete task type using this behaviour is [[#Supervisor Check Task|Supervisor Check Task]].&lt;br /&gt;
&lt;br /&gt;
== Procedure Task Variants and Workflow Execution ==&lt;br /&gt;
&lt;br /&gt;
Procedure variants are specialized versions of task types for use within Procedure Workpackages. They retain the behaviour of their corresponding task type and additionally implement the [[MROCLS_SEQUENTIALTASK|Sequential Task]] and [[MROCLS_GROUPEDTASK|Grouped Task]] classifications.&lt;br /&gt;
&lt;br /&gt;
Procedure variants are available for:&lt;br /&gt;
&lt;br /&gt;
* Calculation Task&lt;br /&gt;
* Check Task&lt;br /&gt;
* Inspection Task&lt;br /&gt;
* Interface Task&lt;br /&gt;
* Numeric Task&lt;br /&gt;
* Pick List Task&lt;br /&gt;
* Picture Task&lt;br /&gt;
* Signature Task&lt;br /&gt;
* Supervisor Check Task&lt;br /&gt;
* Text Task&lt;br /&gt;
&lt;br /&gt;
Switch Start Tasks, Switch End Tasks, and Calculation Tasks provide automatic workflow-control behaviour in a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
For automatic Calculation and Switch Start Tasks, the clients display an evaluation indicator:&lt;br /&gt;
&lt;br /&gt;
* '''Finished:''' The Task was automatically evaluated successfully.&lt;br /&gt;
* '''Error:''' The Task was evaluated but resulted in an error.&lt;br /&gt;
* '''Pending:''' The Task has not yet been evaluated. No additional indicator is displayed for this state.&lt;br /&gt;
&lt;br /&gt;
When a predecessor Switch Start Task has not yet finished, its follow-up Procedure Tasks are hidden because the relevant branch is not yet known. After evaluation, the selected branch becomes visible. The other branch remains hidden, is not executed, and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
For example, several predecessor Numeric Tasks can record temperatures from different parts of an equipment. A subsequent Calculation Task can calculate their average. A Switch Start Task can then select a branch based on whether the average exceeds a configured temperature. One branch can contain a Task for activating a cooling mechanism, while the other branch can lead directly to the Switch End Task or contain further Switch Tasks.&lt;br /&gt;
&lt;br /&gt;
Procedure Tasks are intended to execute automatically when their predecessors are finished. However, the completion of the predecessor has to be triggered by a user. If a predecessor becomes finished only because of a server update, the follow-up Procedure workflow is not triggered. This prevents a workflow from executing in the name of users who did not initiate or observe the completion.&lt;br /&gt;
&lt;br /&gt;
The general online and offline evaluation rules for sequential and grouped Tasks are documented in [[MRO Objects (Client)#Sequential Task|Sequential Task]] and [[MRO Objects (Client)#Grouped Task|Grouped Task]].&lt;br /&gt;
&lt;br /&gt;
== Supporting File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure JSON File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_JSON'''&lt;br /&gt;
&lt;br /&gt;
This File Document stores the JSON definition of a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || Link to the associated Procedure Workpackage&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
This is a dedicated File Document linked to a Picture Task. A Picture Task can also use another child-document type, provided that the child document contains a valid file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || Link to the associated Picture Task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[MRO Objects (Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_START_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICTURE_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_BLINDINGTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_COMMISSIONINGCHECK]] (Classification)&lt;br /&gt;
* [[MROCLS_JOINTTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SIGNATURE_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_TEXT_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_Objects_(Client)&amp;diff=30446</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=30446"/>
				<updated>2026-08-17T11:31:50Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &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 (Mobile)|MRO UI (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
The WinX and Mobile clients display MRO objects like other root or child objects, with additional MRO-specific indicators, controls, and evaluation logic.&lt;br /&gt;
&lt;br /&gt;
This page documents behaviour that is shared by multiple MRO objects in the clients. The MRO object model, task-specific behaviour, and relevant technical properties are documented on [[MRO (Plugin)]]. For the complete task-type catalog, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO (Plugin)]] || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO Objects (Client)''' || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of MRO task types and their task-specific behaviour, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
== Basic User Interface ==&lt;br /&gt;
&lt;br /&gt;
The MRO user interface provides status indicators and interactive controls. In the {{UBIK}} child list, an MRO object can display its accumulated technical status, organisational status, and overall work progress based on its underlying data branch. These indicators are shown next to the main icon on child, details, and documents pages as well as next to the icons of child-list items.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&lt;br /&gt;
The technical status indicator is shown on objects that represent a technical state or receive the technical status from subsequent objects in the underlying data branch. For example, if an inventory object is reported as damaged, its parent objects display an exclamation-mark indicator to show that a problem was reported by a child object.&lt;br /&gt;
&lt;br /&gt;
[[File:TechStats_WinX.png|100px|Technical Status Indicator (WinX and Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
&lt;br /&gt;
The organisational status represents the amount of confirmed work in the data branch. This includes confirmed Work Packages as well as Tasks that are locked by their owning Work Package. The indicator is shown on objects that represent an organisational state or receive the organisational status from subsequent objects.&lt;br /&gt;
&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|Confirmed Work Package flag (WinX)&lt;br /&gt;
File:ConfirmedWP_MAUI.jpeg|Confirmed Work Package indicator (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
&lt;br /&gt;
Work progress is calculated from the object's current progress and the progress accumulated from subsequent objects in the underlying data branch. The indicator shows the amount of work completed in that branch.&lt;br /&gt;
&lt;br /&gt;
{{Version/WinXSince|5.0}} {{Version/MobileSince|5.0}} By default, progress is displayed with no more than one decimal place. For example, 99.75% is displayed as 99.8%. The format string used for this is ''{0:0.#}%''.&lt;br /&gt;
&lt;br /&gt;
For other numeric formats, see [https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings custom numeric format strings]. The template used to customize the presentation is '''UBIKMROProgressBadge''' in '''UBIKThemes'''.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
The MRO object model consists of Task Owners, Work Packages, Tasks, and specialized task types. For the object definitions and technical properties, see [[MRO (Plugin)#MRO Objects|MRO Objects]].&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] gives users an overview of the work in its underlying structure. The client displays the technical status, organisational status, and work progress accumulated from its subordinate Task Owners and Work Packages.&lt;br /&gt;
&lt;br /&gt;
For the Task Owner definition, see [[MRO (Plugin)#Task Owner|Task Owner]].&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
The clients provide controls for confirming and revoking the confirmation of a [[MROCLS_MRO_WORKPACKAGE|Work Package]]. A Work Package can be confirmed when its related Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:ConfirmingWP_WinX.png|Work Package confirmation button (WinX)&lt;br /&gt;
File:MRORevoke_WinX.png|Revoke Work Package confirmation (WinX)&lt;br /&gt;
File:ConfirmingWP_MAUI.jpeg|Work Package confirmation button (Mobile)&lt;br /&gt;
File:MRORevoke_MAUI.jpeg|Revoke Work Package confirmation (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the Work Package definition, see [[MRO (Plugin)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports progress to its owning Work Package. All user-editable MRO Tasks support ''Not Applicable''. In both clients, a completed user-editable Task can be reset by selecting ''Not Applicable'' twice.&lt;br /&gt;
&lt;br /&gt;
For the common Task model and value-validation requirement, see [[MRO (Plugin)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|For the complete list of MRO task types, their properties, and their task-specific client behaviour, see [[MRO (Plugin)#MRO Task Types|MRO Task Types]].}}&lt;br /&gt;
&lt;br /&gt;
==== Sequential Task ====&lt;br /&gt;
&lt;br /&gt;
The [[MROCLS_SEQUENTIALTASK|Sequential Task classification]] defines an order in which Tasks are to be completed. One or more predecessor Tasks can be required to finish before a dependent Task becomes unlocked and editable. A Task can have any number of predecessors.&lt;br /&gt;
&lt;br /&gt;
A Task and its predecessors do not have to belong to the same Work Package. A predecessor can be located elsewhere in the object hierarchy.&lt;br /&gt;
&lt;br /&gt;
The state of a Sequential Task is evaluated both online and offline. This allows visible dependent Tasks to update immediately when their predecessors are finished. The server-side state takes precedence in the case described by the first step below.&lt;br /&gt;
&lt;br /&gt;
The state is evaluated as follows:&lt;br /&gt;
&lt;br /&gt;
# If the server-side state says that the Task is open, it is treated as open and no further local evaluation is performed.&lt;br /&gt;
# The client checks whether the Task has predecessors.&lt;br /&gt;
# The client attempts to load every predecessor Task.&lt;br /&gt;
#* If any predecessor cannot be loaded because it is not available offline, the Task is locked.&lt;br /&gt;
# If every predecessor is finished, the Task is open and editable. Otherwise, it is locked.&lt;br /&gt;
&lt;br /&gt;
The configured dependency graph must not contain cycles. Tasks within a dependency cycle could never become available for completion.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
See [[Media:Sequential_tasks_winx.mp4|this video]] for a demonstration. The Task relations are illustrated in [[Media:Task_relations.png|this image]]. Tasks A1 and A2 do not depend on other Tasks. The lines from left to right represent dependencies; for example, B2 has A1 and A2 as predecessors.&lt;br /&gt;
&lt;br /&gt;
==== Grouped Task {{Version/WinXSince|4.2}}{{Version/XamarinSince|4.2}} ====&lt;br /&gt;
&lt;br /&gt;
The [[MROCLS_GROUPEDTASK|Grouped Task classification]] is used when only a configured number of Tasks from a group have to be finished. The Tasks are siblings and share a server-configured threshold. When the number of finished Tasks reaches the threshold, the remaining Tasks in the group are considered no longer necessary. For the accumulated status of the owning objects, those Tasks are treated as if they were finished.&lt;br /&gt;
&lt;br /&gt;
{{Hint|The finished state and the no-longer-necessary state are independent. A Grouped Task that is no longer necessary can be either finished or unfinished. Users do not have to finish it, but they still can.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The precise status calculation requires information about all sibling Tasks. If some siblings are not available offline, the client cannot determine whether the threshold has been reached. In this situation, the local status calculation treats the available objects as regular Tasks.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The client uses the best available status. It uses the status calculated by the server when the client is online and there are no uncommitted local changes on the involved objects. Otherwise, it calculates the status locally based on the available information.}}&lt;br /&gt;
&lt;br /&gt;
A Task can be both grouped and sequential. In this case, the group threshold affects when a dependent Task becomes available.&lt;br /&gt;
&lt;br /&gt;
For example, Tasks A1, A2, and A3 can form a group in which only one Task has to be finished. If all three are predecessors of Task B, finishing one of them causes the group threshold to be reached. All three predecessors become no longer necessary and locked, and Task B becomes unlocked.&lt;br /&gt;
&lt;br /&gt;
=== MRO Objects with Project Information (WinX only) {{Version/WinXSince|2.5.4}} ===&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedStartTag|parameter=Please refer to [[Main_Page]] for the most recent information.}}&lt;br /&gt;
&lt;br /&gt;
[[File:UI_WinX_MRO_ProjectInfo.png|thumb|MRO Object with Project Information (WinX)]]&lt;br /&gt;
&lt;br /&gt;
An MRO object other than a Task can contain [[MROCLS_PROJECTINFORMATION|project information]]. In this case, the project information and MRO progress are displayed in a bar chart. The start and end dates are displayed on the progress bar. Its length and position, together with the current-date marker, indicate the timeline.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
{{DeprecatedEndTag}}&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
&lt;br /&gt;
When an MRO object is locked, it cannot be edited. For further information, see [[Locked Objects|Locked Objects]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&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_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]]&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]]&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_(Plugin)&amp;diff=30445</id>
		<title>MRO (Plugin)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_(Plugin)&amp;diff=30445"/>
				<updated>2026-08-17T11:08:40Z</updated>
		
		<summary type="html">&lt;p&gt;LMA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MRO plugin provides a set of {{UBIK}} objects for representing and documenting maintenance, repair and operations work. The MRO features are available in the supported Mobile and {{UBIK WinX}} clients.&lt;br /&gt;
&lt;br /&gt;
This page is the main documentation for the MRO object model and its task types. Common client behaviour, such as status indicators, locking, and the general evaluation of sequential and grouped tasks, is documented in [[MRO Objects (Client)]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Page !! Scope&lt;br /&gt;
|-&lt;br /&gt;
| '''MRO (Plugin)''' || MRO concepts, task types, task-specific behaviour, and relevant technical properties&lt;br /&gt;
|-&lt;br /&gt;
| [[MRO Objects (Client)]] || Common client presentation, status indicators, locking, and behaviour shared by multiple MRO objects&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Basic Features ==&lt;br /&gt;
&lt;br /&gt;
Objects classified as MRO objects generally provide a technical and organisational status as well as an overall work progress based on their underlying data branch.&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&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;
&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;
&lt;br /&gt;
For detailed information, see [[MRO Objects (Client)#Work Progress|Work Progress]].&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
&lt;br /&gt;
MRO uses Task Owners, Work Packages, Tasks, and Procedure Workpackages to represent maintenance workflows.&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object with an underlying structure of work to be performed. It can contain other Task Owners or Work Packages. Their technical status, organisational status, and work progress are accumulated and reported to the Task Owner.&lt;br /&gt;
&lt;br /&gt;
=== Work Package ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] collects and summarizes Task Owners, other Work Packages, or Tasks. A Work Package can be confirmed when all associated Tasks have reached the required progress and all subordinate Work Packages have been confirmed.&lt;br /&gt;
&lt;br /&gt;
For Work Package presentation and confirmation in the clients, see [[MRO Objects (Client)#Work Package|Work Package]].&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] reports work progress to its owning Work Package. The available task types provide different input, validation, or automatic workflow behaviour.&lt;br /&gt;
&lt;br /&gt;
MRO task values must be validated for work progress to be calculated. A MetaAttribute providing a validation timestamp must therefore be attached to the relevant MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{Attention|A task value property has to use [[Attributes]] so that its value can be validated. Otherwise, work progress cannot be calculated.}}&lt;br /&gt;
&lt;br /&gt;
All user-editable MRO task types can be set to ''Not Applicable''. In the clients, a completed user-editable task can be reset by selecting ''Not Applicable'' twice. General client behaviour is documented in [[MRO Objects (Client)#Task|Task]].&lt;br /&gt;
&lt;br /&gt;
=== Procedure Workpackage ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROCEDURE_WORKPACKAGE'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PROCEDURE|Procedure Workpackage]] is a specialized Work Package for structured workflows. Its structure is defined in JSON using a workflow editor and can contain Tasks as well as subordinate Procedure Workpackages. Depending on its state, the corresponding objects are created or updated.&lt;br /&gt;
&lt;br /&gt;
Procedure Workpackages can use sequential execution, grouped Tasks, branching, calculations, and references to linked data. Their workflows support online and offline use. Steps that require data exchange wait until connectivity is available.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PROCEDURE_STATUS || {{Integer}} || 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 Workpackage&lt;br /&gt;
|-&lt;br /&gt;
| ISTEMPLATE || {{Boolean}} || Indicates whether the Procedure Workpackage is a template&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MRO Task Types ==&lt;br /&gt;
&lt;br /&gt;
The following task types are available in MRO. The technical object names are included to make the task types discoverable through the wiki search.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task type !! Technical object name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| [[#Blinding Task|Blinding Task]] || BLINDING_TASK || Documents a blinding or deblinding operation&lt;br /&gt;
|-&lt;br /&gt;
| [[#Calculation Task|Calculation Task]] || CALCULATION_TASK || Evaluates an expression and writes its result to a target property&lt;br /&gt;
|-&lt;br /&gt;
| [[#Check Task|Check Task]] || CHECK_TASK || Confirms a Boolean task using a checkbox&lt;br /&gt;
|-&lt;br /&gt;
| [[#Commissioning Task|Commissioning Task]] || COMMISSIONING_TASK || Represents a task in an MRO commissioning workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Inspection Task|Inspection Task]] || INSPECTION_TASK || Records a Boolean inspection result with configurable labels&lt;br /&gt;
|-&lt;br /&gt;
| [[#Interface Task|Interface Task]] || INTERFACE_TASK || Waits for completion information from another software system&lt;br /&gt;
|-&lt;br /&gt;
| [[#Joint Task|Joint Task]] || JOINT_TASK || Documents the state of a joint location&lt;br /&gt;
|-&lt;br /&gt;
| [[#Numeric Task|Numeric Task]] || NUMERIC_TASK || Records a numeric value and evaluates it against a configured range&lt;br /&gt;
|-&lt;br /&gt;
| [[#Pick List Task|Pick List Task]] || PICKLIST_TASK || Selects one integer value from an instance-specific Active List&lt;br /&gt;
|-&lt;br /&gt;
| [[#Picture Task|Picture Task]] || PICTURE_TASK || Requires at least one child document containing a valid file&lt;br /&gt;
|-&lt;br /&gt;
| [[#Progress Task|Progress Task]] || PROGRESS_TASK || Reports progress between 0% and 100%&lt;br /&gt;
|-&lt;br /&gt;
| [[#Signature Task|Signature Task]] || SIGNATURE_TASK || Captures a handwritten signature&lt;br /&gt;
|-&lt;br /&gt;
| [[#Supervisor Check Task|Supervisor Check Task]] || SUPERVISOR_CHECK_TASK || Applies the four-eyes principle to a Check Task&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch End Task|Switch End Task]] || SWITCH_END_TASK || Rejoins the branches of a Procedure workflow&lt;br /&gt;
|-&lt;br /&gt;
| [[#Switch Start Task|Switch Start Task]] || SWITCH_START_TASK || Selects a Procedure branch by evaluating a Boolean expression&lt;br /&gt;
|-&lt;br /&gt;
| [[#Text Task|Text Task]] || TEXT_TASK || Records free-form text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Blinding Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''BLINDING_TASK'''&lt;br /&gt;
&lt;br /&gt;
A Blinding Task documents either a blinding or deblinding operation at a linked blinding location. The configured operation type determines the state that must be reported to complete the task.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| BLINDING_TYPE || Configured operation type: Blinding or DeBlinding&lt;br /&gt;
|-&lt;br /&gt;
| LK_BLINDING_LOCATION || Link to the associated blinding location&lt;br /&gt;
|-&lt;br /&gt;
| LK_PREVIOUS_TASK || Link to the preceding Blinding Task&lt;br /&gt;
|-&lt;br /&gt;
| LOCKED || Prevents the task from being edited&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Reported blinding state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is complete only when '''VALUE''' matches the configured '''BLINDING_TYPE'''.&lt;br /&gt;
&lt;br /&gt;
=== Calculation Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CALCULATION_TASK'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_CALCULATION_TASK|Calculation Task]] automatically evaluates a predefined expression on the client and writes the result to a configured property on its owner. No user input is required.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the target property on the owner&lt;br /&gt;
|-&lt;br /&gt;
| TARGET_PROPERTY_TYPE || {{Integer}} || Target type: Undefined = 0, Boolean = 1, Integer = 3, Double = 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The task is automatically finished after successful evaluation. The clients display an indicator for a successful evaluation or an evaluation error. A Pending state does not receive an additional indicator.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Check Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_CHECK_TASK|Check Task]] is a simple Boolean task represented by a checkbox. Clicking the checkbox sets its value and completes the task. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task value and completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Check Task (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable Check Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commissioning Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''COMMISSIONING_TASK'''&lt;br /&gt;
&lt;br /&gt;
A Commissioning Task is a specialized task type used in MRO commissioning workflows.&lt;br /&gt;
&lt;br /&gt;
'''Relevant property'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| NOTAPPLICABLE || {{Boolean}} || Not Applicable state&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Inspection Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INSPECTION_TASK'''&lt;br /&gt;
&lt;br /&gt;
An [[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] captures a Boolean inspection result. The client presents a positive and a negative option as well as ''Not Applicable''. Selecting an option completes the task.&lt;br /&gt;
&lt;br /&gt;
The labels for the positive and negative outcomes can be configured. Selecting the negative outcome displays the configured false label.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Selected inspection result&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_TRUE || {{String}} || Label for the positive outcome&lt;br /&gt;
|-&lt;br /&gt;
| LABEL_FALSE || {{String}} || Label for the negative outcome&lt;br /&gt;
|}&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 Inspection Task (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished Inspection Task (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interface Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''INTERFACE_TASK'''&lt;br /&gt;
&lt;br /&gt;
An Interface Task waits for another software system to provide its completion value. The task is complete when its Boolean '''VALUE''' becomes true. If the client is offline, the task waits until connectivity and synchronization are available again.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion supplied by the external software system&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Joint Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''JOINT_TASK'''&lt;br /&gt;
&lt;br /&gt;
A Joint Task documents the state of a linked joint location. The user selects one of the available Joint States.&lt;br /&gt;
&lt;br /&gt;
'''Relevant properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_JOINT_LOCATION || Link to the associated joint location&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || Selected Joint State&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The available states are:&lt;br /&gt;
&lt;br /&gt;
* Closed&lt;br /&gt;
* Disconnected&lt;br /&gt;
* Open&lt;br /&gt;
* Planned&lt;br /&gt;
* Reconnected&lt;br /&gt;
* Torqued&lt;br /&gt;
* Undefined&lt;br /&gt;
* Verified&lt;br /&gt;
&lt;br /&gt;
The Joint Task is complete when its state is '''Planned''' or '''Closed'''.&lt;br /&gt;
&lt;br /&gt;
=== Numeric Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''NUMERIC_TASK'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_NUMERIC_TASK|Numeric Task]] records a Double value, for example a value read from a temperature sensor. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
The value is compared against a configured acceptable range that cannot be edited on the client. A value outside the range produces visual feedback and sets the technical status to indicate an issue. An invalid configured range, such as a minimum greater than the maximum, also produces an issue when a value is entered.&lt;br /&gt;
&lt;br /&gt;
A value unit can be configured for an individual task. When present, it overrides the standard unit configured on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Recorded numeric value&lt;br /&gt;
|-&lt;br /&gt;
| VALUE_UNIT || {{String}} || Instance-specific value unit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pick List Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICKLIST_TASK'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICK_LIST_TASK|Pick List Task]] allows the user to select one value from an [[UBIK Active Lists|Active List]] configured on the task instance. It behaves similarly to a standard Integer Task with a Selective List, but the selectable values are supplied by the Active List rather than being defined globally.&lt;br /&gt;
&lt;br /&gt;
Every list item has an Integer value. Selecting an item or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Integer}} || Value of the selected Active List item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICTURE_TASK|Picture Task]] is a Boolean task that can only be finished when it has at least one child document containing a valid file. Multiple child documents can be attached. Although pictures are the most common files, the child document can contain another file type.&lt;br /&gt;
&lt;br /&gt;
The clients display a file or photo button next to the task checkbox. The task cannot be completed through the checkbox until the file requirement is satisfied. Selecting ''Not Applicable'' is always possible and bypasses the child-document requirement.&lt;br /&gt;
&lt;br /&gt;
When the user attempts to finish the task while online, the client may first synchronize the task's child objects and download the files of its child documents. During synchronization, the checkbox is replaced by a wait indicator.&lt;br /&gt;
&lt;br /&gt;
* If no child document or no local file is available, the task remains unfinished and the user is informed.&lt;br /&gt;
* If at least one child document with a valid local file is available, the task is finished and the file or photo button is disabled.&lt;br /&gt;
&lt;br /&gt;
Child-count information can be configured but is not required. WinX can display the child documents in an expander. This is not shown by default on Mobile due to the available screen size, but it can be customized using [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|Show NextLevel Children/Documents]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Progress Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''PROGRESS_TASK'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_PROGRESS_TASK|Progress Task]] reports progress between 0% and 100%. The reported value contributes to the progress of the owning Work Package. Values below 100% represent partial progress; the task is finished only when the reported progress reaches 100%. It can alternatively be completed using ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Double}} || Currently reported progress&lt;br /&gt;
|-&lt;br /&gt;
| PREVIOUS_VALUE || {{Double}} || Previously reported progress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] is available for Progress Tasks.&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 reported progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with current and previous progress (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Signature Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SIGNATURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
A Signature Task is completed by capturing a handwritten signature. Selecting the signature editor opens an in-app dialog in which the user can sign. Confirming the signature saves it and automatically completes the task.&lt;br /&gt;
&lt;br /&gt;
When signing while online, the server resolves and displays the signee and generates the validation timestamp. When signing offline, the signee is resolved and displayed once the client is online again. If the complete signee or validation timestamp cannot be displayed in the editor field, selecting the field opens a popup with the complete information.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Signature}} || Captured signature&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Supervisor Check Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_CHECK_TASK'''&lt;br /&gt;
&lt;br /&gt;
A Supervisor Check Task applies the four-eyes principle to a Boolean Check Task on one device. The worker hands the device to a supervisor. The supervisor scans an NFC tag and enters the supervisor PIN. After successful authentication, the checkbox is enabled and must still be selected to finish the task.&lt;br /&gt;
&lt;br /&gt;
Selecting ''Not Applicable'' does not require supervisor authentication.&lt;br /&gt;
&lt;br /&gt;
Successful supervisor authentication removes only the supervisor-related lock. The task can remain locked for another reason, such as sequential dependencies or user rights. If an incorrect PIN is entered three times, authentication is cancelled and the NFC tag has to be scanned again. A setting controls [[RFID tags#Choose which information to use from a tag|which tag information is used]].&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Check Task completion&lt;br /&gt;
|-&lt;br /&gt;
| SUPERVISOR || {{Guid}} || Authenticated supervisor&lt;br /&gt;
|-&lt;br /&gt;
| PERMISSION || {{String}} || Required supervisor permission&lt;br /&gt;
|}&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 Check Task before verification&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor PIN entry&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Check Task after verification&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Switch End Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_END_TASK'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_SWITCH_END_TASK|Switch End Task]] marks the point at which the two branches created by a Switch Start Task merge again. It is linked to exactly one corresponding Switch Start Task. It is not shown to the user and completes automatically after the selected branch has finished, allowing the common Procedure workflow to continue.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{Boolean}} || Task completion&lt;br /&gt;
|-&lt;br /&gt;
| LK_SWITCH_START_TASK || {{Guid}} || Link to the corresponding Switch Start Task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Switch Start Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SWITCH_START_TASK'''&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_SWITCH_START_TASK|Switch Start Task]] is a sequential workflow-control task used in a Procedure Workpackage. It automatically evaluates a Boolean expression on the client and selects either the true or false branch. Each branch represents a different path of Tasks and must lead to a corresponding Switch End Task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| EXPRESSION || {{String}} || Expression 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 the Task or Task Owner that starts the true branch&lt;br /&gt;
|-&lt;br /&gt;
| BRANCH_FALSE || {{Guid}} || Link to the Task or Task Owner that starts the false branch&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_TRUE || {{String}} || Display string for a true result&lt;br /&gt;
|-&lt;br /&gt;
| DISPLAYSTRING_FALSE || {{String}} || Display string for a false result&lt;br /&gt;
|-&lt;br /&gt;
| EVALUATION_RESULT || {{Boolean}} || Result of the evaluated expression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After evaluation, only the selected branch is executed. The other branch remains hidden and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
See also [[#Procedure Task Variants and Workflow Execution|Procedure Task Variants and Workflow Execution]].&lt;br /&gt;
&lt;br /&gt;
=== Text Task ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''TEXT_TASK'''&lt;br /&gt;
&lt;br /&gt;
A Text Task allows the user to enter free-form text. Entering a value or selecting ''Not Applicable'' completes the task.&lt;br /&gt;
&lt;br /&gt;
'''Properties'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| VALUE || {{String}} || Entered text&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Supervisor Base Type ==&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''SUPERVISOR_TASK'''&lt;br /&gt;
&lt;br /&gt;
Supervisor Task is a base type that provides supervisor authentication behaviour. It is not used as a standalone user task. The concrete task type using this behaviour is [[#Supervisor Check Task|Supervisor Check Task]].&lt;br /&gt;
&lt;br /&gt;
== Procedure Task Variants and Workflow Execution ==&lt;br /&gt;
&lt;br /&gt;
Procedure variants are specialized versions of task types for use within Procedure Workpackages. They retain the behaviour of their corresponding task type and additionally implement the [[MROCLS_SEQUENTIALTASK|Sequential Task]] and [[MROCLS_GROUPEDTASK|Grouped Task]] classifications.&lt;br /&gt;
&lt;br /&gt;
Procedure variants are available for:&lt;br /&gt;
&lt;br /&gt;
* Calculation Task&lt;br /&gt;
* Check Task&lt;br /&gt;
* Inspection Task&lt;br /&gt;
* Interface Task&lt;br /&gt;
* Numeric Task&lt;br /&gt;
* Pick List Task&lt;br /&gt;
* Picture Task&lt;br /&gt;
* Signature Task&lt;br /&gt;
* Supervisor Check Task&lt;br /&gt;
* Text Task&lt;br /&gt;
&lt;br /&gt;
Switch Start Tasks, Switch End Tasks, and Calculation Tasks provide automatic workflow-control behaviour in a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
For automatic Calculation and Switch Start Tasks, the clients display an evaluation indicator:&lt;br /&gt;
&lt;br /&gt;
* '''Finished:''' The Task was automatically evaluated successfully.&lt;br /&gt;
* '''Error:''' The Task was evaluated but resulted in an error.&lt;br /&gt;
* '''Pending:''' The Task has not yet been evaluated. No additional indicator is displayed for this state.&lt;br /&gt;
&lt;br /&gt;
When a predecessor Switch Start Task has not yet finished, its follow-up Procedure Tasks are hidden because the relevant branch is not yet known. After evaluation, the selected branch becomes visible. The other branch remains hidden, is not executed, and its Procedure Tasks are set to ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
For example, several predecessor Numeric Tasks can record temperatures from different parts of an equipment. A subsequent Calculation Task can calculate their average. A Switch Start Task can then select a branch based on whether the average exceeds a configured temperature. One branch can contain a Task for activating a cooling mechanism, while the other branch can lead directly to the Switch End Task or contain further Switch Tasks.&lt;br /&gt;
&lt;br /&gt;
Procedure Tasks are intended to execute automatically when their predecessors are finished. However, the completion of the predecessor has to be triggered by a user. If a predecessor becomes finished only because of a server update, the follow-up Procedure workflow is not triggered. This prevents a workflow from executing in the name of users who did not initiate or observe the completion.&lt;br /&gt;
&lt;br /&gt;
The general online and offline evaluation rules for sequential and grouped Tasks are documented in [[MRO Objects (Client)#Sequential Task|Sequential Task]] and [[MRO Objects (Client)#Grouped Task|Grouped Task]].&lt;br /&gt;
&lt;br /&gt;
== Supporting File Documents ==&lt;br /&gt;
&lt;br /&gt;
=== Procedure JSON File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_JSON'''&lt;br /&gt;
&lt;br /&gt;
This File Document stores the JSON definition of a Procedure Workpackage.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PROCEDURE_WORKPACKAGE || {{Guid}} || Link to the associated Procedure Workpackage&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Picture Task File Document ===&lt;br /&gt;
&lt;br /&gt;
Technical object name: '''FILEDOCUMENT_MRO_PICTURE_TASK'''&lt;br /&gt;
&lt;br /&gt;
This is a dedicated File Document linked to a Picture Task. A Picture Task can also use another child-document type, provided that the child document contains a valid file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Data type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| LK_PICTURE_TASK || {{Guid}} || Link to the associated Picture Task&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[MRO Objects (Client)]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PROCEDURE]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_START_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
* [[MROCLS_PICTURE_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_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>

	</feed>