Last modified on 19 June 2026, at 06:42

Difference between revisions of "MROMaintenancePlans"

(See also)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{UnderConstructionStart}}
 
 
= MRO Maintenance Planning =
 
= MRO Maintenance Planning =
  
Line 19: Line 18:
 
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.
 
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.
  
In MRO, <code>MaintenancePlan</code> 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.
+
In MRO, <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaintenancePlan</span> 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.
  
 
The fully implemented maintenance plan types in standard MRO are:
 
The fully implemented maintenance plan types in standard MRO are:
  
* <code>CyclicMaintenancePlan</code>
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">CyclicMaintenancePlan</span>
* <code>RoundMaintenancePlan</code>
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RoundMaintenancePlan</span>
  
Custom maintenance plan types can be implemented by deriving from the abstract <code>MaintenancePlan</code> base class. However, the standard MRO maintenance planning feature is based on cyclic maintenance plans and round maintenance plans.
+
Custom maintenance plan types can be implemented by deriving from the abstract <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaintenancePlan</span> base class. However, the standard MRO maintenance planning feature is based on cyclic maintenance plans and round maintenance plans.
  
 
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;">
 
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;">
'''Important:''' <code>CyclicMaintenancePlan</code> and <code>RoundMaintenancePlan</code> 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.
+
'''Important:''' <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">CyclicMaintenancePlan</span> and <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RoundMaintenancePlan</span> 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.
 
</div>
 
</div>
  
<code>RoundMaintenancePlan</code> 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 <code>SYSREL_ROUND_RELATION</code>. These additional work packages are assigned to the main round work package.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RoundMaintenancePlan</span> 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 <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SYSREL_ROUND_RELATION</span>. These additional work packages are assigned to the main round work package.
  
 
== Basic Concept ==
 
== Basic Concept ==
Line 42: Line 41:
 
! Description
 
! Description
 
|-
 
|-
| <code>MaintenancePlan</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaintenancePlan</span>
 
| Defines the rules for creating generated work packages.
 
| Defines the rules for creating generated work packages.
 
|-
 
|-
Line 75: Line 74:
  
 
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;">
 
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;">
'''Rule:''' Only work packages with <code>ISTEMPLATE</code> set can be used as template work packages.
+
'''Rule:''' Only work packages with <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ISTEMPLATE</span> set can be used as template work packages.
 
</div>
 
</div>
  
Line 98: Line 97:
 
# The plan is configured with a monthly recurrence, an assigned asset, a template work package, and a replication configuration.
 
# The plan is configured with a monthly recurrence, an assigned asset, a template work package, and a replication configuration.
 
# When the plan becomes due, the system uses a replication job to create a new work package from the configured template work package.
 
# When the plan becomes due, the system uses a replication job to create a new work package from the configured template work package.
# The generated work package is linked back to the maintenance plan via <code>LK_MAINTENANCE_PLAN</code>.
+
# The generated work package is linked back to the maintenance plan via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MAINTENANCE_PLAN</span>.
  
 
This link allows the maintenance plan to react when the generated work package is planned or completed.
 
This link allows the maintenance plan to react when the generated work package is planned or completed.
Line 106: Line 105:
 
=== Purpose ===
 
=== Purpose ===
  
<code>MaintenancePlan</code> is the abstract base class for maintenance planning in MRO.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaintenancePlan</span> is the abstract base class for maintenance planning in MRO.
  
 
It provides the common properties and logic required by maintenance plan implementations.
 
It provides the common properties and logic required by maintenance plan implementations.
  
Because <code>MaintenancePlan</code> 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:
+
Because <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">MaintenancePlan</span> 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:
  
* <code>CyclicMaintenancePlan</code>
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">CyclicMaintenancePlan</span>
* <code>RoundMaintenancePlan</code>
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RoundMaintenancePlan</span>
  
 
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.
 
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.
Line 124: Line 123:
 
! Notes
 
! Notes
 
|-
 
|-
| <code>LK_ASSET</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_ASSET</span>
 
| Links the maintenance plan to the asset that requires maintenance.
 
| Links the maintenance plan to the asset that requires maintenance.
 
| Required for a valid cyclic maintenance plan.
 
| Required for a valid cyclic maintenance plan.
 
|-
 
|-
| <code>LK_WP_TMPL</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span>
 
| Links the maintenance plan to the template work package.
 
| Links the maintenance plan to the template work package.
| The linked work package must have <code>ISTEMPLATE</code> set.
+
| The linked work package must have <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ISTEMPLATE</span> set.
 
|-
 
|-
| <code>LK_REPLICATION_CONFIG</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_REPLICATION_CONFIG</span>
 
| Links the maintenance plan to the replication configuration.
 
| Links the maintenance plan to the replication configuration.
 
| Required for work package generation.
 
| Required for work package generation.
 
|-
 
|-
| <code>NEXT_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>
 
| Defines the planned execution date of the next maintenance activity.
 
| Defines the planned execution date of the next maintenance activity.
| Used as <code>PLANNED_START</code> on generated work packages.
+
| Used as <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span> on generated work packages.
 
|-
 
|-
| <code>LEAD_DAYS</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span>
| Defines how many days before <code>NEXT_DATE</code> the system may create the work package.
+
| Defines how many days before <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> the system may create the work package.
 
| Does not define the recurrence interval.
 
| Does not define the recurrence interval.
 
|-
 
|-
| <code>EARLIEST_GENERATION_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span>
 
| Defines the earliest date on which the maintenance plan may create a work package.
 
| Defines the earliest date on which the maintenance plan may create a work package.
 
| Calculated by the system.
 
| Calculated by the system.
 
|-
 
|-
| <code>PLAN_STATUS</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_STATUS</span>
 
| Defines whether the maintenance plan is active or inactive.
 
| Defines whether the maintenance plan is active or inactive.
 
| Only active plans are considered for automatic generation.
 
| Only active plans are considered for automatic generation.
 
|-
 
|-
| <code>AUTO_CREATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AUTO_CREATE</span>
 
| Defines whether the system is allowed to automatically create work packages.
 
| Defines whether the system is allowed to automatically create work packages.
 
| If disabled, the plan does not automatically create work packages.
 
| If disabled, the plan does not automatically create work packages.
 
|-
 
|-
| <code>LAST_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LAST_DATE</span>
 
| Stores the most recent completion date of a generated work package linked to the maintenance plan.
 
| Stores the most recent completion date of a generated work package linked to the maintenance plan.
 
| Especially relevant for completion-based scheduling.
 
| Especially relevant for completion-based scheduling.
 
|-
 
|-
| <code>PRIORITY</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PRIORITY</span>
 
| Numeric value that can be used to sort maintenance plans.
 
| Numeric value that can be used to sort maintenance plans.
| For round maintenance plans, see also <code>PLAN_SELECTION_RULE</code>.
+
| For round maintenance plans, see also <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_SELECTION_RULE</span>.
 
|}
 
|}
  
=== <code>LK_ASSET</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_ASSET</span> ===
  
<code>LK_ASSET</code> is the link to the asset that requires maintenance.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_ASSET</span> is the link to the asset that requires maintenance.
  
 
This can be, for example:
 
This can be, for example:
Line 173: Line 172:
 
* equipment
 
* equipment
 
* a functional location
 
* a functional location
* another customized maintainable object deriving from <code>Asset</code>
+
* another customized maintainable object deriving from <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Asset</span>
  
 
The generated work package is linked to the same asset.
 
The generated work package is linked to the same asset.
  
<div style="border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;">
+
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
'''Validation:''' A cyclic maintenance plan requires <code>LK_ASSET</code> to be assigned in order to be valid.
+
'''Requirement:''' A cyclic maintenance plan requires <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_ASSET</span> to be assigned in order to be valid.
 
</div>
 
</div>
  
=== <code>LK_WP_TMPL</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span> ===
  
<code>LK_WP_TMPL</code> is the link to the template work package.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span> is the link to the template work package.
  
 
The template work package defines what the generated work package should look like.
 
The template work package defines what the generated work package should look like.
  
When the maintenance plan creates a work package, the system copies the work package referenced by <code>LK_WP_TMPL</code>.
+
When the maintenance plan creates a work package, the system copies the work package referenced by <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span>.
  
The linked work package must be a template work package. This means its <code>ISTEMPLATE</code> property must be set.
+
The linked work package must be a template work package. This means its <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ISTEMPLATE</span> property must be set.
  
<div style="border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;">
+
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
'''Validation:''' If <code>LK_WP_TMPL</code> is not configured, the maintenance plan cannot create a work package.
+
'''Requirement:''' <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span> must be configured before the maintenance plan can create a work package.
 
</div>
 
</div>
  
=== <code>LK_REPLICATION_CONFIG</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_REPLICATION_CONFIG</span> ===
  
<code>LK_REPLICATION_CONFIG</code> is the link to the replication configuration.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_REPLICATION_CONFIG</span> is the link to the replication configuration.
  
 
The replication configuration defines how the template work package is copied into a generated work package.
 
The replication configuration defines how the template work package is copied into a generated work package.
Line 207: Line 206:
 
* what the target meta class of the generated work package should be
 
* what the target meta class of the generated work package should be
  
<div style="border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;">
+
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
'''Validation:''' If <code>LK_REPLICATION_CONFIG</code> is not configured, the maintenance plan cannot create a work package.
+
'''Requirement:''' <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_REPLICATION_CONFIG</span> must be configured before the maintenance plan can create a work package.
 
</div>
 
</div>
  
=== <code>NEXT_DATE</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> ===
  
<code>NEXT_DATE</code> defines the planned execution date of the next maintenance activity.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> defines the planned execution date of the next maintenance activity.
  
 
It answers the question: '''When should the next maintenance work be performed?'''
 
It answers the question: '''When should the next maintenance work be performed?'''
  
<code>NEXT_DATE</code> is not necessarily the date on which the work package is created.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> is not necessarily the date on which the work package is created.
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 223: Line 222:
 
! Example
 
! Example
 
|-
 
|-
| <code>NEXT_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>
 
| 15 March
 
| 15 March
 
|-
 
|-
| <code>LEAD_DAYS</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span>
 
| 3
 
| 3
 
|-
 
|-
| <code>EARLIEST_GENERATION_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span>
 
| 12 March
 
| 12 March
 
|}
 
|}
Line 235: Line 234:
 
In this example, the system may create the work package on 12 March, but the generated work package is planned for 15 March.
 
In this example, the system may create the work package on 12 March, but the generated work package is planned for 15 March.
  
When a work package is generated, the generated work package receives the maintenance plan’s <code>NEXT_DATE</code> as its <code>PLANNED_START</code>.
+
When a work package is generated, the generated work package receives the maintenance plan’s <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> as its <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span>.
  
