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