Model Asset
Overview
Provides the information concerning assets where an asset is a grouping of elements that are identified together for financial or operational or maintenance purposes. Any type of physical element or product may be grouped into an asset.
Items grouped within an asset may be individual elements of groups of elements that are already grouped into an asset but that are treated as being further grouped within a 'super' asset. Such contained assets are described below as sub assets but are recognised within the schema as assets in their own right.
Assets
An asset can be either a single object or may be a group of objects upon which a single maintenance action is to be specified. For instance, the following scenarios can be envisaged for asset identification:-
- A large element such as an air handling unit, boiler or transformer will probably be uniquely identified as an asset.
- An asset may be an 'assembled group' where several individual elements are physically assembled. An example of a physical association in the illustration is the pump set which is brings together the two pumps and four valves shown (it may also include other elements such as strainers). In this case, the asset may be defined as the grouping of the multiple elements or as a group containing the assembly alone (selection of the approach is a strategic decision by the Facilities Manager and is not relevant to the schema)
- An asset may be a 'group' where several items are spatially associated. Spatial association means that the individual elements within the group remain distinct but that they are all treated as though they were a single element for maintenance purposes. An example of a spatial association in the illustration is the luminaires, each of which is physically distinct but which act together to illuminate the plant room space and are maintained together e.g. for relamping.
- An asset may be declared as a group of elements with a system identity such as the steam traps within a system (or subsystem) where a maintenance action can only be carried out when the system is closed down.
- An asset may be declared as a group of elements that may be geographically located in different buildings or even on different sites within the same project but that are subject to maintenance at the same time. For instance, for an asset that contains specialist equipment, it might be appropriate to arrange for preventive maintenance to be carried out on all items of such equipment within a particular geographical region when the skilled human resource available to perform the maintenance work is available.
Note that for the purposes of this functional part, maintenance is always carried out on an asset and not on an element. Even where an element is sufficiently large or complex to warrant a maintenance action in its own right, it is considered that it should be declared and identified as an asset for the owner as well as being identified as a product by its manufacturer.
Sub-Assets
Although work is carried out against the asset, information may need to be subdivided to take into account smaller element groupings within the asset. These smaller element groupings are referred to here as sub assets.
Sub-assets, and their constituent elements, may have a different life cycle than the asset as a whole. For instance, an air handling unit asset may have a fan motor and drive set specified as a sub-asset. The belts used to drive the fan may be consumable components i.e. they wear out and require replacing far more frequently than the air handling unit.
Sub assets within an air handling unit asset may include:
- Fan (motor[s], impeller, drive wheels and belts)
- Filter
- Preheater coil
- Reheater coil
- Cooling coil
- Dampers (fresh air and recirculation)
- Moisture eliminator
- Humidifier
Information Provision
The information that should, or may be provided directly about an asset includes:
- The specific identifier given to the asset which is unique within the project or enterprise to which the asset is registered
- Cost values for the asset including original cost (or value) current cost, replacement cost, depreciated cost
- Actors associated with the asset including owner, user, responsible person
Information that may be provided indirectly about an asset through the provision of property sets includes accounting, tax and insurance type identification.
Suggested modifications to IFC model and documentation
* Documentation for Pset_Asset.AssetAccountingType refers to type of risk and not to accounting type. Change definition.
* In the documentation for Pset_Asset.AssetTaxType, the predefined type 'Capitalised' is spelt in UK form and not in US form as mandated through IFC. Change this to 'Capitalized'
Results
Specification of relevant information concerning the asset and the elements and/or sub-assets from which it is composed.
| Description | Entity/Pset/Functional Part | MAN | REC | OPT |
|---|---|---|---|---|
| Establish and identify the asset | ||||
|
IfcAsset | |||
|
||||
|
IfcAsset.GlobalId::IfcGloballyUniqueId | |||
|
IfcAsset.OwnerHistory::fp_apply_owner_history | |||
|
IfcAsset.Name::IfcLabel | |||
|
IfcAsset.Description::IfcText | |||
|
||||
|
IfcAsset.AssetID::IfcIdentifier | |||
|
||||
|
IfcAsset.IncorporationDate::IfcCalendarDate | |||
|
IfcCalendarDate.YearComponent::IfcYearNumber | |||
|
IfcCalendarDate.MonthComponent::IfcMonthInYearNumber | |||
|
IfcCalendarDate.DayComponent::IfcDayInMonthNumber | |||
| Assert cost information about the asset
Note that all information asserted below is for costs that are explicitly attributable to an asset and that comprise the key cost information within an asset register. Other costs may be associated with an asset through the IfcRelAssociatesAppliedValue relationship. |
||||
|
IfcAsset.OriginalValue::IfcCostValue | |||
|
IfcAsset.OriginalValue::IfcCostValue | |||
|
IfcAsset.TotalReplacementCost::IfcCostValue | |||
|
IfcAsset.DepreciatedValue::IfcCostValue | |||
|
||||
|
IfcAsset.Owner::fp_select_actor | |||
|
IfcAsset.User::fp_select_actor | |||
|
IfcAsset.ResponsiblePerson::IfcPerson | |||
|
||||
bq_* Fixed_ |
Pset_Asset.AssetAccountingType::IfcPropertyEnumeratedValue | |||
bq_* Capitalized_ |
Pset_Asset.AssetTaxType::IfcPropertyEnumeratedValue | |||
bq_* Personal_ |
Pset_Asset.AssetInsuranceType::IfcPropertyEnumeratedValue | |||
|
||||
|
fp_define_by_properties | |||
| Specify the elements that are to participate in the asset.
Note that, for an asset, a WHERE rule is applied that constrains the related objects to be subtypes of IfcElement |
IfcElement<subtype> | |||
|
IfcElement.ObjectPlacement::fp_place_object | |||
|
IfcElement.Representation::fp_represent_product | |||
| Specify any sub assets that are to be contained within the asset
See above in this functional part for attributes to be asserted. |
IfcAsset | |||
| Assert the relationship that assigns the set of elements and sub assets that will participate in the asset
This is defined in a separate functional part. Note that where an asset incorporates one or more sub assets, the specification of elements must be disjoint. That is, there can only be one occurrence of any element within the fully expanded asset container. This means that an occurrence of an element can only appear once within an asset element hierarchy regardless of the level at which it appears within that hierarchy. |
fp_assigns_to_group (asset) |
IFC Entities Required
- IfcAppliedValue
- IfcAsset
- IfcCalendarDate
- IfcCostValue
- IfcElement
- IfcGroup
- IfcObject
- IfcProduct
- IfcProxy
- IfcRelationship
- IfcRelAssociates
- IfcRelAssociatesAppliedValue
- IfcRoot
- IfcSystem
IFC Datatypes Required
- IfcAppliedValueSelect
- IfcDayInMonthNumber
- IfcGloballyUniqueId
- IfcIdentifier
- IfcLabel
- IfcMonetaryMeasure
- IfcMonthInYearNumber
- IfcObjectTypeEnum
- IfcText
- IfcYearNumber
IFC Functions Required
- IfcValidCalendarDate
IFC Property Sets Required
- Pset_Asset
IDM Functional Parts Required
- fp_apply_owner_history
- fp_define_by_properties
- fp_place_object
- fp_measure_with_unit
- fp_represent_product
- fp_select_actor
- fp_select_date_time
EXPRESS-G
EXPRESS Schema
SCHEMA FP_MODEL_ASSET;
TYPE IfcDayInMonthNumber = INTEGER;
END_TYPE;
TYPE IfcGloballyUniqueId = STRING (22) FIXED;
END_TYPE;
TYPE IfcIdentifier = STRING;
END_TYPE;
TYPE IfcLabel = STRING;
END_TYPE;
TYPE IfcMonetaryMeasure = REAL;
END_TYPE;
TYPE IfcMonthInYearNumber = INTEGER;
WHERE
WR1 : { 1<= SELF <= 12 };
END_TYPE;
TYPE IfcText = STRING;
END_TYPE;
TYPE IfcYearNumber = INTEGER;
END_TYPE;
TYPE IfcObjectTypeEnum = ENUMERATION OF
(PRODUCT,
PROCESS,
CONTROL,
RESOURCE,
ACTOR,
GROUP,
PROJECT,
NOTDEFINED);
END_TYPE;
TYPE IfcAppliedValueSelect = SELECT
(IfcMonetaryMeasure,
fp_measure_with_unit);
END_TYPE;
ENTITY IfcCalendarDate;
DayComponent : IfcDayInMonthNumber;
MonthComponent : IfcMonthInYearNumber;
YearComponent : IfcYearNumber;
WHERE
WR21 : IfcValidCalendarDate (SELF);
END_ENTITY;
ENTITY IfcCostValue
SUBTYPE OF(IfcAppliedValue);
CostType : IfcLabel;
Condition : OPTIONAL IfcText;
END_ENTITY;
ENTITY IfcAppliedValue
ABSTRACT SUPERTYPE;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
AppliedValue : OPTIONAL IfcAppliedValueSelect;
UnitBasis : fp_measure_with_unit;
ApplicableDate : fp_select_date_time;
FixedUntilDate : fp_select_date_time;
WHERE
WR1 : EXISTS (AppliedValue) OR
EXISTS (ValueOfComponents);
END_ENTITY;
ENTITY IfcProduct
ABSTRACT SUPERTYPE OF (ONEOF(IfcElement, IfcProxy))
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(IfcGroup, IfcProduct))
SUBTYPE OF(IfcRoot);
ObjectType : OPTIONAL IfcLabel;
INVERSE
HasAssociations : SET OF IfcRelAssociates FOR RelatedObjects;
WHERE
WR1 : SIZEOF(QUERY(temp <* IsDefinedBy | 'IFC2X2_FINAL.IFCRELDEFINESBYTYPE' IN TYPEOF(temp))) <= 1;
END_ENTITY;
ENTITY IfcRoot
ABSTRACT SUPERTYPE OF (ONEOF(IfcObject, IfcRelationship));
GlobalId : IfcGloballyUniqueId;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
OwnerHistory : fp_apply_owner_history;
UNIQUE
UR1 : GlobalId;
END_ENTITY;
ENTITY IfcRelationship
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcRoot);
END_ENTITY;
ENTITY IfcElement
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcProduct);
Tag : OPTIONAL IfcIdentifier;
END_ENTITY;
ENTITY IfcGroup
SUBTYPE OF(IfcObject);
END_ENTITY;
ENTITY IfcAsset
SUBTYPE OF(IfcGroup);
AssetId : IfcIdentifier;
OriginalValue : IfcCostValue;
CurrentValue : IfcCostValue;
TotalReplacementCost : IfcCostValue;
Owner : fp_select_actor;
User : fp_select_actor;
IncorporationDate : IfcCalendarDate;
DepreciatedValue : IfcCostValue;
WHERE
WR1 : SIZEOF(QUERY(Temp <* SELF\IfcGroup.IsGroupedBy.RelatedObjects | NOT('IFC2X2_FINAL.IFCELEMENT' IN TYPEOF(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);
RelatingAppliedValue : IfcAppliedValue;
END_ENTITY;
ENTITY IfcProxy
SUBTYPE OF(IfcProduct);
ProxyType : IfcObjectTypeEnum;
Tag : OPTIONAL IfcLabel;
WHERE
WR1 : EXISTS(SELF\IfcRoot.Name);
END_ENTITY;
ENTITY fp_apply_owner_history;
END_ENTITY;
ENTITY fp_represent_product;
END_ENTITY;
ENTITY fp_measure_with_unit;
END_ENTITY;
ENTITY fp_place_object;
END_ENTITY;
ENTITY fp_define_by_properties;
END_ENTITY;
ENTITY fp_select_actor;
END_ENTITY;
ENTITY fp_select_date_time;
END_ENTITY;
FUNCTION IfcValidCalendarDate
(Date : IfcCalendarDate)
: LOGICAL;
IF NOT ({1 <= Date.DayComponent <= 31}) THEN
RETURN(FALSE);
END_IF;
CASE Date.MonthComponent OF
4 : RETURN({ 1<= Date.DayComponent <= 30});
6 : RETURN({ 1<= Date.DayComponent <= 30});
9 : RETURN({ 1<= Date.DayComponent <= 30});
11 : RETURN({ 1<= Date.DayComponent <= 30});
2 :
BEGIN
IF (IfcLeapYear(Date.YearComponent)) THEN
RETURN({ 1<= Date.DayComponent <= 29});
ELSE
RETURN({ 1<= Date.DayComponent <= 28});
END_IF;
END;
OTHERWISE : RETURN(TRUE);
END_CASE;
END_FUNCTION;
END_SCHEMA;