=== <code>LEAD_DAYS</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span> ===
  
<code>LEAD_DAYS</code> defines how many days before <code>NEXT_DATE</code> the system may create the work package.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span> defines how many days before <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> the system may create the work package.
  
 
This is used to create work packages before the actual planned execution date.
 
This is used to create work packages before the actual planned execution date.
Line 247: Line 246:
 
! Example
 
! Example
 
|-
 
|-
| <code>NEXT_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>
 
| 15 March
 
| 15 March
 
|-
 
|-
| <code>LEAD_DAYS</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span>
 
| 3
 
| 3
 
|-
 
|-
| Resulting <code>EARLIEST_GENERATION_DATE</code>
+
| Resulting <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span>
 
| 12 March
 
| 12 March
 
|}
 
|}
  
 
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;">
 
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;">
'''Note:''' <code>LEAD_DAYS</code> does not define the recurrence interval. It only defines how early the work package may be generated before the planned execution date.
+
'''Note:''' <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span> does not define the recurrence interval. It only defines how early the work package may be generated before the planned execution date.
 
</div>
 
</div>
  
=== <code>EARLIEST_GENERATION_DATE</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span> ===
  
<code>EARLIEST_GENERATION_DATE</code> is calculated by the system.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span> is calculated by the system.
  
 
It defines the earliest date on which the maintenance plan may create a work package.
 
It defines the earliest date on which the maintenance plan may create a work package.
Line 277: Line 276:
 
! Example
 
! Example
 
|-
 
|-
| <code>NEXT_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>
 
| 15 March
 
| 15 March
 
|-
 
|-
| <code>LEAD_DAYS</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span>
 
| 3
 
| 3
 
|-
 
|-
| <code>EARLIEST_GENERATION_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span>
 
| 12 March
 
| 12 March
 
|}
 
|}
  
The maintenance planning orchestrator searches for active plans where <code>EARLIEST_GENERATION_DATE</code> has been reached.
+
The maintenance planning orchestrator searches for active plans where <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span> has been reached.
  
 
A plan can be considered for automatic work package generation when:
 
A plan can be considered for automatic work package generation when:
Line 295: Line 294:
 
</pre>
 
</pre>
  
If <code>EARLIEST_GENERATION_DATE</code> has not yet been reached, no work package is created.
+
If <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span> has not yet been reached, no work package is created.
  
=== <code>PLAN_STATUS</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_STATUS</span> ===
  
<code>PLAN_STATUS</code> defines whether the maintenance plan is active or inactive.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_STATUS</span> defines whether the maintenance plan is active or inactive.
  
 
Only active plans are considered for automatic work package generation. Inactive plans are ignored by the maintenance planning process.
 
Only active plans are considered for automatic work package generation. Inactive plans are ignored by the maintenance planning process.
Line 305: Line 304:
 
Typical values are:
 
Typical values are:
  
* <code>Inactive</code>
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Inactive</span>
* <code>Active</code>
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">Active</span>
  
 
This allows users to temporarily disable a maintenance plan without deleting it.
 
This allows users to temporarily disable a maintenance plan without deleting it.
  
=== <code>AUTO_CREATE</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AUTO_CREATE</span> ===
  
<code>AUTO_CREATE</code> defines whether the system is allowed to automatically create work packages from the maintenance plan.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AUTO_CREATE</span> defines whether the system is allowed to automatically create work packages from the maintenance plan.
  
If <code>AUTO_CREATE</code> is enabled, the maintenance planning orchestrator can create work packages once the plan is due.
+
If <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AUTO_CREATE</span> is enabled, the maintenance planning orchestrator can create work packages once the plan is due.
  
If <code>AUTO_CREATE</code> is disabled, the plan does not automatically create work packages.
+
If <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AUTO_CREATE</span> is disabled, the plan does not automatically create work packages.
  
=== <code>LAST_DATE</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LAST_DATE</span> ===
  
<code>LAST_DATE</code> stores the date when the most recent generated work package linked to the maintenance plan was completed.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LAST_DATE</span> stores the date when the most recent generated work package linked to the maintenance plan was completed.
  
 
This property is especially important for completion-based scheduling.
 
This property is especially important for completion-based scheduling.
Line 331: Line 330:
 
| 20 March
 
| 20 March
 
|-
 
|-
| <code>SCHEDULING_MODE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span>
 
| Completion-Based
 
| Completion-Based
 
|-
 
|-
Line 338: Line 337:
 
|}
 
|}
  
The system updates <code>LAST_DATE</code> when a generated work package is completed.
+
The system updates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LAST_DATE</span> when a generated work package is completed.
  
=== <code>PRIORITY</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PRIORITY</span> ===
  
<code>PRIORITY</code> is a numeric value that can be used to sort maintenance plans.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PRIORITY</span> is a numeric value that can be used to sort maintenance plans.
  
For round maintenance plans, there is also a property called <code>PLAN_SELECTION_RULE</code>.
+
For round maintenance plans, there is also a property called <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_SELECTION_RULE</span>.
  
 
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
 
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
'''Open point:''' The exact effect of <code>PLAN_SELECTION_RULE</code> should only be documented after the implementation behavior has been verified.
+
'''Open point:''' The exact effect of <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_SELECTION_RULE</span> should only be documented after the implementation behavior has been verified.
 
</div>
 
</div>
  
Line 357: Line 356:
 
! Purpose
 
! Purpose
 
|-
 
|-
| <code>LK_MAINTENANCE_PLAN</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MAINTENANCE_PLAN</span>
 
| Generated work package
 
| Generated work package
 
| Links the generated work package back to the maintenance plan that triggered its creation.
 
| Links the generated work package back to the maintenance plan that triggered its creation.
 
|-
 
|-
| <code>LK_WP_TMPL</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span>
 
| Generated work package
 
| Generated work package
 
| Stores the template work package that was used to create the generated work package.
 
| Stores the template work package that was used to create the generated work package.
 
|-
 
|-
| <code>LK_ASSET</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_ASSET</span>
 
| Generated work package
 
| Generated work package
 
| Stores the asset for which the work package was created.
 
| Stores the asset for which the work package was created.
 
|-
 
|-
| <code>PLANNED_START</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span>
 
| Generated work package
 
| Generated work package
 
| Stores the planned start date of the generated work package.
 
| Stores the planned start date of the generated work package.
 
|-
 
|-
| <code>ORGA_STATUS</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ORGA_STATUS</span>
 
| Generated work package
 
| Generated work package
 
| Used to determine whether a generated work package is finished.
 
| Used to determine whether a generated work package is finished.
 
|-
 
|-
| <code>TASK_OWNER</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">TASK_OWNER</span>
 
| Additional round work package
 
| Additional round work package
 
| Assigns additional generated work packages to the main round work package.
 
| Assigns additional generated work packages to the main round work package.
 
|-
 
|-
| <code>ORDERID</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ORDERID</span>
 
| Additional round work package
 
| Additional round work package
| Can be copied from <code>SYSREL_ROUND_RELATION</code> to structure or order round work packages.
+
| Can be copied from <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SYSREL_ROUND_RELATION</span> to structure or order round work packages.
 
|-
 
|-
| <code>GROUPID</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GROUPID</span>
 
| Additional round work package
 
| Additional round work package
| Can be copied from <code>SYSREL_ROUND_RELATION</code> to group round work packages.
+
| Can be copied from <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SYSREL_ROUND_RELATION</span> to group round work packages.
 
|}
 
|}
  
=== <code>LK_MAINTENANCE_PLAN</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MAINTENANCE_PLAN</span> ===
  
<code>LK_MAINTENANCE_PLAN</code> is set on generated work packages.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MAINTENANCE_PLAN</span> is set on generated work packages.
  
 
It stores the maintenance plan that triggered the creation of the work package.
 
It stores the maintenance plan that triggered the creation of the work package.
  
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 <code>LK_MAINTENANCE_PLAN</code>.
+
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 <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MAINTENANCE_PLAN</span>.
  
 
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.
 
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.
  
=== <code>LK_WP_TMPL</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span> ===
  
On a generated work package, <code>LK_WP_TMPL</code> stores the template work package that was used to create the generated work package.
+
On a generated work package, <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span> stores the template work package that was used to create the generated work package.
  
 
This allows users and the system to see which template was used as the source.
 
This allows users and the system to see which template was used as the source.
  
=== <code>LK_ASSET</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_ASSET</span> ===
  
On a generated work package, <code>LK_ASSET</code> stores the asset for which the work package was created.
+
On a generated work package, <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_ASSET</span> stores the asset for which the work package was created.
  
This is usually copied or assigned based on the maintenance plan’s <code>LK_ASSET</code>.
+
This is usually copied or assigned based on the maintenance plan’s <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_ASSET</span>.
  
=== <code>PLANNED_START</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span> ===
  
<code>PLANNED_START</code> stores the planned start date of the generated work package.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span> stores the planned start date of the generated work package.
  
 
When a maintenance plan generates a work package, the system sets:
 
When a maintenance plan generates a work package, the system sets:
Line 422: Line 421:
 
</pre>
 
</pre>
  
=== <code>ORGA_STATUS</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ORGA_STATUS</span> ===
  
<code>ORGA_STATUS</code> is used to determine whether a generated work package is finished.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ORGA_STATUS</span> is used to determine whether a generated work package is finished.
  
 
A work package is considered finished when:
 
A work package is considered finished when:
Line 438: Line 437:
 
</pre>
 
</pre>
  
<div style="border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;">
+
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
 
'''Generation rule:''' A maintenance plan does not create another work package while it still has an open generated work package.
 
'''Generation rule:''' A maintenance plan does not create another work package while it still has an open generated work package.
 
</div>
 
</div>
  
=== <code>TASK_OWNER</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">TASK_OWNER</span> ===
  
<code>TASK_OWNER</code> is used in round maintenance scenarios.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">TASK_OWNER</span> is used in round maintenance scenarios.
  
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 <code>TASK_OWNER</code>.
+
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 <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">TASK_OWNER</span>.
  
=== <code>ORDERID</code> and <code>GROUPID</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ORDERID</span> and <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GROUPID</span> ===
  
<code>ORDERID</code> and <code>GROUPID</code> can be copied from the <code>SYSREL_ROUND_RELATION</code> relation to generated work packages in a round maintenance scenario.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ORDERID</span> and <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GROUPID</span> can be copied from the <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SYSREL_ROUND_RELATION</span> relation to generated work packages in a round maintenance scenario.
  
 
They can be used to order or group the additional work packages that belong to the generated round work package.
 
They can be used to order or group the additional work packages that belong to the generated round work package.
Line 458: Line 457:
 
