User Rules CUF 4003
Version: Calculation Exchange Format Forum CUF-XML 4.003 - July 2006
1. Introduction
1.1 Purpose
A construction cost estimate contains important information about the cost structure of a project. Estimates are prepared using calculation software, in many cases developed by members of the Forum Systeemhuizen Bouw. Each estimating program uses its own file formats, which are not readily interchangeable. End users of the various software packages have a need to use data originating from other estimating programs.
The CUF is an initiative of the Forum Systeemhuizen Bouw and is supported by all affiliated system houses. It is intended to exchange data between construction estimating software (horizontal exchange) and between estimating software and other business process software such as post-calculation, administration, planning, specification, CAD (vertical exchange).
Since version 4.000 the CUF definition has been laid down in an XML Schema.
1.2 Principles
The various estimating programs together contain a diversity of estimating methods and associated data and storage structures. The Forum CUF-XML aims for as complete a capture of data as possible. All participating systems must be able to accommodate their information in the file. As a result, many elements and attributes in a Forum CUF XML file remain unused.
Due to the diversity of estimating methods, it may always happen that certain data is lost when exchanging estimates via CUF-XML, even if the information can technically be accommodated in the format. It may occur that the importing program does not use the fields in the software.
The user rules ensure that in every CUF-XML file the essential cost information is unambiguous.
2. User Rules
2.1 CUF Components
A CUF-XML file consists of 4 segments, elements of the type:
PROJECT DATA: general information
ESTIMATE: enumeration and calculation of cost items.
The estimate section consists of elements of the type:- BUNDLE
- ESTIMATE ITEM
- MAMO_ITEM
SORT CODES: codes relating to the ESTIMATE section,
TAIL DATA: collection of additional amounts and the CONTRACT SUM
The attributes in the following lists can be of the following datatype:
N Numeric
A Alphanumeric
E Enumeration
D Date
DT Date and time
B Boolean
2.2 PROJECT DATA
In the element PROJECT DATA, general information is included relating to the estimate or the CUF file.
2.2.1 Attribute List
PROJECT DATA
| Attribute | Required | Description | Data |
|---|---|---|---|
| CUF_VERSION | X | Indicates according to which schema the file was created. In this case, the value is always 4.003. | 4.003 |
| SYSTEM HOUSE | The developer of the program with which the CUF file was created. | E | |
| CREATION DATE | X | Date on which the estimate was created in the calculation program. Format "CCYY-MM-DD", e.g. "2006-01-31". | D |
| PROJECT NUMBER | The number assigned to the project in the company’s administration. | A | |
| PROJECT NAME | The name of the project to which the estimate relates. | A | |
| ESTIMATOR | The name of the person who prepared the estimate. | A | |
| CLIENT | The legal entity commissioning the execution of the project. | A | |
| ADDRESS DATA | Location of the execution of the project, the construction site. | A | |
| PROJECT START DATE | The day on which the execution of the project starts. Beginning of construction. | D | |
| CURRENCY | X | The currency in which all amounts in the file are expressed. The official international bank notation is used. | E |
| EURO_RATE | The exchange rate of the currency used in relation to the euro. The amount of the currency equal to 1 Euro. | N | |
| FREE_TEXT | Any additional general information | A |
2.3 BUDGET
This section lists the costs per component. These are the costs excluding tail costs (markups) and excluding VAT.
2.3.1 Budget structure
Basically, the budget lines consist of elements of the type BUDGET_LINE.
Budget lines can be grouped and totaled in a bundle, elements of the type BUNDLE. Multiple bundles can in turn be grouped into a bundle at a higher level. Bundles can be used for chapter and paragraph totals in a traditional budget. In element budgets, bundles form the building parts (elements).
Budget lines can be substantiated with mamo-lines, elements of the type MAMO_LINE. Mamo-lines form a breakdown into resources of the budget line.
The hierarchy or parent-child relationships (substructures) are represented by the nested structure of the XML file. The position in the XML document of the bundle, budget line, or mamo-line determines what it is part of.
schematically:
<bundle1>
<bundle2>
<budget_line>
<MAMO/>
</budget_line>
</bundle2>
</bundle1>
At each level, quantity schedule lines can also be included, elements of the type HOEVEELHEDENSTAAT_REGEL. These lines explain the origin of the quantity.
The starting point is the costs of the elements of the type ESTIMATE LINE (BEGROTINGSREGEL); in element estimates, in the case of elements at bundle level, multiplied by CALCULATION_QUANTITY (DOORREKEN_HOEVEELHEID).
The costs are given per cost type: labor, material, equipment, subcontracting, and other. A MAMO_LINE (MAMO_REGEL) always belongs to one of these cost types.
VAT is disregarded in the calculations in the ESTIMATE (it is included in the TAIL DATA).
Mamo lines and quantity schedule lines are informative. The costs at bundle level serve as a control.
---
#### 2.3.2 Cost Calculation
**Costs of an ESTIMATE LINE**
Hours = QUANTITY * QUANTITY_FACTOR * HOUR_NORM<br/>
Labor costs = QUANTITY * QUANTITY_FACTOR * HOUR_NORM * HOUR_RATE<br/>
Material costs = QUANTITY * QUANTITY_FACTOR * MATERIAL_PRICE<br/>
Equipment costs = QUANTITY * QUANTITY_FACTOR * EQUIPMENT_PRICE<br/>
Subcontracting = QUANTITY * QUANTITY_FACTOR * SUBCONTRACT_PRICE<br/>
Other_costs = QUANTITY * QUANTITY_FACTOR * OTHER_COSTS<br/>
where:
- If QUANTITY_FACTOR is empty or 0, it is not taken into account and is therefore 1.
- If the ESTIMATE LINE falls within a BUNDLE or a hierarchy of multiple BUNDLES with a CALCULATION_QUANTITY, the final costs of the ESTIMATE LINE equal the above-mentioned costs multiplied by all CALCULATION_QUANTITIES in the parent chain above.
**Costs of a BUNDLE**
The values of the cost attributes in a BUNDLE are the totals of the directly underlying estimate lines and other bundles, i.e. one step lower in the hierarchy.<br/>
HOURS = Sum (hours of all underlying estimate lines and bundles)<br/>
LABOR COSTS = Sum (labor costs of all underlying estimate lines and bundles)<br/>
MATERIAL COSTS = Sum (material costs of all underlying estimate lines and bundles)<br/>
EQUIPMENT COSTS = Sum (equipment costs of all underlying estimate lines and bundles)<br/>
SUBCONTRACTING = Sum (subcontracting costs of all underlying estimate lines and bundles)<br/>
OTHER_COSTS = Sum (other costs of all underlying estimate lines and bundles)
If CALCULATION_QUANTITY has a value, the results of a bundle must be multiplied by it to calculate the total costs of the bundle.
Total costs of a BUNDLE:
Hours = HOURS * CALCULATION_QUANTITY<br/>
Labor costs = LABOR_COSTS * CALCULATION_QUANTITY<br/>
Material costs = MATERIAL_COSTS * CALCULATION_QUANTITY<br/>
Equipment costs = EQUIPMENT_COSTS * CALCULATION_QUANTITY<br/>
Subcontracting = SUBCONTRACTING * CALCULATION_QUANTITY<br/>
Other_costs = OTHER_COSTS * CALCULATION_QUANTITY<br/>
where:
- If CALCULATION_QUANTITY is empty or 0, it is not taken into account and is therefore 1.
- If the BUNDLE falls within a higher-level BUNDLE with a CALCULATION_QUANTITY, the final costs of the BUNDLE are calculated by multiplying the total costs by the CALCULATION_QUANTITY of all higher-level parent BUNDLES.
---
**Costs of the ESTIMATE**
The values of the cost attributes in an estimate are the totals of the directly underlying estimate lines and bundles, i.e. one step lower in the hierarchy.<br/>
HOURS = Sum (hours of all underlying estimate lines and bundles)<br/>
LABOR COSTS = Sum (labor costs of all underlying estimate lines and bundles)<br/>
MATERIAL COSTS = Sum (material costs of all underlying estimate lines and bundles)<br/>
EQUIPMENT COSTS = Sum (equipment costs of all underlying estimate lines and bundles)<br/>
SUBCONTRACTING = Sum (subcontracting costs of all underlying estimate lines and bundles)<br/>
OTHER_COSTS = Sum (other costs of all underlying estimate lines and bundles)
---
**Costs of a MAMO_LINE**
MAMO_LINES specify the breakdown of the costs of an ESTIMATE LINE. The total of the costs of the MAMO_LINES usually equals the ESTIMATE LINE, although this is not necessarily the case. The costs of the ESTIMATE LINE are leading; the MAMO_LINES, if present, are informative.
- When COST TYPE = “LABOR” then<br/>
* Hours = QUANTITY * HOUR_NORM<br/>
* Labor costs = QUANTITY * HOUR_NORM * HOUR_RATE * PRICE_FACTOR<br/>
- When COST TYPE = “MATERIAL” then<br/>
* Material costs = QUANTITY * PRICE * PRICE_FACTOR<br/>
- When COST TYPE = “EQUIPMENT” then<br/>
* Equipment costs = QUANTITY * PRICE * PRICE_FACTOR<br/>
- When COST TYPE = “SUBCONTRACTING” then<br/>
* Subcontracting = QUANTITY * PRICE * PRICE_FACTOR<br/>
- When COST TYPE = “OTHER” then<br/>
* Other_costs = QUANTITY * PRICE * PRICE_FACTOR<br/>
where:
- If PRICE_FACTOR is empty or 0, it is not taken into account and is therefore 1.
#### 2.3.3 Quantities
The quantities to be used in calculations:
**Quantity of an ESTIMATE LINE (BEGROTINGSREGEL)**<br/>
Quantity = QUANTITY * QUANTITY_FACTOR
where:
If QUANTITY_FACTOR is empty or 0, it is not taken into account and is therefore 1.
- Extra fields, meant as explanation:
(These calculations do not have to be correct and do not affect the Quantity; they are purely informative.)
COUNT * UTILIZATION = QUANTITY
For time-dependent costs. Count is expressed in a time unit, utilization is the number of items deployed simultaneously.
Example: 2 debris containers for 5 weeks → count = 2 pcs, utilization = 5 wks → quantity = 10.
PRODUCTION = QUANTITY.BUNDLE / QUANTITY.ESTIMATE_LINE
This refers to the directly overlying bundle (the parent).
---
**Quantity of a MAMO_LINE**
Quantity = QUANTITY * QUANTITY_FACTOR
where:
If QUANTITY_FACTOR is empty or 0, it is not taken into account and is therefore 1.
- Extra fields, meant as explanation:
(These calculations do not have to be correct and do not affect the Quantity; they are purely informative.)
COUNT * UTILIZATION = QUANTITY
For time-dependent costs. Count is expressed in a time unit, utilization is the number of items deployed simultaneously.
Example: 2 debris containers for 5 weeks → count = 2 pcs, utilization = 5 wks → quantity = 10.
PRODUCTION = QUANTITY.ESTIMATE_LINE / QUANTITY.MAMO_LINE
This refers to the directly overlying estimate line (the parent).
---
**Quantity of a BUNDLE**
The quantity of a BUNDLE can be expressed in a RETURN_QUANTITY (TERUGDEEL_HOEVEELHEID) and a CALCULATION_QUANTITY (DOORREKEN_HOEVEELHEID).
The quantity used for calculations is the CALCULATION_QUANTITY. If 0 or empty, use 1.
The RETURN_QUANTITY is informative and has no cost-technical function. It is meant for calculating a unit price or benchmark figure.
---
**Element Estimate (Elementenbegroting)**
In an “Element Estimate” the CALCULATION_QUANTITY is often used. The bundles are then elements at increasingly higher levels. This is in contrast to a “Traditional Estimate,” where bundles function more as subtotals. The presence of the attribute CALCULATION_QUANTITY at a Bundle indicates that the Bundle is an element.
In the case of multiple bundle levels with a CALCULATION_QUANTITY, totals are calculated by multiplying the costs and quantities by the CALCULATION_QUANTITY of all parent bundles in the chain above.
For Mamo lines, Estimate lines, and Bundles, the following applies to the total quantity:
Quantity = CALCULATION_QUANTITY * (product of all parent CALCULATION_QUANTITIES)
---
**Quantity Schedules**
At a BUNDLE, ESTIMATE LINE, and MAMO_LINE, quantity schedule lines can also be included — these are elements of the type HOEVEELHEDENSTAAT_REGEL.
These lines explain the origin of the quantity. They are informative and have no influence on the quantity or cost calculations of the cost line.
Here the quantity is calculated from dimensions of objects in a drawing. In many cases the various fields in a line (if filled) are multiplied together, and the sum of all these quantity schedule lines equals the quantity of the cost line.
#### 2.3.4 Attribute List
**ESTIMATE LINE (BEGROTINGSREGEL)**
|Attribute |Required| Description |Data| Remark / Example|
|:--|:--|:--|:--|:--|
|CODE | |Code of the estimate lines |A |Mostly for order, to determine position in the estimate|
|DESCRIPTION | |Textual description of the component |A ||
|QUANTITY_UNIT | |The unit in which the quantity is expressed |A ||
|QUANTITY | |The quantity of the estimate line |N ||
|COUNT_UNIT | |The unit in which the count is expressed |A |Often pieces|
|COUNT | |The number deployed |N |Related to time-dependent costs|
|UTILIZATION_UNIT | |The unit in which utilization is expressed |A |Usually a time unit, e.g., wks, day|
|UTILIZATION | |Length of period |N |Expressed in utilization_unit|
|PRODUCTION_UNIT | |The unit in which production is expressed |A |e.g., m2/hour|
|PRODUCTION | |Capacity in bundle unit per quantity unit of estimate line |N |e.g., 20 m2/hour|
|QUANTITY_FACTOR | |Multiplier for quantity |N |Mostly for a margin. Given as a multiplier. e.g., with 10% cutting loss factor = 1.10|
|FACTOR_CODE | |Reference to a table with quantity factors |A ||
|HOUR_NORM | |Required hours per 1 quantity unit |N |In hours, not minutes|
|HOUR_RATE | |Hourly wage |N |Cost per hour|
|HOUR_RATE_CODE | |Reference to a table with hour rates |A ||
|MATERIAL_PRICE | |Material unit price |N |Cost per 1 quantity unit|
|EQUIPMENT_PRICE | |Equipment unit price |N |Cost per 1 quantity unit|
|SUBCONTRACT_PRICE | |Subcontracting unit price |N |Cost per 1 quantity unit|
|OTHER_COSTS | |Other unit costs |N |Cost per 1 quantity unit|
|PROVISIONAL_SUM | |Whether or not estimate line is provisional sum |B ||
|VAT |X| VAT percentage applicable to this estimate line |N |Percentage, e.g., 19 or 6|
|EAN_CODE | |Barcode for article coding |A ||
|ARTICLE_GROUP | |Code for grouping articles |A |Often refers to supplier’s groups|
|ORDER_UNIT | |Unit in which ordering is done |A |e.g., pallet|
|QUANTITY_PER_UNIT | |Number of quantity per order unit |N ||
|SUPPLIER_CODE | |Reference to a table with suppliers |A |Usually an external file in administration|
|COMMENT | |Note |A ||
---
**BUNDLE (BUNDELING)**
|Attribute| Required | Description |Data| Remark / Example|
|:--|:--|:--|:--|:--|
|CODE | |Code of the bundle |A |Mostly for order, position in estimate. Coding is independent of parent or child.|
|CODING_METHOD | |Name of the coding system used for Code |A |Mostly in element estimates where coding differs by level, e.g., NLSFB|
|DESCRIPTION | |Textual description of the component |A ||
|UNIT | |The unit in which return_quantity and/or calculation_quantity are expressed |A ||
|RETURN_QUANTITY | |Quantity of the bundle for return division |N |For calculating unit price, informative|
|CALCULATION_QUANTITY | |Multiplier for the bundle |N |All costs and underlying quantities must be multiplied by this|
|HOURS | |Number of hours of the bundle, total of underlying estimate lines/bundles |N |Excl. calculation_quantity|
|LABOR_COSTS | |Labor costs of the bundle, total of underlying estimate lines/bundles |N |Excl. calculation_quantity|
|MATERIAL_COSTS | |Material costs of the bundle |N |Excl. calculation_quantity|
|EQUIPMENT_COSTS | |Equipment costs of the bundle |N |Excl. calculation_quantity|
|SUBCONTRACTING | |Subcontracting costs of the bundle |N |Excl. calculation_quantity|
|OTHER_COSTS | |Other costs of the bundle |N |Excl. calculation_quantity|
|COMMENT | |Remark, text field |A ||
---
**MAMO_LINE (MAMO_REGEL)**
|Attribute |Required | Description |Data| Remark / Example|
|:--|:--|:--|:--|:--|
|COST_TYPE |X| Labor, Material, Equipment, Subcontracting, or Other |E |A Mamo line describes a resource|
|CODE | |MAMO Code |A |Mostly for order/classification, independent from estimate line|
|DESCRIPTION | |Textual description of resource / mamo line |A ||
|QUANTITY_UNIT | |The unit in which the quantity is expressed |A ||
|QUANTITY | |The quantity of the mamo line |N ||
|COUNT_UNIT | |Unit in which count is expressed |A |Often pieces|
|COUNT | |The number deployed |N |For time-dependent costs|
|UTILIZATION_UNIT | |Unit in which utilization is expressed |A |e.g., wk, day|
|UTILIZATION | |Length of period |N |Expressed in utilization_unit|
|PRODUCTION_UNIT | |Unit in which production is expressed |A |e.g., m2/hour|
|PRODUCTION | |Capacity in estimate line unit per quantity unit of mamo |A |e.g., 20 m2/hour|
|PRICE | |Price per quantity unit |N ||
|PRICE_FACTOR | |Multiplier for price |N |e.g., with 10% price increase factor = 1.10|
|FACTOR_CODE | |Reference to a table with price factors |A ||
|HOUR_NORM | |Required hours per 1 quantity unit |N |In hours, not minutes|
|HOUR_RATE | |Hourly wage |N |Cost per hour|
|HOUR_RATE_CODE | |Reference to a table with hour rates |A ||
|EAN_CODE | |Barcode for article coding |A ||
|ARTICLE_GROUP | |Code for grouping articles |A |Often refers to supplier’s groups|
|ORDER_UNIT | |Unit in which ordering is done |A |e.g., pallet|
|QUANTITY_PER_UNIT | |Number of quantity per order unit |N ||
|SUPPLIER_CODE | |Reference to a table with suppliers |A |Usually an admin file|
|COMMENT | |Note |A ||
---
**QUANTITY SCHEDULE LINE (HOEVEELHEDENSTAAT_REGEL)**
|Attribute |Required | Description |Data| Remark / Example|
|:--|:--|:--|:--|:--|
|ROOM_NAME | |Location designation of the component |A ||
|DESCRIPTION | |Related partial measurement |A ||
|COUNT | |Number of times it occurs |N ||
|LENGTH | |Length of the component |N ||
|WIDTH | |Width of the component |N ||
|HEIGHT | |Height of the component |N ||
|FACTOR_1 | |Multiplier |N |e.g., conversion factor|
|FACTOR_2 | |Multiplier |N |e.g., conversion factor|
---
### 2.4 SORT CODES
A BUNDLE, ESTIMATE LINE, or MAMO_LINE can be linked to sort codes.
Sort codes make it possible to arrange or group the lines according to another coding than the Code.
For example: a reference to a cost center in an administrative system, an alternative classification for planning and work estimate, a specification coding, etc.
A cost line can be linked to multiple sort codes for different applications (sortings).
**Sort code tables: SORTEERCODES and SORTEERCODE_LINE**
For each sorting that appears in the estimate, a list of possible sort codes can be included in the CUF.
The element SORTEERCODES contains elements of the type SORTEERCODE_LINE: a list with, per sorting (application), the possible sort codes and descriptions, and optionally quantities and units.
Example: a list with all planning codes or administrative codes.
The element SORTEERCODES must appear in the XML format *before* the ESTIMATE element.
It gives the sending party the possibility to indicate which sort codes are used and what their function is, so the receiving party can offer the user the possibility to assign each sort code to the right place in their database.
For example:
```xml
<SORTEERCODES SORTERING="LINENO" FUNCTION="Line number in the original estimate" />
<SORTEERCODES SORTERING="PLANCODE" FUNCTION="Planning code for linking with planning package" />
<SORTEERCODES SORTERING="AGGREGATECODE" FUNCTION="Aggregate code for totaling specific items within the estimate" />
<SORTEERCODES SORTERING="ADMCODE" FUNCTION="Control code for linking to project monitoring / post-calculation" />
The attribute FUNCTION is an informative description of the sort code. The receiving party must build intelligence into their software to allow the user, based on this information, to decide what to do with the sort codes before importing the CUF-XML file.
Linking to cost lines: SORTEERCODE A BUNDLE, ESTIMATE LINE, or MAMO_LINE can be linked to one or more elements of the type SORTEERCODE. Each of these specifies to which sorting the sort code belongs (SORTERING) and the value of the sort code (VALUE).
Example:
<ESTIMATE_LINE …>
<SORTEERCODE SORTERING="LINENO" VALUE="00001" />
<SORTEERCODE SORTERING="PLANCODE" VALUE="A.45.09" />
<SORTEERCODE SORTERING="AGGREGATECODE" VALUE="V" />
<SORTEERCODE SORTERING="ADMCODE" VALUE="A10.002" />
</ESTIMATE_LINE>
<ESTIMATE_LINE …>
<SORTEERCODE SORTERING="LINENO" VALUE="00003" />
<SORTEERCODE SORTERING="PLANCODE" VALUE="C.03.01" />
<SORTEERCODE SORTERING="ADMCODE" VALUE="O99.999" />
</ESTIMATE_LINE>
etc.
2.4.1 Attribute List
SORTEERCODES
| Attribute | Required | Description | Data | Remark / Example |
|---|---|---|---|---|
| SORTERING | X | Name of the sorting | A | e.g., PLANCODE, ADMCODE, SPEC_CODE, COSTCENTER |
| FUNCTION | Description of the purpose of the sorting | A | e.g., classification for work estimate |
SORTEERCODE_LINE
| Attribute | Required | Description | Data | Remark / Example |
|---|---|---|---|---|
| CODE | X | Value of the sort code | A | e.g., A1088 |
| DESCRIPTION | Associated description | A | e.g., Concrete floors | |
| UNIT | Unit in which the RETURN_QUANTITY is expressed | A | ||
| RETURN_QUANTITY | Quantity of the sort code in this estimate | N | Informative |
SORTING (in ESTIMATE section at BUNDLE, ESTIMATE LINE, or MAMO_LINE)
| Attribute | Required | Description | Data | Remark / Example |
|---|---|---|---|---|
| SORTERING | X | Name of the sorting to which the code belongs | A | e.g., PLANCODE, ADMCODE, SPEC_CODE, COSTCENTER |
| VALUE | Value of the sort code | A | e.g., A1088 |
2.5 TAIL DATA
In the tail of a construction estimate, indirect costs are listed, such as General Overheads, Execution Costs, Profit, Risk, Idle Time.
Often these are calculated as a markup on (a part of) the costs in the estimate section.
The methods used for the calculation of tail costs differ per estimating package and can be very complex.
In CUF, only the results per tail item are included (not the percentages and calculation bases), in elements of the type FREE_QUANTITY (VRIJE_GROOTHEID).
The CONTRACT SUM (AANNEEMSOM) contains the gross total of the estimate including markups and tail items. It can be used as a control.
The CONTRACT SUM is a mandatory attribute and refers to the contract sum excluding VAT.
2.5.1 Attribute List
CONTRACT SUM (AANNEEMSOM)
| Attribute | Required | Description | Data |
|---|---|---|---|
| CONTRACT_SUM | X | Total amount of the estimate including tail items, excl. VAT | N |
FREE_QUANTITY (VRIJE_GROOTHEID)
| Attribute | Required | Description | Data |
|---|---|---|---|
| DESCRIPTION | Name of the tail item | A | |
| AMOUNT | Resulting amount of the tail item | N |
2.6 CUF
In the CUF element, the 4 segments PROJECT DATA, ESTIMATE, SORT CODES, and TAIL DATA are included.
The mandatory attribute CREATION_DATETIME identifies the file.
2.6.1 Attribute List
CUF
| Attribute | Required | Description | Data |
|---|---|---|---|
| CREATION_DATETIME | X | System date and time at the moment of creation of the CUF-XML file. Format "CCYY-MM-DDThh:mm:ss", e.g., "2006-06-26T15:58:00" | DT |