---
title: Writing Pricing Rules for Price Files
description: Writing pricing Rules for Price Files
---

[Skip to content](https://knowledgehub.endtoendit.com/knowledgebase/price-file-writing-pricing-rules#main-content)

[![integrate knowledge base](https://knowledgehub.endtoendit.com/hs-fs/hubfs/integrate%20knowledge%20base.jpg?width=386&height=34&name=integrate%20knowledge%20base.jpg)](https://knowledgehub.endtoendit.com/knowledgebase?hsLang=en)

Open main navigation

Close main navigation

- [endtoendit.com](https://endtoendit.com/)

[endtoendit.com](https://endtoendit.com/)

 Hello. How can we help you?

- There are no suggestions because the search field is empty.

1. [integrate Support Team Knowledge Base](https://knowledgehub.endtoendit.com/knowledgebase?hsLang=en)
2. [integrateDrawingBoard](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en)
3. [Price Files & Pricing Rules](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#price-files-pricing-rules)

# Writing Pricing Rules for Price Files

## Explore how to write pricing rules for timber,  glass and ironmongery.

### **Key Points: Writing Pricing Rules for Price Files**

**1. Rule editors knowledge**  
This guide assumes some **prior knowledge** of rule editors. For **basic guidance** on rule editors, including how to write conditions, see **working with rule editors**.

**2. Cost Plus vs Price List**  
There are two basic approaches to price files, **Cost Plus** and P**rice List**.

**Cost Plus** takes a granular approach to calculate the cost of each window based on material costs, production labour, and installation, then adds a markup to that cost to work out the price.  Cost Plus pulls values from other parts of the system, such as, production hours from the estimated labour time page and ironmongery costs from the Part List, then feeds them into the calculation.

**Price List** uses a pre-determined list of different window configurations and sizes with a set cost or price for each. It tends to require more rules, and more complex rules, than Cost Plus. The most common approach is to price windows according to overall frame area. Separate pricing groups, for example, sliding sashes, casements, and doors, can be broken down into smaller groups, for example, single, double sashes. This is normally done on the frame loop, using the **area** variable. Additional rules will need to be added for different material types, The Price List approach may still calculate certain additional costs using a Cost Plus approach, such as glass and ironmongery cost. However, the base cost of each item will be a fixed cost, based on item type and size.

**Cost Plus** is more precise, and allows for prices to be easily tweaked by adjusting a particular detail such as a material cost. 

**Price List** is easy to grasp and can be set up based on an existing price catalogue or spreadsheet, and it keeps all pricing information in the same place.

 

**3. Cost Plus - timber costs**  
The price file editor has built-in variables rules for **calculating timber volume** based on the drawing. These figures are calculated in **cubic decimetres**; to convert to **cubic metres**, simply divide by 1000.

**4. Frame timber volume**  
Can be calculated on the item-level loop using the variables **frame\_excl\_cill\_volume** and **cill\_volume**. These variables calculate the total timber volume regardless of material. There are also corresponding volumes for each type of timber, for example, **accoya\_frame\_excl\_cill\_volume** and **accoya\_cill\_volume**.

**5. Sash timber volume**  
Can be calculated on the sash, sliding sash, casement sash, or door leaf loops. On each loop there is the **volume** variable which includes all materials, and the material-specific variables such as **accoya\_volume**.

For each material it's recommended to **create a custom variable** for the timber cost per cubic metre.

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-09-16-42-7865-AM.png?width=475&height=41&name=image-png-Jan-03-2025-09-16-42-7865-AM.png)  
**Create a rule**, such as the rule in the given example below,  multiplying the timber volume by the cost per cubic metre.

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-09-22-28-9025-AM.png?width=670&height=306&name=image-png-Jan-03-2025-09-22-28-9025-AM.png)  
***Note:**  Markup in the given example is a custom variable, allowing the markup to be easily adjusted across all rules.*

**6. Cost Plus - glass costs**  
There are a few different ways to **calculate glass costs**.

**a. Add square metre cost** - For each type of glass in the Part List 

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-09-27-44-8277-AM.png?width=670&height=543&name=image-png-Jan-03-2025-09-27-44-8277-AM.png)  
**b. Glass unit loop** - Pulling values using the cost variable  
The glass unit loop is **single\_pane\_cost**, **inner\_pane\_cost**, **middle\_pane\_cost**, **outer\_pane\_cost**. This approach requires a **minimal number of glass pricing rules**. The given example shows a rule covering all single glazing.

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-09-32-43-2316-AM.png?width=670&height=302&name=image-png-Jan-03-2025-09-32-43-2316-AM.png)

**c. All double glazing**

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-09-47-38-8393-AM.png?width=670&height=309&name=image-png-Jan-03-2025-09-47-38-8393-AM.png)

**d. Variable actual area**  
The variable **actual\_area** calculates the area of the glass unit in square metres to two decimal places.

**e. Rounded area**  
**rounded\_area** does the same as variable actual area. but rounds anything less than 0.3m2 up to 0.3m2, allowing a minimum glass charge to be built in to the pricing rules.

It is recommended to use **separate glass parts** in the Part List for toughened glass, rather than **can be toughened** tick box. This way a different cost value can be assigned for toughened glass without needing to write complex pricing rules using the toughened glassvariables.

**f. Part List approach**  
Simple to use, with flexibility for tailoring prices on different factors, but does require glass costs to be kept up to date in the Part List. 

Alternatively, **write separate pricing rules** for each type of glass or combination of glass types, and define the cost within the price file itself.

If there are **many glass parts** in the system, it will be easier to group them using custom variables, with each group being priced the same. In the given example, a **standard\_glass** variable includes several glass parts from the Part List.

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-03-06-11-8060-PM.png?width=479&height=44&name=image-png-Jan-03-2025-03-06-11-8060-PM.png)

Next, write **pricing rules** using the **in\_list()** function.

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-03-12-32-4439-PM.png?width=670&height=306&name=image-png-Jan-03-2025-03-12-32-4439-PM.png)