=== Purpose ===
 
=== Purpose ===
  
A <code>CyclicMaintenancePlan</code> is used for recurring maintenance work on an asset.
+
A <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">CyclicMaintenancePlan</span> is used for recurring maintenance work on an asset.
  
 
It is the standard maintenance plan type for maintenance activities that repeat according to a defined recurrence pattern.
 
It is the standard maintenance plan type for maintenance activities that repeat according to a defined recurrence pattern.
Line 470: Line 469:
 
* perform annual maintenance on a functional location
 
* perform annual maintenance on a functional location
  
A cyclic maintenance plan uses <code>RRULE</code> to define the recurrence. It also uses <code>SCHEDULING_MODE</code> to define how future dates are calculated.
+
A cyclic maintenance plan uses <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span> to define the recurrence. It also uses <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span> to define how future dates are calculated.
  
 
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;">
 
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;">
'''Key concept:''' <code>SCHEDULING_MODE</code> 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.
+
'''Key concept:''' <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span> 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.
 
</div>
 
</div>
  
Line 488: Line 487:
 
! Notes
 
! Notes
 
|-
 
|-
| <code>RRULE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span>
 
| Defines the recurrence pattern.
 
| Defines the recurrence pattern.
 
| Must be valid and parseable.
 
| Must be valid and parseable.
 
|-
 
|-
| <code>RRULE_START_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_START_DATE</span>
 
| Defines when the recurrence pattern starts.
 
| Defines when the recurrence pattern starts.
 
| Used as the start point for recurrence calculation.
 
| Used as the start point for recurrence calculation.
 
|-
 
|-
| <code>RRULE_UNTIL_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_UNTIL_DATE</span>
 
| Optional end date for the recurrence.
 
| Optional end date for the recurrence.
 
| No further occurrences are generated after this date.
 
| No further occurrences are generated after this date.
 
|-
 
|-
| <code>RRULE_COUNT</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_COUNT</span>
 
| Limits how many work packages can be created from the plan.
 
| Limits how many work packages can be created from the plan.
 
| Further occurrences stop once the count is reached.
 
| Further occurrences stop once the count is reached.
 
|-
 
|-
| <code>SCHEDULING_MODE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span>
| Defines how <code>NEXT_DATE</code> is calculated.
+
| Defines how <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> is calculated.
 
| Supports Calendar-Based and Completion-Based scheduling.
 
| Supports Calendar-Based and Completion-Based scheduling.
 
|}
 
|}
  
=== <code>RRULE</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span> ===
  
<code>RRULE</code> defines the recurrence pattern of a cyclic maintenance plan.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span> defines the recurrence pattern of a cyclic maintenance plan.
  
 
It describes how often the maintenance should occur.
 
It describes how often the maintenance should occur.
Line 523: Line 522:
 
</pre>
 
</pre>
  
The system uses <code>RRULE</code> to calculate future planned execution dates.
+
The system uses <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span> to calculate future planned execution dates.
  
 
<div style="border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;">
 
<div style="border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;">
'''Validation:''' If <code>RRULE</code> is invalid and cannot be parsed, the cyclic maintenance plan is not valid and cannot create work packages.
+
'''Problem:''' If <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span> is invalid and cannot be parsed, the cyclic maintenance plan is not valid and cannot create work packages.
 
</div>
 
</div>
  
=== <code>RRULE_START_DATE</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_START_DATE</span> ===
  
<code>RRULE_START_DATE</code> defines when the recurrence pattern starts.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_START_DATE</span> defines when the recurrence pattern starts.
  
 
The recurrence rule is calculated from this date forward.
 
The recurrence rule is calculated from this date forward.
Line 541: Line 540:
 
! Value
 
! Value
 
|-
 
|-
| <code>RRULE_START_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_START_DATE</span>
 
| 01 January
 
| 01 January
 
|-
 
|-
| <code>RRULE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span>
 
| Monthly on the 15th
 
| Monthly on the 15th
 
|}
 
|}
Line 550: Line 549:
 
The system uses these values to determine valid planned execution dates.
 
The system uses these values to determine valid planned execution dates.
  
=== <code>RRULE_UNTIL_DATE</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_UNTIL_DATE</span> ===
  
<code>RRULE_UNTIL_DATE</code> is an optional end date for the recurrence.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_UNTIL_DATE</span> is an optional end date for the recurrence.
  
 
If this date is configured, no further occurrences are generated after this date.
 
If this date is configured, no further occurrences are generated after this date.
Line 558: Line 557:
 
This can be used for maintenance plans that should only run until a certain date.
 
This can be used for maintenance plans that should only run until a certain date.
  
=== <code>RRULE_COUNT</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_COUNT</span> ===
  
<code>RRULE_COUNT</code> limits how many work packages can be created from the plan.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_COUNT</span> limits how many work packages can be created from the plan.
  
 
Example:
 
Example:
Line 568: Line 567:
 
! Value
 
! Value
 
|-
 
|-
| <code>RRULE_COUNT</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_COUNT</span>
 
| 10
 
| 10
 
|}
 
|}
  
When the number of related generated work packages reaches <code>RRULE_COUNT</code>, the system no longer calculates new occurrences for the plan.
+
When the number of related generated work packages reaches <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_COUNT</span>, the system no longer calculates new occurrences for the plan.
  
=== <code>SCHEDULING_MODE</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span> ===
  
<code>SCHEDULING_MODE</code> defines how <code>NEXT_DATE</code> is calculated for a cyclic maintenance plan.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span> defines how <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> is calculated for a cyclic maintenance plan.
  
<code>SCHEDULING_MODE</code> is only relevant for concrete maintenance plan types that use recurrence logic, such as <code>CyclicMaintenancePlan</code> and <code>RoundMaintenancePlan</code>.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span> is only relevant for concrete maintenance plan types that use recurrence logic, such as <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">CyclicMaintenancePlan</span> and <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RoundMaintenancePlan</span>.
  
 
The supported scheduling modes are:
 
The supported scheduling modes are:
Line 587: Line 586:
 
|-
 
|-
 
| Calendar-Based
 
| Calendar-Based
| Future dates follow the recurrence pattern defined by <code>RRULE</code>.
+
| Future dates follow the recurrence pattern defined by <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span>.
 
|-
 
|-
 
| Completion-Based
 
| Completion-Based
Line 601: Line 600:
 
Calendar-based scheduling is used when maintenance should follow fixed calendar occurrences.
 
Calendar-based scheduling is used when maintenance should follow fixed calendar occurrences.
  
The next planned execution date is calculated according to <code>RRULE</code> and the calendar recurrence.
+
The next planned execution date is calculated according to <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span> and the calendar recurrence.
  
 
This means that delays in completing a work package do not automatically shift the whole future schedule.
 
This means that delays in completing a work package do not automatically shift the whole future schedule.
Line 616: Line 615:
 
=== How Calendar-Based Scheduling Works ===
 
=== How Calendar-Based Scheduling Works ===
  
In calendar-based scheduling, the system calculates <code>NEXT_DATE</code> based on the recurrence rule and the relevant dates of existing generated work packages.
+
In calendar-based scheduling, the system calculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> based on the recurrence rule and the relevant dates of existing generated work packages.
  
 
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.
 
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.
Line 635: Line 634:
 
|-
 
|-
 
| Plan type
 
| Plan type
| <code>CyclicMaintenancePlan</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">CyclicMaintenancePlan</span>
 
|-
 
|-
| <code>LK_ASSET</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_ASSET</span>
 
| Pump 1
 
| Pump 1
 
|-
 
|-
| <code>LK_WP_TMPL</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span>
 
| Pump Inspection Template
 
| Pump Inspection Template
 
|-
 
|-
| <code>LK_REPLICATION_CONFIG</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_REPLICATION_CONFIG</span>
 
| Pump Inspection Replication
 
| Pump Inspection Replication
 
|-
 
|-
| <code>SCHEDULING_MODE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span>
 
| Calendar-Based
 
| Calendar-Based
 
|-
 
|-
| <code>RRULE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span>
 
| Monthly on the 15th
 
| Monthly on the 15th
 
|-
 
|-
| <code>RRULE_START_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_START_DATE</span>
 
| 01 January
 
| 01 January
 
|-
 
|-
| <code>NEXT_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>
 
| 15 March
 
| 15 March
 
|-
 
|-
| <code>LEAD_DAYS</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span>
 
| 3
 
| 3
 
|-
 
|-
| <code>PLAN_STATUS</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_STATUS</span>
 
| Active
 
| Active
 
|-
 
|-
| <code>AUTO_CREATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AUTO_CREATE</span>
 
| Enabled
 
| Enabled
 
|}
 
|}
Line 684: Line 683:
 
! Value
 
! Value
 
|-
 
|-
| <code>PLANNED_START</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span>
 
| 15 March
 
| 15 March
 
|}
 
|}
Line 719: Line 718:
 
=== How Completion-Based Scheduling Works ===
 
=== How Completion-Based Scheduling Works ===
  
In completion-based scheduling, the system recalculates <code>NEXT_DATE</code> after a generated work package is completed.
+
In completion-based scheduling, the system recalculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> after a generated work package is completed.
  
 
The completion date becomes the basis for the next occurrence.
 
The completion date becomes the basis for the next occurrence.
Line 740: Line 739:
 
|-
 
|-
 
| Plan type
 
| Plan type
| <code>CyclicMaintenancePlan</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">CyclicMaintenancePlan</span>
 
|-
 
|-
| <code>LK_ASSET</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_ASSET</span>
 
| Machine 1
 
| Machine 1
 
|-
 
|-
| <code>LK_WP_TMPL</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span>
 
| Machine Service Template
 
| Machine Service Template
 
|-
 
|-
| <code>LK_REPLICATION_CONFIG</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_REPLICATION_CONFIG</span>
 
| Machine Service Replication
 
| Machine Service Replication
 
|-
 
|-
| <code>SCHEDULING_MODE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span>
 
| Completion-Based
 
| Completion-Based
 
|-
 
|-
| <code>RRULE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span>
 
| Every 30 days
 
| Every 30 days
 
|-
 
|-
| <code>RRULE_START_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_START_DATE</span>
 
| 01 March
 
| 01 March
 
|-
 
|-
| <code>NEXT_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>
 
| 15 March
 
| 15 March
 
|-
 
|-
| <code>LEAD_DAYS</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span>
 
| 3
 
| 3
 
|-
 
|-
| <code>PLAN_STATUS</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_STATUS</span>
 
| Active
 
| Active
 
|-
 
|-
| <code>AUTO_CREATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AUTO_CREATE</span>
 
| Enabled
 
