Skip to content
Titan Fire Compliance Ltd

Internal page. Not linked from the site, not in the sitemap, and marked no-index.

This is the working specification of the estimator’s pricing model, written for the business to check before launch, not for customers. Delete src/app/(site)/quote/model/ once you are happy with the numbers. Nothing else depends on it.

Pricing model specification

Everything the estimator does, in order, with the actual numbers it is using right now. The values below are read live from the admin, so this page always reflects what the tool would charge today. The worked examples are priced by calling the same function the tool calls.

Model code: src/lib/pricing.ts. Rates are edited at /admin/content/quote-estimator.

1Rate card in use

0 of 22 values have been changed from the researched defaults.

1.1 Money values

VariableWhat it pricesDefaultIn use
minimumVisitMinimum visit charge£395£395
surveyPerDamperSurvey, per damper£14£14
testBand1RateServicing band 1 rate, per damper£38£38
testBand2RateServicing band 2 rate, per damper£32£32
testBand3RateServicing band 3 rate, per damper£27£27
testBand4RateServicing rate above band 3, per damper£23£23
accessPanelFire-rated access panel, supplied and fitted£145£145
damperReplacementDamper replacement, per unit£420£420
damperInstallationNew damper installation, per unit£480£480
penetrationFire stopping, per penetration£55£55
fixingsPerDamperTek screw remediation, per damper£38£38
mewpHirePowered access hire, per day£320£320

1.2 Servicing volume bands

The band is chosen by the total damper count, and that one rate then applies to every damper on the job. There is no tiering: 100 dampers are all priced at the band 3 rate, not 24 at band 1 then the rest at band 2.

BandConditionRate per damper
1dampers ≤ 24£38
2dampers ≤ 99£32
3dampers ≤ 249£27
4anything above£23

1.3 Multipliers

Stored as a factor, so 1.2 means “20% more”. Set any of them to 1 to switch that condition off entirely.

VariableTriggered byDefaultIn use
accessMixedaccess = mixed, or access = unknown1.201.20
accessPooraccess = poor1.451.45
heightTowerheight = tower1.121.12
heightMewpheight = mewp1.301.30
hoursEveningshours = evenings1.251.25
hoursNightshours = nights1.401.40
occupiedUpliftoccupied = true1.101.10

1.4 Values that are in the code, not the admin

These are the only numbers not editable from the admin. Changing them needs a code change.

ValueMeaningSet to
lowFactor (good)Bottom of the range when access was stated0.90
highFactor (good)Top of the range when access was stated1.15
lowFactor (indicative)Bottom of the range when access is unknown0.85
highFactor (indicative)Top of the range when access is unknown1.28
round5Range ends are rounded to the nearest £55
quantity capAny entered quantity above this is clamped, to stop nonsense input5,000

2What the customer enters

Seventeen values in total. Everything else on the page is contact details and does not touch the price.

VariableType / allowed valuesDefaultWhat it drives
surveytrue / falsefalseAdds the survey line, priced on `dampers`
servicingtrue / falsetrueAdds the servicing line, priced on `dampers` via the bands
replacementtrue / falsefalseUnlocks `dampersToReplace`
installationtrue / falsefalseUnlocks `dampersToInstall`
fireStoppingtrue / falsefalseUnlocks `penetrations`
tekScrewstrue / falsefalseUnlocks `dampersWithFixings`
damperswhole number, 0 to 50000Survey line and servicing line, and picks the band
accessPanelswhole number, 0 to 50000Access panel line. Always available, whatever else is selected
dampersToReplacewhole number, 0 to 50000Replacement line
dampersToInstallwhole number, 0 to 50000Installation line
penetrationswhole number, 0 to 50000Fire stopping line
dampersWithFixingswhole number, 0 to 50000Tek screw line
accessgood | mixed | poor | unknownunknownMultiplier, and sets the confidence band
heightstandard | tower | mewpstandardMultiplier, and mewp adds the hire line
hoursnormal | evenings | nightsnormalMultiplier
occupiedtrue / falsefalseMultiplier

3The calculation, step by step

1. REFUSE if no service is selected.
       -> "Choose at least one service to estimate."

2. REFUSE if (survey OR servicing) AND dampers = 0.
       -> "We need a rough damper count..."

