Variables & Rates
Overview
Variables and rates provide system-wide configuration for calculations, defaults, and pricing references used across all bids.
Global Variables
List Variables
- Request
- Response
GET /api/variables
Cookie: sAccessToken=...; sRefreshToken=...
[
{
"id": "uuid",
"name": "overhead_percentage",
"value": 10.0,
"unit": "%",
"category": "percentage",
"location": "global",
"defaultValue": 10.0,
"isActive": true
},
...
]
Roles: ADMIN, ESTIMATOR, PM
List by Category
- Request
- Response
GET /api/variables/percentage
Cookie: sAccessToken=...; sRefreshToken=...
[
{
"name": "overhead_percentage",
"value": 10.0,
"unit": "%",
...
},
{
"name": "profit_percentage",
"value": 15.0,
"unit": "%",
...
}
]
Roles: ADMIN, ESTIMATOR, PM
Categories:
concrete- Concrete-related variableslabor- Labor cost variables (FICA, FUTA, SUTA, auto costs)equipment- Equipment cost variables (fuel, rental insurance)material- Material variablespercentage- Markup percentages (overhead, profit, WC, GL pollution)AUTO_COSTS- Auto depreciation, fuel, insurance
Create Variable
- Request
- Response
POST /api/variables
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json
{
"name": "custom_tax_rate",
"value": 0.0825,
"unit": "%",
"category": "percentage",
"location": "texas",
"isActive": true
}
{
"id": "uuid",
"message": "Variable created successfully"
}
Roles: ADMIN
Update Variable
- Request
- Response
PUT /api/variables/:id
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json
{
"value": 12.0
}
{
"id": "uuid",
"message": "Variable updated successfully"
}
Roles: ADMIN
Delete Variable
- Request
- Response
DELETE /api/variables/:id
Cookie: sAccessToken=...; sRefreshToken=...
{
"message": "Variable deleted successfully"
}
Roles: ADMIN
Update Fuel Charges for Bid
- Request
- Response
POST /api/variables/update-fuel-charges/:bidId
Cookie: sAccessToken=...; sRefreshToken=...
{
"message": "Fuel charges updated for bid",
"updatedItems": 12
}
Roles: ADMIN
Recalculates fuel charges for all equipment items in a bid based on current global fuel variables.
Rebar Rates
List Rebar Rates
- Request
- Response
GET /api/rebar
Cookie: sAccessToken=...; sRefreshToken=...
[
{
"id": "uuid",
"rebarSize": "#4",
"onCenter": 12,
"orientation": "BOTH",
"poundsPerSF": 1.85,
"pricingItemId": "uuid"
},
...
]
Roles: ADMIN, ESTIMATOR, PM
Create Rebar Rate
- Request
- Response
POST /api/rebar
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json
{
"rebarSize": "#5",
"onCenter": 12,
"orientation": "BOTH",
"poundsPerSF": 2.35,
"pricingItemId": "uuid"
}
{
"id": "uuid",
"message": "Rebar rate created successfully"
}
Roles: ADMIN
Fields:
rebarSize(string) - Rebar size (#3, #4, #5, etc.)onCenter(number) - On-center spacing in inchesorientation(string) - LONGITUDINAL, TRANSVERSE, or BOTHpoundsPerSF(number) - Pounds per square footpricingItemId(string, UUID) - Rebar pricing reference
Update Rebar Rate
- Request
- Response
PUT /api/rebar/:id
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json
{
"poundsPerSF": 2.50
}
{
"id": "uuid",
"message": "Rebar rate updated successfully"
}
Roles: ADMIN
Delete Rebar Rate
- Request
- Response
DELETE /api/rebar/:id
Cookie: sAccessToken=...; sRefreshToken=...
{
"message": "Rebar rate deleted successfully"
}
Roles: ADMIN
Bulk Operations
- Bulk Update
- Bulk Delete
PUT /api/rebar/bulk
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json
{
"ids": ["uuid1", "uuid2"],
"updates": {
"poundsPerSF": 2.00
}
}
DELETE /api/rebar/bulk
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json
{
"ids": ["uuid1", "uuid2"]
}
Roles: ADMIN
Equipment Rates
Equipment rates are managed via the Pricing Items API under category Equipment.
Pump Pricing
List Pump Pricing
- Request
- Response
GET /api/pump-pricing
Cookie: sAccessToken=...; sRefreshToken=...
[
{
"id": "uuid",
"vendor": "Alamo City Concrete Pumping",
"size": "32 Meter",
"reach": 32,
"costPerHour": 225.00,
"costPerCY": 8.50,
"travelCost": 225.00,
"minimumHours": 4,
"isActive": true
},
...
]
Roles: ADMIN, ESTIMATOR, PM
List Vendors
- Request
- Response
GET /api/pump-pricing/vendors
Cookie: sAccessToken=...; sRefreshToken=...
[
"Alamo City Concrete Pumping",
"ABC Pumping Services",
"XYZ Pump Rentals",
...
]
Roles: ADMIN, ESTIMATOR, PM
Create Pump Pricing
- Request
- Response
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
}
{
"id": "uuid",
"message": "Pump pricing created successfully"
}
Roles: ADMIN
Update Pump Pricing
- Request
- Response
PUT /api/pump-pricing/:id
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json
{
"costPerHour": 250.00,
"costPerCY": 9.00
}
{
"id": "uuid",
"message": "Pump pricing updated successfully"
}
Roles: ADMIN
Delete Pump Pricing
- Request
- Response
DELETE /api/pump-pricing/:id
Cookie: sAccessToken=...; sRefreshToken=...
{
"message": "Pump pricing deleted successfully"
}
Roles: ADMIN
Bulk Operations
- Bulk Update
- Bulk Delete
PUT /api/pump-pricing/bulk
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json
{
"ids": ["uuid1", "uuid2"],
"updates": {
"travelCost": 250.00
}
}
DELETE /api/pump-pricing/bulk
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json
{
"ids": ["uuid1", "uuid2"]
}
Roles: ADMIN
Concrete Mix Defaults
List Concrete Mixes
- Request
- Response
GET /api/admin/default-variables
Cookie: sAccessToken=...; sRefreshToken=...
[
{
"id": "uuid",
"name": "3000 PSI",
"value": 140.00,
"unit": "CY",
"category": "concrete",
"location": "texas",
"isActive": true
},
...
]
Roles: ADMIN, ESTIMATOR, PM
Create Concrete Mix
- Request
- Response
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
}
{
"id": "uuid",
"message": "Concrete mix created successfully"
}
Roles: ADMIN
Update Concrete Mix
- Request
- Response
PUT /api/admin/default-variables/:id
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json
{
"value": 170.00
}
{
"id": "uuid",
"message": "Concrete mix updated successfully"
}
Roles: ADMIN
Delete Concrete Mix
- Request
- Response
DELETE /api/admin/default-variables/:id
Cookie: sAccessToken=...; sRefreshToken=...
{
"message": "Concrete mix deleted successfully"
}
Roles: ADMIN
Bulk Operations
- Bulk Update
- Bulk Delete
PUT /api/admin/default-variables/bulk
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json
{
"ids": ["uuid1", "uuid2"],
"updates": {
"value": 150.00
}
}
DELETE /api/admin/default-variables/bulk
Cookie: sAccessToken=...; sRefreshToken=...
Content-Type: application/json
{
"ids": ["uuid1", "uuid2"]
}
Roles: ADMIN
Common Variables
| Variable Name | Category | Default | Unit | Description |
|---|---|---|---|---|
| overhead_percentage | percentage | 10.0 | % | Bid-level overhead |
| profit_percentage | percentage | 15.0 | % | Bid-level profit |
| wc_percentage | percentage | 12.0 | % | Workers compensation (labor) |
| gl_pollution_percentage | percentage | 2.0 | % | General liability + pollution |
| rental_insurance | percentage | 5.0 | % | Equipment rental insurance |
| fica_rate | labor | 0.0765 | % | Social Security + Medicare |
| futa_rate | labor | 0.006 | % | Federal unemployment |
| suta_rate | labor | 0.0175 | % | State unemployment |
| auto_depreciation_rate | AUTO_COSTS | 0.03 | % | Vehicle depreciation |
| auto_fuel_rate | AUTO_COSTS | 0.02 | % | Vehicle fuel |
| auto_insurance_rate | AUTO_COSTS | 0.01 | % | Vehicle insurance |
| fuel_charge_per_day | equipment | 50.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
}
Related Endpoints
- Bids - Use overhead/profit percentages
- Labor Items - Use soft cost rates
- Equipment Items - Use fuel variables
- Concrete Items - Use rebar rates
- Subcontractor Items - Use pump pricing
- Cost Rollup - Variable application