Control Maintenance Work Order
Overview
A maintenance work order is a particular type of project order that describes a set of tasks that need to be undertaken to maintain an item of plant, equipment, structure or building fabric at a satisfactory operational state. Other types of project order include change orders, move orders, purchase orders and project work orders. These are all dealt with in separate functional parts.
A maintenance work order brings together all of the tasks that need to be performed on one or more assets at a particular point in time. Each task may have associated with it a number of items that need to be consumed in the performance of the task as spares, tools or equipment that assist the task or items consumed during the task (e.g. lubricants).
Each task on a work order may have an associated cost that is derived from the cost of the labor used in its performance and the spares, tools, equipment and consumables that it requires. As well as individual tasks, the complete work order may also have a cost.
Tasks on a work order may individually have labor allocations; however it is more usual for the work order as a whole to have the actors who will execute the work identified. Actor roles may need to be equivalent to any skillsets indicated as needed for the task within a preceding maintenance plan.
Either tasks, or the whole work order, may have associated constraints. These may describe such matters as health and safety requirements or hazards associated with working on an asset etc.
Tasks on a work order, or the complete work order, may be subject to approvals
Descriptions of the relationships between tasks and maintenance work orders are given below. The relationship between tasks and a maintenance schedule is described in the functional part fp_control_maintenance_schedule. Since tasks are related both to the schedule and to a maintenance work order, it is therefore possible to understand the maintenance work order in the context of the schedule.
For a maintenance work order, the following information will be needed:
- Descriptive information about the work order and the 'job' that is represented by the work order
- Type of work order
- Type of maintenance required by the work order.
- Priority of any fault that the work order is to rectify
- Priority of action in the location where the work order is to be executed
- The scheduled frequency of the work order
- Status of the work order
- The maintenance tasks that are to be undertaken with, for each task:
- Identity of the task (using the general form of identification or breakdown structure adopted for the project)
- The name of the task (i.e. how it is presented)
- Any further useful description (which may be provided if required).
- Indication that this is not a milestone task (note that a task is required to be identified as to whether or not it is a milestone; this is not considered to be appropriate for a maintenance plan and the value should therefore be set to FALSE by default.
- The assets on which the work is done
- The time that may be allocated to the task
Suggested modifications to IFC model and documentation
- In IfcRelAssignsTasks, the WHERE rule WR3 requires that the relating control should be of type IfcWorkControl. This would preclude the use of the schedule time control within a project order. There should be no exclusion of this capability within a project order. Therefore, either the WHERE rule should be removed or (more probably) the rule should be amended to allow for time controls on project orders.
- IfcTimeMeasure is indicated in documentation as being generally measured in seconds but needs to also be allowed in different time units according to implementation agreements.
- In the property set Pset_ProjectOrderMaintenanceWorkOrder, the property MaintenaceType is an incorrect spelling and should be MaintenanceType.
Results
Specification of a maintenance work order including the tasks that are to be carried out and the assets on which they will be performed. Additionally, any actors, costs, constraints and/or approvals associated with the maintenance work order will be defined.
| Information Needed | Entity/Pset/Functional Part | MAN | REC | OPT |
|---|---|---|---|---|
| CONCEPT: Specify a maintenance work order that establishes work tasks to be completed and the asset on which the work is to be done For the purposes of this functional part, it is assumed that specific detail of time when the work is to be carried out are dealt with in the maintenance schedule. |
||||
| Define the maintenance work order to which maintenance tasks will be assigned. | ||||
|
||||
|
IfcProjectOrder.GlobalId::fcGloballyUniqueId | |||
|
IfcProjectOrder.OwnerHistory::fp_apply_owner_history | |||
|
IfcProjectOrder.Name::IfcLabel | |||
|
IfcProjectOrder.Description::IfcLabel | |||
|
||||
|
IfcProjectOrder.ID::IfcIdentifier | |||
|
IfcProjectOrder.PredefinedType::IfcProjectOrderTypeEnum = MAINTENANCEWORKORDER | |||
|
IfcProjectOrder.Status::IfcLabel | |||
|
||||
|
Pset_ProjectOrderMaintenanceWorkOrder. ProductDescription::IfcPropertySingleValue::IfcText | |||
|
Pset_ProjectOrderMaintenanceWorkOrder. ShortJobDescription::IfcPropertySingleValue::IfcText | |||
|
Pset_ProjectOrderMaintenanceWorkOrder. LongJobDescription::IfcPropertySingleValue::IfcText | |||
|
Pset_ProjectOrderMaintenanceWorkOrder. WorkTypeRequested::IfcPropertySingleValue::IfcText | |||
|
Pset_ProjectOrderMaintenanceWorkOrder. ContractualType::IfcPropertySingleValue::IfcText | |||
|
Pset_ProjectOrderMaintenanceWorkOrder. IfNotAccomplished::IfcPropertySingleValue::IfcText | |||
|
Pset_ProjectOrderMaintenanceWorkOrder. MaintenanceType::IfcPropertyEnumeratedValue:: PEnum_MaintenanceType | |||
|
Pset_ProjectOrderMaintenanceWorkOrder. FaultPriorityType::IfcPropertyEnumeratedValue:: PEnum_PriorityType | |||
|
Pset_ProjectOrderMaintenanceWorkOrder. LocationPriorityType::IfcPropertyEnumeratedValue:: PEnum_PriorityType | |||
|
Pset_ProjectOrderMaintenanceWorkOrder. ScheduledFrequency:: IfcPropertySingleValue::IfcTimeMeasure | |||
|
||||
|
fp_define_by_properties | |||
| Determine the maintenance tasks to be undertaken. Perform the following actions for each task to be included in the work order. | ||||
|
||||
|
IfcTask.GlobalId::fcGloballyUniqueId | |||
|
OwnerHistory::fp_apply_owner_history | |||
|
IfcTask.Name::IfcLabel | |||
|
IfcTask.Description::IfcLabel | |||
|
||||
|
IfcTask.ObjectType::IfcLabel | |||
|
||||
|
IfcTask.TaskId::IfcIdentifier | |||
|
IfcTask.IsMilestone::BOOLEAN = FALSE | |||
|
IfcTask.Status::IfcLabel | |||
|
IfcTask.WorkMethod::IfcLabel | |||
|
IfcTask.Priority::INTEGER | |||
|
fp_nests (IfcTask) | |||
|
||||
|
IfcScheduleTimeControl.ActualStart::fp_select_date_time | |||
|
IfcScheduleTimeControl.EarlyStart::fp_select_date_time | |||
|
IfcScheduleTimeControl.LateStart::fp_select_date_time | |||
|
IfcScheduleTimeControl.ScheduleStart::fp_select_date_time | |||
|
IfcScheduleTimeControl.ActualFinish::fp_select_date_time | |||
|
IfcScheduleTimeControl.EarlyFinish::fp_select_date_time | |||
|
IfcScheduleTimeControl.LateFinish::fp_select_date_time | |||
|
IfcScheduleTimeControl.ScheduleFinish::fp_select_date_time | |||
|
IfcScheduleTimeControl.ScheduleDuration::IfcTimeMeasure | |||
|
IfcScheduleTimeControl.ActualDuration::IfcTimeMeasure | |||
|
IfcScheduleTimeControl.RemainingTime::IfcTimeMeasure | |||
|
IfcScheduleTimeControl.FreeFloat::IfcTimeMeasure | X | X | X |
|
IfcScheduleTimeControl.TotalFloat::IfcTimeMeasure | X | X | X |
|
IfcScheduleTimeControl.IsCritical::BOOLEAN | X | X | X |
|
IfcScheduleTimeControl.StatusTime::fp_select_date_time | |||
|
IfcScheduleTimeControl.StartFloat::IfcTimeMeasure | X | X | X |
|
IfcScheduleTimeControl.FinishFloat::IfcTimeMeasure | X | X | X |
|
IfcScheduleTimeControl.Completion::IfcPositiveRatioMeasure | |||
|
||||
|
IfcRelAssignsTasks.RelatingControl::IfcProjectOrder::PredefinedType = MAINTENANCEWORKORDER | |||
|
IfcRelAssignsTasks.RelatedObjects::IfcTask | |||
|
IfcRelAssignsTasks.RelatedObjectsType::IfcObjectTypeEnum = 'PROCESS' | |||
|
IfcRelAssignsTasks.TimeForTask::IfcScheduleTimeControl | |||
|
IfcRelAssignsTasks.GlobalId::IfcGloballyUniqueId | |||
|
IfcRelAssignsTasks.OwnerHistory::fp_apply_owner_history | |||
|
IfcRelAssignsTasks.Name::IfcLabel | |||
|
IfcRelAssignsTasks.Description::IfcLabel | |||
|
||||
|
||||
|
fp_assign_construction_resource_to_task (IfcConstructionEquipmentResource) | |||
|
fp_assign_construction_resource_to_task (IfcConstructionMaterialResource) | |||
|
fp_assign_construction_resource_to_task (IfcConstructionProductResource) | |||
|
fp_assign_construction_resource_to_task (IfcCrewResource) | |||
|
fp_assign_construction_resource_to_task (IfcLaborResource) | |||
|
fp_assign_construction_resource_to_task (IfcSubContractResource) | |||
|
||||
|
fp_model_asset | |||
|
||||
|
IfcRelAssignsToProjectOrder.RelatingControl::IfcProjectOrder::PredefinedType = MAINTENANCEWORKORDER | |||
|
IfcRelAssignsToProjectOrder.RelatedObjects:: IfcTask | |||
|
IfcRelAssignsToProjectOrder.RelatedObjectsType ::IfcObjectTypeEnum = 'GROUP' | |||
|
IfcRelAssignsToProjectOrder.GlobalId::IfcGloballyUniqueId | |||
|
IfcRelAssignsToProjectOrder.OwnerHistory::fp_apply_owner_history | |||
|
IfcRelAssignsToProjectOrder.Name::IfcLabel | |||
|
IfcRelAssignsToProjectOrder.Description::IfcLabel | |||
|
||||
|
fp_associate_constraint | |||
|
fp_associate_cost |
IFC Entities Required
- IfcControl
- IfcElement
- IfcGroup
- IfcObject
- IfcObjectDefinition
- IfcProcess
- IfcProduct
- IfcRelationship
- IfcRelAssigns
- IfcRelAssignsTasks
- IfcRelAssignsToControl
- IfcRelAssignsToProcess
- IfcRelAssignsToProjectOrder
- IfcRelAssociates
- IfcRelConnects
- IfcRelSequences
- IfcRoot
- IfcScheduleTimeControl
- IfcTask
IFC Datatypes Required
- IfcGloballyUniqueId
- IfcIdentifier
- IfcLabel
- IfcObjectTypeEnum
- IfcPositiveRatioMeasure
- IfcProjectOrderTypeEnum
- IfcText
- IfcTimeMeasure
IFC Functions Required
- -
IFC Property Sets Required
- Pset_ProjectOrderMaintenanceWorkOrder
IDM Functional Parts Required
- fp_apply_owner_history
- fp_assign_construction_resource_to_task
- fp_associate_constraint
- fp_associate_cost
- fp_define_by_properties
- fp_model_asset
- fp_place_object
- fp_represent_product
- fp_select_actor
- fp_select_date_time
EXPRESS Schema
SCHEMA FP_CONTROL_MAINTENANCE_WORK_ORDER;
TYPE IfcGloballyUniqueId = STRING (22) FIXED;
END_TYPE;
TYPE IfcIdentifier = STRING;
END_TYPE;
TYPE IfcLabel = STRING;
END_TYPE;
TYPE IfcPositiveRatioMeasure = REAL;
WHERE
WR1 : SELF > 0;
END_TYPE;
TYPE IfcText = STRING;
END_TYPE;
TYPE IfcTimeMeasure = REAL;
END_TYPE;
TYPE IfcObjectTypeEnum = ENUMERATION OF
(PRODUCT,
PROCESS,
CONTROL,
RESOURCE,
ACTOR,
GROUP,
PROJECT,
NOTDEFINED);
END_TYPE;
TYPE IfcProjectOrderTypeEnum = ENUMERATION OF
(CHANGEORDER,
MAINTENANCEWORKORDER,
MOVEORDER,
PURCHASEORDER,
WORKORDER,
USERDEFINED,
NOTDEFINED);
END_TYPE;
ENTITY IfcProduct
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcObject);
Representation : OPTIONAL fp_represent_product;
ObjectPlacement : OPTIONAL fp_place_object;
WHERE
WR1 : (EXISTS(Representation) AND EXISTS(ObjectPlacement))
OR (EXISTS(Representation) AND
(NOT('IFC2X2_FINAL.IFCPRODUCTDEFINITIONSHAPE' IN TYPEOF(Representation))))
OR (NOT(EXISTS(Representation)));
END_ENTITY;
ENTITY IfcObject
ABSTRACT SUPERTYPE OF (ONEOF(IfcActor, IfcControl, IfcProcess, IfcProduct))
SUBTYPE OF(IfcObjectDefinition);
ObjectType : OPTIONAL IfcLabel;
WHERE
WR1 : SIZEOF(QUERY(temp <\* IsDefinedBy \| 'IFC2X2_FINAL.IFCRELDEFINESBYTYPE' IN TYPEOF(temp))) <= 1;
END_ENTITY;
ENTITY IfcRoot
ABSTRACT SUPERTYPE OF (ONEOF(IfcRelationship, IfcObjectDefinition));
GlobalId : IfcGloballyUniqueId;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
OwnerHistory : fp_apply_owner_history;
UNIQUE
UR1 : GlobalId;
END_ENTITY;
ENTITY IfcRelationship
ABSTRACT SUPERTYPE OF (ONEOF(IfcRelAssigns, IfcRelAssociates, IfcRelConnects))
SUBTYPE OF(IfcRoot);
END_ENTITY;
ENTITY IfcRelAssigns
ABSTRACT SUPERTYPE OF (ONEOF(IfcRelAssignsToControl, IfcRelAssignsToProcess))
SUBTYPE OF(IfcRelationship);
RelatedObjects : SET [1:?] OF IfcObject;
RelatedObjectsType : OPTIONAL IfcObjectTypeEnum;
WHERE
WR1 : IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);
END_ENTITY;
ENTITY IfcActor
SUBTYPE OF(IfcObject);
TheActor : fp_select_actor;
END_ENTITY;
ENTITY IfcRelAssignsToControl
SUPERTYPE OF (ONEOF(IfcRelAssignsTasks, IfcRelAssignsToProjectOrder))
SUBTYPE OF(IfcRelAssigns);
RelatingControl : IfcControl;
WHERE
WR1 : SIZEOF(QUERY(Temp <\* SELF\IfcRelAssigns.RelatedObjects \| RelatingControl :=: Temp)) = 0;
END_ENTITY;
ENTITY IfcRelAssignsTasks
SUBTYPE OF(IfcRelAssignsToControl);
TimeForTask : OPTIONAL IfcScheduleTimeControl;
WHERE
WR1 : HIINDEX(SELF\IfcRelAssigns.RelatedObjects) = 1;
WR2 : 'IFC2X2_FINAL.IFCTASK' IN TYPEOF(SELF\IfcRelAssigns.RelatedObjects[1]);
WR3 : 'IFC2X2_FINAL.IFCWORKCONTROL' IN TYPEOF(SELF\IfcRelAssignsToControl.RelatingControl);
END_ENTITY;
ENTITY IfcScheduleTimeControl
SUBTYPE OF(IfcControl);
ActualStart : OPTIONAL fp_select_date_time;
EarlyStart : OPTIONAL fp_select_date_time;
LateStart : OPTIONAL fp_select_date_time;
ScheduleStart : OPTIONAL fp_select_date_time;
ActualFinish : OPTIONAL fp_select_date_time;
EarlyFinish : OPTIONAL fp_select_date_time;
LateFinish : OPTIONAL fp_select_date_time;
ScheduledFinish : OPTIONAL fp_select_date_time;
ScheduleDuration : OPTIONAL IfcTimeMeasure;
ActualDuration : OPTIONAL IfcTimeMeasure;
RemainingTime : OPTIONAL IfcTimeMeasure;
FreeFloat : OPTIONAL IfcTimeMeasure;
TotalFloat : OPTIONAL IfcTimeMeasure;
IsCritical : OPTIONAL BOOLEAN;
StatusTime : OPTIONAL fp_select_date_time;
StartFloat : OPTIONAL IfcTimeMeasure;
FinishFloat : OPTIONAL IfcTimeMeasure;
Completion : OPTIONAL IfcPositiveRatioMeasure;
INVERSE
ScheduleTimeControlAssigned : IfcRelAssignsTasks FOR TimeForTask;
END_ENTITY;
ENTITY IfcControl
ABSTRACT SUPERTYPE OF (ONEOF(IfcProjectOrder, IfcScheduleTimeControl))
SUBTYPE OF(IfcObject);
INVERSE
Controls : SET OF IfcRelAssignsToControl FOR RelatingControl;
END_ENTITY;
ENTITY IfcProjectOrder
SUBTYPE OF(IfcControl);
Id : IfcIdentifier;
PredefinedType : IfcProjectOrderTypeEnum;
Status : OPTIONAL IfcLabel;
UNIQUE
UR2 : Id;
END_ENTITY;
ENTITY IfcRelAssignsToProjectOrder
SUBTYPE OF(IfcRelAssignsToControl);
END_ENTITY;
ENTITY IfcRelConnects
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcRelationship);
END_ENTITY;
ENTITY IfcElement
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcProduct);
Tag : OPTIONAL IfcIdentifier;
END_ENTITY;
ENTITY IfcRelSequence
SUBTYPE OF(IfcRelConnects);
RelatingProcess : IfcProcess;
RelatedProcess : IfcProcess;
TtimeLag : IfcTimeMeasure;
WHERE
WR1 : RelatingProcess :<>: RelatedProcess;
END_ENTITY;
ENTITY IfcProcess
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcObject);
INVERSE
OperatesOn : SET OF IfcRelAssignsToProcess FOR RelatingProcess;
IsSuccessorFrom : SET OF IfcRelSequence FOR RelatedProcess;
IsPredecessorTo : SET OF IfcRelSequence FOR RelatingProcess;
END_ENTITY;
ENTITY IfcTask
SUBTYPE OF(IfcProcess);
TaskId : IfcIdentifier;
Status : OPTIONAL IfcLabel;
WorkMethod : OPTIONAL IfcLabel;
IsMilestone : BOOLEAN;
Priority : OPTIONAL INTEGER;
WHERE
WR1 : SIZEOF(QUERY(temp <\* SELF\IfcObject.Decomposes \| NOT('IFC2X2_FINAL.IFCRELNESTS' IN TYPEOF(temp)))) = 0;
WR2 : SIZEOF(QUERY(temp <\* SELF\IfcObject.IsDecomposedBy \| NOT('IFC2X2_FINAL.IFCRELNESTS' IN TYPEOF(temp)))) = 0;
WR3 : EXISTS(SELF\IfcRoot.Name);
END_ENTITY;
ENTITY IfcRelAssignsToProcess
SUBTYPE OF(IfcRelAssigns);
RelatingProcess : IfcProcess;
WHERE
WR1 : SIZEOF(QUERY(Temp <\* SELF\IfcRelAssigns.RelatedObjects \| RelatingProcess :=: Temp)) = 0;
END_ENTITY;
ENTITY IfcRelAssociates
SUBTYPE OF(IfcRelationship);
RelatedObjects : SET [1:?] OF IfcRoot;
WHERE
WR1 : SIZEOF(QUERY(temp <\* RelatedObjects \|
NOT(('IFC2X2_FINAL.IFCOBJECT' IN TYPEOF(temp))
OR ('IFC2X2_FINAL.IFCPROPERTYDEFINITION' IN TYPEOF(temp)))
)) = 0;
END_ENTITY;
ENTITY IfcRelAssociatesAppliedValue
SUBTYPE OF(IfcRelAssociates);
END_ENTITY;
ENTITY IfcObjectDefinition
SUBTYPE OF(IfcRoot);
INVERSE
HasAssignments : SET OF IfcRelAssigns FOR RelatedObjects;
HasAssociations : SET OF IfcRelAssociates FOR RelatedObjects;
END_ENTITY;
ENTITY fp_apply_owner_history;
END_ENTITY;
ENTITY fp_assign_construction_resource_to_task;
END_ENTITY;
ENTITY fp_associate_constraint;
END_ENTITY;
ENTITY fp_associate_cost;
END_ENTITY;
ENTITY fp_define_by_properties;
END_ENTITY;
ENTITY fp_model_asset;
END_ENTITY;
ENTITY fp_place_object;
END_ENTITY;
ENTITY fp_represent_product;
END_ENTITY;
ENTITY fp_select_actor;
END_ENTITY;
ENTITY fp_select_date_time;
END_ENTITY;
END_SCHEMA;