3. BUILD THE LINES. Each is added only if its condition holds.

       survey                     dampers x surveyPerDamper
       servicing                  dampers x bandRate(dampers)
       tekScrews AND fixings > 0  dampersWithFixings x fixingsPerDamper
       accessPanels > 0           accessPanels x accessPanel
       replacement AND qty > 0    dampersToReplace x damperReplacement
       installation AND qty > 0   dampersToInstall x damperInstallation
       fireStopping AND pens > 0  penetrations x penetration

4. REFUSE if no lines were produced.
       -> "Add quantities for the work you selected..."
       (this catches e.g. "replacement" ticked with a quantity of 0)

5. IF height = mewp, add the hire line:
       mewpHire, flagged pass-through

6. SPLIT the lines:
       pricedWork  = sum of lines NOT flagged pass-through
       passThrough = sum of lines flagged pass-through

7. COLLECT the multipliers, in this fixed order:
       access:  mixed or unknown -> accessMixed
                poor             -> accessPoor
       height:  tower            -> heightTower
                mewp             -> heightMewp
       hours:   evenings         -> hoursEvenings
                nights           -> hoursNights
       occupied: true            -> occupiedUplift

8. APPLY them one at a time, recording what each adds:
       running = pricedWork
       for each m:
           adds    = running x m - running
           running = running x m
       multiplier = product of all m

   The "adds" figures are what the customer sees. Because each is
   measured against the running total, they sum exactly to the
   total uplift. Order changes the attribution but not the total.

9. subtotal = running + passThrough

10. IF subtotal < minimumVisit THEN subtotal = minimumVisit

11. confidence = access = unknown ? "indicative" : "good"
        good        -> low x0.90   high x1.15
        indicative  -> low x0.85   high x1.28

12. low  = round to nearest 5 of (subtotal x lowFactor)
    high = round to nearest 5 of (subtotal x highFactor)

13. SHOW low to high, excluding VAT.

3.1 Notes on the design

  • Multipliers act on the work, not on each line. Poor access slows the whole visit down, so it is applied once to the total rather than being buried in per-unit rates.
  • Equipment hire is exempt. A day’s powered-access hire is an invoice we pass on. It sits outside the multipliers, otherwise poor access plus powered access would inflate a £320 hire bill to £603.
  • The minimum is applied last. It is a floor on the whole job, so a tiny job in a difficult building still prices at the minimum rather than at the minimum plus uplifts.
  • Volume banding replaces the usual “big site, higher rate”. Published pricing tends to quote more per damper on larger sites. That is really access and height, so this model discounts on volume and prices access and height explicitly. The two reconcile: see examples A and E.
  • Unknown access is priced as mixed, not as poor. Guessing high to be safe would lose work. Instead the range widens, which is the honest signal.
  • Nothing is estimated for remedial work found on the day. There is no contingency in the figure at all.

4Worked examples

Priced live, at the rates in section 1. If you change a rate in the admin, these change with it.

A. Small office. 15 dampers, annual service, good access

Servicing and drop testing
    15 dampers at £38 each
    = £570

pricedWork  = £570
passThrough = £0

site conditions: none, multiplier = 1

subtotal = pricedWork x multiplier + passThrough
         = £570 x 1.0000 + £0
         = £570

confidence = good   (access stated)
low  = round5(£570 x 0.9)  = £515
high = round5(£570 x 1.15) = £655

SHOWN: £515 to £655 ex VAT

B. The same job, but the customer does not know the access

Servicing and drop testing
    15 dampers at £38 each
    = £570

pricedWork  = £570
passThrough = £0

site conditions, compounded in order:
    x1.20  Access unknown, priced as mixed until surveyed
           adds £114
    combined multiplier = 1.2000

subtotal = pricedWork x multiplier + passThrough
         = £570 x 1.2000 + £0
         = £684

confidence = indicative   (access unknown)
low  = round5(£684 x 0.85)  = £580
high = round5(£684 x 1.28) = £875

SHOWN: £580 to £875 ex VAT

C. Six dampers, good access. The minimum bites

Servicing and drop testing
    6 dampers at £38 each
    = £228

pricedWork  = £228
passThrough = £0

site conditions: none, multiplier = 1

subtotal = pricedWork x multiplier + passThrough
         = £228 x 1.0000 + £0
         = £228

£228 is below minimumVisit, so
subtotal = £395

confidence = good   (access stated)
low  = round5(£395 x 0.9)  = £355
high = round5(£395 x 1.15) = £455

SHOWN: £355 to £455 ex VAT

D. Survey and service, 40 dampers, mixed access, tower work