| Enabled
 
|}
 
|}
Line 789: Line 788:
 
! Value
 
! Value
 
|-
 
|-
| <code>PLANNED_START</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span>
 
| 15 March
 
| 15 March
 
|}
 
|}
Line 803: Line 802:
 
! Example
 
! Example
 
|-
 
|-
| <code>NEXT_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>
 
| around 19 April
 
| around 19 April
 
|-
 
|-
| <code>LEAD_DAYS</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span>
 
| 3
 
| 3
 
|-
 
|-
| <code>EARLIEST_GENERATION_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span>
 
| around 16 April
 
| around 16 April
 
|}
 
|}
Line 819: Line 818:
 
== Calendar-Based vs Completion-Based Scheduling ==
 
== Calendar-Based vs Completion-Based Scheduling ==
  
The difference is the date that is used as the basis for calculating <code>NEXT_DATE</code>.
+
The difference is the date that is used as the basis for calculating <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>.
  
 
{| class="wikitable" style="width: 100%;"
 
{| class="wikitable" style="width: 100%;"
Line 826: Line 825:
 
! Completion-Based
 
! Completion-Based
 
|-
 
|-
| Basis for <code>NEXT_DATE</code>
+
| Basis for <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>
| Recurrence defined by <code>RRULE</code>
+
| Recurrence defined by <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span>
 
| Actual completion date of the previous generated work package
 
| Actual completion date of the previous generated work package
 
|-
 
|-
Line 849: Line 848:
 
Characteristics:
 
Characteristics:
  
* The plan follows the <code>RRULE</code> calendar pattern.
+
* The plan follows the <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span> calendar pattern.
 
* Future dates are not automatically shifted just because a work package was completed late.
 
* Future dates are not automatically shifted just because a work package was completed late.
* <code>NEXT_DATE</code> can be recalculated after planning updates.
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> can be recalculated after planning updates.
 
* It is useful for fixed maintenance windows and legally or organizationally fixed inspection dates.
 
* It is useful for fixed maintenance windows and legally or organizationally fixed inspection dates.
  
Line 879: Line 878:
  
 
* The plan waits for completion.
 
* The plan waits for completion.
* The completion date is used as the basis for <code>NEXT_DATE</code>.
+
* The completion date is used as the basis for <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>.
 
* If the work is completed late, the future schedule moves.
 
* If the work is completed late, the future schedule moves.
 
* It is useful for service intervals that depend on the actual last maintenance.
 
* It is useful for service intervals that depend on the actual last maintenance.
Line 908: Line 907:
 
=== Purpose ===
 
=== Purpose ===
  
A <code>RoundMaintenancePlan</code> is used for recurring maintenance rounds.
+
A <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RoundMaintenancePlan</span> is used for recurring maintenance rounds.
  
It is a specialized type of cyclic maintenance plan. This means that it also uses <code>RRULE</code> and <code>SCHEDULING_MODE</code>.
+
It is a specialized type of cyclic maintenance plan. This means that it also uses <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span> and <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span>.
  
In addition to the cyclic scheduling logic, a round maintenance plan includes child maintenance plans linked via <code>SYSREL_ROUND_RELATION</code>.
+
In addition to the cyclic scheduling logic, a round maintenance plan includes child maintenance plans linked via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SYSREL_ROUND_RELATION</span>.
  
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 <code>SYSREL_ROUND_RELATION</code>.
+
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 <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SYSREL_ROUND_RELATION</span>.
  
 
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
 
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
'''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 <code>RRULE</code>. The round maintenance plan uses the child plans as configuration for the additional work packages that should be created as part of the round.
+
'''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 <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span>. The round maintenance plan uses the child plans as configuration for the additional work packages that should be created as part of the round.
 
</div>
 
</div>
  
Line 962: Line 961:
 
! Notes
 
! Notes
 
|-
 
|-
| <code>SYSREL_ROUND_RELATION</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SYSREL_ROUND_RELATION</span>
 
| Links the round maintenance plan to its child maintenance plans.
 
| Links the round maintenance plan to its child maintenance plans.
 
| Child plans define additional work packages created as part of the round.
 
| Child plans define additional work packages created as part of the round.
 
|-
 
|-
| <code>PLAN_SELECTION_RULE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_SELECTION_RULE</span>
| Exists on <code>RoundMaintenancePlan</code>.
+
| Exists on <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RoundMaintenancePlan</span>.
 
| Runtime behavior must be verified before documenting further effects.
 
| Runtime behavior must be verified before documenting further effects.
 
|-
 
|-
| <code>ORDERID</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ORDERID</span>
 
| Can exist on the relation between the round plan and a child plan.
 
| Can exist on the relation between the round plan and a child plan.
 
| Can be copied to generated work packages.
 
| Can be copied to generated work packages.
 
|-
 
|-
| <code>GROUPID</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GROUPID</span>
 
| Can exist on the relation between the round plan and a child plan.
 
| Can exist on the relation between the round plan and a child plan.
 
| Can be copied to generated work packages.
 
| Can be copied to generated work packages.
 
|}
 
|}
  
=== <code>SYSREL_ROUND_RELATION</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SYSREL_ROUND_RELATION</span> ===
  
<code>SYSREL_ROUND_RELATION</code> links the round maintenance plan to its child maintenance plans.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SYSREL_ROUND_RELATION</span> links the round maintenance plan to its child maintenance plans.
  
 
The linked child plans define which additional work packages should be generated when the round maintenance plan is due.
 
The linked child plans define which additional work packages should be generated when the round maintenance plan is due.
Line 987: Line 986:
 
When the round plan generates work packages, the system creates:
 
When the round plan generates work packages, the system creates:
  
* one main work package from the round plan’s own <code>LK_WP_TMPL</code>
+
* one main work package from the round plan’s own <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span>
* one additional work package for each child maintenance plan linked via <code>SYSREL_ROUND_RELATION</code>
+
* one additional work package for each child maintenance plan linked via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SYSREL_ROUND_RELATION</span>
  
 
The child maintenance plans do not need to be due themselves for the round maintenance plan to use them during round generation.
 
The child maintenance plans do not need to be due themselves for the round maintenance plan to use them during round generation.
  
=== <code>PLAN_SELECTION_RULE</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_SELECTION_RULE</span> ===
  
<code>PLAN_SELECTION_RULE</code> exists on <code>RoundMaintenancePlan</code>.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_SELECTION_RULE</span> exists on <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RoundMaintenancePlan</span>.
  
 
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
 
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
'''Open point:''' The exact runtime effect of <code>PLAN_SELECTION_RULE</code> should be documented after the implementation behavior has been verified. Until that behavior is confirmed, the wiki should not claim that <code>PLAN_SELECTION_RULE</code> filters child plans by due date, asset, or priority.
+
'''Open point:''' The exact runtime effect of <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_SELECTION_RULE</span> should be documented after the implementation behavior has been verified. Until that behavior is confirmed, the wiki should not claim that <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_SELECTION_RULE</span> filters child plans by due date, asset, or priority.
 
</div>
 
</div>
  
=== <code>ORDERID</code> and <code>GROUPID</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ORDERID</span> and <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GROUPID</span> ===
  
The relation between the round maintenance plan and a linked child maintenance plan can contain <code>ORDERID</code> and <code>GROUPID</code>.
+
The relation between the round maintenance plan and a linked child maintenance plan can contain <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ORDERID</span> and <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">GROUPID</span>.
  
 
When the system creates an additional work package from a linked child maintenance plan, these values can be copied to the generated work package.
 
When the system creates an additional work package from a linked child maintenance plan, these values can be copied to the generated work package.
Line 1,014: Line 1,013:
 
! System behavior
 
! System behavior
 
|-
 
|-
| <code>EARLIEST_GENERATION_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span>
| Calculated from <code>NEXT_DATE</code> and <code>LEAD_DAYS</code>.
+
| Calculated from <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> and <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span>.
 
|-
 
|-
| <code>NEXT_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>
| Calculated or recalculated for <code>CyclicMaintenancePlan</code> and <code>RoundMaintenancePlan</code>.
+
| Calculated or recalculated for <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">CyclicMaintenancePlan</span> and <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RoundMaintenancePlan</span>.
 
|-
 
|-
| <code>LAST_DATE</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LAST_DATE</span>
 
| Updated when a generated work package is completed.
 
| Updated when a generated work package is completed.
 
|-
 
|-
| <code>PLANNED_START</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span>
| Set on generated work packages from the maintenance plan’s <code>NEXT_DATE</code>.
+
| Set on generated work packages from the maintenance plan’s <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>.
 
|-
 
|-
 
| Links on generated work packages
 
| Links on generated work packages
Line 1,030: Line 1,029:
 
|}
 
|}
  
=== <code>EARLIEST_GENERATION_DATE</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span> ===
  
<code>EARLIEST_GENERATION_DATE</code> is calculated by the system from <code>NEXT_DATE</code> and <code>LEAD_DAYS</code>.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span> is calculated by the system from <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> and <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span>.
  
 
<pre>
 
<pre>
Line 1,040: Line 1,039:
 
This value is recalculated when:
 
This value is recalculated when:
  
* <code>NEXT_DATE</code> changes
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> changes
* <code>LEAD_DAYS</code> changes
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span> changes
* <code>NEXT_DATE</code> is recalculated after planning or completion
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> is recalculated after planning or completion
* recurrence settings cause a new <code>NEXT_DATE</code> to be calculated
+
* recurrence settings cause a new <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> to be calculated
  
=== <code>NEXT_DATE</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> ===
  
For <code>CyclicMaintenancePlan</code> and <code>RoundMaintenancePlan</code>, <code>NEXT_DATE</code> can be calculated or recalculated by the system.
+
For <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">CyclicMaintenancePlan</span> and <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RoundMaintenancePlan</span>, <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> can be calculated or recalculated by the system.
  
 
The calculation depends on:
 
The calculation depends on:
  
* <code>RRULE</code>
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span>
* <code>RRULE_START_DATE</code>
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_START_DATE</span>
* <code>RRULE_UNTIL_DATE</code>
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_UNTIL_DATE</span>
* <code>RRULE_COUNT</code>
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_COUNT</span>
* <code>SCHEDULING_MODE</code>
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span>
 
* related generated work packages
 
* related generated work packages
 
* planning events
 
* planning events
 
* completion events
 
* completion events
  
For calendar-based scheduling, <code>NEXT_DATE</code> is calculated from the recurrence pattern and the highest relevant planned or finished date of related generated work packages.
+
For calendar-based scheduling, <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> is calculated from the recurrence pattern and the highest relevant planned or finished date of related generated work packages.
  
