Skip to main content

Variables & Rates

Overview

Variables and rates provide system-wide configuration for calculations, defaults, and pricing references used across all bids.

Global Variables

List Variables

GET /api/variables
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN, ESTIMATOR, PM


List by Category

GET /api/variables/percentage
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN, ESTIMATOR, PM

Categories:

  • concrete - Concrete-related variables
  • labor - Labor cost variables (FICA, FUTA, SUTA, auto costs)
  • equipment - Equipment cost variables (fuel, rental insurance)
  • material - Material variables
  • percentage - Markup percentages (overhead, profit, WC, GL pollution)
  • AUTO_COSTS - Auto depreciation, fuel, insurance

Create Variable

POST /api/variables
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json

{
"name": "custom_tax_rate",
"value": 0.0825,
"unit": "%",
"category": "percentage",
"location": "texas",
"isActive": true
}

Roles: ADMIN


Update Variable

PUT /api/variables/:id
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json

{
"value": 12.0
}

Roles: ADMIN


Delete Variable

DELETE /api/variables/:id
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN


Update Fuel Charges for Bid

POST /api/variables/update-fuel-charges/:bidId
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN

Recalculates fuel charges for all equipment items in a bid based on current global fuel variables.

Rebar Rates

List Rebar Rates

GET /api/rebar
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN, ESTIMATOR, PM


Create Rebar Rate

POST /api/rebar
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json

{
"rebarSize": "#5",
"onCenter": 12,
"orientation": "BOTH",
"poundsPerSF": 2.35,
"pricingItemId": "uuid"
}

Roles: ADMIN

Fields:

  • rebarSize (string) - Rebar size (#3, #4, #5, etc.)
  • onCenter (number) - On-center spacing in inches
  • orientation (string) - LONGITUDINAL, TRANSVERSE, or BOTH
  • poundsPerSF (number) - Pounds per square foot
  • pricingItemId (string, UUID) - Rebar pricing reference

Update Rebar Rate

PUT /api/rebar/:id
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json

{
"poundsPerSF": 2.50
}

Roles: ADMIN


Delete Rebar Rate

DELETE /api/rebar/:id
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN


Bulk Operations

PUT /api/rebar/bulk
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json

{
"ids": ["uuid1", "uuid2"],
"updates": {
"poundsPerSF": 2.00
}
}

Roles: ADMIN

Equipment Rates

Equipment rates are managed via the Pricing Items API under category Equipment.

Pump Pricing

List Pump Pricing

GET /api/pump-pricing
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN, ESTIMATOR, PM


List Vendors

GET /api/pump-pricing/vendors
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN, ESTIMATOR, PM


Create Pump Pricing

POST /api/pump-pricing
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json

{
"vendor": "New Pump Company",
"size": "28 Meter",
"reach": 28,
"costPerHour": 200.00,
"costPerCY": 7.50,
"travelCost": 200.00,
"minimumHours": 4,
"isActive": true
}

Roles: ADMIN


Update Pump Pricing

PUT /api/pump-pricing/:id
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json

{
"costPerHour": 250.00,
"costPerCY": 9.00
}

Roles: ADMIN


Delete Pump Pricing

DELETE /api/pump-pricing/:id
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN


Bulk Operations

PUT /api/pump-pricing/bulk
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json

{
"ids": ["uuid1", "uuid2"],
"updates": {
"travelCost": 250.00
}
}

Roles: ADMIN

Concrete Mix Defaults

List Concrete Mixes

GET /api/admin/default-variables
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN, ESTIMATOR, PM


Create Concrete Mix

POST /api/admin/default-variables
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json

{
"name": "4500 PSI High-Strength",
"value": 165.00,
"unit": "CY",
"category": "concrete",
"location": "texas",
"isActive": true
}

Roles: ADMIN


Update Concrete Mix

PUT /api/admin/default-variables/:id
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json

{
"value": 170.00
}

Roles: ADMIN


Delete Concrete Mix

DELETE /api/admin/default-variables/:id
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN


Bulk Operations

PUT /api/admin/default-variables/bulk
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json

{
"ids": ["uuid1", "uuid2"],
"updates": {
"value": 150.00
}
}

Roles: ADMIN

Common Variables

Variable NameCategoryDefaultUnitDescription
overhead_percentagepercentage10.0%Bid-level overhead
profit_percentagepercentage15.0%Bid-level profit
wc_percentagepercentage12.0%Workers compensation (labor)
gl_pollution_percentagepercentage2.0%General liability + pollution
rental_insurancepercentage5.0%Equipment rental insurance
fica_ratelabor0.0765%Social Security + Medicare
futa_ratelabor0.006%Federal unemployment
suta_ratelabor0.0175%State unemployment
auto_depreciation_rateAUTO_COSTS0.03%Vehicle depreciation
auto_fuel_rateAUTO_COSTS0.02%Vehicle fuel
auto_insurance_rateAUTO_COSTS0.01%Vehicle insurance
fuel_charge_per_dayequipment50.00$Daily fuel charge (equipment)

Data Models

interface GlobalVariable {
id: string
name: string
value: number
unit: string
category: string
location: string
defaultValue: number | null
isActive: boolean
}

interface RebarRate {
id: string
rebarSize: string
onCenter: number
orientation: string
poundsPerSF: number
pricingItemId: string
}

interface PumpPricing {
id: string
vendor: string
size: string
reach: number
costPerHour: number
costPerCY: number
travelCost: number
minimumHours: number
isActive: boolean
}

interface DefaultVariable {
id: string
name: string
value: number
unit: string
category: string
location: string
isActive: boolean
}