Survey and asset register
    40 dampers at £14 each
    = £560
Servicing and drop testing
    40 dampers at £32 each
    = £1,280

pricedWork  = £1,840
passThrough = £0

site conditions, compounded in order:
    x1.20  Mixed access, some dampers behind obstructions
           adds £368
    x1.12  Working at height from towers
           adds £265
    combined multiplier = 1.3440

subtotal = pricedWork x multiplier + passThrough
         = £1,840 x 1.3440 + £0
         = £2,473

confidence = good   (access stated)
low  = round5(£2,473 x 0.9)  = £2,225
high = round5(£2,473 x 1.15) = £2,845

SHOWN: £2,225 to £2,845 ex VAT

E. Hospital. 300 dampers, mixed access, nights, occupied wards

Servicing and drop testing
    300 dampers at £23 each
    = £6,900

pricedWork  = £6,900
passThrough = £0

site conditions, compounded in order:
    x1.20  Mixed access, some dampers behind obstructions
           adds £1,380
    x1.40  Night working
           adds £3,312
    x1.10  Occupied and sensitive areas
           adds £1,159
    combined multiplier = 1.8480

subtotal = pricedWork x multiplier + passThrough
         = £6,900 x 1.8480 + £0
         = £12,751

confidence = good   (access stated)
low  = round5(£12,751 x 0.9)  = £11,475
high = round5(£12,751 x 1.15) = £14,665

SHOWN: £11,475 to £14,665 ex VAT

F. Everything at once, with powered access hire

Survey and asset register
    32 dampers at £14 each
    = £448
Servicing and drop testing
    32 dampers at £32 each
    = £1,024
Tek screw and fixing remediation
    5 dampers at £38 each
    = £190
Fire-rated access panels
    3 supplied and fitted at £145 each
    = £435
Damper replacement
    2 units at £420 each, including making good
    = £840
Remedial fire stopping
    12 penetrations at £55 each
    = £660
[pass-through] Access equipment
    Powered access hire, one day
    = £320

pricedWork  = £3,597
passThrough = £320

site conditions, compounded in order:
    x1.45  Poor access, panels missing or pipes and equipment in the way
           adds £1,619
    x1.30  Working at height requiring powered access
           adds £1,565
    x1.25  Evening and weekend attendance
           adds £1,695
    x1.10  Occupied and sensitive areas
           adds £848
    combined multiplier = 2.5919

subtotal = pricedWork x multiplier + passThrough
         = £3,597 x 2.5919 + £320
         = £9,643

confidence = good   (access stated)
low  = round5(£9,643 x 0.9)  = £8,680
high = round5(£9,643 x 1.15) = £11,090

SHOWN: £8,680 to £11,090 ex VAT

5Where the defaults came from

These are UK market figures from published contractor pricing in 2025/26. They are not Titan’s rates, and they are the thing most in need of review before launch.

  • Testing: published ranges of £15 to £50 per damper with a minimum visit charge. One published breakdown gives £20 to £30 per damper on small sites (£300 to £600 total), £25 to £40 on medium sites (£750 to £1,500) and £35 to £50 on large ones (£2,000 and up). Our bands sit inside that, with access and height pulled out as multipliers.
  • Damper units: £41 to £200 depending on type and size. Installation labour £30 to £80 per damper. Our replacement and installation rates bundle unit, labour and making good, which is why they sit above the labour-only figures.
  • Fire-rated access panels: £26 to £160 in materials alone. Ours includes fitting and making good.
  • Fire stopping: roughly one to two hours per five to ten penetrations, which is where the per-penetration rate comes from.
  • Sanity check: 15 dampers with good access lands near £570, and 60 dampers with poor access near £2,780. Both fall inside the published bands for those site sizes.

6Things to decide before launch

  1. Replace every value in section 1 with Titan’s own. The tool is only as right as those numbers.
  2. Agree the minimum visit charge. It decides every small job, and at £395 it currently catches anything under about 11 dampers on a straightforward site.
  3. Agree the band thresholds as well as the rates. The jump from £38 to £32 happens at 25 dampers, so a job of 24 prices at £912 and one of 25 at £800, which is less. Widen or narrow the bands if that step is uncomfortable.
  4. Decide whether the rate card should stay publicly visible. It currently is not shown to customers anywhere: only the resulting figures are.
  5. Decide whether the ±10/15% range is wide enough to be safe and narrow enough to be useful.