For completion-based scheduling, <code>NEXT_DATE</code> is calculated from the completion date of the previous generated work package.
+
For completion-based scheduling, <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> is calculated from the completion date of the previous generated work package.
  
=== <code>LAST_DATE</code> ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LAST_DATE</span> ===
  
<code>LAST_DATE</code> is updated by the system when a generated work package is completed.
+
<span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LAST_DATE</span> is updated by the system when a generated work package is completed.
  
 
It stores the latest completion date of a generated work package related to the maintenance plan.
 
It stores the latest completion date of a generated work package related to the maintenance plan.
Line 1,072: Line 1,071:
 
This value is especially relevant for completion-based scheduling.
 
This value is especially relevant for completion-based scheduling.
  
=== <code>PLANNED_START</code> on Generated Work Packages ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span> on Generated Work Packages ===
  
When the system generates a work package from a maintenance plan, it sets the generated work package’s <code>PLANNED_START</code> to the maintenance plan’s <code>NEXT_DATE</code>.
+
When the system generates a work package from a maintenance plan, it sets the generated work package’s <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span> to the maintenance plan’s <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>.
  
 
Example:
 
Example:
Line 1,089: Line 1,088:
 
The generated work package is linked to:
 
The generated work package is linked to:
  
* the source maintenance plan via <code>LK_MAINTENANCE_PLAN</code>
+
* the source maintenance plan via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MAINTENANCE_PLAN</span>
* the template work package via <code>LK_WP_TMPL</code>
+
* the template work package via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span>
* the assigned asset via <code>LK_ASSET</code>
+
* the assigned asset via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_ASSET</span>
  
For round maintenance plans, additional generated work packages from linked child maintenance plans are assigned to the main round work package via <code>TASK_OWNER</code>.
+
For round maintenance plans, additional generated work packages from linked child maintenance plans are assigned to the main round work package via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">TASK_OWNER</span>.
  
 
== Properties and Events That Trigger Recalculation ==
 
== Properties and Events That Trigger Recalculation ==
Line 1,101: Line 1,100:
 
! Recalculation behavior
 
! Recalculation behavior
 
|-
 
|-
| <code>NEXT_DATE</code> changed
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> changed
| Recalculates <code>EARLIEST_GENERATION_DATE</code>.
+
| Recalculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span>.
 
|-
 
|-
| <code>LEAD_DAYS</code> changed
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span> changed
| Recalculates <code>EARLIEST_GENERATION_DATE</code>.
+
| Recalculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span>.
 
|-
 
|-
| <code>RRULE</code> changed
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span> changed
| Recalculates <code>NEXT_DATE</code> based on the new recurrence rule and selected <code>SCHEDULING_MODE</code>.
+
| Recalculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> based on the new recurrence rule and selected <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span>.
 
|-
 
|-
| <code>RRULE_START_DATE</code> changed
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_START_DATE</span> changed
| Recalculates the schedule and may change <code>NEXT_DATE</code>.
+
| Recalculates the schedule and may change <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>.
 
|-
 
|-
| <code>RRULE_UNTIL_DATE</code> changed
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_UNTIL_DATE</span> changed
 
| Checks whether future occurrences are still available.
 
| Checks whether future occurrences are still available.
 
|-
 
|-
| <code>RRULE_COUNT</code> changed
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_COUNT</span> changed
 
| Checks whether the maximum number of generated work packages has already been reached.
 
| Checks whether the maximum number of generated work packages has already been reached.
 
|-
 
|-
| <code>SCHEDULING_MODE</code> changed
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span> changed
| Recalculates <code>NEXT_DATE</code> according to the selected scheduling mode.
+
| Recalculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> according to the selected scheduling mode.
 
|-
 
|-
| Generated work package <code>PLANNED_START</code> changed
+
| Generated work package <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span> changed
 
| Notifies the linked maintenance plan and may trigger date recalculation.
 
| Notifies the linked maintenance plan and may trigger date recalculation.
 
|-
 
|-
 
| Generated work package completed
 
| Generated work package completed
| Updates <code>LAST_DATE</code> and recalculates <code>NEXT_DATE</code> according to <code>SCHEDULING_MODE</code>.
+
| Updates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LAST_DATE</span> and recalculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> according to <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span>.
 
|}
 
|}
  
=== <code>NEXT_DATE</code> Changed ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> Changed ===
  
When <code>NEXT_DATE</code> changes, the system recalculates <code>EARLIEST_GENERATION_DATE</code>.
+
When <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> changes, the system recalculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span>.
  
 
<pre>
 
<pre>
Line 1,137: Line 1,136:
 
</pre>
 
</pre>
  
=== <code>LEAD_DAYS</code> Changed ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span> Changed ===
  
When <code>LEAD_DAYS</code> changes, the system recalculates <code>EARLIEST_GENERATION_DATE</code>.
+
When <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LEAD_DAYS</span> changes, the system recalculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span>.
  
 
<pre>
 
<pre>
Line 1,145: Line 1,144:
 
</pre>
 
</pre>
  
=== <code>RRULE</code> Changed ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span> Changed ===
  
When <code>RRULE</code> changes, the recurrence pattern changes.
+
When <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span> changes, the recurrence pattern changes.
  
The system recalculates <code>NEXT_DATE</code> based on the new recurrence rule and the selected <code>SCHEDULING_MODE</code>.
+
The system recalculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> based on the new recurrence rule and the selected <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span>.
  
After <code>NEXT_DATE</code> is recalculated, <code>EARLIEST_GENERATION_DATE</code> is recalculated as well.
+
After <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> is recalculated, <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span> is recalculated as well.
  
=== <code>RRULE_START_DATE</code> Changed ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_START_DATE</span> Changed ===
  
When <code>RRULE_START_DATE</code> changes, the start point of the recurrence changes.
+
When <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_START_DATE</span> changes, the start point of the recurrence changes.
  
The system recalculates the schedule. This can change <code>NEXT_DATE</code>.
+
The system recalculates the schedule. This can change <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>.
  
If <code>NEXT_DATE</code> changes, <code>EARLIEST_GENERATION_DATE</code> is recalculated as well.
+
If <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> changes, <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span> is recalculated as well.
  
=== <code>RRULE_UNTIL_DATE</code> Changed ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_UNTIL_DATE</span> Changed ===
  
When <code>RRULE_UNTIL_DATE</code> changes, the end boundary of the recurrence changes.
+
When <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_UNTIL_DATE</span> changes, the end boundary of the recurrence changes.
  
 
The system checks whether future occurrences are still available.
 
The system checks whether future occurrences are still available.
  
If no further occurrence is possible because of <code>RRULE_UNTIL_DATE</code>, the system cannot calculate a new <code>NEXT_DATE</code>.
+
If no further occurrence is possible because of <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_UNTIL_DATE</span>, the system cannot calculate a new <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>.
  
=== <code>RRULE_COUNT</code> Changed ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_COUNT</span> Changed ===
  
When <code>RRULE_COUNT</code> changes, the system checks whether the maximum number of generated work packages has already been reached.
+
When <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_COUNT</span> changes, the system checks whether the maximum number of generated work packages has already been reached.
  
If the number of related generated work packages is greater than or equal to <code>RRULE_COUNT</code>, the system does not calculate further occurrences.
+
If the number of related generated work packages is greater than or equal to <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE_COUNT</span>, the system does not calculate further occurrences.
  
=== <code>SCHEDULING_MODE</code> Changed ===
+
=== <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span> Changed ===
  
When <code>SCHEDULING_MODE</code> changes, the logic for calculating future dates changes.
+
When <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span> changes, the logic for calculating future dates changes.
  
 
Changing to Calendar-Based means that the plan follows the calendar recurrence.
 
Changing to Calendar-Based means that the plan follows the calendar recurrence.
  
Changing to Completion-Based means that the plan calculates <code>NEXT_DATE</code> from the completion of the previous generated work package.
+
Changing to Completion-Based means that the plan calculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> from the completion of the previous generated work package.
  
Because this changes the calculation logic, the system recalculates <code>NEXT_DATE</code> according to the selected <code>SCHEDULING_MODE</code>.
+
Because this changes the calculation logic, the system recalculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> according to the selected <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span>.
  
If <code>NEXT_DATE</code> changes, <code>EARLIEST_GENERATION_DATE</code> is recalculated as well.
+
If <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> changes, <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span> is recalculated as well.
  
=== Generated Work Package <code>PLANNED_START</code> Changed ===
+
=== Generated Work Package <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span> Changed ===
  
When <code>PLANNED_START</code> of a generated work package is set or changed, the work package notifies the linked maintenance plan.
+
When <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span> of a generated work package is set or changed, the work package notifies the linked maintenance plan.
  
For calendar-based cyclic maintenance plans, this can trigger recalculation of <code>NEXT_DATE</code>. The system uses the planning information to continue the calendar-based recurrence.
+
For calendar-based cyclic maintenance plans, this can trigger recalculation of <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>. The system uses the planning information to continue the calendar-based recurrence.
  
For completion-based cyclic maintenance plans, a <code>PLANNED_START</code> change does not drive the recurrence in the same way. <code>NEXT_DATE</code> is mainly calculated after the work package is completed.
+
For completion-based cyclic maintenance plans, a <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLANNED_START</span> change does not drive the recurrence in the same way. <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> is mainly calculated after the work package is completed.
  
 
=== Generated Work Package Completed ===
 
=== Generated Work Package Completed ===
Line 1,205: Line 1,204:
 
</pre>
 
</pre>
  
The system updates <code>LAST_DATE</code>. Then the system recalculates <code>NEXT_DATE</code> according to <code>SCHEDULING_MODE</code>.
+
The system updates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LAST_DATE</span>. Then the system recalculates <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> according to <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SCHEDULING_MODE</span>.
  
 
For calendar-based scheduling:
 
For calendar-based scheduling:
  
 
* the system continues according to the calendar recurrence
 
* the system continues according to the calendar recurrence
* <code>NEXT_DATE</code> is calculated from the recurrence pattern and relevant planned or finished dates
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> is calculated from the recurrence pattern and relevant planned or finished dates
  
 
For completion-based scheduling:
 
For completion-based scheduling:
  
 
* the completion date becomes the basis for the next occurrence
 
* the completion date becomes the basis for the next occurrence
* <code>NEXT_DATE</code> is calculated from the completion date
+
* <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> is calculated from the completion date
  
After <code>NEXT_DATE</code> is updated, <code>EARLIEST_GENERATION_DATE</code> is recalculated.
+
After <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span> is updated, <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span> is recalculated.
  
 
== Work Package Generation Logic ==
 
== Work Package Generation Logic ==
Line 1,232: Line 1,231:
 
