Skip to main content

Scope Multipliers

Scope Multipliers allow you to specify that a scope represents multiple identical areas, automatically scaling all costs without duplicating the scope. This is ideal for projects with repeated work areas like multiple identical driveways, parking spaces, or foundation sections.

info

Instead of creating 5 duplicate scopes for 5 identical driveways, create one scope with a multiplier of 5.

How It Works

Basic Concept

Scope Items Total: $10,000
Multiplier: 5

Scope Total Cost = $10,000 × 5 = $50,000

Key Points:

  • Multiplier scales all costs in the scope
  • Items remain unchanged (quantities stay the same)
  • Only the scope total is multiplied
  • Default multiplier is 1.0 (no scaling)

Setting a Multiplier

1
Open Bid Detail

Navigate to the bid containing the scope you want to multiply.

2
Locate Scope Card

Find the scope in the scopes grid view.

3
Click Multiplier Field

Click on the multiplier value (default shows "1.0x") in the scope card.

note

The multiplier field is located near the scope total cost.

4
Enter Multiplier

Type the multiplier value:

  • Whole numbers: 5 for 5 identical areas
  • Decimals: 2.5 for 2½ areas
  • Range: Any positive number

Press Enter or click outside to save.

5
Verify Calculation

The scope total updates immediately:

Items Total: $10,000
Multiplier: 5
Scope Total: $50,000

Inline Editing

The multiplier uses inline editing for quick updates:

ActionBehavior
ClickEnters edit mode (highlights field)
TypeUpdates value
EnterSaves and exits edit mode
EscapeCancels edit, reverts to original value
Click outsideSaves and exits edit mode
tip

Press Escape to cancel editing without saving changes.

Use Cases

Scenario: 5 identical residential driveways

Without Multiplier:

Create 5 separate scopes:
- Driveway 1
- Driveway 2
- Driveway 3
- Driveway 4
- Driveway 5

Problems:
- Repetitive data entry
- Hard to maintain consistency
- Updates require changing 5 scopes

With Multiplier:

Create 1 scope:
- Driveway (Typical)
- Set multiplier: 5

Benefits:
- Single scope to maintain
- Update once, affects all
- Clear cost scaling

Cost Rollup Behavior

Scope-Level Calculation

The multiplier affects the scope total only:

Concrete Items: $5,000
Labor Items: $2,000
Equipment Items: $1,500
Materials Items: $1,000
Subcontractor Items: $500
──────────────────────
Items Subtotal: $10,000

Multiplier: 5
──────────────────────
Scope Total: $50,000 ← Items Subtotal × 5

Bid-Level Aggregation

Multiplied scope totals aggregate to the bid total:

Bid: "Commercial Site Work"

Scope 1: Foundation
Items: $20,000
Multiplier: 1
Total: $20,000

Scope 2: Driveway (Typical)
Items: $10,000
Multiplier: 5
Total: $50,000

Scope 3: Sidewalk
Items: $5,000
Multiplier: 1
Total: $5,000
──────────────────────
Bid Subtotal: $75,000

Overhead (10%): $7,500
Profit (5%): $3,750
──────────────────────
Bid Total: $86,250

Scope Card Display

The scope card shows multiplier information:

┌────────────────────────────────────┐
│ Driveway (Typical) Edit│
├────────────────────────────────────┤
│ Type: Slab │
│ │
│ Concrete: $5,000 │
│ Labor: $2,000 │
│ Equipment: $1,500 │
│ Materials: $1,000 │
│ Subcontractor: $500 │
│ │
│ Items Total: $10,000 │
│ Multiplier: 5.0x [editable]
│ │
│ Scope Total: $50,000 │
└────────────────────────────────────┘
note

The Items Total shows the cost before multiplier. The Scope Total shows the cost after multiplier.

Database Schema

The multiplier is stored in the Scope model:

model Scope {
id String @id @default(uuid())
name String
multiplier Decimal @default(1.0)
// ... other fields
}

Migration: 20251029104736_add_scope_multiplier

API Endpoints

Update Scope Multiplier

PUT /api/scopes/:id

Request Body:
{
"multiplier": 5.0
}

