Model Inventory
Overview
This functional part enables an inventory of various types of element to be compiled as explicit objects. These are the typical inventories that would be expected within a facilities management requirement and enable lists of equipment to be maintained together with financial information concerning the items in the inventory.
The major types of inventory that can be captured include:
- Asset
- Furniture
- Space
In addition, user defined inventories can be defined for particular types of element. Such lists may be useful when developing operating and maintenance information.
Information that can be included within an inventory includes:
- Identifier of the type of inventory (asset, furniture or space)
- The list of elements (furniture), groups (assets) or spaces that comprise the inventory
- The organizational unit within whose jurisdiction the inventory falls
- The identity of the person whose responsibility it is to maintain the inventory
- The date on which the inventory was last updated
- The current value of the inventory (totalled from the value of the contents)
- The initial value of the inventory
Basic Development of Inventory
Technically, an inventory is simply a group that is constrained by certain rules to contain only certain other entities. However, unlike a system that can contain many different types of entities that acting together in a 'systematic' way, an inventory generally contains only a single type of entity (even if the entity is devised at a high level of abstraction within the IFC schema).
Thus, the functional part development can be seen as:
- Identify the entity type
- Identify all relevant occurrences of that entity type
- Collect them together into a group
- Identify the group as an inventory
- Add further attributes to the inventory.
Concepts of inventory
This functional part deals with the following inventory concepts:
- Asset inventory model_inventory (asset)
- Furniture inventory model_inventory (furnishing_element)
- Space inventory model_inventory (space)
Suggested modifications to IFC model and documentation
* Current and original cost values for inventories are explicitly captured. Although this is a legal use of attributes within the model, it is now more normal to expect cost values to be associated with entities via IfcRelAssociatesAppliedValue relationship. Therefore, these attributes should be deprecated and the provision of cost values provided through the fp_associate_cost capability. In this case, CurrentValue and OrginalValue should both be asserted as cost types in IfcCostValue
Results
Inventory of entity of interest is captured together with relevant date, cost and organizational information.
| Description | Entity/Pset/Functional Part | MAN | REC | OPT |
|---|---|---|---|---|
| Create the inventory in which entities will be recorded. | ||||
|
IfcInventory | |||
|
IfcInventory.GlobalId::IfcGloballyUniqueId | |||
|
OwnerHistory::fp_apply_owner_history | |||
|
IfcInventory.Name::IfcLabel | |||
|
IfcInventory.Description::IfcText | |||
| Assert the type of inventory | ||||
|
IfcInventory.InventoryType::IfcInventoryTypeEnum | |||
| Concept of asset inventory
From the selection of the type of inventory, the entities that can be collected are controlled by rules to ensure that only those entities that are appropriate are included. |
||||
|
fp_model_asset (IfcAsset) | |||
| Concept of furniture inventory | ||||
|
fp_model_furniture (IfcFurnishingElement) | |||
| Concept of space inventory | ||||
|
fp_model_space (IfcSpace) | |||
| Assign the inventoried collection to the inventory instance | ||||
|
IfcRelAssignsToGroup.RelatingGroup::IfcInventory | |||
|
IfcRelAssignsToGroup.RelatedObjects::IfcAsset
OR IfcRelAssignsToGroup.RelatedObjects::IfcFurnishingElement OR IfcRelAssignsToGroup.RelatedObjects::IfcSpace |
|||
|
IfcRelAssignsToGroup.RelatedObjectsType::IfcObjectTypeEnum | |||
|
IfcRelAssignsToGroup.GlobalId::IfcGloballyUniqueId | |||
|
IfcRelAssignsToGroup.OwnerHistory::fp_apply_owner_history | |||
|
IfcRelAssignsToGroup.Name | |||
|
IfcRelAssignsToGroup.Description | |||
| Assert additional cost and actor attributes for the inventory | ||||
|
IfcInventory.Jurisdiction::fp_select_actor | |||
|
IfcInventory.ResponsiblePersons::fp_select_actor | |||
|
IfcInventory.LastUpdateDate::IfcCalendarDate | |||
|
IfcCalendarDate.DayComponent::IfcDayInMonthNumber | |||
|
IfcCalendarDate.MonthComponent::IfcMonthInYearNumberNumber | |||
|
IfcCalendarDate.YearComponent::IfcYearNumberNumber | |||
|
||||
|
IfcInventory.CurrentValue:: IfcCostValue | |||
|
IfcInventory.OriginalValue::IfcCostValue |
IFC Entities Required
- IfcCalendarDate
- IfcCostValue
- IfcGroup
- IfcInventory
- IfcObject
- IfcRelationship
- IfcRelAssigns
- IfcRelAssignsToGroup
- IfcRoot
IFC Datatypes Required
- IfcAppliedValueSelect
- IfcDayInMonthNumber
- IfcGloballyUniqueId
- IfcIdentifier
- IfcInventoryTypeEnum
- IfcLabel
- IfcMonetaryMeasure
- IfcMonthInYearNumber
- IfcObjectTypeEnum
- IfcRatioMeasure
- IfcText
- IfcYearNumber
IFC Functions Required
- IfcValidCalendarDate
IFC Property Sets Required
- -
IDM Functional Parts Required
- fp_apply_owner_history
- fp_associate_cost
- fp_measure_with_unit
- fp_model_asset
- fp_model_furniture
- fp_model_space
- fp_select_actor
- fp_select_date_time
EXPRESS-G
EXPRESS Schema
SCHEMA FP_MODEL_INVENTORY;
TYPE IfcGloballyUniqueId = STRING (22) FIXED;
END_TYPE;
TYPE IfcLabel = STRING;
END_TYPE;
TYPE IfcMonetaryMeasure = REAL;
END_TYPE;
TYPE IfcRatioMeasure = REAL;
END_TYPE;
TYPE IfcText = STRING;
END_TYPE;
TYPE IfcInventoryTypeEnum = ENUMERATION OF
(ASSETINVENTORY,
SPACEINVENTORY,
FURNITUREINVENTORY,
USERDEFINED,
NOTDEFINED);
END_TYPE;
TYPE IfcAppliedValueSelect = SELECT
(IfcRatioMeasure,
IfcMonetaryMeasure,
fp_measure_with_unit);
END_TYPE;
TYPE IfcObjectTypeEnum = ENUMERATION OF
(PRODUCT,
PROCESS,
CONTROL,
RESOURCE,
ACTOR,
GROUP,
PROJECT,
NOTDEFINED);
END_TYPE;
TYPE IfcDayInMonthNumber = INTEGER;
END_TYPE;
TYPE IfcMonthInYearNumber = INTEGER;
WHERE
WR1 : { 1<= SELF <= 12 };
END_TYPE;
TYPE IfcYearNumber = INTEGER;
END_TYPE;
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 IfcObject
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcRoot);
ObjectType : OPTIONAL IfcLabel;
INVERSE
HasAssignments : SET OF IfcRelAssigns 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
SUBTYPE OF(IfcRoot);
END_ENTITY;
ENTITY IfcRelAssigns
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcRelationship);
RelatedObjects : SET [1:?] OF IfcObject;
RelatedObjectsType : OPTIONAL IfcObjectTypeEnum;
WHERE
WR1 : IfcCorrectObjectAssignment(RelatedObjectsType, RelatedObjects);
END_ENTITY;
ENTITY IfcRelAssignsToGroup
SUBTYPE OF(IfcRelAssigns);
RelatingGroup : IfcGroup;
WHERE
WR1 : SIZEOF(QUERY(Temp <* SELF\IfcRelAssigns.RelatedObjects | RelatingGroup :=: Temp)) = 0;
END_ENTITY;
ENTITY IfcGroup
SUBTYPE OF(IfcObject);
INVERSE
IsGroupedBy : IfcRelAssignsToGroup FOR RelatingGroup;
END_ENTITY;
ENTITY IfcInventory
SUBTYPE OF(IfcGroup);
InventoryType : IfcInventoryTypeEnum;
CurrentValue : OPTIONAL IfcCostValue;
OriginalValue : OPTIONAL IfcCostValue;
Jurisdiction : fp_select_actor;
ResponsiblePersons : SET [1:?] OF fp_select_actor;
LastUpdateDate : IfcCalendarDate;
WHERE
WR41 : SIZEOF(QUERY(temp <* SELF\IfcGroup.IsGroupedBy.RelatedObjects |
NOT( ('IFC2X2_FINAL.IFCSPACE' IN TYPEOF (temp)) OR
('IFC2X2_FINAL.IFCASSET' IN TYPEOF (temp)) OR
('IFC2X2_FINAL.IFCFURNISHINGELEMENT' IN TYPEOF (temp))
))) = 0;
END_ENTITY;
ENTITY IfcCalendarDate;
DayComponent : IfcDayInMonthNumber;
MonthComponent : IfcMonthInYearNumber;
YearComponent : IfcYearNumber;
WHERE
WR21 : IfcValidCalendarDate (SELF);
END_ENTITY;
ENTITY fp_apply_owner_history;
END_ENTITY;
ENTITY fp_associate_cost;
END_ENTITY;
ENTITY fp_measure_with_unit;
END_ENTITY;
ENTITY fp_model_asset;
END_ENTITY;
ENTITY fp_model_furniture;
END_ENTITY;
ENTITY fp_model_space;
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;