| Plan validity
 
| Plan validity
 
| The plan must be valid.
 
| The plan must be valid.
| For cyclic maintenance plans, this requires a valid <code>RRULE</code>, assigned <code>LK_ASSET</code>, and available <code>NEXT_DATE</code>.
+
| For cyclic maintenance plans, this requires a valid <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span>, assigned <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_ASSET</span>, and available <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>.
 
|-
 
|-
 
| Plan status
 
| Plan status
| <code>PLAN_STATUS == Active</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_STATUS == Active</span>
 
| Inactive plans are ignored.
 
| Inactive plans are ignored.
 
|-
 
|-
 
| Automatic generation
 
| Automatic generation
| <code>AUTO_CREATE</code> must be enabled.
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AUTO_CREATE</span> must be enabled.
 
| If disabled, the plan does not automatically create work packages.
 
| If disabled, the plan does not automatically create work packages.
 
|-
 
|-
 
| Template work package
 
| Template work package
| <code>LK_WP_TMPL</code> must be set.
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_WP_TMPL</span> must be set.
 
| The linked work package must be a template work package.
 
| The linked work package must be a template work package.
 
|-
 
|-
 
| Replication configuration
 
| Replication configuration
| <code>LK_REPLICATION_CONFIG</code> must be set.
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_REPLICATION_CONFIG</span> must be set.
 
| Required to copy the template work package.
 
| Required to copy the template work package.
 
|-
 
|-
 
| Earliest generation date
 
| Earliest generation date
| <code>EARLIEST_GENERATION_DATE <= current date</code>
+
| <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE <= current date</span>
 
| The plan may only generate once the earliest generation date has been reached.
 
| The plan may only generate once the earliest generation date has been reached.
 
|-
 
|-
 
| Open work packages
 
| Open work packages
 
| No open generated work package may exist for the plan.
 
| No open generated work package may exist for the plan.
| There must be no generated work package linked via <code>LK_MAINTENANCE_PLAN</code> where <code>ORGA_STATUS != 100</code>.
+
| There must be no generated work package linked via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">LK_MAINTENANCE_PLAN</span> where <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">ORGA_STATUS != 100</span>.
 
|}
 
|}
  
<div style="border-left: 4px solid #d33; background-color: #fff5f5; padding: 10px 12px; margin: 12px 0;">
+
<div style="border-left: 4px solid #f0ad4e; background-color: #fff8e5; padding: 10px 12px; margin: 12px 0;">
'''Important:''' The open work package check prevents the system from creating multiple open work packages for the same maintenance plan.
+
'''Generation rule:''' The open work package check prevents the system from creating multiple open work packages for the same maintenance plan.
 
</div>
 
</div>
  
Line 1,267: Line 1,266:
 
A round maintenance plan creates a main work package for the round.
 
A round maintenance plan creates a main work package for the round.
  
After the main work package has been created, the system processes the maintenance plans linked via <code>SYSREL_ROUND_RELATION</code>.
+
After the main work package has been created, the system processes the maintenance plans linked via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">SYSREL_ROUND_RELATION</span>.
  
 
For each linked child maintenance plan, the system creates an additional work package.
 
For each linked child maintenance plan, the system creates an additional work package.
  
These additional generated work packages are assigned to the main round work package via <code>TASK_OWNER</code>.
+
These additional generated work packages are assigned to the main round work package via <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">TASK_OWNER</span>.
  
 
For child plans used in a round, the system does not care whether the child plan:
 
For child plans used in a round, the system does not care whether the child plan:
  
* has <code>PLAN_STATUS == Active</code>
+
* has <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">PLAN_STATUS == Active</span>
* has <code>AUTO_CREATE == true</code>
+
* has <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">AUTO_CREATE == true</span>
* has a valid <code>RRULE</code>
+
* has a valid <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">RRULE</span>
* has a valid <code>NEXT_DATE</code>
+
* has a valid <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">NEXT_DATE</span>
* is due based on its own <code>EARLIEST_GENERATION_DATE</code>
+
* is due based on its own <span style="font-family: Consolas, 'Courier New', monospace; color: #202122; background-color: #f8f9fa; border: 1px solid #c8ccd1; border-radius: 3px; padding: 1px 4px; white-space: nowrap;">EARLIEST_GENERATION_DATE</span>
  
 
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;">
 
<div style="border-left: 4px solid #36c; background-color: #f8f9fa; padding: 10px 12px; margin: 12px 0;">
Line 1,287: Line 1,286:
 
== See also ==
 
== See also ==
 
* [[MRO (Plugin)]]
 
* [[MRO (Plugin)]]
 
+
* [[MRO_Objects_(Client)]]
{{UnderConstructionEnd}}
+
* [[MRO_Implemented_Objects]]
 +
* [[MRO_Material_Management]]

Latest revision as of 06:42, 19 June 2026

Contents

MRO Maintenance Planning

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.

Overview

A maintenance plan defines the rules for creating work packages. These rules include:

  • when a work package should be created
  • which asset the work package belongs to
  • which template work package is used
  • how the template work package is copied
  • how many days before the planned execution date the work package may be generated
  • how future planning dates are calculated

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.

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.

The fully implemented maintenance plan types in standard MRO are:

  • CyclicMaintenancePlan
  • RoundMaintenancePlan

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.

Important: 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.

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.

Basic Concept

The maintenance planning feature is built around four main parts:

Part Description
MaintenancePlan Defines the rules for creating generated work packages.
Template work package Defines what the generated work package should look like.
Replication configuration Defines how the template work package is copied.
Generated work package The actual work package created by the maintenance plan.

Maintenance Plan

The maintenance plan defines the rules for creating work packages.

This includes, for example:

  • when a work package should be created
  • which asset the work package should belong to
  • how many days before the planned execution date the work package may be created
  • which template work package should be used
  • which recurrence pattern should be used
  • whether future dates are calculated calendar-based or completion-based

Template Work Package

The template work package defines what the generated work package should look like.

It is the source work package that is copied when the maintenance plan creates a new work package.

Rule: Only work packages with ISTEMPLATE set can be used as template work packages.

Replication Configuration

The replication configuration defines how the template work package is copied.

This includes, for example:

  • which properties are copied
  • how referenced objects are handled
  • what the target meta class of the generated work package should be

Generated Work Package

The generated work package is the actual result created by the maintenance plan.

Example:

  1. A pump has to be inspected every month.
  2. A cyclic maintenance plan is created for this pump.
  3. The plan is configured with a monthly recurrence, an assigned asset, a template work package, and a replication configuration.
  4. When the plan becomes due, the system uses a replication job to create a new work package from the configured template work package.
  5. The generated work package is linked back to the maintenance plan via LK_MAINTENANCE_PLAN.

This link allows the maintenance plan to react when the generated work package is planned or completed.

MaintenancePlan Base Class

Purpose

MaintenancePlan is the abstract base class for maintenance planning in MRO.

It provides the common properties and logic required by maintenance plan implementations.

Because MaintenancePlan 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:

  • CyclicMaintenancePlan
  • RoundMaintenancePlan

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.

Base Class Properties

Property Purpose Notes
LK_ASSET Links the maintenance plan to the asset that requires maintenance. Required for a valid cyclic maintenance plan.
LK_WP_TMPL Links the maintenance plan to the template work package. The linked work package must have ISTEMPLATE set.
LK_REPLICATION_CONFIG Links the maintenance plan to the replication configuration. Required for work package generation.
NEXT_DATE Defines the planned execution date of the next maintenance activity. Used as PLANNED_START on generated work packages.
LEAD_DAYS Defines how many days before NEXT_DATE the system may create the work package. Does not define the recurrence interval.
EARLIEST_GENERATION_DATE Defines the earliest date on which the maintenance plan may create a work package. Calculated by the system.
PLAN_STATUS Defines whether the maintenance plan is active or inactive. Only active plans are considered for automatic generation.
AUTO_CREATE Defines whether the system is allowed to automatically create work packages. If disabled, the plan does not automatically create work packages.
LAST_DATE Stores the most recent completion date of a generated work package linked to the maintenance plan. Especially relevant for completion-based scheduling.
PRIORITY Numeric value that can be used to sort maintenance plans. For round maintenance plans, see also PLAN_SELECTION_RULE.

LK_ASSET

LK_ASSET is the link to the asset that requires maintenance.

This can be, for example:

  • equipment
  • a functional location
  • another customized maintainable object deriving from Asset

The generated work package is linked to the same asset.

Requirement: A cyclic maintenance plan requires LK_ASSET to be assigned in order to be valid.

LK_WP_TMPL

LK_WP_TMPL is the link to the template work package.

The template work package defines what the generated work package should look like.

When the maintenance plan creates a work package, the system copies the work package referenced by LK_WP_TMPL.

The linked work package must be a template work package. This means its ISTEMPLATE property must be set.

Requirement: LK_WP_TMPL must be configured before the maintenance plan can create a work package.

LK_REPLICATION_CONFIG

LK_REPLICATION_CONFIG is the link to the replication configuration.

The replication configuration defines how the template work package is copied into a generated work package.

It can define, for example:

  • which properties are copied
  • how references are copied
  • what the target meta class of the generated work package should be

Requirement: LK_REPLICATION_CONFIG must be configured before the maintenance plan can create a work package.

NEXT_DATE

NEXT_DATE defines the planned execution date of the next maintenance activity.

It answers the question: When should the next maintenance work be performed?

NEXT_DATE is not necessarily the date on which the work package is created.

Value Example
NEXT_DATE 15 March
LEAD_DAYS 3
EARLIEST_GENERATION_DATE 12 March

In this example, the system may create the work package on 12 March, but the generated work package is planned for 15 March.

When a work package is generated, the generated work package receives the maintenance plan’s NEXT_DATE as its PLANNED_START.

LEAD_DAYS

LEAD_DAYS defines how many days before NEXT_DATE the system may create the work package.

This is used to create work packages before the actual planned execution date.

Value Example
NEXT_DATE 15 March
LEAD_DAYS 3
Resulting EARLIEST_GENERATION_DATE 12 March

Note: LEAD_DAYS does not define the recurrence interval. It only defines how early the work package may be generated before the planned execution date.

EARLIEST_GENERATION_DATE

EARLIEST_GENERATION_DATE is calculated by the system.

It defines the earliest date on which the maintenance plan may create a work package.

EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS

Example:

Value Example
NEXT_DATE 15 March
LEAD_DAYS 3
EARLIEST_GENERATION_DATE 12 March

The maintenance planning orchestrator searches for active plans where EARLIEST_GENERATION_DATE has been reached.

A plan can be considered for automatic work package generation when:

EARLIEST_GENERATION_DATE <= current date

