Skip to main content

Subcontractor Items

Overview

Subcontractor items represent external services (pumps, drilling, sawing, rodbusting, etc.) with configurable buffer markup for risk adjustment.

Endpoints

List Subcontractor Items

GET /api/subcontractor/scope/:scopeId
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN, ESTIMATOR, PM


Create Subcontractor Item

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

{
"scopeId": "uuid",
"service": "Pumping",
"quantity": 45.5,
"wastePercent": 5.0,
"ratePerUnit": 8.50,
"unit": "CY",
"buffer": 15.0,
"details": {
"vendor": "Alamo City Concrete Pumping",
"pumpSize": "32 Meter",
"travelFee": 225.00
}
}

Roles: ADMIN, ESTIMATOR

Required Fields:

  • scopeId (string, UUID) - Parent scope
  • service (string) - Service type
  • quantity (number) - Base quantity
  • ratePerUnit (number) - Cost per unit
  • unit (string) - Unit of measure

Optional Fields:

  • wastePercent (number, default: 0) - Waste factor
  • buffer (number, default: 0) - Risk buffer percentage
  • details (object) - Additional metadata (vendor, pump size, etc.)

Update Subcontractor Item

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

{
"quantity": 50.0,
"buffer": 20.0
}

Roles: ADMIN, ESTIMATOR


Delete Subcontractor Item

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

Roles: ADMIN, ESTIMATOR

Pump Catalog

Get Pump Catalog

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

Roles: ADMIN, ESTIMATOR, PM

Catalog Size: 122 pump configurations across multiple vendors

Pump Fields:

  • vendor (string) - Company name
  • name (string) - Pump size/model
  • volumeRate (number) - Cost per cubic yard
  • hourRate (number) - Cost per hour
  • travelFee (number) - One-time travel charge
  • minimumHours (number) - Minimum billable hours
  • reach (number) - Reach in meters

Cost Calculation

// Waste calculation
adjustedQuantity = quantity × (1 + wastePercent/100)

// Base cost
subtotal = adjustedQuantity × ratePerUnit

// Buffer markup
totalCost = subtotal × (1 + buffer/100)

Buffer Markup

The buffer field applies a percentage markup to account for:

  • Risk/uncertainty
  • Schedule delays
  • Change orders
  • Market volatility

Common Buffer Values:

  • Low risk: 5-10%
  • Medium risk: 10-20%
  • High risk: 20-30%

Service Types

Common subcontractor services:

ServiceTypical UnitDescription
PumpingCYConcrete pumping
Pier DrillingLFDrilled piers
Sub LaborHRSubcontracted labor
Crane RentalHRCrane services
SurveyingDAYSurvey work
RodbustingTONRebar fabrication/installation
Saw CuttingLFConcrete cutting

Details Object

The details field is a flexible JSON object for service-specific metadata:

Pumping Example

{
"vendor": "Alamo City Concrete Pumping",
"pumpSize": "32 Meter",
"travelFee": 225.00,
"minimumHours": 4
}

Drilling Example

{
"vendor": "ABC Drilling",
"pierDiameter": 24,
"depthRange": "10-30 feet"
}

Data Model

interface SubcontractorItem {
id: string // UUID
scopeId: string // Parent scope UUID
service: string // Service type
quantity: number // Base quantity
wastePercent: number // Waste factor (%)
adjustedQuantity: number // With waste applied (read-only)
ratePerUnit: number // Cost per unit
unit: string // Unit of measure
buffer: number // Risk buffer (%)
subtotal: number // Before buffer (read-only)
totalCost: number // Final cost (read-only)
details: object | null // Service-specific metadata

// Relations
scope: Scope
}

Units of Measure

Common units:

  • CY - Cubic yards
  • LF - Linear feet
  • SF - Square feet
  • HR - Hours
  • DAY - Days
  • EA - Each
  • TON - Tons

Example: Concrete Pumping

{
"service": "Pumping",
"quantity": 45.5,
"wastePercent": 5.0,
"ratePerUnit": 8.50,
"unit": "CY",
"buffer": 15.0,
"details": {
"vendor": "Alamo City Concrete Pumping",
"pumpSize": "32 Meter",
"travelFee": 225.00
}
}

Calculation:

  • Adjusted quantity: 45.5 × 1.05 = 47.775 CY
  • Subtotal: 47.775 × $8.50 = $406.09
  • Buffer: $406.09 × 1.15 = $467.00
  • Total: $467.00