This page describes how the Toolbox integrates with a Construction ERP system to publish projects, BoQs (Bill of Quantities) and templates, and how the mapping/ignore/error settings affect the Construction Index.
Note: link references to the external Construction ERP documentation are used so the source of truth stays up to date. Replace the example link below with your vendor's documentation URL.
Acme Construction ERP).
Note : Authentication can be via a Bearer token / api-key or basic user / password.
If user / password then all for the erp actions will be tracked under the same logon
The Toolbox does not duplicate project creation logic — it publishes the project and associated BoQ to the Construction ERP using the profile you created.
Templates define the structure and default mappings used when creating or publishing BoQs and projects. A template typically includes:
To edit a template:
Templates are applied at publish time. If a template is updated after a BoQ was published, re-publishing the BoQ will apply the new template only if you choose to overwrite existing ERP records.
The import pipeline applies one of three actions for each BoQ item or mapped field:
How each affects the Construction Index:

When mapping a category / class the following process should be followed
description / quantity and optionally classification. Ensure the Quantity Type is the same type as the Unit eg Volume for m3 or 100 m3schema.class.propertydescription consider this to be the GROUP BY clause in the resulting ecSQLSet the maximum confidence this will be used as the baseline for each corresponding row.
Refer to the annex below for details on how to build an ecSQL to populate the description and quantity
To publish:
After publish, review the publish log for success, warnings, or errors. Successful publishes will update the Construction Index and create/modify the corresponding project and BoQ in the ERP.
SELECT
ifcmain.ifcobjecttype || '-' || asp1.ifcsize AS description,
SUM(asp1.ifclength) AS quantity,
'length' AS quantityType,
'm' AS unit,
COUNT(*) AS recordCount,
SUM(
CASE
WHEN asp1.ifclength IS NOT NULL THEN 1
ELSE 0
END
) AS nonNullCount,
(CAST(
SUM(
CASE
WHEN asp1.ifclength IS NOT NULL THEN 1
ELSE 0
END) AS REAL) / CAST(COUNT(*) AS REAL) * 0.9) AS adjustedConfidence
FROM
IFCDynamic.ifcpipesegment ifcmain
LEFT JOIN bis.Category cat ON cat.ECInstanceId = ifcmain.Category.Id
LEFT JOIN ifcdynamic.ifcAspect_Dimensions asp1 ON asp1.Element.Id = ifcmain.ECInstanceId
WHERE
ifnull(cat.UserLabel, cat.CodeValue) = 'M-590-M_PIPEWORK'
GROUP BY
ifcmain.ifcobjecttype, asp1.ifcsize
ORDER BY
quantity DESC
description : should be a text field and is generally the grouping criteriaquantity : will be used as the quantity and must be a numberquantityType : should be a standard quantity type, length / area / volume / weight etcunit : should be a unit which is aligned with the mapped openconstruction coderecordCount : the number of records which will be used to construct the indexadjustedConfidence : used by Open Construction to determine the confidence of BoQ record