If EARLIEST_GENERATION_DATE has not yet been reached, no work package is created.

PLAN_STATUS

PLAN_STATUS defines whether the maintenance plan is active or inactive.

Only active plans are considered for automatic work package generation. Inactive plans are ignored by the maintenance planning process.

Typical values are:

  • Inactive
  • Active

This allows users to temporarily disable a maintenance plan without deleting it.

AUTO_CREATE

AUTO_CREATE defines whether the system is allowed to automatically create work packages from the maintenance plan.

If AUTO_CREATE is enabled, the maintenance planning orchestrator can create work packages once the plan is due.

If AUTO_CREATE is disabled, the plan does not automatically create work packages.

LAST_DATE

LAST_DATE stores the date when the most recent generated work package linked to the maintenance plan was completed.

This property is especially important for completion-based scheduling.

Value Example
Previous generated work package completed 20 March
SCHEDULING_MODE Completion-Based
Next date is calculated from 20 March

The system updates LAST_DATE when a generated work package is completed.

PRIORITY

PRIORITY is a numeric value that can be used to sort maintenance plans.

For round maintenance plans, there is also a property called PLAN_SELECTION_RULE.

Open point: The exact effect of PLAN_SELECTION_RULE should only be documented after the implementation behavior has been verified.

Work Package Properties Used by Maintenance Planning

Property Used on Purpose
LK_MAINTENANCE_PLAN Generated work package Links the generated work package back to the maintenance plan that triggered its creation.
LK_WP_TMPL Generated work package Stores the template work package that was used to create the generated work package.
LK_ASSET Generated work package Stores the asset for which the work package was created.
PLANNED_START Generated work package Stores the planned start date of the generated work package.
ORGA_STATUS Generated work package Used to determine whether a generated work package is finished.
TASK_OWNER Additional round work package Assigns additional generated work packages to the main round work package.
ORDERID Additional round work package Can be copied from SYSREL_ROUND_RELATION to structure or order round work packages.
GROUPID Additional round work package Can be copied from SYSREL_ROUND_RELATION to group round work packages.

LK_MAINTENANCE_PLAN

LK_MAINTENANCE_PLAN is set on generated work packages.

It stores the maintenance plan that triggered the creation of the work package.

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.

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.

LK_WP_TMPL

On a generated work package, LK_WP_TMPL stores the template work package that was used to create the generated work package.

This allows users and the system to see which template was used as the source.

LK_ASSET

On a generated work package, LK_ASSET stores the asset for which the work package was created.

This is usually copied or assigned based on the maintenance plan’s LK_ASSET.

PLANNED_START

PLANNED_START stores the planned start date of the generated work package.

When a maintenance plan generates a work package, the system sets:

generated WorkPackage.PLANNED_START = MaintenancePlan.NEXT_DATE

ORGA_STATUS

ORGA_STATUS is used to determine whether a generated work package is finished.

A work package is considered finished when:

ORGA_STATUS == 100

Open work packages are generated work packages linked to the maintenance plan where:

ORGA_STATUS != 100

Generation rule: A maintenance plan does not create another work package while it still has an open generated work package.

TASK_OWNER

TASK_OWNER is used in round maintenance scenarios.

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.

ORDERID and GROUPID

ORDERID and GROUPID can be copied from the SYSREL_ROUND_RELATION relation to generated work packages in a round maintenance scenario.

They can be used to order or group the additional work packages that belong to the generated round work package.

CyclicMaintenancePlan

Purpose

A CyclicMaintenancePlan is used for recurring maintenance work on an asset.

It is the standard maintenance plan type for maintenance activities that repeat according to a defined recurrence pattern.

Examples:

  • inspect a pump every month
  • service a machine every 6 months
  • check safety equipment every Monday
  • replace a filter every 30 days
  • perform annual maintenance on a functional location

A cyclic maintenance plan uses RRULE to define the recurrence. It also uses SCHEDULING_MODE to define how future dates are calculated.

Key concept: SCHEDULING_MODE 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.

The supported scheduling modes are:

  • Calendar-Based
  • Completion-Based

CyclicMaintenancePlan Properties

Property Purpose Notes
RRULE Defines the recurrence pattern. Must be valid and parseable.
RRULE_START_DATE Defines when the recurrence pattern starts. Used as the start point for recurrence calculation.
RRULE_UNTIL_DATE Optional end date for the recurrence. No further occurrences are generated after this date.
RRULE_COUNT Limits how many work packages can be created from the plan. Further occurrences stop once the count is reached.
SCHEDULING_MODE Defines how NEXT_DATE is calculated. Supports Calendar-Based and Completion-Based scheduling.

RRULE

RRULE defines the recurrence pattern of a cyclic maintenance plan.

It describes how often the maintenance should occur.

Examples:

FREQ=DAILY
FREQ=WEEKLY;BYDAY=MO,WE,FR
FREQ=MONTHLY;BYMONTHDAY=15

The system uses RRULE to calculate future planned execution dates.

Problem: If RRULE is invalid and cannot be parsed, the cyclic maintenance plan is not valid and cannot create work packages.

RRULE_START_DATE

RRULE_START_DATE defines when the recurrence pattern starts.

The recurrence rule is calculated from this date forward.

Example:

Setting Value
RRULE_START_DATE 01 January
RRULE Monthly on the 15th

The system uses these values to determine valid planned execution dates.

RRULE_UNTIL_DATE

RRULE_UNTIL_DATE is an optional end date for the recurrence.

If this date is configured, no further occurrences are generated after this date.

This can be used for maintenance plans that should only run until a certain date.

RRULE_COUNT

RRULE_COUNT limits how many work packages can be created from the plan.

Example:

Setting Value
RRULE_COUNT 10

When the number of related generated work packages reaches RRULE_COUNT, the system no longer calculates new occurrences for the plan.

SCHEDULING_MODE

SCHEDULING_MODE defines how NEXT_DATE is calculated for a cyclic maintenance plan.

SCHEDULING_MODE is only relevant for concrete maintenance plan types that use recurrence logic, such as CyclicMaintenancePlan and RoundMaintenancePlan.

The supported scheduling modes are:

Scheduling mode Description
Calendar-Based Future dates follow the recurrence pattern defined by RRULE.
Completion-Based Future dates are calculated from the actual completion date of the previous generated work package.

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.

Calendar-Based Scheduling

Purpose

Calendar-based scheduling is used when maintenance should follow fixed calendar occurrences.

The next planned execution date is calculated according to RRULE and the calendar recurrence.

This means that delays in completing a work package do not automatically shift the whole future schedule.

Use calendar-based scheduling when the maintenance should happen on fixed dates or fixed calendar intervals.

Examples:

  • inspection every 15th day of the month
  • safety check every Monday
  • yearly inspection every January
  • quarterly maintenance in fixed maintenance windows

How Calendar-Based Scheduling Works

In calendar-based scheduling, the system calculates NEXT_DATE based on the recurrence rule and the relevant dates of existing generated work packages.

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.

This means the schedule continues according to the recurrence pattern.

If a work package is completed later than planned, the future schedule does not necessarily move with that completion date.

Example: Calendar-Based Scheduling

A pump must be inspected on the 15th of every month.

Configuration

Setting Value
Plan type CyclicMaintenancePlan
LK_ASSET Pump 1
LK_WP_TMPL Pump Inspection Template
LK_REPLICATION_CONFIG Pump Inspection Replication
SCHEDULING_MODE Calendar-Based
RRULE Monthly on the 15th
RRULE_START_DATE 01 January
NEXT_DATE 15 March
LEAD_DAYS 3
PLAN_STATUS Active
AUTO_CREATE Enabled

Result

The system calculates:

EARLIEST_GENERATION_DATE = 12 March

On or after 12 March, the system can create the work package.

Generated work package:

Property Value
PLANNED_START 15 March

After the work package is planned, the system can calculate the next occurrence:

NEXT_DATE = 15 April

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.

Result: The late completion does not shift the future schedule to 20 April.

Completion-Based Scheduling

Purpose

Completion-based scheduling is used when the next maintenance date should depend on the actual completion date of the previous generated work package.

This means that the interval starts after the work has actually been completed.

Use completion-based scheduling when the maintenance should repeat based on the time since the last completed maintenance activity.

Examples:

  • service every 30 days after the last service
  • inspection 6 months after the previous inspection was completed
  • replacement 90 days after the previous replacement
  • maintenance where a delay should also delay the next cycle

How Completion-Based Scheduling Works

In completion-based scheduling, the system recalculates NEXT_DATE after a generated work package is completed.

The completion date becomes the basis for the next occurrence.

Planning changes alone do not define the next recurrence in the same way as calendar-based scheduling.

Important: The plan waits for the generated work package to be completed. Then the system calculates the next date from the completion date.

Example: Completion-Based Scheduling

A machine must be serviced every 30 days after the previous service was completed.

Configuration

Setting Value
Plan type CyclicMaintenancePlan
LK_ASSET Machine 1
LK_WP_TMPL Machine Service Template
LK_REPLICATION_CONFIG Machine Service Replication
SCHEDULING_MODE Completion-Based
RRULE Every 30 days
RRULE_START_DATE 01 March
NEXT_DATE 15 March
LEAD_DAYS 3
PLAN_STATUS Active
AUTO_CREATE Enabled

Result

The system calculates:

EARLIEST_GENERATION_DATE = 12 March

On or after 12 March, the system can create the work package.

Generated work package:

Property Value
PLANNED_START 15 March

The work package is completed on 20 March.

Because the plan is completion-based, the system calculates the next date from 20 March.

If the recurrence is every 30 days:

Value Example
NEXT_DATE around 19 April
LEAD_DAYS 3
EARLIEST_GENERATION_DATE around 16 April

Result: In this mode, the delay from 15 March to 20 March shifts the future schedule.

Calendar-Based vs Completion-Based Scheduling

The difference is the date that is used as the basis for calculating NEXT_DATE.

Aspect Calendar-Based Completion-Based
Basis for NEXT_DATE Recurrence defined by RRULE Actual completion date of the previous generated work package
Effect of late completion Future dates are not automatically shifted Future dates move with the completion date
Typical use case Fixed maintenance windows, fixed calendar intervals, legal or organizational inspection dates Service intervals that depend on the actual last maintenance
Example Planned: 15 March
Completed: 20 March
Next date: 15 April
Planned: 15 March
Completed: 20 March
Interval: 30 days
Next date: around 19 April

Calendar-Based

Calendar-based scheduling should be used when the maintenance must follow fixed planned dates.

Characteristics:

  • The plan follows the RRULE calendar pattern.
  • Future dates are not automatically shifted just because a work package was completed late.
  • NEXT_DATE can be recalculated after planning updates.
  • It is useful for fixed maintenance windows and legally or organizationally fixed inspection dates.

