Skip to main content

Concrete Items

Overview

Concrete items represent concrete pours with integrated rebar estimation. The system automatically calculates cubic yards, rebar pounds, and costs based on dimensions and mix designs.

Endpoints

List Concrete Items

GET /api/concrete-items/scope/:scopeId
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN, ESTIMATOR, PM


Create Concrete Item

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

{
"scopeId": "uuid",
"name": "Slab Pour",
"quantity": 1,
"shape": "RECTANGLE",
"length": 80.0,
"width": 40.0,
"depthIn": 6.0,
"slabRebarSize": "#4",
"slabRebarOC": 12.0,
"transRebarSize": "#4",
"transRebarOC": 18.0,
"mixPricingItemId": "uuid",
"rebarPricingItemId": "uuid"
}

Roles: ADMIN, ESTIMATOR

Required Fields:

  • scopeId (string, UUID) - Parent scope
  • name (string) - Item description
  • quantity (number) - Typically 1
  • shape (string) - RECTANGLE, CIRCULAR, etc.
  • Dimensions: length, width, depthIn (or diameter for circular)
  • mixPricingItemId (string, UUID) - Concrete mix reference
  • rebarPricingItemId (string, UUID) - Rebar pricing reference

Optional Fields:

  • slabRebarSize (string) - Rebar size (e.g., "#4", "#5")
  • slabRebarOC (number) - On-center spacing in inches
  • transRebarSize (string) - Transverse rebar size
  • transRebarOC (number) - Transverse spacing
  • perimeter (number) - Optional perimeter in linear feet
  • secondLengthDirRebarSize (string) - Second mat length-direction bar size
  • secondLengthDirOcIn (number) - Second mat length-direction OC spacing
  • secondWidthDirRebarSize (string) - Second mat width-direction bar size
  • secondWidthDirOcIn (number) - Second mat width-direction OC spacing

Update Concrete Item

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

{
"length": 90.0,
"width": 45.0,
"depthIn": 8.0
}

Roles: ADMIN, ESTIMATOR

info

Cubic yards and costs are automatically recalculated when dimensions or pricing changes.


Delete Concrete Item

DELETE /api/concrete-items/:id
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN, ESTIMATOR


Duplicate Concrete Item

POST /api/concrete-items/:id/duplicate
Cookie: sAccessToken=...; sRefreshToken=...

Roles: ADMIN, ESTIMATOR

Automatic Calculations

Cubic Yards (SLAB Shape)

sf = length × width
cubicYards = (length × width × depth) / 27

Rebar Calculation

// From rebar rates table based on size and on-center spacing
rebarPoundsPerSF = lookupRebarRate(slabRebarSize, slabRebarOC)

// Total pounds
totalRebarPounds = sf × rebarPoundsPerSF

// Apply waste factor (10%)
rebarPoundsWithWaste = totalRebarPounds × 1.10

Cost Calculation

// Concrete cost
concreteBaseCost = cubicYards × mixPricePerCY
concreteTaxAmount = taxExempt ? 0 : concreteBaseCost × concreteTaxRate
concreteCost = concreteBaseCost + concreteTaxAmount

// Rebar cost
rebarBaseCost = rebarPoundsWithWaste × rebarPricePerPound
rebarTaxAmount = taxExempt ? 0 : rebarBaseCost × rebarTaxRate
rebarCost = rebarBaseCost + rebarTaxAmount

// Total
totalCost = concreteCost + rebarCost

Material Item Generation

warning

Concrete items automatically generate two material items:

  1. Concrete Mix - Linked with sourceConcreteItemId
  2. Rebar - Linked with sourceConcreteItemId

These generated material items are excluded from material cost rollup to prevent double-counting (BM-32).

Data Model

interface ConcreteItem {
id: string // UUID
scopeId: string // Parent scope UUID
name: string // Description
quantity: number // Typically 1

// Dimensions
shape: string // RECTANGLE, CIRCULAR, etc.
length: number | null
width: number | null
depthIn: number | null // Depth in inches
diameter: number | null

// Rebar Configuration
slabRebarSize: string | null // "#4", "#5", etc.
slabRebarOC: number | null // On-center spacing (inches)
transRebarSize: string | null
transRebarOC: number | null

// Calculated Values (read-only)
sf: number // Square feet
cubicYards: number // Cubic yards
totalRebarPounds: number // Pre-waste
rebarPoundsWithWaste: number // With 10% waste
concreteCost: number
rebarCost: number
totalCost: number

// Pricing References
mixPricingItemId: string // Concrete mix
rebarPricingItemId: string // Rebar pricing

// Relations
scope: Scope
mixPricingItem: PricingItem
rebarPricingItem: PricingItem
generatedMaterialItems: MaterialItem[]
}

Shapes

Supported shape types:

  • RECTANGLE - length × width × depth
  • CIRCULAR - diameter × depth
  • CUSTOM - User-defined dimensions

Tax Exemption

Tax calculation respects the Bid.taxExempt flag:

  • taxExempt = false → Tax applied to concrete and rebar
  • taxExempt = true → No tax