Response:
{
"id": "uuid-123",
"name": "Driveway (Typical)",
"multiplier": 5.0,
"totalCost": 50000.00,
"itemsTotal": 10000.00
}

Get Scope with Multiplier

GET /api/scopes/:id

Response:
{
"id": "uuid-123",
"name": "Driveway (Typical)",
"multiplier": 5.0,
"concreteCost": 5000.00,
"laborCost": 2000.00,
"equipmentCost": 1500.00,
"materialCost": 1000.00,
"subletCost": 500.00,
"totalCost": 50000.00 // (Sum of costs) × multiplier
}

Auto-Save Behavior

The multiplier field auto-saves when:

  1. Enter key pressed
  2. Click outside field (blur event)
  3. Tab to next field
info

Debounced auto-save (300ms delay) prevents excessive API calls during typing.

Validation Rules

RuleDescription
Positive numbers onlyMultiplier must be > 0
Decimal precisionUp to 2 decimal places (e.g., 2.50)
No zero or negative0, -1, -5 are invalid
Default valueIf empty or invalid, defaults to 1.0
warning

Setting multiplier to 0 or negative values will fail validation. The field will revert to the previous value.

Best Practices

📋

Use for Identical Areas

Only use multipliers for truly identical work areas. Different dimensions require separate scopes.

🏷️

Clear Scope Naming

Name scopes with "(Typical)" suffix to indicate they represent multiple areas: "Driveway (Typical)".

📝

Document in Notes

Add scope notes explaining what the multiplier represents: "5 identical driveways in Phase 1".

📊

Review Bid Summary

Always review the bid summary to verify multiplied costs aggregate correctly.

When NOT to Use Multipliers

Different dimensions or specs

If areas have different dimensions, concrete thickness, or rebar spacing, create separate scopes. Multipliers assume identical areas.

Phased work with different pricing

If pricing varies by phase (e.g., Phase 1 vs Phase 2 labor rates), create separate scopes per phase.

Areas with unique features

If some areas have unique features (e.g., drainage, special finishes), create individual scopes.

Need individual tracking

If you need to track each area separately for project management, create separate scopes.

Comparison: Multiplier vs. Duplicated Scopes

AspectMultiplierDuplicated Scopes
Data EntryOnceMultiple times
MaintenanceUpdate one scopeUpdate all duplicates
ConsistencyGuaranteedManual verification required
Bid ClarityClear scalingRepetitive entries
Individual Tracking❌ Not possible✅ Possible
Phase Variations❌ All same✅ Different per scope
tip

Use multipliers for identical areas and duplicated scopes when individual tracking or variations are needed.

Audit Logging

Multiplier changes are logged in the audit system:

{
"action": "UPDATE",
"entityType": "Scope",
"details": {
"changes": [
{
"field": "multiplier",
"oldValue": 1.0,
"newValue": 5.0
}
]
}
}

View multiplier changes in Admin Panel → Audit Log.

Troubleshooting

Multiplier not saving

Check:

  1. Value is positive (> 0)
  2. You have edit permissions (ADMIN or ESTIMATOR role)
  3. Network connection (auto-save requires API call)

Try refreshing the page and re-entering the value.

Scope total not updating

The scope total should update immediately after changing the multiplier. If it doesn't:

  1. Refresh the page
  2. Check browser console for errors
  3. Verify scope has items with costs
Multiplier field shows 'NaN'

This indicates an invalid value was entered. The field will revert to the previous valid value on blur.

Integration with Other Features

3D Viewer

Multipliers work with quantity expansion in the 3D Viewer:

Scope Multiplier: 5
Concrete Item Quantity: 3

Result in 3D Viewer: 15 visual instances (5 × 3)

Each multiplied scope × item quantity creates separate visual instances for positioning.

Cost Rollup

Multipliers integrate seamlessly with the cost rollup system:

Items → Scope Total (with multiplier) → Bid Total

See Cost Rollup for details on how costs aggregate.

PDF Export

Multipliers are shown in PDF exports:

Scope: Driveway (Typical)
Multiplier: 5.0x
Items Total: $10,000
Scope Total: $50,000

Next Steps