Example:

Event Date
Planned inspection 15 March
Completed 20 March
Next date 15 April

The future date stays aligned with the calendar recurrence.

Completion-Based

Completion-based scheduling should be used when the next maintenance interval starts after the previous work was completed.

Characteristics:

  • The plan waits for completion.
  • The completion date is used as the basis for NEXT_DATE.
  • If the work is completed late, the future schedule moves.
  • It is useful for service intervals that depend on the actual last maintenance.

Example:

Event Date
Planned service 15 March
Completed 20 March
Interval 30 days
Next date around 19 April

The future date shifts because the work was completed later.

RoundMaintenancePlan

Purpose

A RoundMaintenancePlan is used for recurring maintenance rounds.

It is a specialized type of cyclic maintenance plan. This means that it also uses RRULE and SCHEDULING_MODE.

In addition to the cyclic scheduling logic, a round maintenance plan includes child maintenance plans linked via SYSREL_ROUND_RELATION.

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 SYSREL_ROUND_RELATION.

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 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.

The important configuration on the child plans is their work package generation setup, especially the configured template work package and replication setup.

Generated Result

Example:

Element Example
Round maintenance plan Machine Room Round
Linked child plan 1 Pump 1 Inspection
Linked child plan 2 Pump 2 Inspection
Linked child plan 3 Pump 3 Inspection

Generated main work package:

  • Machine Room Round

Additional generated work packages inside the main round work package:

  • Pump 1 Inspection
  • Pump 2 Inspection
  • Pump 3 Inspection

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.

RoundMaintenancePlan Properties and Relations

Property / relation Purpose Notes
SYSREL_ROUND_RELATION Links the round maintenance plan to its child maintenance plans. Child plans define additional work packages created as part of the round.
PLAN_SELECTION_RULE Exists on RoundMaintenancePlan. Runtime behavior must be verified before documenting further effects.
ORDERID Can exist on the relation between the round plan and a child plan. Can be copied to generated work packages.
GROUPID Can exist on the relation between the round plan and a child plan. Can be copied to generated work packages.

SYSREL_ROUND_RELATION

SYSREL_ROUND_RELATION links the round maintenance plan to its child maintenance plans.

The linked child plans define which additional work packages should be generated when the round maintenance plan is due.

When the round plan generates work packages, the system creates:

  • one main work package from the round plan’s own LK_WP_TMPL
  • one additional work package for each child maintenance plan linked via SYSREL_ROUND_RELATION

The child maintenance plans do not need to be due themselves for the round maintenance plan to use them during round generation.

PLAN_SELECTION_RULE

PLAN_SELECTION_RULE exists on RoundMaintenancePlan.

Open point: The exact runtime effect of PLAN_SELECTION_RULE should be documented after the implementation behavior has been verified. Until that behavior is confirmed, the wiki should not claim that PLAN_SELECTION_RULE filters child plans by due date, asset, or priority.

ORDERID and GROUPID

The relation between the round maintenance plan and a linked child maintenance plan can contain ORDERID and GROUPID.

When the system creates an additional work package from a linked child maintenance plan, these values can be copied to the generated work package.

This can be used to structure, order, or group the additional work packages in the generated round.

Properties Calculated or Updated by the System

Property / link System behavior
EARLIEST_GENERATION_DATE Calculated from NEXT_DATE and LEAD_DAYS.
NEXT_DATE Calculated or recalculated for CyclicMaintenancePlan and RoundMaintenancePlan.
LAST_DATE Updated when a generated work package is completed.
PLANNED_START Set on generated work packages from the maintenance plan’s NEXT_DATE.
Links on generated work packages Required links are set automatically during generation.

EARLIEST_GENERATION_DATE

EARLIEST_GENERATION_DATE is calculated by the system from NEXT_DATE and LEAD_DAYS.

EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS

This value is recalculated when:

  • NEXT_DATE changes
  • LEAD_DAYS changes
  • NEXT_DATE is recalculated after planning or completion
  • recurrence settings cause a new NEXT_DATE to be calculated

NEXT_DATE

For CyclicMaintenancePlan and RoundMaintenancePlan, NEXT_DATE can be calculated or recalculated by the system.

The calculation depends on:

  • RRULE
  • RRULE_START_DATE
  • RRULE_UNTIL_DATE
  • RRULE_COUNT
  • SCHEDULING_MODE
  • related generated work packages
  • planning events
  • completion events

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.

For completion-based scheduling, NEXT_DATE is calculated from the completion date of the previous generated work package.

LAST_DATE

LAST_DATE is updated by the system when a generated work package is completed.

It stores the latest completion date of a generated work package related to the maintenance plan.

This value is especially relevant for completion-based scheduling.

PLANNED_START on Generated Work Packages

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.

Example:

MaintenancePlan.NEXT_DATE: 15 March
Generated WorkPackage.PLANNED_START: 15 March

Links on Generated Work Packages

When the system generates a work package, it automatically sets the required links on the generated work package.

The generated work package is linked to:

  • the source maintenance plan via LK_MAINTENANCE_PLAN
  • the template work package via LK_WP_TMPL
  • the assigned asset via LK_ASSET

For round maintenance plans, additional generated work packages from linked child maintenance plans are assigned to the main round work package via TASK_OWNER.

Properties and Events That Trigger Recalculation

Trigger Recalculation behavior
NEXT_DATE changed Recalculates EARLIEST_GENERATION_DATE.
LEAD_DAYS changed Recalculates EARLIEST_GENERATION_DATE.
RRULE changed Recalculates NEXT_DATE based on the new recurrence rule and selected SCHEDULING_MODE.
RRULE_START_DATE changed Recalculates the schedule and may change NEXT_DATE.
RRULE_UNTIL_DATE changed Checks whether future occurrences are still available.
RRULE_COUNT changed Checks whether the maximum number of generated work packages has already been reached.
SCHEDULING_MODE changed Recalculates NEXT_DATE according to the selected scheduling mode.
Generated work package PLANNED_START changed Notifies the linked maintenance plan and may trigger date recalculation.
Generated work package completed Updates LAST_DATE and recalculates NEXT_DATE according to SCHEDULING_MODE.

NEXT_DATE Changed

When NEXT_DATE changes, the system recalculates EARLIEST_GENERATION_DATE.

EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS

LEAD_DAYS Changed

When LEAD_DAYS changes, the system recalculates EARLIEST_GENERATION_DATE.

EARLIEST_GENERATION_DATE = NEXT_DATE - LEAD_DAYS

RRULE Changed

When RRULE changes, the recurrence pattern changes.

The system recalculates NEXT_DATE based on the new recurrence rule and the selected SCHEDULING_MODE.

After NEXT_DATE is recalculated, EARLIEST_GENERATION_DATE is recalculated as well.

RRULE_START_DATE Changed

When RRULE_START_DATE changes, the start point of the recurrence changes.

The system recalculates the schedule. This can change NEXT_DATE.

If NEXT_DATE changes, EARLIEST_GENERATION_DATE is recalculated as well.

RRULE_UNTIL_DATE Changed

When RRULE_UNTIL_DATE changes, the end boundary of the recurrence changes.

The system checks whether future occurrences are still available.

If no further occurrence is possible because of RRULE_UNTIL_DATE, the system cannot calculate a new NEXT_DATE.

RRULE_COUNT Changed

When RRULE_COUNT changes, the system checks whether the maximum number of generated work packages has already been reached.

If the number of related generated work packages is greater than or equal to RRULE_COUNT, the system does not calculate further occurrences.

SCHEDULING_MODE Changed

When SCHEDULING_MODE changes, the logic for calculating future dates changes.

Changing to Calendar-Based means that the plan follows the calendar recurrence.

Changing to Completion-Based means that the plan calculates NEXT_DATE from the completion of the previous generated work package.

Because this changes the calculation logic, the system recalculates NEXT_DATE according to the selected SCHEDULING_MODE.

If NEXT_DATE changes, EARLIEST_GENERATION_DATE is recalculated as well.

Generated Work Package PLANNED_START Changed

When PLANNED_START of a generated work package is set or changed, the work package notifies the linked maintenance plan.

For calendar-based cyclic maintenance plans, this can trigger recalculation of NEXT_DATE. The system uses the planning information to continue the calendar-based recurrence.

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.

Generated Work Package Completed

When a generated work package is completed, the work package notifies the linked maintenance plan.

A work package is considered completed when:

ORGA_STATUS == 100

The system updates LAST_DATE. Then the system recalculates NEXT_DATE according to SCHEDULING_MODE.

For calendar-based scheduling:

  • the system continues according to the calendar recurrence
  • NEXT_DATE is calculated from the recurrence pattern and relevant planned or finished dates

For completion-based scheduling:

  • the completion date becomes the basis for the next occurrence
  • NEXT_DATE is calculated from the completion date

After NEXT_DATE is updated, EARLIEST_GENERATION_DATE is recalculated.

Work Package Generation Logic

When Is a Plan Ready to Create a Work Package?

A cyclic or round maintenance plan can create a work package only if all required conditions are fulfilled.

Requirement Condition Notes
Plan validity The plan must be valid. For cyclic maintenance plans, this requires a valid RRULE, assigned LK_ASSET, and available NEXT_DATE.
Plan status PLAN_STATUS == Active Inactive plans are ignored.
Automatic generation AUTO_CREATE must be enabled. If disabled, the plan does not automatically create work packages.
Template work package LK_WP_TMPL must be set. The linked work package must be a template work package.
Replication configuration LK_REPLICATION_CONFIG must be set. Required to copy the template work package.
Earliest generation date EARLIEST_GENERATION_DATE <= current date The plan may only generate once the earliest generation date has been reached.
Open work packages No open generated work package may exist for the plan. There must be no generated work package linked via LK_MAINTENANCE_PLAN where ORGA_STATUS != 100.

Generation rule: The open work package check prevents the system from creating multiple open work packages for the same maintenance plan.

Round Work Package Generation

A round maintenance plan creates a main work package for the round.

After the main work package has been created, the system processes the maintenance plans linked via SYSREL_ROUND_RELATION.

For each linked child maintenance plan, the system creates an additional work package.

These additional generated work packages are assigned to the main round work package via TASK_OWNER.

For child plans used in a round, the system does not care whether the child plan:

  • has PLAN_STATUS == Active
  • has AUTO_CREATE == true
  • has a valid RRULE
  • has a valid NEXT_DATE
  • is due based on its own EARLIEST_GENERATION_DATE

Rule: The round plan controls the timing. The child plans define what additional work packages should be created as part of the round.

See also