The following article will demonstrate how you can visualize and check components based on their UniFormat categories within Solibri Model Checker (SMC). As an example, if you are using UniFormat II categories for cost estimation, you’ll need to ensure that the UniFormat codes in the model match the version used in your estimating sheets. If UniFormat II is being used and you import a window library that used UniFormat 2010 to classify itself, its C1020 Interior Windows UniFormat 2010 category may cause those components to be classified as C1020 Interior Doors in UniFormat II, thereby incorrectly raising the cost of doors, while lowering window cost. In SMC, you are not only able to check that the UniFormat description matches, but that the components classified as C1020 Interior Doors are in fact of the door component type and not windows.
Furthermore, through classification, different versions of UniFormat can be mapped to one another. Therefore, if you are using Revit, you can automatically map its specific UniFormat II codes to UniFormat 2010.
The resources and sample model used in this article are available here: UniFormat Check
Please read the ReadMe.txt file in the zip folder for information on copying resources to their proper locations.
The model used in the example is an IFC export of the rac basic sample project.rvt. The sample project from Revit is also available here: Autodesk Revit 2014 Sample Project Files
UniFormat is a standard used to classify components, based on their function, into hierarchical categories. It is used in specifications, such as those for Level of Development (LOD), as well as cost estimation/analysis. Since these are standardized categories common to most buildings, it provides consistency in project management, analysis, and reporting.
At the highest Level 1, general major group categories exist:
- A SUBSTRUCTURE
- B SHELL
- C INTERIORS
- D SERVICES
- E EQUIPMENT AND FURNISHINGS
- F SPECIAL CONSTRUCTION AND DEMOLITION
- G BUILDING SITEWORK
These categories are divided further into different individual groups at Level 2. For example, A SUBSTRUCTURE is divided into A10 Foundations and A20 Basement. Level 3 divides them further, dividing A10 Foundations into A1010 Standard Foundations, A1020 Special Foundations, and A1030 Slab on Grade. These are further divided into Level 4 or greater categories that often differ based on the version of UniFormat used.
For example, the level 4 category for Trenches has the code A103003 in NAVFAC UNIFORMAT II, A103004 in ASTM UNIFORMAT II, an undefined number in the code A1030._ in CSI/CSC UniFormat 1998 edition, A1030400 Trenches in the UniFormat version used in Revit, and A4030, a very different code altogether, in CSI/CSC UniFormat 2010 edition.
Hierarchical classification systems that use numerical codes such as UniFormat, MasterFormat, OmmiClass, UniClass, etc. lend themselves well to Solibri Classifications through the use of classification rules that include the asterisk (*) wildcard matching character, which matches zero or more characters. For example, A1030* matches A103003 Trenches, A103004 Trenches, A1030._ Trenches, A1030400 Trenches from the various UniFormat versions for the Trench UniFormat II category to A1030 Slab on Grade. Likewise, through the use of mapping classifications, you can map to properties in multiple locations such as Identity Data.Assembly Code or some other location where you are storing UniFormat information in your components.
The following classifications are used both to visualize and check components based on their UniFormat category:
- Component Types
- Classifies components based on their component type (e.g. Door, Suspended Ceiling, etc.). This classification is used to determine whether the component type fits the UniFormat code. For example, the check for UniFormat II checks components classified as C1020 Interior Doors to ensure they are doors and not windows, as UniFormat 2010 has the classification C1020 Interior Windows.
- UniFormat – II vs 2010
- Classifies components based on their UniFormat code and description. The classifications are one of the following:
- UniFormat 2010: Either the code only exists in UniFormat 2010 (e.g. A40 SLABS-ON-GRADE) or else the code exists in both UniFormat II and 2010, but the description is taken from UniFormat 2010 (e.g. C1020 Interior Windows);
- UniFormat II: Either the code only exists in UniFormat II (e.g. C20 Stairs) or else the code exists in both UniFormat II and 2010 and the description is taken from UniFormat II (e.g. C1020 Interior Doors).
- UniFormat II and 2010: The code is the same in UniFormat II and UniFormat 2010. The descriptions are either the same (e.g. B1010 Floor Construction) or they differ but describe the same component (e.g. B30 Roofing vs B30 Exterior Horizontal Enclosure).
- UniFormat II or 2010: The code has changed in UniFormat 2010 and the code from UniFormat II now exists in 2010 as a different classification (e.g. C1020 Interior Doors vs C1020 Interior Windows). The description doesn’t match that from either UniFormat II or 2010, or simply doesn’t exist.
- UniFormat 2010
- Classifies components based on their UniFormat Code mapping classification to a UniFormat 2010 classification, if it exists.
- UniFormat 2010 – Multiple Classification Names
- Classifies components based on its UniFormat 2010 classification to all of its higher-level classifications. For example C1020 Interior Windows is classified as C1020 Interior Windows, C10 Interior Construction, and C Interiors.
- UniFormat 2010 from Revit UniFormat Codes
- If using Revit, classifies components based on the out-of-the-box UniFormat II codes from the Identity Data.Assembly Code property to UniFormat 2010. For example, D5090900 Misc. Other Electrical Systems maps to D5080.90 Miscellaneous Electrical Supplementary Components.
- UniFormat 2010 from UniFormat II
- Classifies components to a UniFormat 2010 classification based on the UniFormat II classification of the component. For example, C1020 Interior Doors is classified as C1030 Interior Doors.
- UniFormat Code
- Directly classifies a component using the value mapped to a UniFormat code property. This is a mapping classification that maps to the property set Identity Data.Assembly Code by default.
- UniFormat Description
- Directly classifies a component using the value mapped to a UniFormat description property. This is a mapping classification that maps to the property set Identity Data.Assembly Description by default.
- UniFormat II
- Classifies components based on their UniFormat Code mapping classification to a UniFormat II classification if it exists.
- UniFormat II – Multiple Classification Names
- Classifies components based on its UniFormat II classification to all of its higher-level classifications. For example D5020 Lighting and Branch Wiring, is classified as D5020 Lighting and Branch Wiring, D50 Electrical, and D Services.
UniFormat Checking Ruleset
The UniFormat Check ruleset checks components in the model to ensure that UniFormat codes are defined and are correct based on UniFormat II or UniFormat 2010.
Since the codes and descriptions vary depending on the version, you are initially prompted to set the ‘UniFormat Version’ user input in the To-Do dialog.
In addition, you should ensure that the UniFormat Code and UniFormat Description classifications are mapping to the correct location where the UniFormat information is stored for components. By default, it is set to Identity Data.Assembly Code and Identity Data.Assembly Description respectively, from Revit 2013 or later. However, older Revit models could store the information under the property set Pset_Revit_Type_Identity Data or if you are using ArchiCAD, the UniFormat information is likely in the form of an IFC Classification .
Once the UniFormat Version is set, the ruleset should look similar to this:
The rule Components must have a UniFormat code checks the UniFormat Code classification of components to ensure that a UniFormat code has been defined, regardless of what it is. Looking at the results we see that 149 components fail this check, and do not have a value for a UniFormat Code:
By selecting Show Passed in the Checked Components View, we see the 108 components isolated in the model that passed the check and do have a UniFormat code:
The rule Sub-Components must have a UniFormat code checks the UniFormat Code classification of components that decompose other components such as the railings of a stair component or the doors, plates, and members of a curtain wall, to ensure that a UniFormat code has been defined, regardless of what it is. Looking at the results we see that none of the 201 sub-components pass this check, as these do not have a value for a UniFormat code:
The UniFormat II ruleset further checks the actual values of the UniFormat codes and descriptions of components that have a UniFormat code defined to ensure they are valid from UniFormat II.
The rule UniFormat code must match UniFormat II checks the code against the UniFormat II classification to ensure that it matches a code from UniFormat II as well as checks the code and description against the UniFormat II vs 2010 classification to ensure that they either exist only in UniFormat II or in both UniFormat II and 2010. By setting the UniformatClassifications.txt file in Revit to one with UniFormat 2010 codes, and exporting to a different model, we see that it is able to detect that a door has an incorrect UniFormat II description:
The UniFormat codes exist in UniFormat II and UniFormat 2010 ruleset, checks the codes and descriptions of only those codes that exist in both versions of UniFormat II and UniFormat for components that had their code and/or their description changed. If also possible, it checks the component type using the Component Type classification of the components.
For example, the rule C1020 Interior Doors – UniFormat Description checks components that have the UniFormat code C1020 to also have the UniFormat description ‘Interior Doors’ from UniFormat II. The rule C1020 Interior Doors – Component Types checks components that have the UniFormat II code ‘C1020 – Interior Doors’ are not of the component type ‘Window’ or ‘Plate’. These window and plate components could potentially have had the UniFormat 2010 code ‘C1020 – Interior Windows‘ set. In UniFormat II, interior windows typically are under the UniFormat code ‘C1010 – Partitions‘.
In the example above, the doors that have the UniFormat code C1020, fail the description check, as they have the incorrect description ‘Interior Windows‘, but pass the Component Type check, as they are still doors, and not plates or windows.
The rules under the UniFormat codes exist in UniFormat II and UniFormat 2010 ruleset are self-configurable gatekeeper rules, and are only present in the checking window if those components exist. The following shows the rules that check UniFormat categories that have had their code and/or descriptions changed from UniFormat II in UniFormat 2010.
Mapping UniFormat II to 2010
The Assembly Code property used in Revit are versions of a UniFormat II code. Through classification rules, these codes can be mapped to their respective UniFormat 2010 categories. The following shows an ITO that reports the original UniFormat code and description from the assembly code and description along with the mapped UniFormat 2010 category using the UniFormat 2010 from Revit UniFormat Codes classification.