This gives more flexibility as **double glazing** will not necessarily be **double the single glazing price**, per square metre:

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-03-16-40-5537-PM.png?width=670&height=313&name=image-png-Jan-03-2025-03-16-40-5537-PM.png)

Conditions can be tailored further, to **price differently for different ranges**, for example, types of windows. However, this will necessitate more rules.

**7. Cost Plus - ironmongery/hardware costs**  
Cost Plus, based on the cost per part in the Part List, is the **easiest way to price ironmongery**. One, simple, rule on the ironmongery part loop is sufficient, as shown in the given example.

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-03-33-35-4389-PM.png?width=670&height=305&name=image-png-Jan-03-2025-03-33-35-4389-PM.png)

**Cost** is the cost of the part in the **Part Lis**t, and **qty** is the **number of units** assigned. Sash weights do not count as ironmongery, so will require a separate rule, as shown in the given example.

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-03-43-19-0435-PM.png?width=670&height=306&name=image-png-Jan-03-2025-03-43-19-0435-PM.png)

The **weight** variable on the sliding sash loop returns sash weight in lbs, for kilograms, use **weight\_in\_kg**. In the given example **lead\_per\_lb** is a custom variable which defines the cost of lead weights per lb.

**7. Production labour costs**  
If production labour rules have been estimated in the **estimated labour time editor**, this information can be pulled into the price file, using a few variables.

There will always be a **variable on the item-level loop** called **production\_labour\_time**, which pulls the total time calculated by the production labour rules for a particular item.

There will also be a separate **production labour variable** for each production process, allowing different labour costs to be set for each process. The hourly rate for a process can be defined using a custom variable, as shown in the given example.

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-04-04-29-2143-PM.png?width=476&height=40&name=image-png-Jan-03-2025-04-04-29-2143-PM.png)

Next, **write a rule** to multiply the production time for that process (in this example joinery) by the hourly rate that has been set.

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-04-05-28-3898-PM.png?width=670&height=305&name=image-png-Jan-03-2025-04-05-28-3898-PM.png)

 

**8. Installation labour costs**  
If rules have been configured for calculating installation labour time in the **fitting units/installation labour editor**, this information can be pulled through to the price file.

As with production labour, there will be an overall variable for total **installation\_labour\_time**, plus individual variables for each of the groups in the **fitting units editor**.

The hourly rate for installation can be defined either directly in the rule or, as shown in the given example using a custom variable. 

![](https://knowledgehub.endtoendit.com/hs-fs/hubfs/image-png-Jan-03-2025-04-11-35-7904-PM.png?width=670&height=303&name=image-png-Jan-03-2025-04-11-35-7904-PM.png)

 

- [integrateCRM Module](https://knowledgehub.endtoendit.com/knowledgebase/integratecrm-module?hsLang=en#main-content)

    - [Leads & Prospects](https://knowledgehub.endtoendit.com/knowledgebase/integratecrm-module?hsLang=en#leads-prospects)
    - [Emails & Templates](https://knowledgehub.endtoendit.com/knowledgebase/integratecrm-module?hsLang=en#emails-templates)
    - [Tasks, Appointments & Reminders](https://knowledgehub.endtoendit.com/knowledgebase/integratecrm-module?hsLang=en#tasks-appointments-reminders)
    - [Quotes & Orders](https://knowledgehub.endtoendit.com/knowledgebase/integratecrm-module?hsLang=en#quotes-orders)
    - [Reports & Insights](https://knowledgehub.endtoendit.com/knowledgebase/integratecrm-module?hsLang=en#reports-insights)
    - [Documents & InfoHub](https://knowledgehub.endtoendit.com/knowledgebase/integratecrm-module?hsLang=en#documents-infohub)
    - [Integrations](https://knowledgehub.endtoendit.com/knowledgebase/integratecrm-module?hsLang=en#integrations)
    - [Holiday Planner](https://knowledgehub.endtoendit.com/knowledgebase/integratecrm-module?hsLang=en#holiday-planner)
    - [Setup, Configuration & Tips](https://knowledgehub.endtoendit.com/knowledgebase/integratecrm-module?hsLang=en#setup-configuration-tips)
- [integrateDrawingBoard](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#main-content)

    - [Getting Started with Quotes & Orders](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#getting-started-with-quotes-orders)
    - [Navigating & Using integrateDRAWINGBOARD](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#navigating-using-integratedrawingboard)
    - [Drawing Templates & Customisation](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#drawing-templates-customisation)
    - [Window Configuration](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#window-configuration)
    - [Door Configuration](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#door-configuration)
    - [Transoms & Mullions](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#transoms-mullions)
    - [Glazing & Glazing Bars](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#glazing-glazing-bars)
    - [Hardware & Ironmongery](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#hardware-ironmongery)
    - [Components & Parts](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#components-parts)
    - [Surveying & Production Outputs](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#surveying-production-outputs)
    - [Price Files & Pricing Rules](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#price-files-pricing-rules)
    - [Operational & System Settings](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#operational-system-settings)
    - [Additional Features & Tools](https://knowledgehub.endtoendit.com/knowledgebase/integratedrawingboard?hsLang=en#additional-features-tools)
- [integratePRO Module](https://knowledgehub.endtoendit.com/knowledgebase/integratepro-module?hsLang=en#main-content)

    - [Production Scheduling & Tracking](https://knowledgehub.endtoendit.com/knowledgebase/integratepro-module?hsLang=en#production-scheduling-tracking)
    - [Setup and Configuration](https://knowledgehub.endtoendit.com/knowledgebase/integratepro-module?hsLang=en#setup-and-configuration)
- [integrateFIT Module](https://knowledgehub.endtoendit.com/knowledgebase/integratefit-module?hsLang=en#main-content)

    - [Getting Started](https://knowledgehub.endtoendit.com/knowledgebase/integratefit-module?hsLang=en#getting-started)
    - [Remedials](https://knowledgehub.endtoendit.com/knowledgebase/integratefit-module?hsLang=en#remedials)
    - [Installation Process](https://knowledgehub.endtoendit.com/knowledgebase/integratefit-module?hsLang=en#installation-process)
- [Technical Support](https://knowledgehub.endtoendit.com/knowledgebase/technical-support?hsLang=en#main-content)

    - [integrate Integrations](https://knowledgehub.endtoendit.com/knowledgebase/technical-support?hsLang=en#integrate-integrations)
    - [Technical TroubleShooting](https://knowledgehub.endtoendit.com/knowledgebase/technical-support?hsLang=en#technical-troubleshooting)
- [Support FAQs](https://knowledgehub.endtoendit.com/knowledgebase/support-faqs?hsLang=en#main-content)

    - [User Access & Login Issues](https://knowledgehub.endtoendit.com/knowledgebase/support-faqs?hsLang=en#user-access-login-issues)
    - [Troubleshooting Common Issues](https://knowledgehub.endtoendit.com/knowledgebase/support-faqs?hsLang=en#troubleshooting-common-issues)
    - [Support Frequently Asked Questions](https://knowledgehub.endtoendit.com/knowledgebase/support-faqs?hsLang=en#support-frequently-asked-questions)

[![Chill listening crop-3](https://knowledgehub.endtoendit.com/hs-fs/hubfs/Master%20e%20graphic%20cropped-01-1.png?width=55&height=55&name=Master%20e%20graphic%20cropped-01-1.png "Chill listening crop-3")](https://knowledgehub.endtoendit.com/?hsLang=en)

endtoendit.com Help Center

Copyright © 2026, EndtoEnd IT Limited